40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import asyncio
|
|
import numpy as np
|
|
from src.api_server import DistanceAPI, Distance
|
|
from src.camera_handler import RTSPCamera
|
|
from src.person_detector import PersonDetector
|
|
from src.distance_estimator import DistanceEstimator
|
|
|
|
async def test_distance_api():
|
|
# 初始化所有组件
|
|
camera = RTSPCamera(0) # 使用本地摄像头测试
|
|
detector = PersonDetector("yolov8n.pt")
|
|
estimator = DistanceEstimator(
|
|
focal_length=35,
|
|
sensor_height=24,
|
|
avg_person_height=1700
|
|
)
|
|
|
|
# 初始化API
|
|
api = DistanceAPI(camera, detector, estimator)
|
|
|
|
print("测试API...")
|
|
camera.start()
|
|
await asyncio.sleep(2) # 等待摄像头初始化
|
|
|
|
try:
|
|
distances = await api.get_distances()
|
|
assert isinstance(distances, list), "返回结果应该是列表"
|
|
for distance in distances:
|
|
assert isinstance(distance, Distance), "返回结果应该是Distance对象"
|
|
assert distance.distance_mm > 0, "距离应该大于0"
|
|
assert 0 <= distance.confidence <= 1, "置信度应该在0-1之间"
|
|
|
|
print(f"检测到 {len(distances)} 个人物的距离")
|
|
for i, d in enumerate(distances):
|
|
print(f"人物 {i+1}: 距离 = {d.distance_mm:.2f}mm, 置信度 = {d.confidence:.2f}")
|
|
|
|
finally:
|
|
camera.stop()
|
|
|
|
print("API测试完成!") |