首页 > 其他分享 >supervision KeyPoints类及其Annotator类 Day(4)

supervision KeyPoints类及其Annotator类 Day(4)

时间:2024-10-27 22:20:39浏览次数:3  
标签:right image cv2 KeyPoints supervision import 关键点 Day left

上一次学习完了Detection和segmentation中的Utils,今天学习关键点检测相关的方法和类

  1. KeyPoints类

    用于图像关键点检测的一个类,使用方法与Detection类相似,对于不同的视觉库,提供了多种讲检测结果转为KeyPoints类的方法

    • 属性:

      • xy:形状为(n,m,2)的数组,n表示检测到n个对象,m表示该对象由m个大小相等的特征点构成,每个点用[x,y]的格式表示
      • confidence:形状为(n,m)的数组,表示各关键点的置信度
      • class_id:形状为(n,)的数组,表示检测到的对象的类id
      • data:与Detection类的data一致,为一个字典,字典的键为"class_name",值为检测到的每个目标的类。同样,KeyPoints类重写了__getitem__方法,可以直接用类的对象使用["class_name"]来直接索引
    • 重要方法:

      • _getitem_:被重写过,可以用来进行过滤操作,与Detection类使用方法一致

      • from_ultralytics:将yolo的检测结果转换成KeyPoints类的实例

        import cv2
        from ultralytics import YOLO
        import supervision as sv
        
        image = cv2.imread('images/zidane.jpg')
        model = YOLO('yolo11n-pose.pt')
        output=model(image)[0]
        
        keypoint=sv.KeyPoints.from_ultralytics(output)
        

        image-20241027213045544

  2. Annotators

    对于关键点检测,supervision提供了三个Annotator类,用于绘制不同的关键点样式

    1.VertexAnnotator类

    用点将关键点标注出来

    • 构造函数参数

      1. color:关键点的颜色,类型为supervision的Color,默认为ROBOFLOW,用默认值即可
      2. radius:关键点的半径大小,默认为4
    • annotate方法:

      在指定图像上标注出关键点

      1. scene:要绘制的图像
      2. key_points:提供关键点的KeyPoints类的实例
      3. 返回值为绘制了标记的图片,但这个函数会默认更改传入的参数图像,因此可以不用返回值
      import cv2
      from ultralytics import YOLO
      import supervision as sv
      
      image = cv2.imread('images/zidane.jpg')
      model = YOLO('yolo11n-pose.pt')
      output=model(image)[0]
      
      keypoint=sv.KeyPoints.from_ultralytics(output)
      
      vertex_annotator=sv.VertexAnnotator()
      vertex_annotator.annotate(image,keypoint)
      
      cv2.imshow('img',image)
      cv2.waitKey(0)
      

      image-20241027215133711

    2.EdgeAnnotator类

    用线将相邻关键点连接出来

    • 构造函数参数

      1. color:关键点的颜色,类型为supervision的Color,默认为ROBOFLOW,用默认值即可
      2. thickness:线条的粗细,默认为2
      3. edges:要绘制的边缘,可以自己提供,格式为[List[Tuple[int, int]]],其中元组类型的数据表示点坐标。默认为None,表示自动选择
    • annotate方法:

      在指定图像将关键点相连

      1. scene:要绘制的图像
      2. key_points:提供关键点的KeyPoints类的实例
      3. 返回值为绘制了标记的图片,但这个函数会默认更改传入的参数图像,因此可以不用返回值
      import cv2
      from ultralytics import YOLO
      import supervision as sv
      
      image = cv2.imread('images/zidane.jpg')
      model = YOLO('yolo11n-pose.pt')
      output=model(image)[0]
      
      keypoint=sv.KeyPoints.from_ultralytics(output)
      
      edge_annotator=sv.EdgeAnnotator()
      edge_annotator.annotate(image,keypoint)
      
      cv2.imshow('img',image)
      cv2.waitKey(0)
      

      image-20241027215840920

    3.VertexLabelAnnotator类

    在图像上绘制骨架顶点标签,每个关键点会对应有一个id值,如"nose"为0,"left eye"为1,它会将这个数字绘制在对应点上,具体顺序为:

    "nose","left eye","right eye","left ear","right ear","left shoulder","right shoulder","left elbow","right elbow","left wrist","right wrist","left hip","right hip","left knee","right knee","left ankle","right ankle"

    • 构造函数参数

      1. color:关键点的颜色,类型为supervision的Color,默认为ROBOFLOW,用默认值即可
      2. text_color:标签的颜色,默认为WHITE
      3. text_scale:文字的比例,默认为0.5
      4. text_thickness:文字的粗细,默认为1
      5. text_padding:文本的外边距,默认为10
      6. border_radius:边框的圆角半径,数值高一点可生成圆,默认为0
    • annotate方法:

      在指定图像上标注出关键点

      1. scene:要绘制的图像
      2. key_points:提供关键点的KeyPoints类的实例
      3. labels:自定义的标签列表,用法与Detection类的LabelAnnotator类的labels参数一样,不传入则默认使用关键点
      4. 返回值为绘制了标记的图片,但这个函数会默认更改传入的参数图像,因此可以不用返回值
      import cv2
      from ultralytics import YOLO
      import supervision as sv
      
      image = cv2.imread('images/zidane.jpg')
      model = YOLO('yolo11n-pose.pt')
      output=model(image)[0]
      
      keypoint=sv.KeyPoints.from_ultralytics(output)
      
      vertex_annotator=sv.VertexAnnotator()
      vertex_annotator.annotate(image,keypoint)
      
      cv2.imshow('img',image)
      cv2.waitKey(0)
      

      下面一个是自定义labels的结果

      import cv2
      from ultralytics import YOLO
      import supervision as sv
      
      image = cv2.imread('images/zidane.jpg')
      model = YOLO('yolo11n-pose.pt')
      output=model(image)[0]
      
      keypoint=sv.KeyPoints.from_ultralytics(output)
      
      labels=[
          "nose", "left eye", "right eye", "left ear",
          "right ear", "left shoulder", "right shoulder", "left elbow",
          "right elbow", "left wrist", "right wrist", "left hip",
          "right hip", "left knee", "right knee", "left ankle",
          "right ankle"
      ]
      vertex_label_annotator=sv.VertexLabelAnnotator()
      vertex_label_annotator.annotate(image,keypoint,labels=labels)
      
      cv2.imshow('img',image)
      cv2.waitKey(0)
      

      image-20241027222137557

