AI语义搜索神器MaterialSearch:开源免费的本地素材管理利器
本文将为您详细介绍一款名为MaterialSearch的实用工具。它的核心功能是利用AI进行语义搜索,帮助您高效管理本地存储的图片和视频素材。具体而言,它支持通过文字搜索图片、以图搜图、查找本地文件,甚至可以根据文字描述匹配视频中的特定画面,或通过截图定位视频片段,功能相当全面。
这款工具不仅开源免费,而且经过实际测试,其效果确实令人满意。

在部署方面,它提供了极大的灵活性。您可以通过Docker容器化部署,项目作者已经为ARM和X86两种主流CPU架构提供了对应的支持镜像。此外,如果您更习惯使用Windows系统,也有现成的整合包可供选择。当然,动手能力强的用户也可以选择通过源代码进行编译和部署。
硬件要求
推荐使用基于amd64或arm64架构的处理器。虽然最低只需要2GB内存即可运行,但为了获得更好的体验,建议至少配备4GB内存。如果您需要处理的照片或视频数量非常庞大,那么增加更多内存会显著提升性能。
根据项目作者的测试,在J3455处理器搭配8GB内存,以及全志H6处理器搭配2GB内存的环境下,工具均能稳定运行。
搜索速度
性能表现是这类工具的关键。根据官方提供的数据,在J3455这款处理器上,MaterialSearch每秒能够执行大约31,000次图片匹配操作,或者完成约25,000次视频帧的匹配计算,速度相当可观。
项目Issue中的用户评价
我们可以从项目的GitHub讨论区摘取一些真实的用户反馈,这有助于了解它的实际应用场景:
“大佬晚上好,您的项目对我帮助很大,非常感谢。近一年来,中国个人NAS市场竞争白热化,各类厂商纷纷入局。对于我们这种小型新媒体工作室而言,NAS是管理海量素材的最佳选择。
面对几十甚至上百TB的素材库,在分类管理和寻找特定素材方面,这个项目提供了独一无二的解决方案。它是一个能充分发挥小型公司或新媒体工作室商业壁垒的效率工具。我认为它极有潜力成为未来NAS设备上的标配文件管理工具,对于小型新媒体工作室、摄影师、摄像师等从业者圈子来说,这类管理工具的需求非常迫切。
举个例子:为了找到一个‘数年前航拍的、一个戴草帽、穿奶龙图案裙子、躺在草地上的女人’的10秒视频片段,我可能要在自己的素材库里翻到崩溃。但用了这个工具,只需要一秒就能定位。”
在撰写本文前,笔者也亲自尝试了作者搭建的在线演示版本,其搜索效果确实出色,因此决定将其推荐给更多有需要的朋友。
或许会有读者提出疑问:现在许多品牌NAS不也内置了AI搜索功能吗?比如威联通NAS的Qsirch应用,其体验已经相当不错。

尽管Qsirch的Beta版本甚至最新加入了大语言模型的支持,但这并不妨碍我们去尝试和体验第三方开源方案,进行一番横向比较总是有益的。

部署流程
下面以威联通NAS中用户基数可能较大的TS-464C型号为例,演示如何通过Docker Compose的方式部署MaterialSearch。
首先,这里提供一份基础的部署配置文件代码。但请先不要直接复制使用,建议继续阅读后续的注意事项和调整步骤。
version: "3"# 最新版Docker Compose可删除此行
services:
MaterialSearch:
image: yumilee/materialsearch:latest # 支持amd64和arm64架构。
# image: registry.cn-hongkong.aliyuncs.com/chn-lee-yumi/materialsearch:latest # 托管在阿里云的镜像,支持amd64和arm64。若无法访问DockerHub,可使用此镜像。
# image: registry.cn-guangzhou.aliyuncs.com/chn-lee-yumi/materialsearch:latest # 仅支持amd64架构的备份镜像。此镜像可能非最新版,不推荐使用。
restart: always
ports:
- "8085:8085" # 将容器的8085端口映射到宿主机的8085端口(宿主机端口:容器端口),左侧端口号可自定义
environment: # 通过环境变量修改配置,请注意下面填写的路径是容器内的路径,而非宿主机路径
- ASSETS_PATH=/picture,/video # 与下方volumes挂载路径对应
- SKIP_PATH=/tmp
#- DEVICE=cuda # 如需使用GPU加速,请取消此注释
volumes:
- /share/Container/MaterialSearch/db:/MaterialSearch/instance/ # 数据库存储路径,请自定义
- /share/Phone/picture:/picture # 最后这两行与上方ASSETS_PATH对应,冒号左侧是您NAS上的实际素材路径
- /share/Phone/video:/video
# 如果打算使用GPU进行加速,请取消注释以下内容,并同时取消上方environment中的DEVICE=cuda注释
# 取消注释后,请注意YAML格式的对齐!
#deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [ gpu ]
在部署之前,请务必根据您的个人需求对上述配置进行修改。
重要提示:该Docker镜像支持amd64和arm64架构,并已预置了默认的AI模型(OFA-Sys/chinese-clip-vit-base-patch16)。同时,amd64架构的镜像还支持GPU加速(需要NVIDIA显卡及驱动)。
不建议对运行此应用的容器设置内存限制,否则可能引发未知问题。
容器默认设置了环境变量
TRANSFORMERS_OFFLINE=1,这意味着运行时不会连接Hugging Face服务器检查模型更新。如果您想更换容器内的默认模型,需要创建.env文件并覆盖此环境变量为TRANSFORMERS_OFFLINE=0。
其他相关的配置说明,可以参照项目文档中的截图(此处引用原图):

确认配置无误后,即可在威联通的Container Station中创建新的应用程序。

由于Docker镜像内包含了AI模型,所以镜像体积较大,首次拉取时需要耐心等待。
部署完成后,理论上应该可以通过访问NAS_IP:8085来打开Web界面,但实际操作中可能无法连接。通过查看容器日志发现,服务默认绑定在了127.0.0.1这个本地回环地址上。我们需要让它绑定到0.0.0.0,以便接受来自任何IP地址的访问请求。

如何解决呢?关键在于在环境变量中指定HOST=0.0.0.0。以下是经过调整后,在威联通NAS上可用的最终部署配置,您可以直接参考:
services:
MaterialSearch:
image: yumilee/materialsearch:latest
restart: always
ports:
- "8133:8085" # 此处将外部访问端口改为了8133,您可按需修改
environment:
- HOST=0.0.0.0 # 关键设置,使服务监听所有网络接口
- ASSETS_PATH=/picture,/video
- SKIP_PATH=/tmp
volumes:
- /share/Phone/picture:/picture
- /share/Phone/video:/video
- /srv/MaterialSearch/db:/MaterialSearch/instance/ # 数据库路径示例
使用一览
这里进行一个简单的功能演示。我事先在素材目录中放置了五六张测试图片。

服务启动并打开Web界面后,首先需要对指定的素材目录进行一次全量扫描。扫描完成后,界面会以绿色框体的形式清晰地展示出已识别的图片数量、视频数量以及从视频中提取出的关键帧数量。

扫描进程结束后,强大的AI语义搜索功能就可以正式使用了。

最后
总体而言,MaterialSearch是一个完成度非常高且极具实用价值的开源项目。如果您觉得它对您有帮助,不妨前往其GitHub仓库,为开发者点上一个Star以示支持。