python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)

省流建议
本文针对以下需求:

  • 自动化标注一些目标
  • 不再想使用yolo
  • 想在目标检测/语意分割有所建树
  • 计算机视觉项目
  • 想玩一玩大模型
  • 了解自动化工具
  • 了解最前沿模型
  • 自定义目标P图替换

  • 在这里插入图片描述

确定好需求,那么我们发车!

实现功能与结果

  1. 该模型将首先使用对语言的理解来识别文本提示中提到的对象。例如,在描述“两只用棍子的狗”中,该模型将“狗”和“棍子”一词识别为对象

在这里插入图片描述

  1. 然后,该模型将为自然语言描述中确定的每个对象生成一组对象建议。对象建议是使用各种功能(例如对象的颜色,形状和纹理)生成的
  2. 接下来,模型返回每个对象建议的分数。分数是对象建议包含实际对象的可能性
  3. 然后,该模型将选择顶级对象建议作为最终检测。最终检测是图像中最自信的对象

在这里插入图片描述

我知道你对文字不感兴趣,你想直接拿代码来就用!
那么,它来了。

代码部署

在下一节中,我们将演示一个开放集对象目标检测。在这里,我们将使用一个预先训练的模型来检测’玻璃与盖子’(作为文本提示)通过摄像头饲料。

首先导入相关的库和 模块。代码的最后两行导入所需的推理模块。

import os
import cv2
import numpy as np
from PIL import Image

设置模型配置和权重文件路径

接下来,定义 模型配置文件和权重文件路径。除此之外,我们还定义了两个超参数框和图像阈值来控制对象框和图像的选择。默认情况下,模型输出900个对象框,这些对象框根据它们与输入文本的相似性得分进行排序。通过调整 max _ box 超参数,可以更改接地 DIN模型输出的对象框的数量。

HOME = os.getcwd()
# set model configuration file path
CONFIG_PATH = os.path.join(HOME, "groundingdino/config/GroundingDINO_SwinT_OGC.py")

# set model weight file ath
WEIGHTS_NAME = "groundingdino_swint_ogc.pth"
WEIGHTS_PATH = os.path.join(HOME, "weights", WEIGHTS_NAME)

# set text prompt
TEXT_PROMPT = "glass with lid"

# set box and text threshold values
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25

检测

最后,我们使用 opencv 模块启动我们的摄像机 feed,并连续读取帧。在将摄像机提要传递给模型之前,我们需要对图像帧执行一些变换。首先,通过执行三个图像转换创建一个转换对象。

随机尺寸([800] ,max _ size = 1333)-此转换将图像的宽度调整为800,最大高度为1333像素。这有助于防止模型过度适应特定的尺寸。

ToTensor ()-这个转换将图像转换为一个 Python 张量。

正常化([0.485,0.456,0.406] ,[0.229,0.224,0.225])-这个转换通过减去平均值并除以 ImageNet 数据集的标准差来正常化图像。这有助于使模型对闪电和其他因素的变化更加稳健。

接下来,帧(相机帧的一个数字数组)被转换成 RGB 颜色空间中的 PIL 图像对象,最后通过执行上述三个转换转换成一个转换对象。

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    # create a transform function by applying 3 image transaformations
    transform = T.Compose(
        [
            T.RandomResize([800], max_size=1333),
            T.ToTensor(),
            T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ]
    )
    # convert frame to a PIL object in RGB space
    image_source = Image.fromarray(frame).convert("RGB")
    # convert the PIL image object to a transform object
    image_transformed, _ = transform(image_source, None)
    
    # predict boxes, logits, phrases
    boxes, logits, phrases = predict(
    model=model, 
    image=image_transformed, 
    caption=TEXT_PROMPT, 
    box_threshold=BOX_TRESHOLD, 
    text_threshold=TEXT_TRESHOLD,
    device='cpu')
    
    # annotate the image
    annotated_frame = annotate(image_source=frame, boxes=boxes, logits=logits, phrases=phrases)
    # display the output
    out_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
    cv2.imshow('frame', out_frame)

敲黑板 重点

自动化标注举例说明

你想获取图中熊这个目标
在这里插入图片描述

不是图片中所有的类别你都想要你只想获取部分目标,那么你在定义时要如下操作:
需要将Text Prompt做替换 ,如你只想对图片中的熊感兴趣:
Text Prompt=bear.
在这里插入图片描述
对应生成的label/json文件

"shapes": [
    {
      "label": "dog",
      "points": [
        [
          20.913907284768214,
          26.47019867549669
        ],
        [
          87.96688741721854,
          97.66225165562913
        ]
      ],
      "group_id": null,
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "cat",
      "points": [
        [
          91.11258278145695,
          43.35761589403974
        ],
        [
          131.50993377483442,
          84.91390728476821
        ]
      ],

如果对大海和熊感兴趣,则:
Text Prompt=bear,sea
注意 逗号间隔!

自动化P图

如下我们可以选择将图中的目标狂替换为我们想要的目标!
在这里插入图片描述

可以说做到了完美贴合P图 ,再也不用PS工具费时费力修图啦

代码获取

code get:见博客底部推广

http://www.niftyadmin.cn/n/5192156.html

相关文章

Swagger(3):Swagger入门案例

1 编写SpringBoot项目 新建一个Rest请求控制器。 package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.Reques…

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware,Linux发行版是CentOs 7,发现在虚拟机中使用ping www.baidu.com是成功的,但是使用FinalShell远程连接不上虚拟机,本地网络也ping不通虚拟机&#xff0c…

AI智剪:批量剪辑实战,技巧与实例

随着人工智能技术的不断发展,越来越多的领域开始应用AI技术提升工作效率和质量。其中,AI智剪技术在视频剪辑领域的应用也越来越广泛。AI智剪是一种基于人工智能技术的视频剪辑方法,通过机器学习算法对视频进行自动分析和处理,实现…

腾讯云服务器租用价格,腾讯云服务器价格流量怎么算?

首先,让我们来看看腾讯云服务器租用价格。根据您的需求不同,腾讯云提供了多种不同的配置选项,从轻量级应用服务器到高性能的GPU服务器,都可以满足您的需求。以下是一些常见的腾讯云服务器租用价格: 一、腾讯云服务器租…

CentOS挂载:解锁文件系统的力量

目录 引言1 挂载简介2 挂载本地分区3 挂载网络共享文件系统4 使用CIFS挂载结论 引言 在CentOS(一种基于Linux的操作系统)上挂载文件系统是一项常见而重要的任务,无论是将新的磁盘驱动器添加到系统,还是挂载网络共享资源&#xff…

C++模版初阶

泛型编程 如下的交换函数中,它们只有类型的不同,应该怎么实现一个通用的交换函数呢? void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp…

【GUI】-- 09 JComboBox JList、JTextField JPasswordField JTextArea

GUI编程 03 Swing 3.6 列表 下拉框 package com.duo.lesson06;import javax.swing.*; import java.awt.*;public class ComboBoxDemo01 extends JFrame {public ComboBoxDemo01() throws HeadlessException {Container contentPane getContentPane();JComboBox<Object&…

nginx的所有知识点以及使用

Nginx是一款高性能的Web服务器和反向代理服务器&#xff0c;具有轻量级、高并发、低内存占用等优点&#xff0c;常用于构建高性能的Web服务。下面是Nginx的知识点和使用技巧&#xff1a; 安装Nginx&#xff1a;Nginx可以通过源码编译安装或使用包管理器进行安装。 配置Nginx&a…