各大网站网络推广的收费/电子商务沙盘seo关键词
文章目录
- 一. segment-anything介绍
- 二. 官网Demo使用说明
- 三. 安装教程
- 四. python调用生成掩码教程
- 五. python调用SAM分割后转labelme数据集
一. segment-anything介绍
Segment Anything Model(SAM)根据点或框等输入提示生成高质量的对象遮罩,可用于为图像中的所有对象生成掩膜。
二. 官网Demo使用说明
- 官网Demo地址:https://segment-anything.com/demo
- 载入图像后,可以通过点击图像上一点分割出物体
- 也可以通过框选一个区域进行分割
- 可以一键分割出所有物体
- 可以将分割出来的物体剪出来
三. 安装教程
官网安装说明:https://github.com/facebookresearch/segment-anything
-
anaconda下新建一个环境
conda create -n pytorch python=3.8
-
激活新建的环境
conda activate sam
-
更换conda镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
-
安装pytorch
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3
-
克隆官方代码
git clone git@github.com:facebookresearch/segment-anything.git
-
进入下载好的文件夹,打开cmd,激活安装好的环境,运行以下代码
pip install -e .
-
安装所需python库
pip install opencv-python pycocotools matplotlib onnxruntime onnx -i https://mirrors.aliyun.com/pypi/simple/
-
从官网下载模型,并复制到源代码下
-
运行以下代码
1.png为放置在源代码下的图像python scripts/amg.py --checkpoint sam_vit_b_01ec64.pth --model-type vit_b --input 1.jpg --output result
生成的图像掩码
四. python调用生成掩码教程
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
import sys
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictordef show_anns(anns):if len(anns) == 0:return# 对检测结果的字典对象进行排序sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)ax = plt.gca()ax.set_autoscale_on(False)img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))img[:,:,3] = 0for ann in sorted_anns:m = ann['segmentation']color_mask = np.concatenate([np.random.random(3), [0.35]])img[m] = color_maskax.imshow(img)# 通过opencv图取图像
image = cv2.imread('4.PNG')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 通过plt显示读取的图像
plt.figure(figsize=(20,20))
plt.imshow(image)
plt.axis('off')
plt.show()# 添加当前系统路径,添加模型文件路径
sys.path.append("..")
sam_checkpoint = "sam_vit_h_4b8939.pth"
model_type = "vit_h"# 设置运行推理的设备
device = "cuda"# 创建sam模型推理对象
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
mask_generator = SamAutomaticMaskGenerator(sam)# 将图像送入推理对象进行推理分割,输出结果为一个列表,其中存的每个字典对象内容为:
# segmentation : 分割出来的物体掩膜(与原图像同大小,有物体的地方为1其他地方为0)
# area : 物体掩膜的面积
# bbox : 掩膜的边界框(XYWH)
# predicted_iou : 模型自己对掩模质量的预测
# point_coords : 生成此掩码的采样输入点
# stability_score : 掩模质量的一个附加度量
# crop_box : 用于以XYWH格式生成此遮罩的图像的裁剪
masks = mask_generator.generate(image)# 打印分割出来的个数以及第一个物体信息
print(len(masks))
print(masks[0].keys())# 给分割出来的物体上色,显示分割效果
plt.figure(figsize=(20,20))
plt.imshow(image)
show_anns(masks)
plt.axis('off')
plt.show()
五. python调用SAM分割后转labelme数据集
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
import json
import sys
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictordef segment(imgPath):# 通过opencv图取图像image = cv2.imread(imgPath)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 通过plt显示读取的图像# plt.figure(figsize=(20,20))# plt.imshow(image)# plt.axis('off')# plt.show()# 添加当前系统路径,添加模型文件路径sys.path.append("..")sam_checkpoint = "sam_vit_h_4b8939.pth"model_type = "vit_h"# 设置运行推理的设备device = "cuda"# 创建sam模型推理对象sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)sam.to(device=device)mask_generator = SamAutomaticMaskGenerator(sam)# 将图像送入推理对象进行推理分割,输出结果为一个列表,其中存的每个字典对象内容为:# segmentation : 分割出来的物体掩膜(与原图像同大小,有物体的地方为1其他地方为0)# area : 物体掩膜的面积# bbox : 掩膜的边界框(XYWH)# predicted_iou : 模型自己对掩模质量的预测# point_coords : 生成此掩码的采样输入点# stability_score : 掩模质量的一个附加度量# crop_box : 用于以XYWH格式生成此遮罩的图像的裁剪masks = mask_generator.generate(image)# 打印分割出来的个数以及第一个物体信息print(len(masks))print(masks[0].keys())# 给分割出来的物体上色,显示分割效果# plt.figure(figsize=(20,20))# plt.imshow(image)show_anns(masks, imgPath)# plt.axis('off')# plt.show()def show_anns(anns, imgPath):if len(anns) == 0:return# 对检测结果的字典对象进行排序sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)ax = plt.gca()ax.set_autoscale_on(False)img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))img[:,:,3] = 0shapes = []for ann in sorted_anns:# 过滤面积比较小的物体if ann['area'] >=2500:# 创建labelme格式tempData = {"label": "otherheavy","points": [],"group_id": None,"shape_type": "polygon","flags": {}}# 获取分割物体掩膜m = ann['segmentation']# 找出物体轮廓objImg = np.zeros((m.shape[0], m.shape[1], 1), np.uint8)objImg[m] = 255contours, hierarchy = cv2.findContours(objImg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 找出轮廓最大的max_area = 0maxIndex = 0for i in range(0, len(contours)):area = cv2.contourArea(contours[i])if area >= max_area:max_area = areamaxIndex = i# 将每个物体轮廓点数限制在一定范围内if len(contours[maxIndex]) >=30:contours = list(contours[maxIndex])contours = contours[::int(len(contours)/30)]else:contours = list(contours[maxIndex])# 显示图像# contourImg = np.zeros((m.shape[0], m.shape[1], 3), np.uint8)# cv2.drawContours(contourImg, contours, -1, (0, 255, 0), -1)# cv2.imshow("1", contourImg)# cv2.waitKey(0)# 向labelme数据格式中添加轮廓点for point in contours:tempData["points"].append([int(point[0][0]), int(point[0][1])])# 添加物体标注信息shapes.append(tempData)# 在彩色图像上标出物体color_mask = np.concatenate([np.random.random(3), [1]])img[m] = color_maskjsonPath = imgPath.replace(".png", ".json") # 需要生成的文件路径print(jsonPath)# 创建json文件file_out = open(jsonPath, "w")# 载入json文件jsonData = {}# 8. 写入,修改json文件jsonData["version"] = "5.2.1"jsonData["flags"] = {}jsonData["shapes"] = shapesjsonData["imagePath"] = imgPathjsonData["imageData"] = NonejsonData["imageHeight"] = sorted_anns[0]['segmentation'].shape[0]jsonData["imageWidth"] = sorted_anns[0]['segmentation'].shape[1]# 保存json文件file_out.write(json.dumps(jsonData, indent=4)) # 保存文件# 关闭json文件file_out.close()ax.imshow(img)if __name__ == '__main__':imgPath = "4.png"segment(imgPath)
相关文章:

