app.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. (point['u'], point['v'], point['lon'], point['lat'])
  34. for point in all_calibration_data
  35. ]
  36. camera_params = data.get("camera_params")
  37. initial_guesses = data.get("initial_guesses")
  38. final_height, final_hfov, inliers = run_ransac_calibration(
  39. all_points=list_of_tuples, camera_params=camera_params, initial_guesses=initial_guesses,
  40. ransac_iterations=100, subset_size=3, error_threshold=3.0)
  41. code = 0
  42. if final_height is not None:
  43. code = 1
  44. return jsonify({"final_height": str(final_height), "final_hfov": str(final_hfov),"code":code})
  45. ##将geojson转成坐标
  46. @app.route('/videoLocation',methods=['POST'])
  47. def videoLocation():
  48. data = request.get_json()
  49. geojson = data.get("geojson")
  50. camera_params = data.get("camera_params")
  51. calibrated_params = data.get("calibrated_params")
  52. final_screen_segments = process_geojson_for_frontend(geojson, camera_params, calibrated_params)
  53. code = 0
  54. return jsonify({"code" : code,"list" : final_screen_segments})
  55. #将点集合转成经纬度
  56. @app.route('/parseLocation',methods=['POST'])
  57. def parseLocation():
  58. data = request.get_json()
  59. points = []
  60. all_calibration_data = data.get("points")
  61. camera_params = data.get("camera_params")
  62. current_ptz_params = data.get("current_ptz_params")
  63. for point in all_calibration_data:
  64. res = pixel_to_lonlat(int(point['u']), int(point['v']), camera_params, current_ptz_params)
  65. points.append(res)
  66. code = 0
  67. return jsonify({"code" : code,"points" : points})
  68. if __name__ == '__main__':
  69. # 从 Flask 配置中获取端口
  70. port = int(ConfigUtil.get('server', 'port'))
  71. app.run(host='0.0.0.0', port=port)