添加智能识别API

文本识别

基于PaddleOCR实现的文本识别(OCR)服务,由于封装的docker镜像较大,所以使用单独的容器来运行这部分服务。

当照片完成文本识别之后,可以通过搜索图片中的文字来找图片。

以文搜图

使用Chinese-CLIP(OpenAI CLIP模型的中文版本),提取图片的特征,然后使用文本来寻找相关的图片;

当CLIP识别任务完成之后,可以在搜索中通过一段文字来寻找图片。

搜索时可以使用具体的物品、场景等来搜索,比如:猫、森林、Excel表格;也可以加上描述,比如沙发上的猫、林间小路等;

视频演示

以文搜图和文本识别的使用效果请查看:

https://www.bilibili.com/video/BV1Fu4y1b7ds

代码仓库

注意: mt-photos-ai 最新的1.2.0版本,绑定的端口已从 8000 改为 8060,更新后请按教程修改容器的端口映射

相关代码已开源在 https://github.com/MT-Photos/mt-photos-ai

安装

如果您的NAS CPU性能较低,可以先使用性能更强的电脑运行智能识别API服务;

可以等完成第一次全量识别后,再切换回使用NAS上部署的智能识别API服务,智能识别API仅执行识别部分任务,识别的结果都会存储在MT Photos数据库中;

使用别的电脑运行API的方法

  • 1、性能更强的电脑安装智能识别API,比如Windows,可以按这个教程安装 Windows 添加智能识别API
  • 2、智能识别的api地址,填写 http://192.168.1.108:8060 (192.168.1.108为这台windows电脑的ip)
  • 3、等识别完成后,把智能识别的api地址改回nas上运行的mt-photos-ai服务的地址,用来识别后面新增照片

以文搜图功能,每次搜索时,都需要调用智能识别API服务,因此需要智能识别API服务一直处于运行中

文本识别结果的搜索,在识别完成后,不需要调用智能识别API服务;

一、使用图形化安装的教程

注意: mt-photos-ai 最新的1.2.0版本,绑定的端口已从 8000 改为 8060,更新后请按教程修改容器的端口映射

如果您使用的Nas,不在以下列表中,可以参考 群晖 的安装方法

二、使用命令行安装的教程

镜像说明 DockerHub镜像仓库地址: https://hub.docker.com/r/mtphotos/mt-photos-ai

镜像Tags说明:

  • latest:基于openvino文件夹打包,推荐Intel Xeon、Core系列 CPU机型安装这个镜像
  • onnx-latest:基于onnx文件夹打包,推荐其他CPU机型安装这个镜像
  • cuda-latest:基于cuda文件夹打包,nvidia显卡机型可以安装这个镜像
  • arm-latest:基于onnx文件夹打包,armv8架构机型可以安装这个镜像

latest 相较于onnx-latest,需要的内存更多,特别是文本识别时,AI容器的内存占用需要2-3G;

如果使用latest镜像过程中,容器占用的内存超过4G或者容器经常自动停止,请更换使用 onnx-latest 镜像运行;

1.下载镜像

默认镜像(latest)基于OpenVINO框架,在Intel Xeon、Core系列 CPU上的推理速度有加成

docker pull mtphotos/mt-photos-ai:latest

如果您的CPU不在OpenVINO的支持列表中或者是AMD CPU,请下载onnx-latest标签的镜像;

docker pull mtphotos/mt-photos-ai:onnx-latest

armv8架构机型请下载arm-latest镜像

docker pull mtphotos/mt-photos-ai:arm-latest

看不懂命令行?

5分钟了解Docker:https://mtmt.tech/docs/example/intro

CUDA版本镜像

由于镜像较大,上传dockerhub一直失败,因此只上传了阿里云的ACR仓库;

CUDA 版本 12.3.0 以上,显卡驱动版本 >=545.23.06

cuda-latest 镜像未更新1.2.0版本,内部端口还是8000,还是使用 -p 8060:8000

#下载镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:cuda-latest
docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:cuda-latest mtphotos/mt-photos-ai:cuda-latest

#启动容器:
docker run --gpus all -i -p 8060:8000 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-ai mtphotos/mt-photos-ai:cuda-latest

镜像加速

提示:当无法访问DockerHub时,请使用以下命令拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:latest
docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:latest mtphotos/mt-photos-ai:latest

onnx-latest

docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest
docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest mtphotos/mt-photos-ai:onnx-latest

arm-latest

docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:arm-latest
docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:arm-latest mtphotos/mt-photos-ai:arm-latest

第1条命令为拉取镜像

