test.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import asyncio
  2. import aiohttp
  3. import time
  4. import io
  5. import cv2
  6. from logger import logger
  7. from stream import StreamCapture
  8. from infer import DoorInference
  9. from logger import logger
  10. from datetime import datetime
  11. def is_time_in_period(start_time_str, end_time_str):
  12. # 解析开始和结束时间字符串为time对象
  13. start_time = datetime.strptime(start_time_str, "%H:%M").time()
  14. end_time = datetime.strptime(end_time_str, "%H:%M").time()
  15. current_time = datetime.now().time()
  16. # 判断时间段是否跨天
  17. if start_time <= end_time:
  18. # 时间段在同一天
  19. return start_time <= current_time <= end_time
  20. else:
  21. # 时间段跨天(如22:00到次日02:00)
  22. return current_time >= start_time or current_time <= end_time
  23. async def upload_image(url, payload, filename1, content1, filename2, content2):
  24. form_data = aiohttp.FormData()
  25. # 添加普通表单数据
  26. for key, value in payload.items():
  27. form_data.add_field(key, value)
  28. # 添加文件数据
  29. form_data.add_field('file', content1, filename=filename1, content_type='image/jpeg')
  30. # form_data.add_field('oldFile', content2, filename=filename2, content_type='image/jpeg')
  31. # 发起 POST 请求
  32. async with aiohttp.ClientSession() as session:
  33. async with session.post(url, data=form_data) as response:
  34. result = await response.text()
  35. logger.info(result)
  36. async def process_stream():
  37. start_det_time = "10:00"
  38. end_det_time = "20:00"
  39. if not is_time_in_period(start_det_time, end_det_time):
  40. logger.info(f"当前时间不在时间段 {start_det_time} ~ {end_det_time}")
  41. return
  42. logger.info("====== Start Server =======")
  43. human_model_path = "models/yolo11m.pt"
  44. door_model_path = "models/door_classify.pt"
  45. test_area = [[(222, 59), (432, 3), (528, 96), (318, 198)]]
  46. instance = DoorInference(human_model_path, door_model_path, person_areas=None)
  47. ip = '172.19.152.231'
  48. channel = '45'
  49. stream = StreamCapture(ip, channel)
  50. # stream.get_stream_url()
  51. posttime = time.time() - 30
  52. frame = cv2.imread("inference/test.jpg")
  53. image = frame.copy()
  54. result = instance(image)
  55. if len(result) > 0 and time.time() - posttime >= 30:
  56. posttime = time.time()
  57. videoTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
  58. fileTime = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime())
  59. filename = fileTime + ".jpg"
  60. filenameori = fileTime + "det.jpg"
  61. logger.info(videoTime)
  62. logger.info(result)
  63. for res in result:
  64. cv2.rectangle(image, tuple(map(int, (res.left, res.top))),
  65. tuple(map(int, (res.right, res.bottom))), (255, 0, 0), 4)
  66. cv2.imwrite("result.jpg", image)
  67. success, encoded_image = cv2.imencode('.jpg', image)
  68. if not success:
  69. logger.error('imencode image error')
  70. content = encoded_image.tobytes()
  71. successori, encoded_imageori = cv2.imencode('.jpg', frame)
  72. if not successori:
  73. logger.error('imencode original image error')
  74. contentori = encoded_imageori.tobytes()
  75. payload = {
  76. 'channel': '45',
  77. 'classIndex': '8',
  78. 'ip': '172.19.152.231',
  79. 'videoTime': videoTime,
  80. 'videoUrl': stream.stream_url
  81. }
  82. # 使用协程上传图像
  83. # await upload_image('http://172.19.152.231/open/api/operate/upload', payload, filename, content, filenameori, contentori)
  84. logger.info("======= EXIT =======")
  85. if __name__ == "__main__":
  86. asyncio.run(process_stream())