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)