diff --git a/cfg_infer_server.toml b/cfg_infer_server.toml new file mode 100644 index 0000000..9ce3713 --- /dev/null +++ b/cfg_infer_server.toml @@ -0,0 +1,10 @@ +[debug] +logger_filename = "log/file_{time}.log" +logger_format = "{time} {level} {message}" + + +[server] +lane_infer_port = 6666 + +[camera] +front_camera_port = 5555 diff --git a/lane_server/infer.py b/lane_server/infer.py new file mode 100644 index 0000000..0c9328b --- /dev/null +++ b/lane_server/infer.py @@ -0,0 +1,25 @@ +import paddle.inference as paddle_infer +import numpy as np +import paddle.vision.transforms as T + +class Lane_model_infer: + def __init__(self, model_dir="./lane_model"): + # 初始化paddle推理 + self.model_dir = model_dir + self.config = paddle_infer.Config(model_dir + "/model.pdmodel", model_dir + "/model.pdiparams") + self.config.enable_use_gpu(200, 0) + self.predictor = paddle_infer.create_predictor(self.config) + self.input_names = self.predictor.get_input_names() + self.input_handle = self.predictor.get_input_handle(self.input_names[0]) + self.output_names = self.predictor.get_output_names() + self.output_handle = self.predictor.get_output_handle(self.output_names[0]) + self.normalize_transform = T.Normalize(mean=[127.5], std=[127.5]) + + def infer(self,src) -> np.ndarray: + image = self.normalize_transform(src) + image = image.transpose(2, 0, 1) + image = np.expand_dims(image, axis=0) + self.input_handle.copy_from_cpu(image) + self.predictor.run() + results = self.output_handle.copy_to_cpu()[0] + return results \ No newline at end of file diff --git a/lane_server/lane_infer_server.py b/lane_server/lane_infer_server.py new file mode 100644 index 0000000..1a39249 --- /dev/null +++ b/lane_server/lane_infer_server.py @@ -0,0 +1,59 @@ +import toml +import threading +from loguru import logger +import zmq +from infer import Lane_model_infer +import numpy as np + +lock = threading.Lock() +response = {'code': 0, 'data': 0} + +# 处理server响应数据 +def server_resp(lane_infer_port): + logger.info("lane server thread init success") + global response + + context = zmq.Context() + # 启动server + socket = context.socket(zmq.REP) + socket.bind(f"tcp://*:{lane_infer_port}") + logger.info("lane infer server init success") + while True: + message = socket.recv_string() + with lock: + socket.send_pyobj(response) + + + +if __name__ == "__main__": + + cfg = toml.load('../cfg_infer_server.toml') + + # 配置日志输出 + logger.add(cfg['debug']['logger_filename'], format=cfg['debug']['logger_format'], retention = 5, level="INFO") + camera_cfg = cfg['camera'] + + # 连接摄像头server 巡线只需要连接前摄像头 + context = zmq.Context() + camera_socket = context.socket(zmq.SUB) + camera_socket.connect(f"tcp://*:{camera_cfg['front_camera_port']}") + camera_socket.setsockopt(zmq.SUBSCRIBE, '') + logger.info("connect camera success") + # 初始化paddle推理器 + predictor = Lane_model_infer() + logger.info("lane model load success") + # 启动lane_infer_server线程 + mythread = threading.Thread(target=server_resp, + args=(camera_cfg['lane_infer_port'],), + daemon=True) + mythread.start() + + while True: + image_data_bytes = camera_socket.recv(320*240) + image = np.frombuffer(image_data_bytes, dtype=np.uint8).reshape((240, 320, 3)) + result = predictor.infer(image) + with lock: + response['data'] = result + mythread.join() + logger.info("lane infer server exit") + diff --git a/lane_server/lane_model/model.pdiparams b/lane_server/lane_model/model.pdiparams new file mode 100644 index 0000000..156e530 Binary files /dev/null and b/lane_server/lane_model/model.pdiparams differ diff --git a/lane_server/lane_model/model.pdiparams.info b/lane_server/lane_model/model.pdiparams.info new file mode 100644 index 0000000..23ddae8 Binary files /dev/null and b/lane_server/lane_model/model.pdiparams.info differ diff --git a/lane_server/lane_model/model.pdmodel b/lane_server/lane_model/model.pdmodel new file mode 100644 index 0000000..302fda1 Binary files /dev/null and b/lane_server/lane_model/model.pdmodel differ diff --git a/yolo_server/infer.py b/yolo_server/infer.py new file mode 100644 index 0000000..e69de29 diff --git a/yolo_server/yolo_infer_server.py b/yolo_server/yolo_infer_server.py new file mode 100644 index 0000000..e69de29