添加智能识别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
- API_AUTH_KEY的值可以是一段字符串,比如
- mt-photos-ai容器不需要映射目录
3、返回MT Photos添加智能识别api
接口地址 填写 http://[nas的ip]:8060
API_AUTH_KEY 填写 mt_photos_ai_extra (这是默认值,如果上一步有修改过,用修改过的值)
使用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同时部署
mtphotos
和mtphotos_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服务端
- Windows服务端下载这个更新补丁:https://cdn.mtmt.tech/MT%20Photos%20Server_pg_vector_patch1.exe
- 退出MT Photos服务端(在Windows系统托盘中,右键MT Photos然后点击退出)
- 双击更新补丁,覆盖安装原来的目录
- 启动MT Photos服务端
Docker服务端
- 如果使用的容器内置的数据库,更新docker镜像至最新版,然后更新容器;
- 如果连接的是外部数据库,需要将数据库的镜像修改为 mtphotos/mt-photos-pg:latest 来支持向量的存储
- pgvector相关介绍: https://github.com/pgvector/pgvector
各NAS系统更新Docker容器的方法
UNRAID
在Docker容器列表,点击MT Photos容器的【应用更新】;
如果没有更新按钮,点击Docker容器列表右上角的【基本视图】,切换到高级视图后,容器的版本那一列出现了【强制更新】按钮,点击强制更新按钮;
群晖
- 打开Docker的注册表,搜索mtphotos/mt-photos,选中搜索结果后下载,弹窗中选择latest开始下最新版本的镜像;
- 等待镜像下载完成;
- 将mt-photos的镜像先停止,然后右键容器,然后点击【操作】=>【重置】;
- 等待容器容器重置完成后,启动容器;
- 注意:1、在DSM6.x版本中【重置】按钮为【清除】;2、请确认容器是基于latest标签创建的,其他标签是不会更新的;
Portainer
- 在Containers中点击容器的名称打开Container details
- 点击顶部的Recreate按钮;
- 打开Pull latest images;
- 点击Recreate
其他系统
- 更新镜像
docker pull mtphotos/mt-photos:latest
- 删除旧容器
注意:只需要删除容器,不要删除映射的文件夹
- 创建新的容器