使用 Qdrant 构建人脸识别系统
David Myriel
·December 03, 2024

名人双胞胎应用
在个性化时代,将前沿技术与乐趣相结合可以创建出与用户产生共鸣的引人入胜的应用。一个这样的项目是名人双胞胎应用,它是一款使用人脸识别嵌入和向量搜索由 Qdrant 提供支持的工具,用于根据人脸识别嵌入将用户与其名人长相相似者匹配。这篇博客文章深入探讨了想要构建此应用或类似应用的开发者的架构、工具和实用建议。
该名人双胞胎应用通过分析自拍照来识别用户与哪位名人相似。该应用使用了
- 人脸识别嵌入: 由基于 ResNet 的 FaceNet 模型生成。
- 向量相似性搜索: 由 Qdrant 提供支持,用于查找最相似的匹配。
- ZenML: 用于编排数据管道。
- Streamlit: 作为前端界面。
该项目不仅展示了现代向量数据库的功能,还为基于嵌入的应用提供了一个令人兴奋的介绍。
听应用创建者讲述
我们采访了这个项目背后的工程师,Miguel Otero Pedrido,他也是The Neural Maze的创始人。Miguel 详细解释了他是如何搭建这个应用的,以及他选择的工具。
事实证明,与他相似的名人是……Andy Samberg
架构
搜索引擎与数据库: Qdrant是一个高性能的向量数据库,它使用 Rust 构建,以其可靠性和速度而闻名。其高级功能,例如向量可视化和高效的查询,使其成为开发人员构建基于嵌入项目的首选。
ML 框架: ZenML使用模块化、云无关的框架简化了管道创建,确保了代码的整洁、可扩展性和可移植性,非常适合跨平台工作流。
人脸识别: MTCNN确保了人脸对齐的一致性,使得嵌入更加可靠。
嵌入模型: FaceNet提供了轻量级、预训练的人脸嵌入,平衡了准确性和效率,非常适合名人双胞胎应用等任务。
前端: Streamlit简化了 UI 开发,只需最少的努力即可实现快速原型设计,让开发人员能够专注于核心功能。
应用工作流
该应用分为两个阶段——离线阶段,其中名人图像被向量化,以及在线阶段,执行实时相似性搜索。
离线阶段
第一步是数据集准备。名人图像从 HuggingFace 的数据集库获取,作为嵌入的基础。
接下来——MTCNN对图像中的名人面部进行对齐。然后,使用预训练的FaceNet模型为每张图像生成 512 维的嵌入。这确保了面部特征表示的一致性和高质量。
最后,这些嵌入和元数据存储在Qdrant 云中。这使得数据能够高效检索和管理,以便后续使用。
在线阶段
在线阶段,用户交互始于一个 Streamlit 应用。该应用拍摄自拍照,并使用相同的 FaceNet 模型将其转换为嵌入。
然后,生成的嵌入会针对 Qdrant 进行查询,Qdrant 会根据相似性检索最相似的匹配项。
最后,结果会显示在一个直观的界面中,向用户展示他们最相似的名人匹配,使交互过程引人入胜且流畅。
如何构建应用
Miguel 最近在他的 YouTube 频道上发布了一个视频:The Neural Maze。
要了解构建应用的详细步骤,请观看构建名人双胞胎应用。
1. 设置离线管道
使用 ZenML,管道包括
- 数据加载: 从 Hugging Face 获取图像和标签(例如,“Brad Pitt”)。
- 采样: 减少数据集大小以加快处理速度,选择约 3,000 张图像。
- 嵌入生成: 使用 MTCNN 进行人脸检测,并使用 FaceNet 创建嵌入,将图像转换为嵌入。
- 在 Qdrant 中存储: 将嵌入保存到一个名为
celebrities
的集合中。
2. 创建在线应用
Streamlit 应用处理
- 图像捕获: 通过摄像头或上传的文件拍摄自拍照。
- 嵌入查询: 将嵌入发送到 Qdrant,检索最相似的匹配项,并可视化相似性。
3. 部署选项
将应用部署到诸如 Google Cloud、AWS 或 Azure 等平台。设置 CI/CD 管道可以简化更新和部署。
应用可以使用 Docker 进行容器化。对于托管, Google Cloud Run 是一个极佳的选择,因为它无需大量基础设施管理即可高效管理容器化应用。
使用 CI/CD 管道可以进一步简化部署过程,例如由 Cloud Build 或 GitHub Actions 提供的管道,它们自动化了构建、测试和部署更新的步骤。
4. 测试嵌入质量
你可以始终使用Qdrant 的可视化工具来优化准确性并确保聚类符合预期。
如果你的数据已正确嵌入,则可视化工具会将名人图像适当地聚类分组。
经验教训与总结
处理大型数据集(例如 20,000 多张图像)时,可扩展性带来了挑战。考虑进行优化,例如量化以减少内存使用,或者预计算聚类的平均嵌入,这可以显著降低存储和计算成本。这些策略可确保系统随着数据集增长保持高性能。
这项技术的潜在实际应用远远超出了娱乐领域。类似的系统可用于安全应用中的基于嵌入式的人脸识别,以保护建筑物或设备的访问安全。
在医疗保健中,它们可以帮助分析痣或皮肤纹理等特征。在零售中,它们可以根据用户照片提供个性化推荐,展示了这种方法的通用性。
开发者下一步
首先,克隆项目仓库以了解其架构和功能。
通过添加更多名人图像来扩展数据集以增加多样性,或微调 FaceNet 模型以提高准确性。
考虑使用诸如 Flutter 或 React Native 等框架部署移动端友好版本,以提供流畅的用户体验。
为了提高可扩展性,实施 多 GPU 设置 以加快嵌入生成速度,并使用量化或平均嵌入等技术优化存储。
为了增强功能,探索诸如 视频输入以实现实时匹配 或添加 元数据(例如名人简介) 等功能来丰富用户交互。尝试自定义相似性评分以获得更符合需求的结果。
更多链接
- Miguel 的LinkedIn 个人资料
- Miguel 的Substack 博客
- The Neural Maze YouTube 频道
- 名人双胞胎GitHub 仓库