使用LLaVA模型实现以文搜图和以图搜图

本文将会详细介绍如何使用多模态模型——LLaVA模型来实现以文搜图和以图搜图的功能。本文仅为示例Demo,并不能代表实际的以文搜图和以图搜图的技术实现方案。

1、实现原理

  • 使用多模态模型获取图片的标题和详细描述
  • 以文搜图功能:使用ES实现查询匹配,找到相似的图片描述,从而获得对应图片。
  • 以图搜图功能:对于查询图片,根据其图片描述,在ES查询得到详细的图片描述;再对这些查询得到的图片描述使用Rerank模型进行匹配,调整顺序,从而获得对应图片

2、使用模型

  • 多模态模型:LLaVA-1.5-7B,主要用于图片理解,本文的使用场景为获取图片标题和图片内容描述。
  • OCR模型:PaddleOCR,主要用于图片中的文字识别。
  • ReRank模型:ReRank模型,主要用于文本匹配,本文的使用场景为匹配两张图片的内容描述。

2.1、下面将按功能进行阐述,主要分为以下三部分:

  • 图片上传
  • 以文搜图
  • 以图搜图

3、前期准备

3.1、基于LLaVa大模型的图片理解

参考:https://blog.csdn.net/zhanghan11366/article/details/136763065?spm=1001.2014.3001.5501

3.2、基于PaddleOCR文字识别

模型介绍及部署方法: https://www.paddlepaddle.org.cn/hubdetail?name=ch_pp-ocrv3&en_category=TextRecognition

3.2.1、安装

1、环境依赖

paddlepaddle >= 2.2
paddlehub >= 2.2

2、安装

 hub install ch_pp-ocrv3

3.2.2、服务部署

PaddleHub Serving 可以部署一个目标检测的在线服务。

第一步:启动PaddleHub Serving

运行启动命令: hub serving start -m ch_pp-ocrv3
这样就完成了一个目标检测的服务化API的部署,默认端口号为8866。
NOTE:如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。

第二步:发送预测请求

配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果。

import requests
import json
import cv2
import base64def cv2_to_base64(image):data = cv2.imencode('.jpg', image)[1]return base64.b64encode(data.tostring()).decode('utf8')# 发送HTTP请求
data = {'images': [cv2_to_base64(cv2.imread(r"C:\Users\zh\Desktop\1.jpg"))]}
headers = {"Content-type": "application/json"}
url = "http://0.0.0.0:8866/predict/ch_pp-ocrv3"
r = requests.post(url=url, headers=headers, data=json.dumps(data))# 打印预测结果
print(r.json()["results"])

结果如下:

[{'data': [{'confidence': 0.9090811014175415, 'text': '2023年A1大模型应用研究报告', 'text_box_position': [[102, 90], [780, 90], [780, 127], [102, 127]]}, {'confidence': 0.9284242391586304, 'text': 'AI、AGI、大模型、通用大模型、行业大模型', 'text_box_position': [[215, 207], [670, 207], [670, 227], [215, 227]]}], 'save_path': ''}]

3.3、es部署与测试

3.3.1、es部署

docker load < es.tar####便于添加用户和密码
chmod 644 /.../elasticsearch.yml
chmod 644 /.../kibana.ymldocker run -d 
-v /.../elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml 
-v /.../kibana.yml:/home/elasticsearch/kibana-7.16.2-linux-x86_64/config/kibana.yml 
-p 9200:9200 -p 5601:5601 --name elasticKibana nshou/elasticsearch-kibanadocker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.RunningFor}}\t{{.Status}}\t{{.Ports}}" | head -n 11

3.3.2、按照ik_smart分词器

下载网址:https://github.com/infinilabs/analysis-ik/releases?page=2
下载解压之后,把文件名修改为ik放到plugins文件夹下:

docker cp /.../ik elasticKibana:/home/elasticsearch/elasticsearch-7.16.2/pluginsdocker restart elasticKibana

测试如下:
在这里插入图片描述

3.4、基于ReRank模型的文本匹配

