Arabic_OCR / ocr_main.py
rakib72642's picture
fix rectangle
80b06cc
import json
import pandas as pd
import asyncio
import base64
from PIL import Image, ImageDraw
from aiohttp import ClientSession
from io import BytesIO
from data.model import OCR_model
from data.data import name_distribute
async def getImage(img_url):
async with ClientSession() as session:
try:
async with session.get(img_url) as response:
img_data = await response.read()
return BytesIO(img_data)
except Exception as e:
print({"Error in getImage":str(e)})
async def detection(model,img_content):
try:
img = Image.open(img_content)
# result = model(img)
result = model(img,device=0,conf=0.6)
detection = {}
data = json.loads(result[0].tojson())
rect_data = []
for items in data:
rect_data.append(items["box"])
print(items["box"])
img = await create_rectangle(Image.open(img_content),rect_data)
if len(data) == 0:
res = {"AI": "No Detection"}
detection.update(res)
else:
df = pd.DataFrame(data)
name_counts = df['name'].value_counts().sort_index()
for name, count in name_counts.items():
res = {name: count}
detection.update(res)
return detection, img
except Exception as e:
print({"Error in detection":str(e)})
async def share_iamge(img):
try:
# img = Image.open(imgs)
buffer = BytesIO()
img.save(buffer, format="JPEG")
base64_image = base64.b64encode(buffer.getvalue()).decode("utf-8")
data = {"Arabic Detected": base64_image}
return data
except Exception as e:
print({"Error in share_iamge":str(e)})
async def create_rectangle(image_data,cords):
try:
drawing = ImageDraw.Draw(image_data)
for item in cords:
x1 = item["x1"]
x2 = item["x2"]
y1 = item["y1"]
y2 = item["y2"]
drawing.rectangle([x1,y1,x2,y2],outline="red",width=1)
return image_data
except Exception as e:
print({"Error in create_rectangle":str(e)})
async def format_result(res,conv):
try:
result = {}
for key,value in conv.items():
if key in res:
data = {value:res[key]}
result.update(data)
return result
except Exception as e:
print({"Error in format_result":str(e)})
async def mainDet(url):
try:
image = await asyncio.create_task(getImage(url))
detect_data,img = await asyncio.create_task(detection(OCR_model, image))
tab_data = await asyncio.create_task(format_result(detect_data,name_distribute))
img_data = await asyncio.create_task(share_iamge(img))
result = {
"tabularData":{} if len(tab_data)==0 else tab_data,
"imageData":{} # if len(tab_data)==0 else img_data,
}
return json.dumps(result)
except Exception as e:
print({"Error in mainDet":str(e)})