0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

日本yolov8用户案例

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2023-12-18 15:51 次阅读

这篇文章转载来自SWITCH SCIENCE的SuzukiSumiya,本篇文章转载已获作者授权。

原文链接来自:https://www.switch-science.com/blogs/magazine/jetson-maker-faire-tokyo-2023

1.引言
这篇文章来自SWITCH SCIENCE的SuzukiSumiya 在Maker Faire Tokyo 2023上演示了通过模拟人手臂的姿态来控制机械臂。演示的内容是使用USB摄像头通过图像识别估计手臂,并将mycobot制作成类似的手臂形状。

wKgaomV_7PWAEx3JAAPa3TzWnSc361.png

视频链接:https://youtu.be/h1H6pSvhQxQ

该项目主要使用Ultralytics YOLOv8来进行姿态的估计,结合机器视觉和机械臂的控制等功能。本篇文章我们将复写这个项目,一步一步的开始如何建立起这个项目。

2.技术介绍
YOLOv8介绍
Ultralytics YOLOv8 是一种尖端、最先进 (SOTA) 模型,它建立在先前 YOLO 版本成功的基础上,并引入了新功能和改进,以进一步提高性能和灵活性。 YOLOv8 的设计目标是快速、准确且易于使用,使其成为各种对象检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。https://docs.ultralytics.com/

Ultralytics YOLOv8 is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLOv8 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.

wKgaomV_7cGASNJsABTYjc-CjrM758.png

YOLOv8,作为这一系列的最新版本,包含以下特点和改进:

更快的检测速度:YOLO 系列以其快速的检测速度而闻名,每个后续版本都在这方面进行了优化。
更高的准确性:通过使用更先进的神经网络架构和学习算法,YOLOv8 可能会提高物体检测的准确性。
更好的泛化能力:改进的算法可能更有效地处理不同类型的图像数据,包括在复杂背景和不同光照条件下的检测。
适应性和可扩展性的增强:新版本可能会提供更多的定制选项和设置,使其能够更好地适应不同的应用场景和需求。
优化的资源使用:对计算效率的改进可能会使 YOLOv8 在资源有限的设备上运行得更好,如在移动设备或嵌入式系统中。
简单点说,给它一张图片识别,YOLOv8能够快速的识别出图片中的物体,并且将它标记出来。

wKgaomV_7veAXGnUAGuCqg1gQ6c921.png

myCobot 280 M5
myCobot 280 M5 是 Elephant Robotics 和 M5Stack 合作开发的最小、最轻的 6 轴协作机器人。 它采用一体化模块化设计,重量仅为850克,格外轻巧。 配备6个高性能伺服电机,具有响应快、惯量低、转动平稳等特点。

The myCobot 280 M5 is the smallest and lightest 6-axis collaborative robot developed in collaboration by Elephant Robotics and M5Stack. It adopts an integrated modular design, weighing only 850 grams, making it exceptionally lightweight. Equipped with 6 high-performance servo motors, it features rapid responsiveness, low inertia, and smooth rotation.

wKgaomVlUHyADM83AAV3vnjgyZY410.png

mycobot 280 支持多平台开发Linux,Windows,MacOS,并且控制接口全部开源支持目前市面上主流的编程语言pythonc++/c#等。

python-pymycobot mycobot系列的控制库https://github.com/elephantrobotics/pymycobot

wKgZomV_7xWAL-8CAAFmu_ZbV3Y157.png

Jetson Orin Nano
Jetson Orin Nano 是 NVIDIA 的一种嵌入式人工智能计算模块,具有高性能和低功耗。它基于 NVIDIA 的 Orin 芯片,该芯片具有 12 个 Arm 核心和一个 NVIDIA Ampere GPU。这使 Jetson Orin Nano 能够运行复杂的人工智能应用程序,例如机器视觉、自然语言处理和增强现实。

https://developer.nvidia.com/buy-jetson?product=all&location=JP

wKgaomV_7yOABfnlAAUeGEBIEAU091.png

开发过程
开发环境:
软件:

操作系统:Linux

编译语言:Python

python 库:

