105 lines
3.0 KiB
Python
Executable File
105 lines
3.0 KiB
Python
Executable File
import cv2
|
|
import urllib
|
|
import random
|
|
import numpy as np
|
|
from pathlib import Path
|
|
import sys, os
|
|
cur_dir = str(Path(__file__).parents[2])
|
|
sys.path.append(cur_dir)
|
|
from modules.sdsvkvu import load_engine, process_img
|
|
from modules.ocr_engine import OcrEngine
|
|
from configs.manulife import device, ocr_cfg, kvu_cfg
|
|
import logging
|
|
import logging.config
|
|
from utils.logging.logging import LOGGER_CONFIG
|
|
# Load the logging configuration
|
|
logging.config.dictConfig(LOGGER_CONFIG)
|
|
# Get the logger
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def load_ocr_engine(opt) -> OcrEngine:
|
|
logger.info("[INFO] Loading engine...")
|
|
engine = OcrEngine(**opt)
|
|
logger.info("[INFO] Engine loaded")
|
|
return engine
|
|
|
|
|
|
logger.info("OCR engine configfs: \n", ocr_cfg)
|
|
logger.info("KVU configfs: \n", kvu_cfg)
|
|
|
|
ocr_engine = load_ocr_engine(ocr_cfg)
|
|
kvu_cfg['ocr_engine'] = ocr_engine
|
|
option = kvu_cfg['option']
|
|
kvu_cfg.pop("option") # pop option
|
|
manulife_engine = load_engine(kvu_cfg)
|
|
|
|
|
|
def manulife_predict(image_url, engine) -> None:
|
|
req = urllib.request.urlopen(image_url)
|
|
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
|
|
img = cv2.imdecode(arr, -1)
|
|
|
|
save_dir = "./tmp_results"
|
|
# image_path = os.path.join(save_dir, f"{image_url}.jpg")
|
|
image_path = os.path.join(save_dir, "abc.jpg")
|
|
cv2.imwrite(image_path, img)
|
|
|
|
outputs = process_img(img_path=image_path,
|
|
save_dir=save_dir,
|
|
engine=engine,
|
|
export_all=False,
|
|
option=option)
|
|
return outputs
|
|
|
|
|
|
def predict(page_numb, image_url):
|
|
"""
|
|
module predict function
|
|
|
|
Args:
|
|
image_url (str): image url
|
|
|
|
Returns:
|
|
example output:
|
|
"data": {
|
|
"document_type": "invoice",
|
|
"fields": [
|
|
{
|
|
"label": "Invoice Number",
|
|
"value": "INV-12345",
|
|
"box": [0, 0, 0, 0],
|
|
"confidence": 0.98
|
|
},
|
|
...
|
|
]
|
|
}
|
|
dict: output of model
|
|
"""
|
|
kvu_result = manulife_predict(image_url, engine=manulife_engine)
|
|
output_dict = {
|
|
"document_type": kvu_result['title'] if kvu_result['title'] is not None else "unknown",
|
|
"document_class": kvu_result['class_doc'] if kvu_result['class_doc'] is not None else "unknown",
|
|
"page_number": page_numb,
|
|
"fields": []
|
|
}
|
|
for key in kvu_result.keys():
|
|
if key in ("title", "class_doc"):
|
|
continue
|
|
field = {
|
|
"label": key,
|
|
"value": kvu_result[key],
|
|
"box": [0, 0, 0, 0],
|
|
"confidence": random.uniform(0.9, 1.0),
|
|
"page": page_numb
|
|
}
|
|
output_dict['fields'].append(field)
|
|
logger.info(output_dict)
|
|
return output_dict
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
image_url = "/root/thucpd/20230322144639VUzu_16794962527791962785161104697882.jpg"
|
|
output = predict(0, image_url)
|
|
logger.info(output) |