| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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)
|