| import requests |
| import gradio as gr |
| import pandas as pd |
| from PIL import Image, ImageDraw |
|
|
| def infer(im): |
| im.save('converted.png') |
| url = 'https://ajax.thehive.ai/api/demo/classify?endpoint=text_recognition' |
| files = { |
| 'image': ('converted.png', open('converted.png', 'rb'), 'image/png'), |
| 'model_type': (None, 'detection'), |
| 'media_type': (None, 'photo'), |
| } |
| headers = { |
| 'referer': 'https://thehive.ai/' |
| } |
| r = requests.post(url, headers=headers, files=files) |
| res = r.json() |
| print(r, res) |
| img = im.convert('RGB') |
|
|
| words = [] |
| draw = ImageDraw.Draw(img,'RGBA') |
| for output in res['response']['output']: |
| for poly in output['bounding_poly']: |
| words += [c['class'] for c in poly['classes']] |
| draw.rectangle((poly['dimensions']['left']-2,poly['dimensions']['top']-2,poly['dimensions']['right']+2,poly['dimensions']['bottom']+2), outline=(0,255,0,255), fill=(0,255,0,50),width=2) |
|
|
| img.save('result.png') |
| return 'result.png', '\n'.join([o['block_text'] for o in res['response']['output']]), pd.DataFrame(words) |
|
|
| iface = gr.Interface( |
| fn=infer, |
| title="Hive OCR", |
| description="Demo for Hive OCR.Transcribe and analyze media depicting typed, written, or graphic text", |
| inputs=[gr.inputs.Image(label='image', type='pil')], |
| outputs=['image', 'text', gr.outputs.Dataframe(headers=['word'])], |
| examples=['testocr.png', 'receipt.webp', '20131216170659.jpg'], |
| article="<a href=\"https://thehive.ai/hive-ocr-solutions\">Hive OCR</a>", |
| ).launch() |