lang-segment-anything使用介绍

Language Segment-Anything 是一个开源项目,它结合了实例分割和文本提示的强大功能,为图像中的特定对象生成蒙版。它建立在最近发布的 Meta 模型、segment-anything 和 GroundingDINO 检测模型之上,是一款易于使用且有效的对象检测和图像分割工具。

基于GroundingDINO 实现Zero-shot text-to-bbox方法。
使用 Lightning AI 应用程序平台轻松部署。
可自定义的文本提示,用于精确的对象分割。

项目地址:https://github.com/luca-medeiros/lang-segment-anything/tree/main
在这里插入图片描述

1、安装命令

1.1 安装groundingdino

直接安装lang-segment-anything,可能会存在各种报错。故而需要先安装groundingdino。

git clone https://github.com/IDEA-Research/GroundingDINO.git && cd GroundingDINO
pip install -e .mkdir weights

在这里插入图片描述
----------以下步骤非必要------------
下载 https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth ,然后存储到weights目录中。

1.2 安装lang-segment-anything

可以基于git命令下载项目源码,也可以打开git下载源码

git clone https://github.com/luca-medeiros/lang-segment-anything && cd lang-segment-anything
pip install torch torchvision

打开lang-segment-anything-main\pyproject.toml,注释掉对groundingdino的依赖,具体如下操作
在这里插入图片描述

pip install -e .

在这里插入图片描述
安装特定版本的urllib3,避免在运行LangSAM时,有梯子还是报ProxyError

pip install urllib3==1.25.11

1.3 相关报错解决

如果pytorch版本与cuda版本不兼容,可能会出现以下报错(pytorch需要的cuda版本为12.1,但系统安装的cuda版本为11.7)。此时,更改cuda版本或者pytorch版本即可。
在这里插入图片描述
博主这里安装了2个版本的cuda,此时只需要修改一下环境变量即可。
在这里插入图片描述
后续安装,可能由于是win系统限制,会出现报错 文件 名或扩展名太长
在这里插入图片描述
参考 https://blog.csdn.net/BBJG_001/article/details/105464695进行解决
在这里插入图片描述
同时参考https://blog.csdn.net/ZxqSoftWare/article/details/108519131,在策略管理器进行修改
在这里插入图片描述

2、使用lang-sam

'''This is just adapted from the example in the readme,The main usage is for the built image to have the weights cached.
'''
import numpy as np
from PIL import Image
from lang_sam import LangSAM
from lang_sam.utils import draw_image
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"if __name__=="__main__":model = LangSAM()image_pil = Image.open("./assets/car.jpeg").convert("RGB")text_prompt = "wheel"masks, boxes, phrases, logits = model.predict(image_pil, text_prompt)labels = [f"{phrase} {logit:.2f}" for phrase, logit in zip(phrases, logits)]image_array = np.asarray(image_pil)image = draw_image(image_array, masks, boxes, labels)image = Image.fromarray(np.uint8(image)).convert("RGB")image.show()print('all ok')

第一次运行会有以下输出,是用于下载模型文件的
在这里插入图片描述
识别效果如下所示
在这里插入图片描述

3、使用LitGradio进行部署

3.1 安装依赖项

pip install backoff
pip install deepdiff
pip install lightning_cloud
pip install lightning==2.0.1

3.2 部署代码

app.py中提供了部署web demo部署代码,但是在windows中运行会存在bug。故此将以下代码添加到app.py中最后一行的最前面

import os
os.environ["LIGHTNING_DETECTED_DEBUGGER"] = "1"

具体效果如下所示

