60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
import yaml
|
|
import uvicorn
|
|
from src.camera_handler import RTSPCamera
|
|
from src.person_detector import PersonDetector
|
|
from src.distance_estimator import DistanceEstimator
|
|
from src.api_server import DistanceAPI, app
|
|
|
|
def load_config():
|
|
with open('config/config.yaml', 'r') as f:
|
|
return yaml.safe_load(f)
|
|
|
|
def main():
|
|
config = load_config()
|
|
|
|
# 初始化摄像头
|
|
camera = RTSPCamera(
|
|
config['camera']['rtsp_url'],
|
|
config['camera']['fps']
|
|
)
|
|
camera.start()
|
|
|
|
# 初始化检测器
|
|
detector = PersonDetector(
|
|
config['model']['person_detection']['model_name'],
|
|
config['model']['person_detection']['confidence_threshold']
|
|
)
|
|
|
|
# 初始化距离估算器
|
|
'''
|
|
focal_length_mm : 35 # 焦距(mm)
|
|
sensor_width_mm : 23.6 # 传感器宽度(mm)
|
|
sensor_height_mm : 15.6 # 传感器高度(mm)
|
|
image_width_pixels : 640 # 图像宽度(像素)
|
|
image_height_pixels : 640 # 图像高度(像素)
|
|
camera_height_mm: 1700 # 摄像头安装高度(mm)
|
|
camera_tilt_angle : 15 # 摄像头俯仰角(度)
|
|
'''
|
|
estimator = DistanceEstimator(
|
|
config['model']['distance_estimation']['focal_length_mm'],
|
|
config['model']['distance_estimation']['sensor_width_mm'],
|
|
config['model']['distance_estimation']['sensor_height_mm'],
|
|
config['model']['distance_estimation']['image_width_pixels'],
|
|
config['model']['distance_estimation']['image_height_pixels'],
|
|
config['model']['distance_estimation']['camera_height_mm'],
|
|
config['model']['distance_estimation']['camera_tilt_angle']
|
|
)
|
|
|
|
# 初始化API
|
|
distance_api = DistanceAPI(camera, detector, estimator)
|
|
app.distance_api = distance_api
|
|
|
|
# 启动API服务器
|
|
uvicorn.run(
|
|
app,
|
|
host=config['api']['host'],
|
|
port=config['api']['port']
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
main() |