Spaces:
Sleeping
Sleeping
| import os | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image, ImageDraw, ImageFont | |
| from tqdm import tqdm | |
| import os | |
| import easyocr | |
| models_dir = "./models" | |
| images_dir = "./images" | |
| output_dir = "./output" | |
| dirs = [models_dir, images_dir, output_dir] | |
| for d in dirs: | |
| if not os.path.exists(output_dir): | |
| os.makedirs(output_dir) | |
| """ | |
| Upload easy OCR model files with the same name and font file named Ubuntu-Regular.ttf, examples: | |
| best_norm_ED.pth | |
| best_norm_ED.py | |
| best_norm_ED.yaml | |
| Ubuntu-Regular.ttf | |
| to models directory | |
| Upload image files you want to test, examples: | |
| kz_book_simple.jpeg | |
| kz_blur.jpg | |
| kz_book_complex.jpg | |
| to images directory | |
| """ | |
| font_path = models_dir + "/Ubuntu-Regular.ttf" | |
| reader = easyocr.Reader( | |
| ['en'], | |
| gpu=True, | |
| recog_network='best_norm_ED', | |
| detect_network="craft", | |
| user_network_directory=models_dir, | |
| model_storage_directory=models_dir, | |
| ) # this needs to run only once to load the model into memory | |
| image_extensions = (".jpg", ".jpeg", ".png") | |
| for image_name in tqdm(os.listdir(images_dir)): | |
| if not image_name.lower().endswith(image_extensions): | |
| print(f'unsupported file {image_name}') | |
| continue | |
| image_path = f'{images_dir}/{image_name}' | |
| print(image_path) | |
| # Read image as numpy array | |
| image = cv2.imread(image_path) | |
| # Rotate the image by 270 degrees | |
| # image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) | |
| # Convert the image from BGR to RGB (because OpenCV loads images in BGR format) | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
| results = reader.readtext(image=image) | |
| # Load custom font | |
| font = ImageFont.truetype(font_path, 32) | |
| # Display the results | |
| for (bbox, text, prob) in results: | |
| # Get the bounding box coordinates | |
| (top_left, top_right, bottom_right, bottom_left) = bbox | |
| top_left = (int(top_left[0]), int(top_left[1])) | |
| bottom_right = (int(bottom_right[0]), int(bottom_right[1])) | |
| # Draw the bounding box on the image | |
| cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2) | |
| # Convert the OpenCV image to a PIL image, draw the text, then convert back to an OpenCV image | |
| image_pil = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) | |
| draw = ImageDraw.Draw(image_pil) | |
| draw.text((top_left[0], top_left[1] - 40), text, font=font, fill=(0, 0, 255)) | |
| image = cv2.cvtColor(np.array(image_pil), cv2.COLOR_RGB2BGR) | |
| # Save image | |
| cv2.imwrite( f'{output_dir}/{image_name}', image) | |
| # reader.readtext(image = image, paragraph=True) | |