Spaces:
Running
Running
import cv2 | |
import easyocr | |
import gradio as gr | |
import base64 | |
import json | |
def text_extraction(image): | |
# Convert base64 image to OpenCV format | |
image = base64.b64decode(image.split(",")[1]) | |
nparr = np.frombuffer(image, np.uint8) | |
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) | |
# Instance text detector | |
reader = easyocr.Reader(['en'], gpu=False) | |
# Detect text on image | |
text_ = reader.readtext(img) | |
threshold = 0.25 | |
# Draw bbox and text | |
for t_, t in enumerate(text_): | |
bbox, text, score = t | |
if score > threshold: | |
cv2.rectangle(img, tuple(map(int, bbox[0])), tuple(map(int, bbox[2])), (255, 0, 0), 2) | |
# Encode image to base64 | |
retval, buffer = cv2.imencode('.jpg', img) | |
img_base64 = base64.b64encode(buffer).decode('utf-8') | |
# Create JSON response | |
response_json = { | |
'annotated_image_base64': img_base64, | |
'text_data': text_ | |
} | |
# Convert the dictionary to a JSON string | |
response_json_str = json.dumps(response_json, default=str) | |
return response_json_str | |
# Define Gradio interface | |
iface = gr.Interface( | |
fn=text_extraction, | |
inputs=gr.Image(), | |
outputs=["image", "json"] | |
) | |
# Launch the Gradio interface | |
iface.launch() | |