From d81d0d7cffe9aea0c42307874fde30a71635fc7a Mon Sep 17 00:00:00 2001 From: 2024snow <2103200855@qq.com> Date: Thu, 4 Jul 2024 17:49:41 +0800 Subject: [PATCH] update --- lane_server/lane_infer_server.py | 13 +++++++ ocr_server/ocr_infer_server.py | 67 ++++++++++++++++++++------------ yolo_server/yolo_infer_server.py | 11 ++++++ 3 files changed, 67 insertions(+), 24 deletions(-) diff --git a/lane_server/lane_infer_server.py b/lane_server/lane_infer_server.py index a6b75ce..8f0e50b 100644 --- a/lane_server/lane_infer_server.py +++ b/lane_server/lane_infer_server.py @@ -7,6 +7,7 @@ from infer import Lane_model_infer import numpy as np import cv2 + lock = threading.Lock() response = {'code': 0, 'data': 0} @@ -65,6 +66,18 @@ def lane_infer_server_main(queue): daemon=True) mythread.start() + import signal + import sys + def signal_handler(signum, frame): + logger.info("Received signal, exiting...") + camera_socket.close() + context.term() + sys.exit(0) + + # 注册信号处理函数 + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGINT, signal_handler) + while True: camera_socket.send_string("") diff --git a/ocr_server/ocr_infer_server.py b/ocr_server/ocr_infer_server.py index 1a34cb2..0e0e290 100644 --- a/ocr_server/ocr_infer_server.py +++ b/ocr_server/ocr_infer_server.py @@ -31,8 +31,8 @@ def get_access_token(): def ocr_api_request(image_base64): # url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic" # 高精度 - # url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate" # 高精度带位置 - url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general" # 标准精度带位置 + url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate" # 高精度带位置 + # url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general" # 标准精度带位置 headers = { 'Content-Type': 'application/json' } @@ -58,16 +58,21 @@ def ocr_api_request(image_base64): if __name__ == "__main__": - cfg = toml.load('../cfg_infer_server.toml') + cfg = toml.load('/home/evan/Workplace/project_infer/cfg_infer_server.toml') # 配置日志输出 logger.add(cfg['debug']['logger_filename'], format=cfg['debug']['logger_format'], retention = 5, level="INFO") - context1 = zmq.Context() - camera_socket = context1.socket(zmq.REQ) - camera_socket.connect(f"tcp://localhost:{cfg['camera']['camera2_port']}") - logger.info("connect camera success") + # context1 = zmq.Context() + # camera_socket = context1.socket(zmq.REQ) + # camera_socket.connect(f"tcp://localhost:{cfg['camera']['camera2_port']}") + # logger.info("connect camera success") + cap = cv2.VideoCapture(20) + cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('M','J','P','G')) + cap.set(cv2.CAP_PROP_FPS, 20) + cap.set(cv2.CAP_PROP_FRAME_WIDTH, 960) + cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 540) # 初始化 server context = zmq.Context() @@ -75,27 +80,41 @@ if __name__ == "__main__": socket = context.socket(zmq.REP) socket.bind(f"tcp://*:{cfg['server']['ocr_infer_port']}") + import signal + import sys + def signal_handler(signum, frame): + logger.info("Received signal, exiting...") + socket.close() + context.term() + sys.exit(0) + + # 注册信号处理函数 + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGINT, signal_handler) + while True: message1 = socket.recv_string() logger.info("recv client request") - for _ in range(5): - camera_socket.send_string("") - message = camera_socket.recv() - - np_array = np.frombuffer(message, dtype=np.uint8) - image = cv2.imdecode(np_array, cv2.IMREAD_COLOR) - output_file_path = 'output_image.jpg' - success = cv2.imwrite(output_file_path, image) - - encoded_image = base64.b64encode(message).decode('utf-8') - - result = ocr_api_request(encoded_image) - print(result) - if result != None: - socket.send_pyobj({'code': 0, 'content': result.get('words_result')}) + ret, frame = cap.read() + if ret: + frame = frame[:,0:480] + frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE) + + output_file_path = 'rotate.jpg' + success = cv2.imwrite(output_file_path, frame) + + _, frame = cv2.imencode('.jpg', frame) + + encoded_image = base64.b64encode(frame).decode('utf-8') + + result = ocr_api_request(encoded_image) + print(result) + if result != None: + socket.send_pyobj({'code': 0, 'content': result.get('words_result')}) + else: + socket.send_pyobj({'code': -1, 'content': " ocr 没找到文字"}) else: - socket.send_pyobj({'code': -1, 'content': None}) - + socket.send_pyobj({'code': -1, 'content': "ocr 摄像头读取出错"}) if cv2.waitKey(1) == 27: break logger.info("ocr infer server exit") diff --git a/yolo_server/yolo_infer_server.py b/yolo_server/yolo_infer_server.py index 330327e..c4be3ab 100644 --- a/yolo_server/yolo_infer_server.py +++ b/yolo_server/yolo_infer_server.py @@ -129,6 +129,17 @@ def yolo_infer_server_main(queue): mythread2 = threading.Thread(target=camera_resp, args=(cfg['camera']['camera1_port'], cfg['camera']['front_camera_port']), daemon=True) mythread1.start() mythread2.start() + + import signal + import sys + def signal_handler(signum, frame): + logger.info("Received signal, exiting...") + sys.exit(0) + + # 注册信号处理函数 + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGINT, signal_handler) + while not exit_event.is_set(): with lock3: if start: