向量数据库:usearch的简单使用+实现图片检索应用

usearch的简单使用

  • usearch是快速开源搜索和聚类引擎×,用于C++、C、Python、JavaScript、Rust、Java、Objective-C、Swift、C#、GoLang和Wolfram 🔍中的向量和🔜字符串×
// https://github.com/unum-cloud/usearch/blob/main/python/README.md
$ pip install usearch
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting usearchDownloading https://pypi.tuna.tsinghua.edu.cn/packages/ba/f4/24124f65ea3e940e54af29d55204ddfbeafa86d6b94b63c2e99baff2f7d6/usearch-2.8.14-cp38-cp38-manylinux_2_28_x86_64.whl (1.5 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 17.0 MB/s eta 0:00:00
Requirement already satisfied: numpy in /home/ubuntu/anaconda3/envs/vglm2/lib/python3.8/site-packages (from usearch) (1.23.1)
Requirement already satisfied: tqdm in /home/ubuntu/anaconda3/envs/vglm2/lib/python3.8/site-packages (from usearch) (4.66.1)
Installing collected packages: usearch
Successfully installed usearch-2.8.14
  • 一个简单的例子(注:本例子在运行时向index中不断添加项目,并将最后的index持久化为一个文件,在运行时由于添加项目内存占用会不断增加)
import numpy as np
from usearch.index import Index, MetricKind, Matchesndim = 131072
index_path =  "test.usearch"index = Index(ndim=ndim, # Define the number of dimensions in input vectorsmetric='cos', # Choose 'l2sq', 'haversine' or other metric, default = 'ip'dtype='f32', # Quantize to 'f16' or 'i8' if needed, default = 'f32'connectivity=16, # How frequent should the connections in the graph be, optionalexpansion_add=128, # Control the recall of indexing, optionalexpansion_search=64, # Control the quality of search, optional
)# index = Index(ndim=ndim, metric=MetricKind.Cos)for i in range(1,10):vector =  np.random.random((1000, ndim)).astype('float32')index.add(None, vector, log=True)index.save(index_path)
vector =  np.random.random((1, ndim)).astype('float32')
matches: Matches = index.search(vector, 10)
ids = matches.keys.flatten()print(matches)# test.usearch大小: 10*1000*131072 =>2.2G  (如果dtype='f32'=>4G+)

usearch-images

  • https://github.com/ashvardanian/usearch-images

运行效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据获取

  • https://huggingface.co/datasets/unum-cloud/ann-unsplash-25k/tree/main
    在这里插入图片描述

在这里插入图片描述

依赖 ucall

  • Requires: Python >=3.9
  • https://pypi.org/project/ucall/#files
    在这里插入图片描述

OSError: [Errno 28] inotify watch limit reached

  File "/home/ubuntu/anaconda3/envs/usearch/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 428, in _raise_errorraise OSError(errno.ENOSPC, "inotify watch limit reached")
OSError: [Errno 28] inotify watch limit reached

这个错误表明在使用 watchdog 库时超过了 Linux 系统对 inotify 监视的文件数或目录数的限制。Linux 对于每个进程的 inotify 能够监视的文件和目录有一个限制,当达到这个限制时,会出现像上面的错误一样的问题。可以尝试增加系统对 inotify 的资源限制。可以通过修改 /etc/sysctl.conf 文件来增加 fs.inotify.max_user_watches 参数的值。例如:

```bash
sudo sysctl -w fs.inotify.max_user_watches=65536
```然后,运行下面的命令使更改生效:```bash
sudo sysctl -p
```

注意:增加监视数可能会对系统资源产生一些影响,因此请根据实际情况慎重调整。

模型加载

在这里插入图片描述

  • https://huggingface.co/unum-cloud/uform-vl-multilingual-v2/tree/main
    在这里插入图片描述