segment-anything使用说明
文章目录 一. segment-anything介绍二. 官网Demo使用说明三. 安装教程四. python调用生成掩码教程五. python调用SAM分割后转labelme数据集 一. segment-anything介绍 Segment Anything Model(SAM)根据点或框等输入提示生成高质量的对象遮罩,…...

在魔塔社区搭建通义千问-7B(Qwen-7B)流程
复制以下语句 python3 -m venv myvenvsource myvenv/bin/activatepip install modelscope pip install transformers_stream_generator pip install transformers pip install tiktoken pip install accelerate pip install bitsandbytestouch run.py vi run.py复制下面代码粘…...

Redis 加入服务列表自启动
1、下载reids windows版本,选择zip格式下载 2、解压zip,并进入路径; 3、命令提示符(cmd) 进入解压后的路径后,输入指令:redis-server --service-install redis.windows.conf; 4、如…...

MyCat管理及监控——zookeeper及MyCat-web安装
1.MyCat管理 2.MyCat-eye 3.zookeeper安装 第一步:解压 第二部: 切换目录,创建data文件夹 第三步:修改zookeeper配置文件 这样zookeeper安装及配置就完成了 4.MyCat-web安装 注意mycat-web要与zookeeper关联,…...

基于spring boot的餐饮管理系统java酒店饭店菜谱 jsp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于spring boot的餐饮管理系统j 系统1权限ÿ…...

