使用VideoPipe做车辆检索(结构化属性过滤)。
VideoPipe 编译/运行环境(参见视频教程)vp_data,具体参见视频教程)Python3 所需的依赖库(主要是numpy,pandas,opencv==4.6.0,flask,faiss等,其余按需安装即可)vehicle_encoding_classify_pipeline.cpp 运行VideoPipe管道,读取视频文件,并提取车辆特征、对车辆进行颜色/车型分类,最后将特征、分类结果以Socket/UDP的方式发送给后台服务。property_encoding_receiver.py 用于接收车辆特征、分类结果脚本,将其写入 pandas.dataframe 结构,然后以 .csv 的文件格式序列化到磁盘(每接收100个记录,会写入一次磁盘)。vehicle_search_server.py 加载 .csv 文件中的特征、分类结果数据,并创建 faiss 索引对象。该脚本同时会提供一个基于 flask 的Web UI界面,用户可以上传图片和过滤条件,检索与之匹配的相似车辆。clean.sh 帮助清空当前workspace下面的所有缓存数据。
vehicle_encoding_classify_pipeline.cpp 生成二进制可执行文件并运行, 它会提取车辆特征,并对其进行颜色/车型二级分类。(编译之前请先修改代码中 des_ip 的值)python3 property_encoding_receiver.py 脚本接收车辆特征和分类结果,并**周期性**地存成 .csv 格式文件。(运行前,请先修改 bind_ip 的值)vehicle_search_server.py 脚本,然后打开浏览器访问 http://server-ip:9898 ,即可开始测试车辆检索、属性过滤的功能。please run `sh clean.sh` if you want to regenerate embeddings and classification labels, for example restart sample from scratch.

layer_1 模拟获取车辆图片数据,实际可以换成file、application。layer_2 完成车辆检测,从大图中定位车辆位置,创建 vp_frame_target 对象。layer_3 完成车牌检测,基于前面检测到的车辆目标,抠图去检测车牌,创建 vp_sub_target 对象。注意这里是基于抠图再去检测车牌(与车牌识别相机实战有区别),属于二级推理。layer_4 完成车辆颜色分类,基于前面检测到的车辆目标去做颜色分类,更新 vp_frame_target 的 secondary_labels/secondary_class_ids/secondary_scores。layer_5 完成车辆车型分类,基于前面检测到的车辆目标去做车型分类,更新 vp_frame_target 的 secondary_labels/secondary_class_ids/secondary_scores。layer_6 完成车辆特征编码,基于前面检测到的车辆目标去提取车辆特征,更新 vp_frame_target 的 embeddings。layer_7 完成数据代理,将管道中的车牌号码+车牌颜色、车辆颜色、车型、车辆特征按自定义格式,以Socket/UDP的方式发送给Python后台服务。layer_8 完成结果绘制,将检测、分类的结果绘制到帧上,方便调试查看。layer_9 负责GUI输出显示,显示基本无延时。注意管道没有rtmp输出。vp_sub_target 类型。向量数据库(faiss)和业务数据库(pandas/mysql)联合使用。向量检索和标量过滤。FaceBook开源的一款相似度检索工具,可用于图片、文本相似性检索场景, 全名是Facebook AI Similiarity Search.
pip3 install faiss-cpu
# pip3 install faiss-gpu
选择查询图片,和过滤条件

车辆查询结果