模型下载:https://huggingface.co/maidalun1020/bce-reranker-base_v1
服务:

# -*- coding: utf-8 -*-
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
from operator import itemgetter
from sentence_transformers import CrossEncoderapp = FastAPI()
# init rerank model
model_path = './model/bce-reranker-base_v1'
model = CrossEncoder(model_path, max_length=512)class SentencePair(BaseModel):text1: strtext2: strfrom typing import Listclass Sentences(BaseModel):texts: List[SentencePair]@app.get('/')
def home():return 'hello world'@app.post('/rerank')
def get_embedding(sentence_pairs: Sentences):scores = model.predict([[pair.text1, pair.text2] for pair in sentence_pairs.texts]).tolist()result = [[scores[i], sentence_pairs.texts[i].text1, sentence_pairs.texts[i].text2] for i in range(len(scores))]sorted_result = sorted(result, key=itemgetter(0), reverse=True)return {"result": sorted_result}if __name__ == '__main__':uvicorn.run(app, host='0.0.0.0', port=50074)

4、结果展示

4.1、图片展示

在这里插入图片描述

4.2、以字搜图

在这里插入图片描述

4.3、以图搜图

在这里插入图片描述

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

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

相关文章

Qt 计算两条直线QLineF的重叠部分,如何存在则返回该直线

计算两条直线QLineF的重叠部分 效果 使用示例 QLineF intersection;bool isSuccess GetOverlapSegment(line1, line2, intersection);源码 // 判断两个QLineF对象在斜率相同时是否存在重叠部分 bool DoLineOverlapWithSameSlope(const QLineF& line1, const QLineF&…

为什么说用了10年C++的程序员也不敢说自己精通C++?

在编程领域&#xff0c;C无疑是一门具有极高复杂度和深度的语言&#xff0c;它以其卓越的性能、灵活性和广泛的应用范围赢得了众多开发者青睐。然而&#xff0c;一个现象令人深思&#xff1a;即使有程序员使用C长达十年之久&#xff0c;他们仍可能谦逊地表示自己并未真正“精通…

Cartoon FX Remaster

“卡通FX重制”是一个风格化的粒子系统预制件集合。您可以使用附带的“卡通FX简易编辑器”轻松自定义每个效果的颜色和其他属性。 卡通FX Remaster是卡通FX包1的新版本,从头开始重新制作了全新的效果。 ⭐新:通过卡通FX重制捆绑包,以20%的折扣获得所有4个卡通FX重制包! 50多…

python.类

1.类用class定义 name等是属性 是成员变量 定义完类了要定义对象 class Student: #定义了一个Student的类nameNoneageNonegenderNonesdu1Student() #创建了一个Student类的对象 sdu1.nameleo sdu1.age20 sdu1.gendermaleprint(sdu1.name) print(sdu1.age) print(sdu1.…

【数据分享】1929-2023年全球站点的逐月平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

Vue.js 3.4的新特性

Vue.js 3.4的新特性 目前&#xff0c;Vue.js的版本已经更新到3.4&#xff0c;这次更新不仅带来了性能上的飞跃&#xff0c;还引入了许多新特性&#xff0c;进一步优化了开发效率。 1. 性能提升 在性能方面&#xff0c;Vue.js 3.4 全新重写了模板解析器。与之前基于正则表达式…

Matlab从入门到精通课程

教程介绍 MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 学习地址 链接&#xff1a;https://pan.baidu.com/s/1PxGarBwQusMzwPVqcE…

RAG笔记:常见问题以及解决方法

1 内容缺失 知识库中缺少必要的上下文信息。当知识库没有包含正确答案时&#xff0c;RAG 系统可能会给出一个貌似合理但实际上错误的回答&#xff0c;而不是明确表示它不知道答案。 1.1 解决方法 1.1.1 设置阈值 在回答问题前先设定一个质量标准。如果召回内容达不到标准或…

Vulnhub:DR4G0N B4LL: 1

目录 信息收集 1、arp 2、nmap WEB web信息收集 gobuster 隐藏目录发现 图片隐写 ssh登录 提权 get user 系统信息收集 get root 信息收集 1、arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l …