import os
import warningsimport gradio as gr
import lightning as L
import numpy as np
from lightning.app.components.serve import ServeGradio
from PIL import Imagefrom lang_sam import LangSAM
from lang_sam import SAM_MODELS
from lang_sam.utils import draw_image
from lang_sam.utils import load_imagewarnings.filterwarnings("ignore")class LitGradio(ServeGradio):inputs = [gr.Dropdown(choices=list(SAM_MODELS.keys()), label="SAM model", value="vit_h"),gr.Slider(0, 1, value=0.3, label="Box threshold"),gr.Slider(0, 1, value=0.25, label="Text threshold"),gr.Image(type="filepath", label='Image'),gr.Textbox(lines=1, label="Text Prompt"),]outputs = [gr.outputs.Image(type="pil", label="Output Image")]examples = [['vit_h',0.36,0.25,os.path.join(os.path.dirname(__file__), "assets", "fruits.jpg"),"kiwi",],['vit_h',0.3,0.25,os.path.join(os.path.dirname(__file__), "assets", "car.jpeg"),"wheel",],['vit_h',0.3,0.25,os.path.join(os.path.dirname(__file__), "assets", "food.jpg"),"food",],]def __init__(self, sam_type="vit_h"):super().__init__()self.ready = Falseself.sam_type = sam_typedef predict(self, sam_type, box_threshold, text_threshold, image_path, text_prompt):print("Predicting... ", sam_type, box_threshold, text_threshold, image_path, text_prompt)if sam_type != self.model.sam_type:self.model.build_sam(sam_type)image_pil = load_image(image_path)masks, boxes, phrases, logits = self.model.predict(image_pil, text_prompt, box_threshold, text_threshold)labels = [f"{phrase} {logit:.2f}" for phrase, logit in zip(phrases, logits)]image_array = np.asarray(image_pil)image = draw_image(image_array, masks, boxes, labels)image = Image.fromarray(np.uint8(image)).convert("RGB")return imagedef build_model(self, sam_type="vit_h"):model = LangSAM(sam_type)self.ready = Truereturn modellg=LitGradio()
import os
os.environ["LIGHTNING_DETECTED_DEBUGGER"] = "1"
app = L.LightningApp(lg)

3.3 部署使用代码

3.2中的代码运行效果如下所示,
在这里插入图片描述
在浏览器中打开 http://127.0.0.1:7501/view
在这里插入图片描述

上传自己的数据进行测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

软件工程-第8章 软件测试

8.1 软件测试目标域软件测试过程模型 8.2 软件测试技术 8.3 静态分析技术-程序正确性证明 8.4 软件测试步骤 8.5 本章小结

基于支持向量机(SVM)的数据时序预测(单输入输出)

代码原理 支持向量机(SVM)通常被用于处理分类问题,而对于数据时序预测(单输入输出),可以采用以下步骤使用SVM进行建模: 1. 数据准备:准备时间序列数据集,包括历史观测值和对应的目标值,按照时间顺序排列。 2. 特征提取:将时间序列数据转换为模型可接受的特征表示…

卷积神经网络五:GoogleNet

在2014年的ImageNet图像识别大赛中,一个名叫GoogleNet的网络架构大放异彩。GoogleNet使用了一种叫作Inception的结构。其实GoogleNet本质上就是一种Inception网络,而一个Inception网络又是由多个Inception模块和少量的汇聚层堆叠而成。 Inception模块 …

FPGA通过I2C控制AT24C64

文章目录 前言一、代码设计框图二、IIC_drive模块设计2.1、模块接口:2.2、代码功能描述:2.3、IIC协议实现过程: 三、EEPROM_ctrl模块设计3.1、模块接口:3.2、代码功能描述 四、EEPROM_drive模块五、iic_top模块 前言 继上一篇FPG…

Harvester基于 Kubernetes 构建的开源超融合基础架构 (HCI) 软件

Harvester 是基于 Kubernetes 构建的开源超融合基础架构 (HCI) 软件。它是使用专有 HCI 堆栈的一种开放替代方案,该堆栈结合了 Cloud Native Computing 的设计和精神。 Harvester 功能​ Harvester 支持在裸机服务器上实施 HCI。Harvester 使用本地、直接连接的存…

【Python】Miniconda+Vscode+Jupyter 环境搭建

1.安装 Miniconda Conda 是一个开源的包管理和环境管理系统,可在 Windows、macOS 和 Linux 上运行,它可以快速安装、运行和更新软件包及其依赖项。使用 Conda,我们可以轻松在本地计算机上创建、保存、加载和切换不同的环境 Conda 分为 Anaco…

Mysql数据库概念与安装

目录 一、数据库概述 1、数据库的基本概念 2、数据库管理系统(DBMS) 2.1 数据库管理系统概念 2.2 数据库管理系统工作模式 3、数据库系统(DBS) 3.1 数据库系统概念 3.2 数据库系统发展史 4、关系型数据库与非关系型数据库…

10-项目部署_持续集成-黑马头条

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续集成的组成要素 一个自动构建过程, 从…

学习vue3第八节(自定义指令 directive)

