Giter VIP home page Giter VIP logo

hakimyu / materialsearch Goto Github PK

View Code? Open in Web Editor NEW

This project forked from chn-lee-yumi/materialsearch

0.0 0.0 0.0 1.96 MB

AI语义搜索本地素材。以图搜图、查找本地素材、根据文字描述匹配画面、视频帧搜索、根据画面描述搜索视频。Semantic search. Search local photos and videos through natural language.

Home Page: https://material-search.vercel.app

License: GNU General Public License v3.0

JavaScript 1.13% Python 58.44% HTML 39.63% Batchfile 0.22% Dockerfile 0.58%

materialsearch's Introduction

MaterialSearch 本地素材搜索

中文 | English

扫描本地的图片以及视频,并且可以用自然语言进行查找。

功能

  • 文字搜图
  • 以图搜图
  • 文字搜视频(会给出符合描述的视频片段)
  • 以图搜视频(通过视频截图搜索所在片段)
  • 图文相似度计算(只是给出一个分数,用处不大)
  • pexels视频搜索

部署说明

通过源码部署

首先安装Python环境,然后下载本仓库代码。

注意,首次运行会自动下载模型。下载速度可能比较慢,请耐心等待。如果网络不好,模型可能会下载失败,这个时候重新执行程序即可。

  1. 首次使用前需要安装依赖:pip install -U -r requirements.txt,Windows系统可以双击install.bat(NVIDIA GPU加速)或install_cpu.bat(纯CPU)。
  2. 如果你打算使用GPU加速,则执行基准测试判断是CPU快还是GPU快:python benchmark.py,Windows系统可以双击benchmark.bat。GPU不一定比CPU快,在我的Mac上CPU更快。
  3. 如果不是CPU最快,则修改配置中的DEVICE,改为对应设备(配置修改方法请参考后面的配置说明)。
  4. 启动程序:python main.py,Windows系统可以双击run.bat

如遇到requirements.txt版本依赖问题(比如某个库版本过新会导致运行报错),请提issue反馈,我会添加版本范围限制。

如遇到硬件支持但无法使用GPU加速的情况,请根据PyTorch文档更新torch版本。

如果想使用"下载视频片段"的功能,需要安装ffmpeg。如果是Windows系统,记得把ffmpeg.exe所在目录加入环境变量PATH,可以参考:Bing搜索

通过Docker部署

目前只有一个Docker镜像,支持amd64arm64,打包了默认模型(OFA-Sys/chinese-clip-vit-base-patch16)并且支持GPU(仅amd64架构的镜像支持)。 如有更多需求欢迎提issue。

启动镜像前,你需要准备:

  1. 数据库的保存路径
  2. 你的扫描路径以及打算挂载到容器内的哪个路径
  3. 你可以通过修改docker-compose.yml里面的environmentvolumes来进行配置。
  4. 如果打算使用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', '0.0.0.0'),如果没有配置HOST变量,则HOST默认为0.0.0.0

.env文件配置示例:

ASSETS_PATH=C:/Users/Administrator/Pictures,C:/Users/Administrator/Videos
DEVICE=cuda

目前功能仍在迭代中,配置会经常变化。如果更新版本后发现无法启动,需要参考最新的配置文件手动改一下配置。

如果你发现某些格式的图片或视频没有被扫描到,可以尝试在IMAGE_EXTENSIONSVIDEO_EXTENSIONS增加对应的后缀。如果你发现一些支持的后缀没有被添加到代码中,欢迎提issue或pr增加。

小图片没被扫描到的话,可以调低IMAGE_MIN_WIDTHIMAGE_MIN_HEIGHT重试。

如果想使用代理,可以添加http_proxyhttps_proxy,如:

http_proxy=http://127.0.0.1:7070
https_proxy=http://127.0.0.1:7070

pexels视频搜索功能说明

测试功能。首先下载pexels的sitemap,目前总共有10个,测试的话下最后一个就可以了:video-sitemap10.xml.gz

下载完成后解压,然后修改process_pexels.pyvideo_sitemap_xml,将路径改为你的sitemap文件所在路径。

最后执行process_pexels.py即可。

后续或许会提供处理好的数据。

问题解答

如遇问题,请先仔细阅读本文档。如果找不到答案,请在issue中搜索是否有类似问题。如果没有,可以新开一个issue,详细说明你遇到的问题,加上你做过的尝试和思考,附上报错内容和截图,并说明你使用的系统(Windows/Linux/MacOS)和你的配置(配置在执行main.py的时候会打印出来)

本人只负责本项目的功能、代码和文档等相关问题(例如功能不正常、代码报错、文档内容有误等)。运行环境问题请自行解决(例如:如何配置Python环境,无法使用GPU加速,如何安装ffmpeg等)。

本人做此项目纯属“为爱发电”(也就是说,其实本人并没有义务解答你的问题)。为了提高问题解决效率,请尽量在开issue时一次性提供尽可能多的信息。如问题已解决,请记得关闭issue。一个星期无人回复的issue会被关闭。如果在被回复前已自行解决问题,推荐留下解决步骤,赠人玫瑰,手有余香。

硬件要求

推荐使用amd64arm64架构的CPU。内存最低2G,但推荐最少4G内存。如果照片数量很多,推荐增加更多内存。

测试环境:J3455,8G内存。全志H6,2G内存。

如果使用AMD的GPU,仅支持在Linux下使用GPU加速。请参考:PyTorch文档

搜索速度

匹配阈值为0的情况下,在 J3455 CPU 上,1秒钟可以进行大约18000次图片匹配或5200次视频帧匹配。

调高匹配阈值可以提高搜索速度。匹配阈值为10的情况下,在 J3455 CPU 上,1秒钟可以进行大约30000次图片匹配或6100次视频帧匹配。

已知问题

  1. 部分图片和视频无法在网页上显示,原因是浏览器不支持这一类型的文件(例如tiff文件,svq3编码的视频等)。
  2. 搜视频时,如果显示的视频太多且视频体积太大,电脑可能会卡,这是正常现象。建议搜索视频时不要超过12个。

关于PR

欢迎提PR!不过为了避免无意义的劳动,建议先提issue讨论一下。

提PR前请确保代码已经格式化。

materialsearch's People

Contributors

chn-lee-yumi avatar dependabot[bot] avatar oiuv avatar cccxp avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.