基于yolov8安全帽检测的系统

基于yolov8安全帽检测的系统 项目描述&#xff1a; 安全头盔检测&#xff08;计算机视觉&#xff09; 1.自训练数据集1538张数据图片&#xff0c;进行标注&#xff0c;并进行100轮的训练&#xff0c;准确率达0.966 2.使用 Flask 和 Ultralytics YOLOv8 模型开发了一个 Web 应…

打造高效自动化渗透测试系统:关键步骤与实践

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…

免费客服系统大揭秘!有什么好用的免费客服系统推荐?

贵的不一定是好的&#xff0c;合不合适才最重要&#xff01;有什么好用的免费客服系统吗&#xff1f;现下服务经济的发展的风潮已经席卷到了各行各业。 企业不仅要提供好的产品&#xff0c;还需要好的服务。客服系统作为企业与客户重要的沟通渠道&#xff0c;越来越多的企业正在…

Java版AI人工智能源码 Chat GPT智能AI源码

Java版AI人工智能源码 Chat GPT智能AI源码 技术框架 基于前后端分离架构以及Vue3、uni-app、SpringBoot2.5技术栈开发&#xff0c; 包含PC端、H5端、小程序端、APP端。 AI人工智能系统介绍 Chat GPT AI人工智能系统聚合对接国内外知名主流大语言模型接口及中转平台&#x…

2024深圳国际冲压自动化设备及技术展览会

2024深圳国际冲压自动化设备及技术展览会 2024 Shenzhen International Press Automation Equipment and Technology Exhibition 时间&#xff1a;2024年08月28-30日 地点&#xff1a;深圳国际会展中心&#xff08;新馆&#xff09; 预订以上展会详询陆先生 I38&#xff0…

JetBrains全家桶激活,分享 DataGrip 2024 激活的方案

大家好&#xff0c;欢迎来到金榜探云手&#xff01; DataGrip 公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工…

基于51单片机自动售货机设计资料(源码、仿真原理图、论文)

目录 1、仿真图 2、程序 3、自动售货机说明内容 3.1 自动售货机的系统结构 3.2 自动售货机的控制子系统概述 3.3 自动售货机的功能概述 3.4自动售货机的设计思路 资料下载地址&#xff1a;基于51单片机自动售货机设计资料(源码、仿真原理图、论文) 1、仿真图 2、程序 3…

数据库高级查询【mysql】

数据库高级查询【数据库】 前言版权推荐数据库高级查询行转列统计数据 CASE WHEN 条件 THEN 结果1 ELSE 结果2 END数据库查询带排名建表查询带排名&#xff0c;排名连续查询带排名&#xff0c;排名不连续查询带排名&#xff0c;按行号 Mysql数据库函数常用函数最后 前言 2024-…

阿里云对象存储OSS入门

阅读目录 一、阿里云OSS的使用 1、OSS是什么&#xff1f;2、OSS的使用 二、阿里云OSS的使用三、图床的搭建四&#xff1a;图床绑定阿里云OSS 编写不易&#xff0c;如果我的文章对你有帮助的话&#xff0c;麻烦小伙伴还帮忙点个赞再走&#xff01; 如果有小伙伴觉得写的啰嗦&am…

Harmony OS WiFi编程——连接热点、创建热点

相关知识点 WiFi的工作模式 AP模式&#xff1a;热点模式&#xff0c;提供无线接入服务&#xff0c;允许其它无线设备接入&#xff0c;提供数据访问&#xff0c;一般的无线路由/网桥工作在该模式。STA模式&#xff1a;类似于无线终端&#xff0c;本身并不接受其他设备的接入&am…

Linux:部署达梦数据库DM8(1)

0.安装DM8数据库安装包 产品下载-达梦数据 (dameng.com)https://www.dameng.com/list_103.html进入官方网站下载centos7的安装包&#xff0c;本章使用centos7进行部署&#xff0c;提前关闭好防火墙和selinux 建议你的系统运行内存为&#xff1a;2G或以上 1.部署基础环境 先安…