test.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. async def upload_image(url, payload, filename1, content1, filename2, content2):
  11. form_data = aiohttp.FormData()
  12. # 添加普通表单数据
  13. for key, value in payload.items():
  14. form_data.add_field(key, value)
  15. # 添加文件数据
  16. form_data.add_field('file', content1, filename=filename1, content_type='image/jpeg')
  17. # form_data.add_field('oldFile', content2, filename=filename2, content_type='image/jpeg')
  18. # 发起 POST 请求
  19. async with aiohttp.ClientSession() as session:
  20. async with session.post(url, data=form_data) as response:
  21. result = await response.text()
  22. logger.info(result)
  23. async def process_stream():
  24. logger.info("====== Start Server =======")
  25. human_model_path = "models/work_clo_person_head_hat.pt"
  26. door_model_path = "models/door_classify.pt"
  27. test_area = [[(222, 59), (432, 3), (528, 96), (318, 198)]]
  28. instance = DoorInference(human_model_path, door_model_path, person_areas=None)
  29. ip = '172.19.152.231'
  30. channel = '45'
  31. stream = StreamCapture(ip, channel)
  32. stream.get_stream_url()
  33. posttime = time.time() - 30
  34. frame = cv2.imread("inference/test.jpg")
  35. image = frame.copy()
  36. result = instance(image)
  37. if len(result) > 0 and time.time() - posttime > 30:
  38. posttime = time.time()
  39. videoTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
  40. fileTime = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime())
  41. filename = fileTime + ".jpg"
  42. filenameori = fileTime + "det.jpg"
  43. logger.info(videoTime)
  44. logger.info(result)
  45. for res in result:
  46. cv2.rectangle(image, tuple(map(int, (res.left, res.top))),
  47. tuple(map(int, (res.right, res.bottom))), (255, 0, 0), 4)
  48. success, encoded_image = cv2.imencode('.jpg', image)
  49. if not success:
  50. logger.error('imencode image error')
  51. content = encoded_image.tobytes()
  52. successori, encoded_imageori = cv2.imencode('.jpg', frame)
  53. if not successori:
  54. logger.error('imencode original image error')
  55. contentori = encoded_imageori.tobytes()
  56. payload = {
  57. 'channel': '45',
  58. 'classIndex': '8',
  59. 'ip': '172.19.152.231',
  60. 'videoTime': videoTime,
  61. 'videoUrl': stream.stream_url
  62. }
  63. # 使用协程上传图像
  64. await upload_image('http://172.19.152.231/open/api/operate/upload', payload, filename, content, filenameori, contentori)
  65. logger.info("======= EXIT =======")
  66. if __name__ == "__main__":
  67. asyncio.run(process_stream())