使用 Qdrant 构建人脸识别系统
David Myriel
·2024 年 12 月 03 日

双胞胎名人应用
在个性化时代,将尖端技术与趣味性相结合可以创建引人入胜的应用程序,从而引起用户的共鸣。其中一个项目是双胞胎名人应用,它使用人脸识别嵌入和由 Qdrant 提供支持的向量搜索来匹配用户及其名人相似者。这篇博客文章深入探讨了架构、工具和实用建议,适用于希望构建此应用程序或类似应用程序的开发人员。
双胞胎名人应用通过分析自拍照来识别用户像哪位名人。该应用利用:
- 人脸识别嵌入:由基于 ResNet 的 FaceNet 模型生成。
- 向量相似性搜索:由 Qdrant 提供支持,以找到最匹配的。
- ZenML:用于编排数据管道。
- Streamlit:作为前端界面。
该项目不仅展示了现代向量数据库的功能,还为基于嵌入的应用程序提供了一个令人兴奋的介绍。
向应用开发者学习
我们采访了该项目的工程师Miguel Otero Pedrido,他也是The Neural Maze的创始人。Miguel 详细解释了他如何将应用程序组合在一起,以及他对工具的选择。
结果他的名人双胞胎是……安迪·萨姆伯格

架构
搜索引擎和数据库:Qdrant 是一款用 Rust 构建的高性能向量数据库,以其可靠性和速度而闻名。其高级功能,如向量可视化和高效的查询,使其成为从事基于嵌入的项目开发人员的首选。

机器学习框架:ZenML 通过模块化、云无关的框架简化了管道创建,确保了代码的整洁、可扩展和可移植性,是跨平台工作流的理想选择。
人脸识别:MTCNN 确保人脸对齐的一致性,使嵌入更可靠。
嵌入模型:FaceNet 提供轻量级、预训练的人脸嵌入,平衡了准确性和效率,非常适合像双胞胎名人应用这样的任务。
前端:Streamlit 简化了 UI 开发,以最小的努力实现了快速原型设计,使开发人员能够专注于核心功能。
应用程序工作流程
该应用分为两个阶段——离线阶段,将名人图片向量化;在线阶段,进行实时相似性搜索。

离线阶段
第一步是数据集准备。从 HuggingFace 的数据集库获取名人图片,作为嵌入的基础。
接下来 - MTCNN 对图像中的名人面部进行对齐。然后,使用预训练的FaceNet 模型为每个图像生成 512 维嵌入。这确保了人脸特征的一致和高质量表示。
最后,这些嵌入连同元数据一起存储在Qdrant Cloud 中。这使得数据能够高效检索和管理以供以后使用。
在线阶段
在在线阶段,用户通过 Streamlit 应用程序开始互动。该应用程序捕捉一张自拍照,并使用相同的 FaceNet 模型将其转换为嵌入。
然后针对 Qdrant 查询生成的嵌入,Qdrant 根据相似性检索出最匹配的结果。
最后,结果以直观的界面显示,向用户展示他们最相似的名人匹配,使互动引人入胜且无缝衔接。
如何构建应用
Miguel 最近在他的 YouTube 频道:The Neural Maze上发布了一个视频。
有关构建应用程序的详细步骤,请观看构建双胞胎名人应用程序。
1. 设置离线管道
使用 ZenML,管道包含:
- 数据加载:从 Hugging Face 获取图像和标签(例如,“布拉德·皮特”)。
- 采样:减小数据集大小以加快处理速度,选择约 3,000 张图像。
- 嵌入生成:使用 MTCNN 进行人脸检测,使用 FaceNet 创建嵌入,将图像转换为嵌入。
- 在 Qdrant 中存储:将嵌入保存到名为
celebrities的集合中。
2. 创建在线应用程序
Streamlit 应用程序处理:
- 图像捕获:通过网络摄像头或上传文件拍摄自拍照。
- 嵌入查询:将嵌入发送到 Qdrant,检索最匹配的结果,并可视化相似性。
3. 部署选项
在 Google Cloud、AWS 或 Azure 等平台上部署应用程序。设置 CI/CD 管道可以简化更新和部署。
应用程序可以使用 Docker 进行容器化。对于托管,Google Cloud Run 是一个绝佳的选择,因为它能高效管理容器化应用程序,而无需进行大量的基础设施管理。
通过 Cloud Build 或 GitHub Actions 等 CI/CD 管道,部署过程得到进一步简化,这些管道可以自动化构建、测试和部署更新的步骤。
4. 测试嵌入的质量
您可以随时使用Qdrant 的可视化工具来精炼准确性并确保集群符合预期。

如果您的数据嵌入正确,那么可视化工具会将名人图像适当地聚类成组。
经验和收获
处理大型数据集(例如 20,000+ 张图像)时,可伸缩性带来了挑战。考虑量化等优化措施以减少内存使用,或预先计算聚类的平均嵌入,可以显著降低存储和计算成本。这些策略可确保系统在数据集增长时仍能保持高性能。
这项技术的潜在实际应用远不止娱乐。类似系统可用于安全应用中基于嵌入的人脸识别,以保障建筑物或设备的访问安全。
在医疗保健领域,它们可以辅助分析痣或皮肤纹理等特征。在零售领域,它们可以根据用户照片实现个性化推荐,展示了这种方法的通用性。
开发人员的后续步骤
首先克隆项目仓库以了解架构和功能。
扩充数据集,添加更多名人图像以增加多样性,或微调 FaceNet 模型以提高准确性。
考虑使用 Flutter 或 React Native 等框架部署移动友好版本,以提供无缝的用户体验。
为了实现可扩展性,实施多 GPU 设置以加速嵌入生成,并通过量化或平均嵌入等技术优化存储。
为了增强功能,探索诸如视频输入实现实时匹配或添加名人简介等元数据以丰富用户交互的功能。尝试自定义相似性评分以获得更个性化的结果。
更多链接
- Miguel 的领英个人资料
- Miguel 的Substack 博客
- The Neural Maze YouTube 频道
- 双胞胎名人 GitHub 仓库