from PyModuleCommModule import PyModuleComm import modulecommpython import numpy as np import time import sys import cv2 from queue import Queue import proto.cameraobjectarray_pb2 as cameraobjectarray_pb2 import proto.rawpic_pb2 as rawpic_pb2 from vehiclecount import VehicleCount time_objectarray = 0 msg_cameraobjectarray = cameraobjectarray_pb2.cameraobjectarray() msg_rawpic = rawpic_pb2.rawpic() time_rawpic = 0 pic_mat = None pic_queue = Queue(3) def cameraobjectarray_callback(arr : np,nsize,time): global msg_cameraobjectarray global time_objectarray sub_arr = arr[0:nsize] databytes = sub_arr.tobytes() #sub_arr.tostring() msg = cameraobjectarray_pb2.cameraobjectarray() msg.ParseFromString(databytes) msg_cameraobjectarray = msg time_objectarray = time length = len(msg_cameraobjectarray.obj) #print("obj size: ",length) pass def rawpic_callback(arr : np,nsize,time): global msg_rawpic global time_rawpic global pic_mat sub_arr = arr[0:nsize] databytes = sub_arr.tobytes() #sub_arr.tostring() msg = rawpic_pb2.rawpic() msg.ParseFromString(databytes) msg_rawpic = msg time_rawpic = time mat = np.zeros((msg_rawpic.height,msg_rawpic.width,3),dtype=np.uint8) buff = np.frombuffer(msg_rawpic.picdata,dtype=np.uint8) mat = cv2.imdecode(buff,cv2.IMREAD_COLOR) # pic_mat = mat pic_queue.put(mat) pass if __name__ == "__main__": # 初始化一个变量 count = 0 count = 3.5/1.5 count = int(count) print("count = ",count) mobj = PyModuleComm("vision_objectarray") mobj.RegisterRecv(cameraobjectarray_callback) mpic = PyModuleComm("vision_objectimage") mpic.RegisterRecv(rawpic_callback) # 定义识别线线的起点和终点坐标 line_start = np.array([150, 480]) # 起点 line_end = np.array([900, 480]) # 终点 max_track_length = 30 # 最大轨迹长度 unupdated_timeout = 0.1 # 未更新的轨迹存在时间(秒) identification_range = 30 # 连续框判断误差(像素) calculate_range_flag = True counter = VehicleCount(line_start,line_end,max_track_length,unupdated_timeout, calculate_range_flag,identification_range) # 使用while循环,只要count小于10,就继续循环 cv2.namedWindow("pic",cv2.WINDOW_NORMAL) while count < 10: #MakeDecision(md,msg_cameraobjectarray) # if pic_mat is not None: if not pic_queue.empty(): pic_mat = pic_queue.get() counter.count(msg_cameraobjectarray,pic_mat) cv2.imshow("pic",pic_mat) if cv2.waitKey(1) & 0xFF == ord("q"): break cv2.destroyAllWindows() print("循环结束!")