///home/ubuntu/anaconda3/envs/usearch/lib/python3.10/site-packages/uform/__init__.py
def get_checkpoint(model_name, token) -> Tuple[str, Mapping, str]:model_path = snapshot_download(repo_id=model_name, token=token)config_path = f"{model_path}/torch_config.json"state = torch.load(f"{model_path}/torch_weight.pt")return config_path, state, f"{model_path}/tokenizer.json"def get_model(model_name: str, token: Optional[str] = None) -> VLM:config_path, state, tokenizer_path = get_checkpoint(model_name, token)with open(config_path, "r") as f:model = VLM(load(f), tokenizer_path)model.image_encoder.load_state_dict(state["image_encoder"])model.text_encoder.load_state_dict(state["text_encoder"])return model.eval()
  • 修改成如下,调用时使用_model = get_model("你的下载路径")
def get_checkpoint(model_name, token) -> Tuple[str, Mapping, str]:model_path = model_name#snapshot_download(repo_id=model_name, token=token)config_path = f"{model_path}/torch_config.json"state = torch.load(f"{model_path}/torch_weight.pt")return config_path, state, f"{model_path}/tokenizer.json"def get_model(model_name: str, token: Optional[str] = None) -> VLM:config_path, state, tokenizer_path = get_checkpoint(model_name, token)with open(config_path, "r") as f:model = VLM(load(f), tokenizer_path)model.image_encoder.load_state_dict(state["image_encoder"])model.text_encoder.load_state_dict(state["text_encoder"])return model.eval()

其他细微的修改