第2条命令为将镜像标记为Docker hub源,这样可以在图形化创建容器时使用

2. 创建容器

docker run -i -p 8060:8060 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-ai mtphotos/mt-photos-ai:latest

说明

  • -p 8060:8060 端口映射,访问容器的端口
  • -e API_AUTH_KEY=mt_photos_ai_extra 环境变量API_AUTH_KEY是容器内部用来验证请求来源的,请记得修改API_AUTH_KEY
    • API_AUTH_KEY的值可以是一段字符串,比如051C78C4D217DB28
    • 在MT Photos后台添加API时需要填入这个API_AUTH_KEY
  • mt-photos-ai容器不需要映射目录

3、返回MT Photos添加智能识别api

接口地址 填写 http://[nas的ip]:8060

API_AUTH_KEY 填写 mt_photos_ai_extra (这是默认值,如果上一步有修改过,用修改过的值)

添加智能识别api

使用docker-compose创建MT Photos 和 AI 容器

docker-compose.yaml 模板文件:

version: "3"

services:
  mtphotos:
    image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest
    container_name: mtphotos
    restart: always
    ports:
      - 8063:8063
    volumes:
      - /volume1/docker/mt_photos/config:/config
      - /volume1/photos/mt_photos_upload:/upload
      - /volume1/xxx/其他需要映射的目录:/photos
    environment:
      - TZ=Asia/Shanghai
      - LANG=C.UTF-8
      - PUID=1000
      - PGID=100
    depends_on:
      - mtphotos_ai
  mtphotos_ai:
    image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest
    container_name: mtphotos_ai
    restart: always
    ports:
      - 8060:8060
    environment:
      - API_AUTH_KEY=mt_photos_ai_extra

如果使用yaml同时部署 mtphotosmtphotos_ai,在MT Photos后台添加智能识别API时, 接口地址可以填写 http://mtphotos_ai:8060

如果使用yaml单独部署mtphotos_ai,在MT Photos后台添加智能识别API时, 接口地址需要填写 http://nap的ip:8060 ,因为2个容器之间网络没有连接

yaml语法三大规则

规则一:缩进

yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。一定不能使用tab键

规则二:冒号
services:
image: mtphotos/mt-photos:latest

每个冒号后面一定要有一个空格(以冒号结尾不需要空格)

规则三:短横线

想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

environment:
  - TZ=Asia/Shanghai
  - LANG=C.UTF-8
  - PUID=1000
  - PGID=100

# 升级后,数据库不支持向量的解决方法

由于CLIP模型识别的结果是向量数据,因此需要更新数据库组件才能存储这类数据;

Windows服务端

  1. Windows服务端下载这个更新补丁:https://cdn.mtmt.tech/MT%20Photos%20Server_pg_vector_patch1.exe
  2. 退出MT Photos服务端(在Windows系统托盘中,右键MT Photos然后点击退出)
  3. 双击更新补丁,覆盖安装原来的目录
  4. 启动MT Photos服务端

Docker服务端

  • 如果使用的容器内置的数据库,更新docker镜像至最新版,然后更新容器;
  • 如果连接的是外部数据库,需要将数据库的镜像修改为 mtphotos/mt-photos-pg:latest 来支持向量的存储

各NAS系统更新Docker容器的方法

UNRAID

在Docker容器列表,点击MT Photos容器的【应用更新】;

如果没有更新按钮,点击Docker容器列表右上角的【基本视图】,切换到高级视图后,容器的版本那一列出现了【强制更新】按钮,点击强制更新按钮;

群晖

  1. 打开Docker的注册表,搜索mtphotos/mt-photos,选中搜索结果后下载,弹窗中选择latest开始下最新版本的镜像;
  2. 等待镜像下载完成;
  3. 将mt-photos的镜像先停止,然后右键容器,然后点击【操作】=>【重置】;
  4. 等待容器容器重置完成后,启动容器;
  5. 注意:1、在DSM6.x版本中【重置】按钮为【清除】;2、请确认容器是基于latest标签创建的,其他标签是不会更新的;

Portainer

  1. 在Containers中点击容器的名称打开Container details
  2. 点击顶部的Recreate按钮;
  3. 打开Pull latest images;
  4. 点击Recreate

其他系统

  1. 更新镜像 docker pull mtphotos/mt-photos:latest
  2. 删除旧容器

    注意:只需要删除容器,不要删除映射的文件夹

  3. 创建新的容器

Copyright © 2023 杭州相册家科技有限公司 All Rights Reserved

浙公网安备 33019202000625号浙ICP备2022014580号