app5.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import re
  2. import threading
  3. import time
  4. from flask import Flask, jsonify,send_from_directory
  5. from basket_cleaning_detect import start_basket_cleaning_detection
  6. from platform_remove_detect import start_platform_remove_detection,init_platform_remove_detection
  7. from globals import inference_thread, stop_event,redis_client
  8. app = Flask(__name__)
  9. # Define the /wearing_detection endpoint
  10. @app.route('/basket_cleaning_detection', methods=['GET'])
  11. def basket_cleaning_detection():#开启平台搭设检测
  12. global inference_thread#当全局变量需要重新赋值时,需要用global关键字声明
  13. if inference_thread is None or not inference_thread.is_alive():#防止重复开启检测服务
  14. #redis_client.set("log_in_flag",'False')
  15. stop_event.clear()
  16. start_events = []#给每个线程一个事件,让我知道某个线程是否开始检测
  17. inference_thread = threading.Thread(target=start_basket_cleaning_detection,args=(start_events,))
  18. inference_thread.start()
  19. app.logger.info('start_platform_setup_detection')
  20. #init_platform_setup_detection()
  21. # 等待所有YOLO线程开始检测
  22. for event in start_events:
  23. event.wait()
  24. return jsonify({"status": "SUCCESS"}), 200
  25. else:
  26. app.logger.info("reset_detection already running")
  27. return jsonify({"status": "ALREADY_RUNNING"}), 200
  28. # @app.route('/basket_cleaning_status', methods=['GET'])
  29. # def basket_cleaning_status():#获取平台搭设状态状态
  30. # if not redis_client.exists('platform_setup_order'):#平台搭设步骤还没有一个完成
  31. # app.logger.info('platform_setup_order is none')
  32. # return jsonify({"status": "NONE"}), 200
  33. # else:
  34. # platform_setup_order = redis_client.lrange("platform_setup_order", 0, -1)
  35. # json_array = []
  36. # for value in platform_setup_order:
  37. # match = re.search(r'platform_setup_(\d+)', value)
  38. # step_number = match.group(1)
  39. # json_object = {"step": step_number, "image": redis_client.get(f"platform_setup_{step_number}_img"),'number':redis_client.get(f"platform_setup_{step_number}")}
  40. # json_array.append(json_object)
  41. # return jsonify({"status": "SUCCESS","data":json_array}), 200
  42. # @app.route('/basket_cleaning_finish', methods=['GET'])
  43. # def basket_cleaning_finish():#开始登录时,检测是否需要复位,若需要,则发送复位信息,否则开始焊接检测
  44. # stop_inference_internal()
  45. # app.logger.info('platform_setup_finish')
  46. # return jsonify({"status": "SUCCESS"}), 200
  47. # @app.route('/platform_remove_detection', methods=['GET'])
  48. # def platform_remove_detection():#开始登录时,检测是否需要复位,若需要,则发送复位信息,否则开始焊接检测
  49. # global inference_thread#当全局变量需要重新赋值时,需要用global关键字声明
  50. # if inference_thread is None or not inference_thread.is_alive():#防止重复开启检测服务
  51. # #redis_client.set("log_in_flag",'False')
  52. # stop_event.clear()
  53. # start_events = []#给每个线程一个事件,让我知道某个线程是否开始检测
  54. # inference_thread = threading.Thread(target=start_platform_remove_detection,args=(start_events,))
  55. # inference_thread.start()
  56. # app.logger.info('start_platform_remove_detection')
  57. # init_platform_remove_detection()
  58. # # 等待所有YOLO线程开始检测
  59. # for event in start_events:
  60. # event.wait()
  61. # return jsonify({"status": "SUCCESS"}), 200
  62. # else:
  63. # app.logger.info("reset_detection already running")
  64. # return jsonify({"status": "ALREADY_RUNNING"}), 200
  65. # @app.route('/platform_remove_status', methods=['GET'])
  66. # def platform_remove_status():#开始登录时,检测是否需要复位,若需要,则发送复位信息,否则开始焊接检测
  67. # if not redis_client.exists('platform_remove_order'):#平台搭设步骤还没有一个完成
  68. # app.logger.info('platform_remove_order is none')
  69. # return jsonify({"status": "NONE"}), 200
  70. # else:
  71. # platform_setup_order = redis_client.lrange("platform_remove_order", 0, -1)
  72. # json_array = []
  73. # for num in platform_setup_order:
  74. # json_object = {"step": num, "image": redis_client.get(f"platform_remove_{num}_img")}
  75. # json_array.append(json_object)
  76. # return jsonify({"status": "SUCCESS","data":json_array}), 200
  77. # @app.route('/platform_remove_finish', methods=['GET'])#点击考试结束按钮,停止检测,并复位
  78. # def platform_remove_finish():
  79. # stop_inference_internal()
  80. # app.logger.info('platform_remove_finish')
  81. # return jsonify({"status": "SUCCESS"}), 200
  82. def stop_inference_internal():
  83. global inference_thread
  84. if inference_thread is not None and inference_thread.is_alive():
  85. stop_event.set() # 设置停止事件标志,通知推理线程停止运行
  86. inference_thread.join() # 等待推理线程结束
  87. inference_thread = None # 释放线程资源
  88. app.logger.info('detection stopped')
  89. return True
  90. else:
  91. app.logger.info('No inference stopped')
  92. return False
  93. @app.route('/stop_detection', methods=['GET'])
  94. def stop_inference():
  95. #global inference_thread
  96. if stop_inference_internal():
  97. app.logger.info('detection stopped')
  98. return jsonify({"status": "DETECTION_STOPPED"}), 200
  99. else:
  100. app.logger.info('No_detection_running')
  101. return jsonify({"status": "No_detection_running"}), 200
  102. @app.route('/images/<filename>')
  103. def get_image(filename):
  104. app.logger.info('get_image'+filename)
  105. return send_from_directory('static/images', filename)
  106. if __name__ == '__main__':
  107. # Start the Flask server
  108. app.run(debug=False, host='172.16.20.163', port=5005)