main.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import asyncio
  2. import aiohttp
  3. import time
  4. import cv2
  5. from logger import logger
  6. from stream import StreamCapture
  7. from infer import DoorInference
  8. from logger import logger
  9. async def upload_image(session, url, payload, files):
  10. try:
  11. async with session.post(url, data=payload, files=files) as response:
  12. result = await response.text()
  13. logger.info(result)
  14. except Exception as error:
  15. logger.error(f'Error: {str(error)}')
  16. async def process_stream():
  17. logger.info("====== Start Server =======")
  18. human_model_path = "models/work_clo_person_head_hat.pt"
  19. door_model_path = "models/door_classify.pt"
  20. test_area = [[(222, 59), (432, 3), (528, 96), (318, 198)]]
  21. instance = DoorInference(human_model_path, door_model_path, person_areas=None)
  22. ip = '172.19.152.231'
  23. channel = '45'
  24. stream = StreamCapture(ip, channel)
  25. posttime = time.time() - 30
  26. async with aiohttp.ClientSession() as session:
  27. for frame, ret in stream():
  28. if not ret:
  29. continue
  30. image = frame.copy()
  31. result = instance(image)
  32. if len(result) > 0 and time.time() - posttime > 30:
  33. try:
  34. posttime = time.time()
  35. videoTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
  36. fileTime = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime())
  37. filename = fileTime + ".jpg"
  38. filenameori = fileTime + "det.jpg"
  39. logger.info(videoTime)
  40. logger.info(result)
  41. for res in result:
  42. cv2.rectangle(image, tuple(map(int, (res.left, res.top))),
  43. tuple(map(int, (res.right, res.bottom))), (255, 0, 0), 4)
  44. success, encoded_image = cv2.imencode('.jpg', image)
  45. if not success:
  46. logger.error(f'imencode image error')
  47. content = encoded_image.tobytes()
  48. successori, encoded_imageori = cv2.imencode('.jpg', frame)
  49. if not successori:
  50. logger.error(f'imencode original image error')
  51. contentori = encoded_imageori.tobytes()
  52. payload = {
  53. 'channel': '45',
  54. 'classIndex': '8',
  55. 'ip': '172.19.152.231',
  56. 'videoTime': videoTime,
  57. 'videoUrl': stream.stream_url
  58. }
  59. files = [
  60. ('file', (filename, content, 'image/jpeg')),
  61. ('oldFile', (filenameori, contentori, 'image/jpeg'))
  62. ]
  63. # 使用协程上传图像
  64. await upload_image(session, 'http://172.19.152.231/open/api/operate/upload', payload, files)
  65. except Exception as error:
  66. logger.error(f'Error: {str(error)}')
  67. logger.info("======= EXIT =======")
  68. if __name__ == "__main__":
  69. asyncio.run(process_stream())