From 3cfa1332c0807a74b4ac5a2150500841f5299147 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 08 三月 2023 22:54:09 +0800 Subject: [PATCH] 首板加入,安全笔数与H撤笔数优化 --- ocr/ocr_server.py | 135 ++++++++++++++++++++++++++++++--------------- 1 files changed, 90 insertions(+), 45 deletions(-) diff --git a/ocr/ocr_server.py b/ocr/ocr_server.py index 4c7af8e..433a44b 100644 --- a/ocr/ocr_server.py +++ b/ocr/ocr_server.py @@ -1,56 +1,34 @@ import json import logging import socketserver -import socket - +from http.server import BaseHTTPRequestHandler import cv2 +import ths_industry_util from ocr import ocr_util +from ocr.ocr_util import OcrUtil -class MyTCPServer(socketserver.TCPServer): - def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, pipe_juejin=None, pipe_ui=None): - self.pipe_juejin = pipe_juejin # 澧炲姞鐨勫弬鏁� - self.pipe_ui = pipe_ui - socketserver.TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate=bind_and_activate) - - -# 濡傛灉浣跨敤寮傛鐨勫舰寮忓垯闇�瑕佸啀閲嶅啓ThreadingTCPServer -class MyThreadingTCPServer(socketserver.ThreadingMixIn, MyTCPServer): pass - - -class MyBaseRequestHandle(socketserver.BaseRequestHandler): +class OCRServer(BaseHTTPRequestHandler): ocr_temp_data = {} - def setup(self): - super().setup() + def do_GET(self): + path = self.path + self.send_response(200) + # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write("".encode()) - def handle(self): - host = self.client_address[0] - super().handle() # 鍙互涓嶈皟鐢ㄧ埗绫荤殑handler(),鏂规硶锛岀埗绫荤殑handler鏂规硶浠�涔堥兘娌″仛 - # print("-------handler鏂规硶琚墽琛�----") - # print(self.server) - # print(self.request) # 鏈嶅姟 - # print("瀹㈡埛绔湴鍧�锛�", self.client_address) # 瀹㈡埛绔湴鍧� - # print(self.__dict__) - # print("- " * 30) - # print(self.server.__dict__) - # print("- " * 30) - sk: socket.socket = self.request - # 璁剧疆闈為樆濉� - sk.setblocking(False) - data = bytes() - while True: - try: - temp_data = sk.recv(1024) - if not temp_data: - break - data += temp_data - except Exception as e: - break - _str = str(data, encoding="gbk") - # print("OCR SERVER 鍐呭锛�", _str[0:20], "......", _str[-150:-1]) - return_str = "OK" + def do_POST(self): + path = self.path + params = self.__parse_request() + params = params["data"] + result_str = self.__process(params) + self.__send_response(result_str) + + def __process(self, _str): + return_str = "" try: data = "" try: @@ -81,17 +59,84 @@ mat[r][c] = [datas[r * cols + c]] # cv2.imwrite("D:/test.png", mat) ocr_results = ocr_util.OcrUtil.ocr_with_key(mat, key) + if not ocr_results: + # 澶氶噸璇嗗埆锛岄槻姝㈣瘑鍒嚭閿� + ocr_results = ocr_util.OcrUtil.ocr_num(mat, key) # 鍥惧儚璇嗗埆 return_str = json.dumps({"code": 0, "data": {"datas": ocr_results}}) else: return_str = json.dumps({"code": 2, "msg": "鏁版嵁鍑洪敊"}) else: return_str = json.dumps({"code": 1, "msg": "鏁版嵁灏氭湭涓婁紶瀹�"}) + elif type == 101: + data = data["data"] + matId = data["matId"] + index = data["index"] + maxIndex = data["maxIndex"] + cols = data["width"] + rows = data["height"] + datas = data["data"] + if self.ocr_temp_data.get(matId) is None: + self.ocr_temp_data[matId] = [] + self.ocr_temp_data[matId].extend(datas) + if maxIndex == index: + # 鏁版嵁浼犺緭瀹屾垚 + datas = self.ocr_temp_data[matId] + if rows * cols == len(datas): + self.ocr_temp_data.pop(matId) + mat = cv2.numpy.zeros((rows, cols, 1), cv2.numpy.uint8) + for r in range(0, rows): + for c in range(0, cols): + mat[r][c] = [datas[r * cols + c]] + # cv2.imwrite("D:/test.png", mat) + ocr_results = ocr_util.OcrUtil.ocr_with_key(mat, ".") + code_name = "" + for res in ocr_results: + code_name += res[0] + # TODO 鏍规嵁浠g爜鍚嶇О鑾峰彇浠g爜 + code = ths_industry_util.get_code_by_name(code_name) + # 鍥惧儚璇嗗埆 + return_str = json.dumps({"code": 0, "data": {"code": code}}) + else: + return_str = json.dumps({"code": 2, "msg": "鏁版嵁鍑洪敊"}) + else: + return_str = json.dumps({"code": 1, "msg": "鏁版嵁灏氭湭涓婁紶瀹�"}) except Exception as e: + logging.exception(e) if str(e).__contains__("json瑙f瀽澶辫触"): logging.error("OCR鏁版嵁JSON瑙f瀽瑙f瀽澶辫触") return_str = json.dumps({"code": -1, "msg": str(e)}) - sk.send(return_str.encode()) + return return_str - def finish(self): - super().finish() + def __send_response(self, data): + # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 + self.send_response(200) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(data.encode()) + + def __parse_request(self): + params = {} + datas = self.rfile.read(int(self.headers['content-length'])) + _str = str(datas, encoding="gbk") + # print(_str) + start = 0 + while True: + start = _str.find("Content-Disposition: form-data;", start + 1) + if start <= 0: + break + name_start = start + len("Content-Disposition: form-data;") + name_end = _str.find("\r\n\r\n", start) + + val_end = _str.find("------", name_end) + key = _str[name_start:name_end].strip()[6:-1] + val = _str[name_end:val_end].strip() + params[key] = val + return params + + +def run(addr, port): + handler = OCRServer + httpd = socketserver.TCPServer((addr, port), handler) + print("HTTP server is at: http://%s:%d/" % (addr, port)) + httpd.serve_forever() -- Gitblit v1.8.0