以图识图实现(附带测试代码)

前言

此篇文章建立于你看过作者的《Tensorflow第一篇(安装环境) 》和《Milvus介绍》。最后公司经过讨论需求的呈现为以图识图来进行数据的提取展示(提测中)。

实现方式

前提条件

首先我们需要有提取特征的方法(使用Tensorflow进行图片特征的提取),其次我们需要有一个图片特征的数据库(使用Milvus进行图片特征存储)。有了这两个前提条件我们就可以实现以图识图的功能。

流程图呈现

测试代码展示

提取特征向量

ini 复制代码
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.applications.resnet50 import preprocess_input

def tengetEIFeatures(path='', imageName=''):
    """
    使用ResNet50提取图像的特征向量
    :param path: 图像路径
    :param imageName: 图像名称
    :return:
    """
    # 创建ResNet50模型,并使用"imagenet"作为权重初始化
    model = ResNet50(weights="imagenet")
    # 拼接文件路径和图像名称,得到图像文件的完整路径
    image = os.path.join(path, imageName)
    # 加载图像,并将其调整为224x224的尺寸
    image = load_img(image, target_size=(224, 224))
    # 将图像转换为numpy数组
    image = np.asarray(image)
    # 增加一个维度,使图像数组成为3D数组
    image = np.expand_dims(image, axis=0)
    # 对图像进行预处理
    image = preprocess_input(image)
    # 使用模型提取图像特征
    feature = model(image)
    # 将特征转换为numpy数组
    feature = feature.numpy()
    # 将特征数组扁平化为1D数组
    feature = feature.reshape([-1])
    # 将特征向量重塑为形状为 (1, 特征数量) 的 2D 数组,为了与下游任务的兼容性而进行的。
    feature = np.array(feature).reshape((1, len(feature)))
    # 返回特征
    return feature

保存特征向量(第一次跑包含创建字段)

ini 复制代码
from pymilvus import (
    connections,
    FieldSchema, CollectionSchema, DataType,
    Collection,
)
connections.connect("default", host="localhost", port="19530")

fields = [
            FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True),
            FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR,  dim=1000)
        ]

schema = CollectionSchema(fields, "test")

# 第一次运行代码
test = Collection("test", schema, consistency_level="Strong")

# 第二次运行代码
# test = Collection("test") 

data = [
    [
        'test'
    ],
    tengetEIFeatures("D:\\ML\\ClassifyJade\\case\\images\\train\\jade\\burner\", 'test.jpg')
]

insert_result = test.insert(data)

查询特征向量

ini 复制代码
from pymilvus import (
    connections,
    Collection,
)
connections.connect("default", host="localhost", port="19530")

con = Collection("test")

param = {"metric_type": "L2", "params": {"nprobe": 10}}

res = con.search(EIFeatures.tengetEIFeatures("D:\ML\ClassifyJade\case\images\train\jade\burner\", 'test.jpg'), "embeddings",
           limit=10, param={"metric_type": "L2", "params": {"nprobe": 10}})
print(res)

结尾的碎碎念

1、由于项目属于公司不能给出太多示例代码,但跑通流程是完全够用的。

2、机器学习的重点是模型的选择和数据量的大小,后续的调参完全可以慢慢来。

3、小数据量用预加载模型其实效果也不咋样。

4、对于图像处理可以使用预处理图像增加机器学习的准确率。

相关推荐
九年义务漏网鲨鱼7 分钟前
【大模型面经】千问系列专题面经
人工智能·深度学习·算法·大模型·强化学习
北京耐用通信21 分钟前
“耐达讯自动化Profibus总线光端机在化工变频泵控制系统中的应用与价值解析”
人工智能·科技·物联网·网络安全·自动化·信息与通信
2401_8658548821 分钟前
AI软件可以帮助我自动化哪些日常任务?
运维·人工智能·自动化
WWZZ20251 小时前
快速上手大模型:深度学习7(实践:卷积层)
人工智能·深度学习·算法·机器人·大模型·卷积神经网络·具身智能
简佐义的博客2 小时前
Genome Biol. IF 9.4 Q1 | ATAC-seq 数据分析实用指南,根据本文就可以构建ATAC生信分析流程了
人工智能
老蒋新思维2 小时前
陈修超入局:解锁 AI 与 IP 融合的创新增长密码
网络·人工智能·网络协议·tcp/ip·企业管理·知识付费·创客匠人
San30.2 小时前
从代码规范到 AI Agent:现代前端开发的智能化演进
javascript·人工智能·代码规范
DO_Community2 小时前
基于AI Agent模板:快速生成 SQL 测试数据
人工智能·python·sql·ai·llm·ai编程
HeteroCat3 小时前
关于No Chatbot的思考
人工智能
咚咚王者3 小时前
人工智能之数据分析 numpy:第一章 学习链路
人工智能·数据分析·numpy