import cv2
import math
import time
from ultralytics import YOLO
from pymycobot.mycobot import MyCobot


yolov8模型:yolov8n-pose.pt

https://docs.ultralytics.com/tasks/pose/

硬件

USB 摄像头*1

myCobot 280 M5Stack *1

Jetson Orin Nano*1

显示器,键盘鼠标*1

代码实现
yolov8姿态估计模型-yolov8n-pose

yolov8有训练好的姿态估计模型,可以直接使用。姿态估计是一项任务,其涉及识别图像中特定点的位置,通常被称为关键点。这些关键点可以代表物体的各种部位,如关节、地标或其他显著特征。关键点的位置通常表示为一组2D [x, y] 或3D [x, y, visible] 坐标。

简单使用的方法:

import torch
from ultralytics.yolov8 import YOLO
import cv2

#引入模型
model = YOLO('yolov8n-pose.pt')
#打开图片
img = cv2.imread('image.jpg')
# 将图片引入模型
results = model(img)

# 展示结果
for r in results:
   im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组
   im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
   im.show()  # 显示图像
   im.save('results.jpg')  # 保存图像
wKgZomV_-VeAEdxmAACZ8jtlTYw515.png


在项目中需要获取人手比的手腕,肘部和肩部的x,y坐标来进行计算角度,然后将相同的角度发送到mycobot的第二第三关节。

wKgZomV_-V-AWAypAAJeDmfolV8417.png

Code:

 if keypoints_tensor is not None and keypoints_tensor.size(1) > 0:
        # 提取特定关键点的坐标和置信度
  x_mimi = keypoints_tensor[0][3][0]
  y_mimi = keypoints_tensor[0][3][1]
  conf_mimi = confidence_score[0][3]
  
  x_kosi = keypoints_tensor[0][13][0]
  y_kosi = keypoints_tensor[0][13][1]
  conf_kosi = confidence_score[0][13]
  
  x_kata = keypoints_tensor[0][5][0]
  y_kata = keypoints_tensor[0][5][1]
  conf_kata = confidence_score[0][5]
  
  x_hizi = keypoints_tensor[0][7][0]
  y_hizi = keypoints_tensor[0][7][1]
  conf_hizi = confidence_score[0][7]
  
  x_te = keypoints_tensor[0][9][0]
  y_te = keypoints_tensor[0][9][1]
  conf_te = confidence_score[0][9]

然后计算腰部到肩部之间的角度,这个角度主要关注的是上半身的一个简化模型,可能用于模拟肩部的运动或整个上半身的倾斜。

#计算AB之间的向量
vector_AB = (x_kata - x_hizi, y_kata - y_hizi)
#用函数计算这个向量的角度
angle_rad1 = math.atan2(vector_AB[1], vector_AB[0])
#将角度从弧度转为度
angle_deg1 = math.degrees(angle_rad1)
#计算后调整的角度值用于控制机械臂
mycobot1 = int(angle_deg1)-90


接下来在计算手部,肘部,肩部三个关键点形成的角度,这个角度涉及更复杂的姿势分析,因为它包括了从手部到膝部再到肩部的整个链条,结合这两种角度的计算,可以让机械臂模仿人体姿势更加精准和自然。

  x1=x_te #手部的x,y
  y1=y_te
  
  x2=x_hizi #肘部的X,Y
  y2=y_hizi
  
  x3=x_kata # 肘部的x,y
  y3=y_kata
  
  
  #定义三个做标点
  point1 = (x1, y1)
  point2 = (x2, y2)
  point3 = (x3, y3)
  # 计算向量
  vector1 = (x2 - x1, y2 - y1)
  vector2 = (x3 - x2, y3 - y2)
  # 计算向量长度 
  length1 = math.sqrt(vector1[0] ** 2 + vector1[1] ** 2)
  length2 = math.sqrt(vector2[0] ** 2 + vector2[1] ** 2)
  # 计算点积
  dot_product = vector1[0] * vector2[0] + vector1[1] * vector2[1]
  # 计算角度(弧度)
  angle_rad = math.atan2(vector2[1], vector2[0]) - math.atan2(vector1[1], vector1[0])
       # 如果角度向右弯曲则为 0 度
       # 如果角度从右向左转动则为 180 度
       # 如果在一条直线上,则为 -90 度(或 +90 度,以哪个为准)
  
         if angle_rad > math.pi:
   angle_rad -= 2 * math.pi
  elif angle_rad < -math.pi:
   angle_rad += 2 * math.pi
  # 将角度转换为度数
  mycobot2 = int(math.degrees(angle_rad))


