import threading import time from flask import Flask, jsonify, request import json app = Flask(__name__) from config.config_util import ConfigUtil from calibrate import run_ransac_calibration from video_location import process_geojson_for_frontend from pixel_to_lonlat import pixel_to_lonlat import logging # 配置全局日志 logging.basicConfig( filename='app.log', # 日志文件 level=logging.INFO, # 记录 DEBUG 及以上级别日志 format='%(asctime)s [%(levelname)s] %(name)s: %(message)s' ) # logging.basicConfig( # level=logging.INFO, # format='%(asctime)s [%(levelname)s] %(name)s: %(message)s', # handlers=[ # logging.FileHandler('app.log'), # 日志文件 # logging.StreamHandler() # 控制台输出 # ] # ) print("app init") logger = logging.getLogger("application") #校准 @app.route('/calibrate',methods=['POST']) def calibrate(): data = request.get_json() all_calibration_data = data.get("points") list_of_tuples = [ (point['u'], point['v'], point['lon'], point['lat']) for point in all_calibration_data ] camera_params = data.get("camera_params") initial_guesses = data.get("initial_guesses") final_height, final_hfov, inliers = run_ransac_calibration( all_points=list_of_tuples, camera_params=camera_params, initial_guesses=initial_guesses, ransac_iterations=100, subset_size=3, error_threshold=3.0) code = 0 if final_height is not None: code = 1 return jsonify({"final_height": str(final_height), "final_hfov": str(final_hfov),"code":code}) ##将geojson转成坐标 @app.route('/videoLocation',methods=['POST']) def videoLocation(): data = request.get_json() geojson = data.get("geojson") camera_params = data.get("camera_params") calibrated_params = data.get("calibrated_params") final_screen_segments = process_geojson_for_frontend(geojson, camera_params, calibrated_params) code = 0 return jsonify({"code" : code,"list" : final_screen_segments}) #将点集合转成经纬度 @app.route('/parseLocation',methods=['POST']) def parseLocation(): data = request.get_json() points = [] all_calibration_data = data.get("points") camera_params = data.get("camera_params") current_ptz_params = data.get("current_ptz_params") for point in all_calibration_data: res = pixel_to_lonlat(int(point['u']), int(point['v']), camera_params, current_ptz_params) points.append(res) code = 0 return jsonify({"code" : code,"points" : points}) if __name__ == '__main__': # 从 Flask 配置中获取端口 port = int(ConfigUtil.get('server', 'port')) app.run(host='0.0.0.0', port=port)