工具架构:

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

  1. parse_tool:
    1. 用于解析输入的JSON文件,获取track_id和时间戳
    2. 通过track_id_service获取face_id映射
    3. 并行处理ID编码
    4. 查询ClickHouse获取统计信息
  2. track_id_tool:
    1. 提供RESTful API服务
    2. 支持单个和批量查询track_id到face_id的映射
    3. 使用线程池实现并发查询ES
    4. 提供健康检查接口
    5. 包含ES索引mapping维护脚本

辅助工具:

  • check_track_meta_mapping.sh: 检查ES索引mapping配置
  • update_track_meta_mapping.sh: 更新ES索引mapping配置

track_id_tool.tar.gz

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 文件中,记录了服务的运行状态和错误信息。

注意事项

    维护者

    如有问题请联系相关团队。

    检查已安装的依赖

    ../python/python -m pip list
    

    • flask
    • requests
    • argparse (Python标准库)
    • json (Python标准库)

    安装依赖

    ../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