最后将获取到的角度,通过条件判断控制机械臂进行手臂的模拟运动。

#机械臂在计算的mycobot1,mycobot2可接受的范围内分别是是 -180 至 180 度和 -155 至 155 度   
if -180 <= mycobot1 and mycobot1 <= 180 and -155 <= mycobot2 and mycobot2 <= 155 and conf_hizi >= 0.75:
            #符合条件led灯会变蓝
   mc.send_angles ([90,-mycobot1,mycobot2,0,-90,0],100)
   mc.set_color(0, 0, 255)
   print("A点的角度(度数法):", conf_hizi)
  else:# 不符合条件LED等会变红
   print("A点的角度(度数法):", conf_hizi)
   mc.set_color(255, 0, 255)


总结
SuzukiSumiya在maker faire tokyo 2023上展示了Jetson Orin Nano 和mycobot以及yolov8-pose相结合实现了一个非常有趣的demo。可以学到多个方面的知识和技能,包括计算机视觉、机器人编程、数学计算,以及如何将这些元素结合起来创建一个交互式的系统。

下面的视频是对SuzukiSumiya做这个项目的一个访谈。

https://www.youtube.com/watch?v=DB5WiUQVhek

如果你有什么其他有趣的项目,也可以联系我们,我们会分享你的项目在各个平台让大家都关注到。m0_71627844/article/details/135062016

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3243

    浏览量

    42378
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84438
  • 机械臂
    +关注

    关注

    12

    文章

    509

    浏览量

    24485
