app.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import threading
  2. import time
  3. from flask import Flask, jsonify, request
  4. import json
  5. app = Flask(__name__)
  6. from config.config_util import ConfigUtil
  7. from calibrate import run_ransac_calibration
  8. from video_location import process_geojson_for_frontend
  9. from pixel_to_lonlat import pixel_to_lonlat
  10. import logging
  11. # 配置全局日志
  12. logging.basicConfig(
  13. filename='app.log', # 日志文件
  14. level=logging.INFO, # 记录 DEBUG 及以上级别日志
  15. format='%(asctime)s [%(levelname)s] %(name)s: %(message)s'
  16. )
  17. # logging.basicConfig(
  18. # level=logging.INFO,
  19. # format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
  20. # handlers=[
  21. # logging.FileHandler('app.log'), # 日志文件
  22. # logging.StreamHandler() # 控制台输出
  23. # ]
  24. # )
  25. print("app init")
  26. logger = logging.getLogger("application")
  27. #校准
  28. @app.route('/calibrate',methods=['POST'])
  29. def calibrate():
  30. data = request.get_json()
  31. all_calibration_data = data.get("points")
  32. list_of_tuples = [
  33. (int(point['u']), int(point['v']), float(point['lon']), float(point['lat']))
  34. for point in all_calibration_data
  35. ]
  36. camera_params = data.get("camera_params")
  37. camera_params['cam_lon'] = float(camera_params['cam_lon'])
  38. camera_params['cam_lat'] = float(camera_params['cam_lat'])
  39. initial_guesses = data.get("initial_guesses")
  40. final_height, final_hfov, inliers = run_ransac_calibration(
  41. all_points=list_of_tuples, camera_params=camera_params, initial_guesses=initial_guesses,
  42. ransac_iterations=200, subset_size=3, error_threshold=5.0)
  43. code = 0
  44. if final_height is not None:
  45. code = 1
  46. return jsonify({"final_height": str(final_height), "final_hfov": str(final_hfov),"code":code})
  47. ##将geojson转成坐标
  48. @app.route('/videoLocation',methods=['POST'])
  49. def videoLocation():
  50. data = request.get_json()
  51. geojson = data.get("geojson")
  52. camera_params = data.get("camera_params")
  53. calibrated_params = data.get("calibrated_params")
  54. final_screen_segments = process_geojson_for_frontend(geojson, camera_params, calibrated_params)
  55. code = 0
  56. return jsonify({"code" : code,"list" : final_screen_segments})
  57. #将点集合转成经纬度
  58. @app.route('/parseLocation',methods=['POST'])
  59. def parseLocation():
  60. data = request.get_json()
  61. points = []
  62. all_calibration_data = data.get("points")
  63. camera_params = data.get("camera_params")
  64. current_ptz_params = data.get("current_ptz_params")
  65. for point in all_calibration_data:
  66. res = pixel_to_lonlat(int(point['u']), int(point['v']), camera_params, current_ptz_params)
  67. points.append(res)
  68. code = 0
  69. return jsonify({"code" : code,"points" : points})
  70. if __name__ == '__main__':
  71. # 从 Flask 配置中获取端口
  72. port = int(ConfigUtil.get('server', 'port'))
  73. app.run(host='0.0.0.0', port=port)