数据源的修改
_datasets = {name: _open_dataset(os.path.join("/home/ubuntu/userfile/***/Usearch/usearch-images-main/data", name))for name in ("unsplash-25k",# "cc-3m",# "laion-4m",)
}
dataset_names: str = st.multiselect("Datasets",[dataset_unsplash_name,# dataset_cc_name,# dataset_laion_name,],[dataset_unsplash_name],#, dataset_cc_name],format_func=lambda x: x.split(":")[0],
)
  • 也可下载cc-3m数据:
    在这里插入图片描述
数据读取的修改
    # uris: Strs = File(os.path.join(dir, "images.txt")).splitlines()file_path = os.path.join(dir, "images.txt")with open(file_path, 'r') as file:uris = file.read().splitlines()

CG

  • “usearch” 通常指的是一个生物信息学工具,用于对DNA和蛋白质序列进行搜索和比对。具体来说,它是由Qiime软件包提供的一个用于序列分析的工具,主要用于对微生物群落的高通量测序数据进行处理和分析。Qiime(Quantitative Insights Into Microbial Ecology)是一个用于分析和解释微生物群落结构的开源软件包。在Qiime中,usearch被用于处理和比对DNA序列,以便进行物种注释、多样性分析等。USEARCH —— 最简单易学的扩增子分析流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/233234.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C#]使用sdcb.paddleocr部署v4版本ocr识别模型

【官方框架地址】 https://github.com/sdcb/PaddleSharp 【算法介绍】 PaddleOCR,全称为PaddlePaddle OCR,是PaddlePaddle深度学习平台下的一款强大的光学字符识别工具。它利用深度学习技术,实现了高精度的文字识别,可以帮助用户…

生态系统服务构建生态安全格局中的实践技术应用

生态安全是指生态系统的健康和完整情况。生态安全的内涵可以归纳为:一,保持生态系统活力和内外部组分、结构的稳定与持续性;二,维持生态系统生态功能的完整性;三,面临外来不利因素时,生态系统具…

window使用cpolar实现内网穿透

文章目录 cpolar下载和安装启动和配置cpolar卸载 cpolar下载和安装 进入spolar官网,完成注册,下载相应的cploar版本解压和运行安装文件 配置安装路径,然后选择next,完成即可 启动和配置 点击首页的快捷图标打开网页&#xf…

分布式系统架构设计之分布式消息队列基础知识

随着微服务、大数据和云计算的普及,分布式系统已经成为现代软件架构的核心。在分布式系统中,各个组件间的通信和数据交换尤其重要,而消息队列正是实现这一目标的关键技术之一。 在分布式架构设计过程中,架构师们需要对消息队列有…

StarRocks 在小红书自助分析场景的应用与实践

作者:小红书 OLAP 研发负责人 王成 近两年 StarRocks 一直是小红书 OLAP 引擎体系里非常重要的部分,过去一年,小红书的 StarRocks 使用规模呈现出翻倍的增长速度,目前整体规模已经达到 30 个集群,CPU 规模已经达到了 3…

Redis——centos7环境安装Redis6.2.14版本,make命令编译时报错:jemalloc/jemalloc.h:没有那个文件或目录

一、报错原因 在redis-6.2.14文件夹下有一个README.md文件,有如下一段话: 在构建 Redis 时,通过设置 MALLOC 环境变量来选择非默认的内存分配器。Redis 默认编译并链接到 libc malloc,但在 Linux 系统上,jemalloc 是…

图像分割-Grabcut法(C#)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-Grabcut法-CSDN博客 GrabCut是一种基于图像分割的技术,它可以用于将图像中的…

Python | 基于Mediapipe框架的手势识别系统

一、项目要求 1、题目 本题着力于解决会商演示系统中的非接触式人机交互问题,具体而言,其核心问题就是通过计算机视觉技术实现对基于视频流的手势动作进行实时检测和识别。通过摄像头采集并识别控制者连续的手势动作,完成包括点击、平移、缩放…

小白入门基础 - Restful

一:REST与RESTful: REST:表现层状态转移,资源在网络中以某种形式进行状态转移。 RESTful是基于REST理念的一套开发风格,是具体的开发规则。 服务器端只返回数据,以json或者xml的格式。 RESTful开发规范&a…

【大数据】Spark学习笔记

初识Spark Spark和Hadoop HadoopSpark起源时间20052009起源地MapReduceUniversity of California Berkeley数据处理引擎BatchBatch编程模型MapReduceResilient distributed Datesets内存管理Disk BasedJVM Managed延迟高中吞吐量中高优化机制手动手动APILow levelhigh level流…

MySQL之视图外连接、内连接和子查询的使用

目录 一、视图 1.1 含义 1.2 操作 1.3 SQL数据 二、连接查询案例 (1)查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 (2)查询同时存在" 01 "课程和" 02 "课程的情况 &a…

docker安裝gocd-server,并配置gitlab授权登录

gocd的地址:Installing GoCD server on Windows | GoCD User Documentation gocd文档:GitHub - gocd/docker-gocd-server: Docker server image for GoCD 一、docker拉取gocd镜像 #拉取server镜像 docker pull gocd/gocd-server:v21.1.0docker pull g…

java SSM水质历史数据可视化设计myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM水质历史数据可视化设计是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

QT常用控件使用及布局

QT常用控件使用及布局 文章目录 QT常用控件使用及布局1、创建带Ui的工程2、ui界面介绍1、界面设计区2、对象监视区3、对象监属性编辑区4、信号与槽5、布局器6、控件1、Layouts1、布局管理器2、布局的dome 2、Spacers3、Buttons4、项目视图组(Item Views)5、项目控件组(Item Wid…

“数据要素×”正式来袭|美创“全栈能力、深入场景”保障数据价值安全释放

千呼万唤,1月4日,国家数据局等17部门联合印发的《“数据要素”三年行动计划(2024—2026年)》(下称《三年行动计划》)正式发布! 作为国家数据局成立以来公开发布的首个重磅文件,《三年…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中使用Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查…

uniapp获取手机当前信息及应用版本

appVersion 是app端查询的数据信息 appWgtVersion 是浏览器端查询的数据信息 onLoad() {const systemInfo uni.getSystemInfoSync();console.log(systemInfo);// #ifdef H5const uniAppVersion systemInfo.appVersion;// #endif// #ifndef H5const uniAppVersion systemIn…

案例分享:Qt多国语言输入法软键盘

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135346374 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

vue-springboot基于java的实验室安全考试系统

本系统为用户而设计制作实验室安全考试系统,旨在实现实验室安全考试智能化、现代化管理。本实验室安全考试管理自动化系统的开发和研制的最终目的是将实验室安全考试的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提供更多的…

模板管理支持批量操作,DataEase开源数据可视化分析平台v2.2.0发布

2024年1月8日,DataEase开源数据可视化分析平台正式发布v2.2.0版本。 这一版本的功能升级包括:在“模板管理”页面中,用户可以通过模板管理的批量操作功能,对已有模板进行快速重新分类、删除等维护操作;数据大屏中&…