收藏 人收藏

    评论

    相关推荐

    使用YOLOv8做目标检测和实例分割的演示

    YOLOv8是来自Ultralytics的最新的基于YOLO的对象检测模型系列,提供最先进的性能。
    的头像 发表于 02-06 10:11 7305次阅读

    YOLOv8自定义数据集训练到模型部署推理简析

    如果你只是想使用而不是开发,强烈推荐通过pip安装方式获取YOLOv8包!YOLOv8安装命令行
    的头像 发表于 03-24 09:27 4581次阅读

    TensorRT 8.6 C++开发环境配置与YOLOv8实例分割推理演示

    YOLOv8实例分割TensorRT 推理代码已经完成C++类封装,三行代码即可实现YOLOv8对象检测与实例分割模型推理,不需要改任何代码即可支持自定义数据训练部署推理
    的头像 发表于 04-25 10:49 5588次阅读
    TensorRT 8.6 C++开发环境配置与<b class='flag-5'>YOLOv8</b>实例分割推理演示

    在AI爱克斯开发板上用OpenVINO™加速YOLOv8目标检测模型

    《在 AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 分类模型》介绍了在 AI 爱克斯开发板上使用 OpenVINO 开发套件部署并测评 YOLOv8 的分类模型,本文将介绍在 AI 爱克斯开发板上使用 OpenVINO 加速
    的头像 发表于 05-12 09:08 1256次阅读
    在AI爱克斯开发板上用OpenVINO™加速<b class='flag-5'>YOLOv8</b>目标检测模型

    YOLOv8版本升级支持小目标检测与高分辨率图像输入

    YOLOv8版本最近版本又更新了,除了支持姿态评估以外,通过模型结构的修改还支持了小目标检测与高分辨率图像检测。原始的YOLOv8模型结构如下。
    的头像 发表于 05-16 11:14 1.2w次阅读
    <b class='flag-5'>YOLOv8</b>版本升级支持小目标检测与高分辨率图像输入

    AI爱克斯开发板上使用OpenVINO加速YOLOv8目标检测模型

    《在AI爱克斯开发板上用OpenVINO加速YOLOv8分类模型》介绍了在AI爱克斯开发板上使用OpenVINO 开发套件部署并测评YOLOv8的分类模型,本文将介绍在AI爱克斯开发板上使用OpenVINO加速YOLOv8目标检
    的头像 发表于 05-26 11:03 1185次阅读
    AI爱克斯开发板上使用OpenVINO加速<b class='flag-5'>YOLOv8</b>目标检测模型

    一文彻底搞懂YOLOv8【网络结构+代码+实操】

    从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。
    的头像 发表于 06-15 17:15 1.2w次阅读
    一文彻底搞懂<b class='flag-5'>YOLOv8</b>【网络结构+代码+实操】

    教你如何用两行代码搞定YOLOv8各种模型推理

    大家好,YOLOv8 框架本身提供的API函数是可以两行代码实现 YOLOv8 模型推理,这次我把这段代码封装成了一个类,只有40行代码左右,可以同时支持YOLOv8对象检测、实例分割、姿态评估模型的GPU与CPU上推理演示。
    的头像 发表于 06-18 11:50 2968次阅读
    教你如何用两行代码搞定<b class='flag-5'>YOLOv8</b>各种模型推理

    目标检测算法再升级!YOLOv8保姆级教程一键体验

    YOLO作为一种基于图像全局信息进行预测的目标检测系统,始终保持着极高的迭代更新率,从YOLOv5到YOLOv8,本次升级主要包括结构算法、命令行界面、PythonAPI等。具体到YOLOv8,它可
    的头像 发表于 02-28 11:16 2539次阅读
    目标检测算法再升级!<b class='flag-5'>YOLOv8</b>保姆级教程一键体验

    三种主流模型部署框架YOLOv8推理演示

    深度学习模型部署有OpenVINO、ONNXRUNTIME、TensorRT三个主流框架,均支持Python与C++的SDK使用。对YOLOv5~YOLOv8的系列模型,均可以通过C++推理实现模型
    的头像 发表于 08-06 11:39 2633次阅读

    解锁YOLOv8修改+注意力模块训练与部署流程

    很多人也想跟修改YOLOv5源码一样的方式去修改YOLOv8的源码,但是在github上面却发现找到的YOLOv8项目下面TAG分支是空的
    的头像 发表于 08-11 14:14 4143次阅读
    解锁<b class='flag-5'>YOLOv8</b>修改+注意力模块训练与部署流程

    如何修改YOLOv8的源码

    很多人也想跟修改YOLOv5源码一样的方式去修改YOLOv8的源码,但是在github上面却发现找到的YOLOv8项目下面TAG分支是空的,然后就直接从master/main下面把源码克隆出来一通
    的头像 发表于 09-04 10:02 1902次阅读
    如何修改<b class='flag-5'>YOLOv8</b>的源码

    YOLOv8实现任意目录下命令行训练

    当你使用YOLOv8命令行训练模型的时候,如果当前执行的目录下没有相关的预训练模型文件,YOLOv8就会自动下载模型权重文件。这个是一个正常操作,但是你还会发现,当你在参数model中指定已有
    的头像 发表于 09-04 10:50 1064次阅读
    <b class='flag-5'>YOLOv8</b>实现任意目录下命令行训练

    基于YOLOv8的自定义医学图像分割

    YOLOv8是一种令人惊叹的分割模型;它易于训练、测试和部署。在本教程中,我们将学习如何在自定义数据集上使用YOLOv8。但在此之前,我想告诉你为什么在存在其他优秀的分割模型时应该使用YOLOv8呢?
    的头像 发表于 12-20 10:51 724次阅读
    基于<b class='flag-5'>YOLOv8</b>的自定义医学图像分割

    基于OpenCV DNN实现YOLOv8的模型部署与推理演示

    基于OpenCV DNN实现YOLOv8推理的好处就是一套代码就可以部署在Windows10系统、乌班图系统、Jetson的Jetpack系统
    的头像 发表于 03-01 15:52 1388次阅读
    基于OpenCV DNN实现<b class='flag-5'>YOLOv8</b>的模型部署与推理演示