JVM分析工具JProfiler介绍及安装
目录 一、什么是JProfiler? 二、JProfiler 功能结构 1、分析代理 2、记录数据 3、快照 三、安装 一、什么是JProfiler? JProfiler是一个专业的工具,用于分析运行中的JVM内部发生的事情。当您的生产系统出现问题时,您可以…...

Nginx使用多个.conf文件配置虚拟主机server
使用 Nginx 配置多个虚拟机 server 服务。通常做法可以直接在 nginx.conf 文件中添加即可,如下事例: # nginx.confworker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream…...

nginx编译以及通过自定义生成证书配置https
1. 环境准备 1.1 软件安装 nginx安装编译安装以及配置https,需要gcc-c pcre-devel openssl openssl-devel软件。因此需要先安装相关软件。 yum -y install gcc-c pcre-devel openssl openssl-devel wgetopenssl/openssl-devel:主要用于nginx编译的htt…...

OpenAI 已为 GPT-5 申请商标,GPT-4 发布不到半年,GPT-5 就要来了吗?
据美国专利商标局(USPTO)信息显示,OpenAI已经在7月18日申请注册了“GPT-5”商标。 在这份新商标申请中,OpenAI将“GPT-5”描述为一种“用于使用语言模型的可下载计算机软件”。 继GPT-4发布之后,它预计将成为OpenAI下一…...

【Linux】深入理解进程概念
个人主页:🍝在肯德基吃麻辣烫 我的gitee:Linux仓库 个人专栏:Linux专栏 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 文章目录 前言浅谈进程概念1. 进程和操作系统的联系2.描述进程的对象——PCB …...

Java课题笔记~ AspectJ 的开发环境(掌握)
AspectJ 的开发环境(掌握) (1) maven 依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></depe…...

机器学习参数调优
手动调参 分析影响模型的参数,设计步长进行交叉验证 我们以随机森林为例: 本文将使用sklearn自带的乳腺癌数据集,建立随机森林,并基于泛化误差(Genelization Error)与模型复杂度的关系来对模型进行调参&…...

