扫描本地的图片以及视频,并且可以用自然语言进行查找。
在线Demo:https://chn-lee-yumi.github.io/MaterialSearchWebDemo/
- 文字搜图
- 以图搜图
- 文字搜视频(会给出符合描述的视频片段)
- 以图搜视频(通过视频截图搜索所在片段)
- 图文相似度计算(只是给出一个分数,用处不大)
B站视频教程:点击这里,求三连支持。
用户互助QQ群:1029566498(因作者精力有限,欢迎加群讨论,互相帮助。一言解惑,胜造七级浮屠;一念善行,自有千般福报。)
首先下载整合包(MaterialSearchWindows.7z或MaterialSearchWindowsLarge.7z),并使用 7-Zip 解压缩(注意:使用其它软件解压缩,可能会报错)。
下载方式:
- GitHub Release
- 夸克网盘
- 百度网盘 提取码: CHNL
解压后请阅读里面的使用说明.txt。整合包会自动选择独显或核显进行加速。
MaterialSearchWindows.7z整合包自带OFA-Sys/chinese-clip-vit-base-patch16模型。MaterialSearchWindowsLarge.7z整合包则是OFA-Sys/chinese-clip-vit-large-patch14-336px模型。
一般而言OFA-Sys/chinese-clip-vit-base-patch16模型已经足够日常使用,如果效果不佳并且显卡显存足够大(16G以上),可以尝试MaterialSearchWindowsLarge.7z整合包。
首先安装Python环境,然后下载本仓库代码。
注意,首次运行会自动下载模型。下载速度可能比较慢,请耐心等待。如果网络不好,模型可能会下载失败,这个时候重新执行程序即可。
- 首次使用前需要安装依赖:
pip install -U -r requirements.txt。Windows系统使用requirements_windows.txt,或双击install.bat。 - 启动程序:
python main.py,Windows系统可以双击run.bat。
如遇到requirements.txt版本依赖问题(比如某个库版本过新会导致运行报错),请提issue反馈,我会添加版本范围限制。
如果想使用"下载视频片段"的功能,需要安装ffmpeg。Windows系统可以运行install_ffmpeg.bat进行安装。
支持amd64和arm64,打包了默认模型(OFA-Sys/chinese-clip-vit-base-patch16)并且支持GPU(仅amd64架构的镜像支持)。
镜像地址:
- yumilee/materialsearch (DockerHub)
- registry.cn-hongkong.aliyuncs.com/chn-lee-yumi/materialsearch (阿里云,推荐中国大陆用户使用)
启动镜像前,你需要准备:
- 数据库的保存路径
- 你的扫描路径以及打算挂载到容器内的哪个路径
- 你可以通过修改
docker-compose.yml里面的environment和volumes来进行配置。 - 如果打算使用GPU,则需要取消注释
docker-compose.yml里面的对应部分
具体请参考docker-compose.yml,已经写了详细注释。
最后执行docker-compose up -d启动容器即可。
注意:
- 不推荐对容器设置内存限制,否则可能会出现奇怪的问题。比如这个issue。
- 容器默认设置了环境变量
TRANSFORMERS_OFFLINE=1,也就是说运行时不会连接huggingface检查模型版本。如果你想更换容器内默认的模型,需要修改.env覆盖该环境变量为TRANSFORMERS_OFFLINE=0。
所有配置都在config.py文件中,里面已经写了详细的注释。
建议通过环境变量或在项目根目录创建.env文件修改配置。如果没有配置对应的变量,则会使用config.py中的默认值。例如os.getenv('HOST', '127.0.0.1'),如果没有配置HOST变量,则HOST默认为127.0.0.1。
.env文件配置示例:
ASSETS_PATH=C:/Users/Administrator/Pictures,C:/Users/Administrator/Videos
SKIP_PATH=C:/Users/Administrator/AppData
ENABLE_FILE_WATCH=TrueENABLE_FILE_WATCH配置项可以启用实时文件监控功能。启用后,系统会自动监控指定目录下的文件变化:
- 新增文件:自动扫描并添加到数据库
- 修改文件:自动更新数据库中的记录
- 删除文件:自动从数据库中删除记录
- 移动文件:自动删除旧记录并添加新记录
这样可以避免每次文件变化后都需要手动重新扫描,保持数据库与实际文件同步。
注意事项:
- 文件监控会实时处理文件变化,可能会增加系统负载
- 如果文件变化频繁,建议适当增加批量处理延迟(默认2秒)
- 启用文件监控后,手动扫描仍然可用
如果你发现某些格式的图片或视频没有被扫描到,可以尝试在IMAGE_EXTENSIONS和VIDEO_EXTENSIONS增加对应的后缀。如果你发现一些支持的后缀没有被添加到代码中,欢迎提issue或pr增加。
小图片没被扫描到的话,可以调低IMAGE_MIN_WIDTH和IMAGE_MIN_HEIGHT重试。
如果想使用代理,可以添加http_proxy和https_proxy,如:
http_proxy=http://127.0.0.1:7070
https_proxy=http://127.0.0.1:7070注意:ASSETS_PATH不推荐设置为远程目录(如SMB/NFS),可能会导致扫描速度变慢。
如果想调整默认的搜索阈值,需要修改static/index.html文件的两行:
positive_threshold: 30,
negative_threshold: 30,
这两行分别是正向和反向搜索的阈值,默认都是30。可以根据需要进行调整。
如遇问题,请先仔细阅读本文档。如果找不到答案,请在issue中搜索是否有类似问题。如果没有,可以新开一个issue,详细说明你遇到的问题,加上你做过的尝试和思考,附上报错内容和截图,并说明你使用的系统(Windows/Linux/MacOS)和你的配置(配置在执行main.py的时候会打印出来)。
本人只负责本项目的功能、代码和文档等相关问题(例如功能不正常、代码报错、文档内容有误等)。运行环境问题请自行解决(例如:如何配置Python环境,无法使用GPU加速,如何安装ffmpeg等)。
本人做此项目纯属“为爱发电”(也就是说,其实本人并没有义务解答你的问题)。为了提高问题解决效率,请尽量在开issue时一次性提供尽可能多的信息。如问题已解决,请记得关闭issue。一个星期无人回复的issue会被关闭。如果在被回复前已自行解决问题,推荐留下解决步骤,赠人玫瑰,手有余香。
推荐使用amd64或arm64架构的CPU。内存最低2G,但推荐最少4G内存。如果照片数量很多,推荐增加更多内存。
测试环境:J3455,8G内存。全志H6,2G内存。
在 J3455 CPU 上,1秒钟可以进行大约31000次图片匹配或25000次视频帧匹配。
- 部分视频无法在网页上显示,原因是浏览器不支持这一类型的文件(例如svq3编码的视频)。
- 点击图片进行放大时,部分图片无法显示,原因是浏览器不支持这一类型的文件(例如tiff格式的图片)。小图可以正常显示,因为转换成缩略图的时候使用了浏览器支持的格式。大图使用的是原文件。
- 搜视频时,如果显示的视频太多且视频体积太大,电脑可能会卡,这是正常现象。建议搜索视频时不要超过12个。
欢迎提PR!不过为了避免无意义的劳动,建议先提issue讨论一下。
提PR前请确保代码已经格式化,并执行api_test.py确保所有测试都能通过。