vehiclecountmain.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from PyModuleCommModule import PyModuleComm
  2. import modulecommpython
  3. import numpy as np
  4. import time
  5. import sys
  6. import cv2
  7. from queue import Queue
  8. import proto.cameraobjectarray_pb2 as cameraobjectarray_pb2
  9. import proto.rawpic_pb2 as rawpic_pb2
  10. from vehiclecount import VehicleCount
  11. time_objectarray = 0
  12. msg_cameraobjectarray = cameraobjectarray_pb2.cameraobjectarray()
  13. msg_rawpic = rawpic_pb2.rawpic()
  14. time_rawpic = 0
  15. pic_mat = None
  16. pic_queue = Queue(3)
  17. def cameraobjectarray_callback(arr : np,nsize,time):
  18. global msg_cameraobjectarray
  19. global time_objectarray
  20. sub_arr = arr[0:nsize]
  21. databytes = sub_arr.tobytes() #sub_arr.tostring()
  22. msg = cameraobjectarray_pb2.cameraobjectarray()
  23. msg.ParseFromString(databytes)
  24. msg_cameraobjectarray = msg
  25. time_objectarray = time
  26. length = len(msg_cameraobjectarray.obj)
  27. #print("obj size: ",length)
  28. pass
  29. def rawpic_callback(arr : np,nsize,time):
  30. global msg_rawpic
  31. global time_rawpic
  32. global pic_mat
  33. sub_arr = arr[0:nsize]
  34. databytes = sub_arr.tobytes() #sub_arr.tostring()
  35. msg = rawpic_pb2.rawpic()
  36. msg.ParseFromString(databytes)
  37. msg_rawpic = msg
  38. time_rawpic = time
  39. mat = np.zeros((msg_rawpic.height,msg_rawpic.width,3),dtype=np.uint8)
  40. buff = np.frombuffer(msg_rawpic.picdata,dtype=np.uint8)
  41. mat = cv2.imdecode(buff,cv2.IMREAD_COLOR)
  42. # pic_mat = mat
  43. pic_queue.put(mat)
  44. pass
  45. if __name__ == "__main__":
  46. # 初始化一个变量
  47. count = 0
  48. count = 3.5/1.5
  49. count = int(count)
  50. print("count = ",count)
  51. mobj = PyModuleComm("vision_objectarray")
  52. mobj.RegisterRecv(cameraobjectarray_callback)
  53. mpic = PyModuleComm("vision_objectimage")
  54. mpic.RegisterRecv(rawpic_callback)
  55. # 定义识别线线的起点和终点坐标
  56. line_start = np.array([150, 480]) # 起点
  57. line_end = np.array([900, 480]) # 终点
  58. max_track_length = 30 # 最大轨迹长度
  59. unupdated_timeout = 0.1 # 未更新的轨迹存在时间(秒)
  60. identification_range = 30 # 连续框判断误差(像素)
  61. calculate_range_flag = True
  62. counter = VehicleCount(line_start,line_end,max_track_length,unupdated_timeout,
  63. calculate_range_flag,identification_range)
  64. # 使用while循环,只要count小于10,就继续循环
  65. cv2.namedWindow("pic",cv2.WINDOW_NORMAL)
  66. while count < 10:
  67. #MakeDecision(md,msg_cameraobjectarray)
  68. # if pic_mat is not None:
  69. if not pic_queue.empty():
  70. pic_mat = pic_queue.get()
  71. counter.count(msg_cameraobjectarray,pic_mat)
  72. cv2.imshow("pic",pic_mat)
  73. if cv2.waitKey(1) & 0xFF == ord("q"):
  74. break
  75. cv2.destroyAllWindows()
  76. print("循环结束!")