工具架构:
sequenceDiagram
participant [OPOD]Client
participant [OPOD]ParseTool
participant [FP]TrackIDService
participant [FP]ES
participant [OPOD]ClickHouse
[OPOD]Client->>[OPOD]ParseTool: 输入JSON文件
[OPOD]ParseTool->>[OPOD]ParseTool: 解析JSON
[OPOD]ParseTool->>[FP]TrackIDService: 获取face_id映射
[FP]TrackIDService->>[FP]ES: 并行查询track_meta索引
[FP]ES-->>[FP]TrackIDService: 返回face_id
[FP]TrackIDService-->>[OPOD]ParseTool: 返回id_mapping
[OPOD]ParseTool->>[OPOD]ParseTool: 并行编码ID
[OPOD]ParseTool->>[OPOD]ClickHouse: 查询统计信息
[OPOD]ClickHouse-->>[OPOD]ParseTool: 返回统计结果
[OPOD]ParseTool-->>[OPOD]Client: 输出结果
graph TB
subgraph parse_tool["解析工具"]
A[demo.py] --> B[parse_input_json]
A --> C[get_face_id_mappings]
A --> D[get_encode_ids_parallel]
A --> E[get_record_statistics]
B --> F[CellTrack类]
B --> G[CellTrackList类]
D --> H[ThreadPoolExecutor]
H --> I[get_encode_id]
E --> J[query_clickhouse]
end
subgraph track_id_tool["轨迹ID服务"]
K[track_id_service.py] --> L[Flask应用]
L --> M[health]
L --> N[get_face_id_by_track_id]
L --> O[get_face_id_by_track_id_batch]
K --> P[tools.basic]
P --> Q[日志工具]
P --> R[ES工具函数]
N --> S[query_face_id_by_track_id]
S --> T[ThreadPoolExecutor]
T --> U[query_single_index]
O --> V[批量查询处理]
end
subgraph scripts["辅助脚本"]
W[check_track_meta_mapping.sh]
X[update_track_meta_mapping.sh]
end
- parse_tool:
- 用于解析输入的JSON文件,获取track_id和时间戳
- 通过track_id_service获取face_id映射
- 并行处理ID编码
- 查询ClickHouse获取统计信息
- track_id_tool:
- 提供RESTful API服务
- 支持单个和批量查询track_id到face_id的映射
- 使用线程池实现并发查询ES
- 提供健康检查接口
- 包含ES索引mapping维护脚本
辅助工具:
- check_track_meta_mapping.sh: 检查ES索引mapping配置
- update_track_meta_mapping.sh: 更新ES索引mapping配置
Track ID Service
背景介绍
Track ID Service 是一个用于查询人脸轨迹ID与人脸ID映射关系的服务。该服务通过ES(Elasticsearch)存储的轨迹元数据,提供track_id到face_id的查询功能。
主要功能
- 单个track_id查询对应的face_id
- 批量track_id查询对应的face_id
- 服务健康状态检查
技术特点
- 基于时间戳智能查询相关索引
- 支持批量查询提高效率
- 提供RESTful API接口
- 完善的日志记录和错误处理
启动服务
# 使用默认配置启动(host=0.0.0.0, port=8080)
../python/python track_id_service.py
# 指定端口启动
../python/python track_id_service.py --port=8081
# 指定主机和端口启动
../python/python track_id_service.py --host=127.0.0.1 --port=8082
# 启用调试模式
../python/python track_id_service.py --debug
可用的命令行参数:
--host: 指定监听的主机地址(默认:0.0.0.0)--port: 指定监听的端口号(默认:8080)--debug: 启用调试模式
API 接口说明
1. 健康检查
curl "http://localhost:8080/health"
返回示例
{
"status": "ok",
"es_ip": "10.0.0.1",
"indices_count": 22
}
2. 单个查询接口
POST /get_face_id_by_track_id
Content-Type: application/json
请求参数
{
"track_id": "track_123",
"cell_timestamp": 1634567890
}
示例
curl -X POST "http://localhost:8080/get_face_id_by_track_id" \
-H "Content-Type: application/json" \
-d '{"track_id": "track_123", "cell_timestamp": 1634567890}'
成功返回示例
{
"rtn": 0,
"id": "face_123"
}
失败返回示例
{
"rtn": -1,
"msg": "No matching face_id found"
}
3. 批量查询接口
POST /get_face_id_by_track_id_batch
Content-Type: application/json
请求参数
[
{
"track_id": "track_123",
"cell_timestamp": 1634567890
},
{
"track_id": "track_456",
"cell_timestamp": 1634567891
}
]
示例
curl -X POST "http://localhost:8080/get_face_id_by_track_id_batch" \
-H "Content-Type: application/json" \
-d '[
{"track_id": "track_123", "cell_timestamp": 1634567890},
{"track_id": "track_456", "cell_timestamp": 1634567891}
]'
成功返回示例
{
"rtn": 0,
"id_mapping": {
"track_123": "face_123",
"track_456": "face_456"
}
}
失败返回示例
{
"rtn": -1,
"msg": "Failed to process batch request"
}
错误处理
服务会返回适当的HTTP状态码和错误信息:
- 400: 请求参数错误
- 404: 接口路径不存在
- 500: 服务器内部错误
日志
服务日志保存在 logs/track_id_service.log 文件中,记录了服务的运行状态和错误信息。
注意事项
- flask
- requests
- argparse (Python标准库)
- json (Python标准库)
维护者
如有问题请联系相关团队。
检查已安装的依赖
../python/python -m pip list
安装依赖
../python/python -m pip install flask requests
../python/python -m pip list
安装依赖
../python/python -m pip install flask requests
如果无法访问外网,可以使用离线安装包:
../python/python -m pip install /path/to/flask-2.x.x.whl /path/to/requests-2.xx.x.whl
No comments yet.