1、自定义指令的作用: 自定义指令是用来操作底层DOM的,尽管vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充和拓展,不仅仅可用于定义任何DOM操作,并且是可以重复使用。 自定义…

只需3步,使用Stable Diffusion无限生成AI数字人视频

基本方法 搞一张照片,搞一段语音,合成照片和语音,同时让照片中的人物动起来,特别是头、眼睛和嘴。 语音合成 语音合成的方法很多,也比较成熟了,大家可以选择自己方便的,直接录音也可以&#…

el-tree 设置默认展开指定层级

el-tree默认关闭所有选项&#xff0c;但是有添加或者编辑删除的情况下&#xff0c;需要刷新接口&#xff0c;此时会又要关闭所有选项&#xff1b; 需求&#xff1a;在编辑时、添加、删除 需要将该内容默认展开 <el-tree :default-expanded-keys"expandedkeys":da…

Redis 启动进程报错排查

在阿里云ECS安装了redis, systemctl 启动进程正常, redis-cli 链接正常, 准备远程链接发现无法链接上. 报错 Connection: ECS-redis > connection failed Connection: Disconnect on error: Connection error: Connection timed out 连接超时. 后来查别人的经验发现是…

开源模型应用落地-安全合规篇-模型输出合规性检测(三)

一、前言 为什么我们需要花大力气对用户输入的内容和模型生成的输出进行合规性检测,一方面是严格遵守各项法规要求,具体如下:互联网信息服务深度合成管理规定https://www.gov.cn/zhengce/zhengceku/2022-12/12/content_5731431.htm ​ 其次,受限于模型本身的一些缺陷,…

Trent-FPGA硬件设计课程

本课程涵盖FPGA硬件设计的基础概念和实践应用。学生将学习Verilog语言编程、数字电路设计原理、FPGA架构和开发工具的使用。通过项目实践&#xff0c;掌握FPGA设计流程和调试技巧&#xff0c;为硬件加速和嵌入式系统开发打下坚实基础。 课程大小&#xff1a;4.3G 课程下载&am…

Flutter开发入门——路由

什么是路由&#xff1f; 移动端应用开发中&#xff0c;路由技术是一个非常重要的组成部分。路由技术负责管理应用中各个页面之间的跳转、导航以及参数传递等关键功能。在移动端应用中&#xff0c;一个高效、易于维护的路由系统对于提高开发效率和用户体验具有重要意义。 Flut…

【CSS】overflow中scroll和hidden的区别是什么?

overflow: scroll; 和 overflow: hidden; 是CSS中用于处理元素内容溢出其容器时的两种不同属性值。它们的主要区别在于当内容超出指定容器的尺寸时&#xff0c;它们如何显示或隐藏内容。 如果你有一个包含大量文本或图片的元素&#xff0c;并且希望用户能够滚动查看所有内容&am…

shardingsphere-elastic-job-ui 管理界面安装

shardingsphere-elasticjob 从 3.0.0-alpha 版本开始&#xff0c;将console管理界面单独拆分出来 下载前需要 安装 maven 配置环境变量 安装 nodejs 配置环境变量 下载ui源码,安装 官方并未直接提供可执行的二进制文件,需要下载源码编译,目前发行版 3.0.2 https://github.com/…

分布式Raft原理详解,从不同角色视角分析相关状态

分布式Raft原理详解&#xff0c;从不同角色视角分析相关状态 1. CAP定理2.Raft 要解决的问题3. Raft的核心逻辑3.1. Raft的核心逻辑2.1. 复制状态机2.2. 任期 Term2.3. 任期的意义&#xff1a;逻辑时钟2.4 选举定时器 3. Leader选举逻辑4. 从节点视角查看Leader选举4.1. Follow…

vue 安装脚手架报错 certificate has expired

vue 安装脚手架的时候报错&#xff0c;报错信息如下&#xff1a; 错误信息&#xff1a;npm ERR! request to https://registry.npm.taobao.org/vue%2fcli failed, reason: certificate has expired 翻译&#xff1a;npm ERR&#xff01;请求到https://registry.npm.taobao.org…

Nanya(南亚科技)DRAM芯片选型详解

一、DRAM产品选型 普通SDRAM只在时钟的上升期进行数据传输&#xff0c;DDR内存能够在时钟的上升期和下降期各传输一次数据&#xff0c;因此性能翻倍&#xff0c;被称为双倍速率同步动态随机存储器。因此DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。DDR是一种掉…