图像识别快速实现

文本的跑通了,接下来玩玩图片场景

1. 引入模型

再另起类test_qdrant_img.py,转化图片用到的模型和文本不太一样,我们这里使用ResNet-50模型

import unittest
from qdrant_client.http.models import Distance, VectorParams
from qdrant_client import QdrantClient
import torch
import torchvision.transforms as transforms
from PIL import Imageclass TestQDrantImg(unittest.TestCase):def setUp(self):self.collection_name = "img_collection"self.client = QdrantClient("localhost", port=6333)# 加载ResNet-50模型self.model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet50', pretrained=True)self.model.eval()# 图像预处理self.preprocess = transforms.Compose([# 图像调整为256*256transforms.Resize(256), # 中心裁剪为224*224transforms.CenterCrop(224), # 转换为张量,像素值从范围[0,255]缩放到范围[0,1],RGB(红绿蓝)转换为通道顺序(即 RGB 顺序)transforms.ToTensor(), # 应用归一化,减去均值(mean)并除以标准差(std)transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])

2. 添加图片向量

我们先创建一个新集合

def test_create_collection(self):self.client.create_collection(collection_name=self.collection_name,vectors_config=VectorParams(size=1000, distance=Distance.EUCLID),)

往集合里分别添加1个猫的图片和1个狗的图片

    def test_img_vector(self):# 加载并预处理图像id = 1image_path = './img/cat1.png'# id = 2# image_path = './img/dog1.png'image = Image.open(image_path)image_tensor = self.preprocess(image)# 在第0维度上添加一个维度,将图像张量转换为形状为 (1, C, H, W) 的张量,其中 C 是通道数,H 是高度,W 是宽度image_tensor = torch.unsqueeze(image_tensor, 0)with torch.no_grad():# 去除维度为1的维度,将特征向量的形状从 (1, D) 转换为 (D,)feature_vector = self.model(image_tensor).squeeze().tolist()operation_info = self.client.upsert(collection_name=self.collection_name,points=[{'id': id, 'vector': feature_vector, 'payload': {"image_path": image_path}}])print(operation_info)

3. 匹配图片向量

然后用其他猫狗的图片来做搜索匹配

    def test_search(self):# 加载并预处理图像image_path = './img/cat2.png'# image_path = './img/dog2.png'# image_path = './img/cat3.png'image = Image.open(image_path)image_tensor = self.preprocess(image)image_tensor = torch.unsqueeze(image_tensor, 0)with torch.no_grad():feature_vector = self.model(image_tensor).squeeze().tolist()search_result = self.client.search(collection_name=self.collection_name, query_vector=feature_vector, limit=3, with_vectors=True, with_payload=True)print(search_result)

结果:

[ScoredPoint(id = 1, version = 0, score = 68.21013, payload = {

'image_path': './img/cat1.png'

}, vector = [...]),

ScoredPoint(id = 2, version = 1, score = 85.10757, payload = {

'image_path': './img/dog1.png'

}, vector = [...])]

当使用猫2猫3作为查询条件时,跟猫1记录的score(向量距离)较小;

同理,使用狗2作为查询条件时,跟狗1记录的score(向量距离)较小

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

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

相关文章

一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 大小端字节序

关注 点赞 不错过精彩内容 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! Hello,大家好我是硬核王同学,是一名刚刚工作一年多的Linux工程师&#xff0…

【FPGA/verilog -入门学习15】vivado FPGA 数码管显示

1,需求:使用xc720 开发板的8个数码管显示12345678 2,需求分析: 75hc595 1,74hc595驱动,将串行数据转换成并行输出。对应研究手册 2,发送之前将要发的数据,合并成高8位:SEG,低8位&…

我在CSDN的2023年

一、引言 在2023年的这一年当中,在CSDN的生活让我得到许多知识与启发,也让我获得一些快乐和成就 二、自己的收获 在这一年当中,我从一个只会看别人写的文章解决问题到,可以自己写文章帮别人解决问题,这种成就感是极大…

内衣迷你洗衣机什么牌子好?四款最好用的迷你洗衣机品牌

最近这两年在洗衣机中火出圈的内衣洗衣机,它不仅可以清洁我们较难清洗的衣物,自带除菌功能,可以让衣物上的细菌,还能在清洗的过程中呵护我们衣物的面料,虽然说它是内衣洗衣机,它的功能不止可以清洗内衣&…

(NeRF学习)NeRFStudio安装win11

参考: 【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程nerfstudio介绍及在windows上的配置、使用NeRFStudio官网githubRuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory原因及解决 目录 requireme…

Linux使用yum命令安装postgrepsql

1.检查安装源 yum search postgresql 2.安装 yum install postgresql-server 3.启动数据库 service postgresql start 4.查看启动状态 service postgresql status 5.登陆测试 su - postgrep psql \l6.远程连接 6.1修改配置文件 在pg_hba.conf增加host all all 0.0.0…

地产集团如何利用数据做好经营分析?

企业数字化转型离不开数据的支持,如何通过数据的沉淀、拉通及分析,更好的赋能业务和管理实现价值创造,是当前地产数字化面临的首要问题。 一、地产集团数据处理和应用的现状 目前地产集团都是多业态的发展模式,包括地产住宅开发、…

python入门

目录 1.数据的输入和输出 1.输入 ​编辑 2.输出 2.if语句,条件判断 3.循环 1.while 2.for 1.数据的输入和输出 python不用像c语言一样给一个变量初始化一个类型,直接赋值就行了 像这样,连分号都不用加 这里我用python自带的 type函数…

How to understand the Pangu model in Huawei Cloud

How to understand the Pangu model in Huawei Cloud 参考文献 产品首页 / 盘古大模型文档首页 / 盘古大模型

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元(ADU) Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…

Windows mp4info使用教程(提取MP4盒子信息、MP4 box信息、box分析工具、atom分析工具)

参考文章:https://www.onlinedown.net/soft/617940.htm 文章目录 软件主界面打开视频文件点击左方能看到各盒子信息 软件主界面 双击打开软件: 打开视频文件 点击左方能看到各盒子信息 比我用xxd命令查看原始16进制数据方便多了。 ᅟᅠ        …

利用提示工程,提升LLM将自然语言转化为SQL的准确性

大型语言模型 (LLM) 已展现出理解自然语言提示并生成连贯响应的卓越能力。 这为将自然语言翻译成 SQL 等结构化查询语言开辟了新的可能性。 过去,编写 SQL 查询需要技术专业知识,而LLM允许任何人用简单的英语描述他们想要的内容,并自动生成相…