[Java基础]面向对象-关键字分析:this,static,final,super
系列文章目录 【Java基础】Java总览_小王师傅66的博客-CSDN博客 [Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客 [Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客 [Java基础]…...

数据结构初阶--二叉树的顺序结构之堆
目录 一.堆的概念及结构 1.1.堆的概念 1.2.堆的存储结构 二.堆的功能实现 2.1.堆的定义 2.2.堆的初始化 2.3.堆的销毁 2.4.堆的打印 2.5.堆的插入 向上调整算法 堆的插入 2.6.堆的删除 向下调整算法 堆的删除 2.7.堆的取堆顶元素 2.8.堆的判空 2.9.堆的求堆的…...

NVM Command学习
ubuntu系统安装nvme-cli,可以在应用层发起命令。 sudo apt install nvme-cli$ sudo nvme --help nvme-1.9 usage: nvme <command> [<device>] [<args>]The <device> may be either an NVMe character device (ex: /dev/nvme0) or an nvme …...

TCP Socket 基础知识点(实例是以Java进行演示)
本篇根据TCP & Socket 相关知识点和学习所得进行整理所得。 文章目录 前言1. TCP相关知识点1.1 双工/单工1.2 TCP协议的主要特点1.3 TCP的可靠性原理1.4 报文段1.4.1 端口1.4.2 seq序号1.4.3 ack确认号1.4.4 数据偏移1.4.5 保留1.4.6 控制位1.4.7 窗口1.4.8 校验和1.4.9 紧…...

openCV图像读取和显示
文章目录 一、imread二、namedWindow三、imshow #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main(int argc,char** argv) {cv::Mat img imread("./sun.png"); //3通道 24位if (img.empty()) {std:…...

requests 方法总结
当使用 requests 库进行接口自动化测试时,以下是一些详细的步骤和方法总结: 1. **安装 requests 库**:首先,确保你已经安装了 requests 库。可以使用 pip 命令进行安装:pip install requests。 2. **导入库**&#x…...

Go语言删除文本文件中的指定行
GO语言删除文本文件中的指定行 1. 思路2. 处理文件3. 处理后的文本文件 1. 思路 假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求…...

Arthas GC日志-JVM(十八)
上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM(十七) Arthas介绍 因为arthas完全是java代码写的,我们直接用命令启动: Java -jar arthas-boot.jar 启动成功后,选择我们项目的进程。 进入我们可用dashboard…...

ISC 2023︱诚邀您参与赛宁“安全验证评估”论坛
8月9日-10日,第十一届互联网安全大会(简称ISC 2023)将在北京国家会议中心举办。本次大会以“安全即服务,开启人工智能时代数字安全新范式”为主题,打造全球首场AI数字安全峰会,赋予安全即服务新时代内涵…...

分享一个计算器
先看效果: 再看代码(查看更多): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><style>* {box-sizing: border-box;}body…...

Android 13 Launcher——长按图标弹窗背景变暗
目录 一.背景 二.修改代码 一.背景 客户定制需要长按图标弹窗让其背景变暗,所以需要进行定制,如下是定制流程,本篇是接上篇https://gonglipeng.blog.csdn.net/article/details/132171100 的内容 二.修改代码 主要代码逻辑在ArrowPopup中的reorderAndShow方法和closeCom…...

Elasticsearch概述和DSL查询总结
目录 Elasticsearch概述 1. 什么是Elasticsearch 2. 作用 3. 特点 DSL(Domain Specifit Language)特定领域语言: 概念和作用 查询代码总结 最后附项目准备 1.创建搜索工程(maven工程) 2.配置文件 application…...

扩展卡尔曼滤波器代码
文章目录 前言问题状态向量和观测向量加性噪声的形式状态方程及求导观测方程及求导状态初始化过程噪声和观测噪声卡尔曼滤波过程code 前言 卡尔曼滤波器在1960年被卡尔曼发明之后,被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使…...

9:00开始面试,9:08就出来了,这问题问的实在是····
外包工作3年,今年裸辞跳槽,很幸运的是找到了下家,不过 自从加入到这家公司,每天不是在加班就是在加班的路上,薪资倒是给的不少,所以我也就忍了。没想到6月一纸通知,所有人都不许加班࿰…...

揭秘:5个美国程序员与日本程序员的差异
大家好,这里是程序员晚枫。想了解更多精彩内容,快来关注程序员晚枫 今天以美国和日本程序员为例,给大家分享一下国外程序员的生活。 以下是五个美国程序员和日本程序员的的区别: 工作方式:美国程序员通常更注重自由和…...

Springboot实现简单JWT登录鉴权
登录为啥需要鉴权? 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token&am…...

C++设计模式创建型之工厂模式整理
一、工厂模式分类 工厂模式属于创建型模式,一般可以细分为简单工厂模式、工厂模式和抽象工厂模式。每种都有不同的特色和应用场景。 二、工厂模式详情 1、简单工厂模式 1)概述 简单工厂模式相对来说,在四人组写的《设计模式------可复用面…...

前端安全XSS和CSRF讲解
文章目录 XSSXSS攻击原理常见的攻击方式预防措施 CSRFCSRF攻击原理常见攻击情景预防措施: CSRF和XSS的区别 XSS 全称Cross Site Scripting,名为跨站脚本攻击。为啥不是单词第一个字母组合CSS,大概率与样式名称css进行区分。 XSS攻击原理 不…...