app5.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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,init_basket_cleaning_detection
  6. from globals import inference_thread, stop_event,redis_client
  7. app = Flask(__name__)
  8. # Define the /wearing_detection endpoint
  9. @app.route('/basket_cleaning_detection', methods=['GET'])
  10. def basket_cleaning_detection():#开启平台搭设检测
  11. global inference_thread#当全局变量需要重新赋值时,需要用global关键字声明
  12. if inference_thread is None or not inference_thread.is_alive():#防止重复开启检测服务
  13. #redis_client.set("log_in_flag",'False')
  14. stop_event.clear()
  15. start_events = []#给每个线程一个事件,让我知道某个线程是否开始检测
  16. inference_thread = threading.Thread(target=start_basket_cleaning_detection,args=(start_events,))
  17. inference_thread.start()
  18. app.logger.info('start_platform_setup_detection')
  19. init_basket_cleaning_detection()
  20. # 等待所有YOLO线程开始检测
  21. for event in start_events:
  22. event.wait()
  23. return jsonify({"status": "SUCCESS"}), 200
  24. else:
  25. app.logger.info("reset_detection already running")
  26. return jsonify({"status": "ALREADY_RUNNING"}), 200
  27. @app.route('/basket_cleaning_status', methods=['GET'])
  28. def basket_cleaning_status():#获取平台搭设状态状态
  29. if not redis_client.exists('basket_cleaning_order'):#平台搭设步骤还没有一个完成
  30. app.logger.info('basket_cleaning_order is none')
  31. return jsonify({"status": "NONE"}), 200
  32. else:
  33. basket_cleaning_order = redis_client.lrange("basket_cleaning_order", 0, -1)
  34. json_array = []
  35. for value in basket_cleaning_order:
  36. match = re.search(r'basket_step_(\d+)', value)
  37. step_number = match.group(1)
  38. json_object = {"step": step_number, "image": redis_client.get(f"basket_step_{step_number}")}
  39. json_array.append(json_object)
  40. return jsonify({"status": "SUCCESS","data":json_array}), 200
  41. @app.route('/basket_cleaning_finish', methods=['GET'])
  42. def basket_cleaning_finish():#开始登录时,检测是否需要复位,若需要,则发送复位信息,否则开始焊接检测
  43. stop_inference_internal()
  44. app.logger.info('basket_cleaning_order')
  45. return jsonify({"status": "SUCCESS"}), 200
  46. def stop_inference_internal():
  47. global inference_thread
  48. if inference_thread is not None and inference_thread.is_alive():
  49. stop_event.set() # 设置停止事件标志,通知推理线程停止运行
  50. inference_thread.join() # 等待推理线程结束
  51. inference_thread = None # 释放线程资源
  52. app.logger.info('detection stopped')
  53. return True
  54. else:
  55. app.logger.info('No inference stopped')
  56. return False
  57. @app.route('/stop_detection', methods=['GET'])
  58. def stop_inference():
  59. #global inference_thread
  60. if stop_inference_internal():
  61. app.logger.info('detection stopped')
  62. return jsonify({"status": "DETECTION_STOPPED"}), 200
  63. else:
  64. app.logger.info('No_detection_running')
  65. return jsonify({"status": "No_detection_running"}), 200
  66. @app.route('/images/<filename>')
  67. def get_image(filename):
  68. app.logger.info('get_image'+filename)
  69. return send_from_directory('static/images', filename)
  70. if __name__ == '__main__':
  71. # Start the Flask server
  72. app.run(debug=False, host='172.16.20.163', port=5005)