机器学习(ML)组件是 Immich 架构中的一个独立服务,负责对媒体资产执行各种基于 AI 的分析。它提供包括人脸识别、对象检测、智能搜索和反向地理编码在内的功能,通过使照片和视频更易于搜索和发现来增强用户体验。
该服务使用 Python 和 FastAPI 构建,并支持多种硬件加速选项,以在不同的部署环境中实现最佳性能。
来源
机器学习组件作为一个独立的微服务运行,通过 HTTP API 调用与 Immich 主服务器通信。它异步处理任务,使主服务器能够继续处理用户请求,同时在后台执行密集的机器学习操作。
当新的媒体资产上传到 Immich 时,它们首先会进行基本元数据提取。然后,服务器通过 BullMQ 作业队列排队 ML 处理作业。机器学习组件接收这些作业,处理资产,并将结果返回给服务器,服务器随后将结果存储在 PostgreSQL 数据库中(向量数据使用 pgvecto.rs 存储)。
来源
人脸识别系统自动检测照片中的人脸,并将其分组为独特的身份。这使用户能够按人物浏览照片,并在其整个媒体库中找到特定的人。
该系统使用 InsightFace 库进行高精度人脸识别。
对象检测识别照片中的常见对象和场景,无需手动标记即可实现基于内容的搜索。用户可以搜索诸如“海滩”、“山脉”、“狗”等内容,并找到相关的图像。
CLIP(对比语言-图像预训练)模型支持基于自然语言的图像搜索。它创建图像的向量嵌入,可以通过文本描述进行查询,从而实现比标签或关键字更灵活、更直观的搜索功能。
反向地理编码通过将原始 GPS 坐标转换为有意义的位置名称(如城市、国家和兴趣点)来丰富照片的位置数据。
来源
来源
ML 组件支持多种硬件加速选项,以优化在不同平台上的性能
| 加速选项 | 目标硬件 | 描述 |
|---|---|---|
| CPU | 通用 x86/ARM 处理器 | 默认选项,适用于所有系统 |
| CUDA | NVIDIA GPU | 适用于配备 NVIDIA 显卡的系统 |
| OpenVINO | 英特尔 CPU/GPU/VPU | 适用于英特尔硬件(CPU、集成显卡、神经计算棒) |
| ROCm | AMD GPU | 适用于配备 AMD 显卡的系统 |
| ArmNN | ARM 处理器 | 针对基于 ARM 的设备进行优化 |
| RKNN | 瑞芯微处理器 | 适用于基于瑞芯微的设备 |
这些选项在容器部署期间进行配置,允许用户选择最符合其硬件的选项。
来源
ML 组件通过环境变量进行配置
| 可变 | 描述 | 默认 |
|---|---|---|
IMMICH_ML_DEVICE | 硬件加速设备 (cpu, cuda, openvino, rocm, armnn, rknn) | cpu |
IMMICH_ML_CLIP_MODEL | 用于智能搜索的 CLIP 模型 | ViT-B-32::openai |
IMMICH_ML_FACE_RECOG_MODEL | 人脸识别模型 | buffalo_l |
IMMICH_ML_WORKER_COUNT | 工作进程数量 | 根据 CPU 核心数自动检测 |
IMMICH_ML_CACHE_FOLDER | 缓存已下载模型的文件夹 | /cache |
特定的硬件加速选项可能具有额外的配置变量。例如,OpenVINO 支持可指定不同的设备(CPU、GPU、VPU)。
来源
ML 组件使用模型管理器按需下载、缓存和加载 ML 模型。模型从 Hugging Face 模型中心下载并本地缓存,以便更快地访问。
ML 服务公开了几个 RESTful API 端点,主 Immich 服务器可以调用这些端点
来源
来源
ML 组件依赖于多个 Python 库
fastapi: API 的 Web 框架huggingface-hub: 用于访问 ML 模型insightface: 人脸识别与分析opencv-python-headless: 图像处理pillow: 图像处理tokenizers: 用于 CLIP 的文本分词onnxruntime: ML 模型推理(支持各种特定硬件变体)来源
机器学习组件是 Immich 的关键组成部分,可实现高级搜索和发现功能。它旨在灵活且高性能,支持各种硬件加速选项以适应不同的部署环境。该组件与主服务器异步工作,提供 AI 驱动的功能,而不会影响用户界面的响应能力。