以上就算supervision中关键点检测的所有内容了

标签:right,image,cv2,KeyPoints,supervision,import,关键点,Day,left
From: https://www.cnblogs.com/WineMarks-Garden/p/18509121

相关文章

  • linux学习day2——shell脚本
    shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]判断语句循环语句函数exit命令文件重定向引入外部脚本1.shell语法——概论概论shell是我们通过命令行与操作系统沟通的语言。shell脚本可以直接在命令行中执行,也......
  • linux学习day2——tmux和vim
    1.tmux教程功能:(1)分屏。(2)允许断开Terminal连接后,继续运行进程。结构:一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。实例:tmux:session0:window0:pane0pane......
  • 代码随想录算法训练营day27| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃
    学习资料:https://programmercarl.com/0122.买卖股票的最佳时机II.html#算法公开课贪心PART2学习记录:122.买卖股票的最佳时间2(求最大利润,贪心:把所有正数相加;后一天与当天的股票价格差值,若为正就加入利润,若为负,则不加)点击查看代码classSolution:defmaxProfit(self,pr......
  • 备战蓝桥杯JAVA B组Day10
    备战蓝桥杯JAVAB组Day10目录备战蓝桥杯JAVAB组Day10前言P1428小鱼比可爱P1427小鱼的数字游戏P5727【深基5.例3】冰雹猜想P1047[NOIP2005普及组]校门外的树P5728【深基5.例5】旗鼓相当的对手前言零基础小白备战蓝桥杯第十天,刷题内容为:洛谷题单【入门3】循......
  • 代码随想录算法训练营Day45 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、1
    目录121.买卖股票的最佳时机122.买卖股票的最佳时机II123.买卖股票的最佳时机III121.买卖股票的最佳时机题目121.买卖股票的最佳时机-力扣(LeetCode)给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只......
  • 【代码随想录Day54】图论Part06
    冗余连接题目链接/文章讲解:代码随想录importjava.util.Scanner;publicclassMain{privateintnumberOfNodes;//节点数量privateint[]parent;//存储每个节点的父节点//构造函数初始化并查集publicMain(intsize){numberOfNod......
  • 【代码随想录Day53】图论Part05
    并查集理论基础题目链接/文章讲解:并查集理论基础|代码随想录寻找存在的路径题目链接/文章讲解:代码随想录importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){intnumberOfElements,numberOfConnections;Scann......
  • 【代码随想录Day52】图论Part04
    字符串接龙题目链接/文章讲解:代码随想录importjava.util.*;publicclassMain{//使用广度优先搜索(BFS)方法计算从beginWord到endWord的最短转换序列长度publicstaticintfindLadderLength(StringbeginWord,StringendWord,List<String>wordList){......
  • 智能EDA小白从0开始 —— DAY29 艾伟达
    公司介绍艾伟达科技有限公司,成立于充满机遇与挑战的2024年,是一家专注于突破欧美技术封锁,特别是在数字芯片设计自动化前端逻辑综合及全流程工具软件领域,进行深度研发、销售与技术服务的高科技企业。公司总部位于风景如画的浙江杭州,这里不仅是中国的创新高地,也是艾伟达梦想起航......
  • 正睿csp-s 7连测 day 7
    总结由于晚上六点尚处于机房的打摆时间,所以先颓了三十分钟。\(5\)分钟写完t1,继续摆到七点。t2想了一会,一开始以为是先贪心+dp,发现被样例卡了。然后再想了一个dp+贪心,过了大样例。好像过了?t3想了半小时,好像是线段树,但一时不知道维护什么。先写了一个\(60\)分暴力。......