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

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

3天内不再提示

开源六轴协作机器人myCobot 320结合人脸表情识别情绪!

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2024-08-12 15:21 次阅读

在大家的印象中,机械臂通常被应用在工业领域,执行一些重复性工作,以帮助和替代人类。然而,机械臂不仅限于此,它们也可以成为陪伴型机器人,为我们提供更多样化的互动体验。

今天,我想探索机械臂的一些与众不同的功能。通过结合人脸表情识别技术,我们可以让机械臂感知到我们的情绪变化。当我们开心时,机械臂可以跟着一起开心地舞动;当我们伤心难过时,它可以过来安慰我们,给予温暖的抚摸。这种基于表情反馈的互动能让机械臂更好地陪伴我们。

在接下来的部分中,我们将详细介绍这种系统的工作原理、技术实现和应用场景,展示机械臂。

文章会分为机械臂介绍,技术点介绍,项目的实现三部分,首先我将介绍我使用到的机械臂。

Robotic Arm
myCobot 320 M5
Mycobot 320,一款具备六自由度的协作型机械臂,凭借其独特的设计和高精度伺服电机成为了领域内的亮点。这款机械臂拥有最大350mm的工作半径和最大1000g的末端负载能力,使其适用于广泛的应用场景。Mycobot 320不仅支持灵活的视觉开发应用,还提供了深入的机械运动原理解析,为用户带来了12个标准的24V工业IO接口,满足不同的开发需求。

wKgaoma5sX-AIX5cAADPi6sEhMk998.png

它的开放性极高,兼容大多数主流操作系统编程语言,包括PythonROS等,为开发者提供了极大的灵活性和自由度。无论是在教育、研发还是工业应用中,Mycobot 320都能提供强大支持,使创新和应用开发更加便捷高效。

摄像头模组
适配于myCobot 320M5的摄像头模组可以安装在机械臂末端。通过摄像头用USB数据线进行通信,实时获取到机械臂末端的一个画面,就能够识别人脸的表情处于怎样的一个状态。

wKgaoma5seKALJCPABAV-cgQqkY374.png

技术概览
pymycobot
pymycobot 是一个用于与 mycobot 机械臂进行串行通信和控制的 Python API。这个库是为了方便开发者使用 Python 语言控制 mycobot 机械臂而设计的。它提供了一系列的函数和命令,让用户可以通过编程方式控制机械臂的动作和行为。例如,用户可以使用该库获取机械臂的角度、发送角度指令来控制机械臂的移动,或者获取和发送机械臂的坐标信息

使用这个库唯一的标准是,得使用mycobot 系列的机械臂,这是专门为mycobot进行适配的一款机械臂。

pymycobot · PyPI

wKgZoma5sjKAb0JYAAGdxcFKrD4775.png

deepface
DeepFace 是一个强大的 Python 库,用于面部识别和面部属性分析。它基于多种深度学习模型,如 VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID 和 Dlib 等,提供了面部验证、面部检测、面部属性分析(如性别、年龄、种族和情绪)等功能。DeepFace 通过简单的接口使得复杂的面部识别和分析任务变得更加容易,广泛应用于安全系统、用户身份验证和智能交互等领域。

GitHub - serengil/deepface: A Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python

wKgZoma5soOAUP9FAAJUSq1BpIs907.png

开发过程
项目架构
我将该项目主要分为两个功能:

Emotion detection Recognition: 主要用来处理人脸面部的情绪识别,能够返回信息当前人脸的情绪主要是什么,平常,开心,还是伤心等表情

Robotic Arm Control:主要功能用于设置机械臂的运动控制,例如坐标控制,角度控制等等。

情绪识别功能实现
现在的人脸情绪识别已经很多厉害的人提供了各种识别的方法在github上了,但如果想自己做一个识别人脸情绪的功能的话还是分为4 个步骤:

1. 数据收集和预处理

2. 模型选择和训练

3. 模型优化和测试

4. 部署和应用

从0开始的话,需要做蛮多步骤的,如果我们只是单纯的使用,没有刻意需要用在某些应用场景当中,我们可以选择一款别人已经训练好的检测模型,我们直接使用就好了!现在目前有OpenCV,FER(Facial Expression Recognition),DeepFace,Microsoft Azure Face API等等。

这次我们用deepface进行emotion识别的使用。

环境搭建

首先当然是安装使用环境啦,opencv的版本不要使用较低的版本会影响使用。

pip install deepface
pip install opencv-python


它有很多功能有年龄的检测,性别的检测,情绪的检测等等多种模型,本次我们主要是用到的是情绪的检测,要用到“facial_expression_model_weights.h5”这个模型,再使用的过程会自动帮忙下载这个模型来使用。

简单介绍一下使用的功能。

import os
import cv2
from deepface import DeepFace
# 读取图像
image = cv2.imread(image_path)

# 分析图像中的面部表情
results = DeepFace.analyze(image, actions=['emotion'], enforce_detection=False)

print(result)
[{'emotion': {'angry': 81.24255537986755, 'disgust': 16.530486941337585, 'fear': 1.6193315386772156, 'happy': 6.932554015293135e-05, 'sad': 0.4116043448448181, 'surprise': 0.1861470052972436, 'neutral': 0.009808379400055856}, 'dominant_emotion': 'angry', 'region': {'x': 136, 'y': 65, 'w': 124, 'h': 124, 'left_eye': None, 'right_eye': None}, 'face_confidence': 0.9}]
wKgaoma5tK-AT5TeAAE5KoNifwM234.png


我们可以看到返回的数据angry 占81就说明此时的表情是生气的。

这只是一张图片的检测,我们多看看几张图片检测他的准确率如何。

这是图片的检测,我们需要用到一个持续的,所以就会要启动摄像头一直的对画面进行分析,所以将一张张照片拼接在一起就是一个视频了。

以下是对视频的代码处理。

import cv2
from deepface import DeepFace

# 打开摄像头
cap = cv2.VideoCapture(0)

if not cap.isOpened():
   print("Error: Could not open webcam.")
   exit()

while True:
   # 读取视频帧
   ret, frame = cap.read()
   if not ret:
       break

   # 分析视频帧中的面部表情
   try:
       result = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)
       emotion_info = result[0]['emotion']  # 获取情绪信息
       dominant_emotion = result[0]['dominant_emotion']  # 获取主要表情
       emotion_probability = emotion_info[dominant_emotion]  # 获取主要表情的概率

       # 在视频帧上显示主要表情及其概率
       text = f'{dominant_emotion}: {emotion_probability:.2f}%'
       cv2.putText(frame, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)

       # 显示视频帧
       cv2.imshow('Emotion Detection', frame)
   except Exception as e:
       print(f"Error analyzing frame: {e}")

   # 按 'q' 键退出
   if cv2.waitKey(1) & 0xFF == ord('q'):
       break

# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

就能够得到下面的效果了。我们可以根据主要的表情来返回数值。

wKgaoma5teSAUVYoABMw7MbVGs4819.png

有时候确实会出现一些不够准确的情况,但是我们可以人为的进行判断,一个表情长时间出现的时候才触发机械臂的运动。

机械臂运动控制
在这一部分我来介绍如何对mycobot 320进行机械臂的控制,主要用到的是pymcyobot库。

首先还是安装环境

pip install pymycobot


以下是几种常用mycobot机械臂的控制方法,

from pymycobot.mycobot import MyCobot

send_angles(degrees, speed)
功能: 发送所有角度给机械臂所有关节
参数:
degrees: (List[float])包含所有关节的角度 ,六轴机器人有六个关节所以长度为 6,四轴长度为 4,表示方法为:[20,20,20,20,20,20]
speed: 表示机械臂运动的速度,取值范围是 0-100

ex:
mc = MyCobot("com10",115200)
mc.send_angles([0,0,0,0,0,0],100)


角度控制是对每个关节的角度进行调整,用于一些固定点位的控制比较合适,使用的范围比较局限,接下来还有另一种控制方法,坐标控制。

坐标控制指的是精准控制机械臂末端执行器的位置和姿态,使其在特定的坐标系中完成各种操作任务,是比较常用的一种控制方式。

from pymycobot.mycobot import MyCobot

send_coords(coords, speed, mode)

功能: 发送整体坐标和姿态,让机械臂头部从原来点移动到您指定点
参数:
coords:
六轴:[x,y,z,rx,ry,rz]的坐标值,长度为 6
四轴:[x,y,z,rx]的坐标值,长度为 4
speed: (int) 表示机械臂运动的速度,范围是 0-100
mode: (int): 取值限定 0 和 1
0 表示机械臂头部移动的路径为非线性,即随机规划路线,只要机械臂头部以保持规定的姿态移动到指定点即可。
1 表示机械臂头部移动的路径为线性的,即智能规划路线让机械臂头部以直线的方式移动到指定点.

ex
mc = MyCobot("com10",115200)
mc.send_coords([100,20,30,-50,60,-100],100,1)

为了让整体代码看起来可读性高,可修改性高,创建机械臂类方便进行调用和修改,将对应的动作给提前写入进去。

class RobotArmController:

       def __init__(self,port):
       #初始化链接
       self.mc = MyCobot(port, 115200)
       self.init_pose = [0.96, 86.22, -98.26, 10.54, 86.92, -2.37]
       self.coords = [-40, -92.5, 392.7, -92.19, -1.91, -94.14]
       self.speed = 60
       self.mode = 0
       
       def SadAction(self):
           ...
           
       def HappyAction(self):
           ...


当我生气的时候在我面前打招呼

当我开心的时候它和我一起开心的跳起舞来了

总结
科技发展的越来的越快,在未来应该也会有智能的人形机器人,搭配ChatGPT等一些人工智能的模型,说不定在某一天能够帮助人们排忧解难,甚至可以成为心理医生来治疗一些有心理疾病的人,真期待未来科技的发展。

审核编辑 黄宇

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

    关注

    210

    文章

    27805

    浏览量

    204406
  • 开源
    +关注

    关注

    3

    文章

    3119

    浏览量

    42040
  • 人脸表情识别

    关注

    0

    文章

    2

    浏览量

    5959
收藏 人收藏

    评论

    相关推荐

    表情机器人网络大赛

    表情机器人网络大赛近日,广东省计算机协会智能软件与机器人分会举办的表情机器人创意设计全国大赛于2012年9月1日正式开始,比赛历时三个月零七
    发表于 09-11 09:17

    表情机器人网络大赛

    广东省计算机协会智能软件与机器人分会举办首届表情机器人大赛,大赛官网:http://www.maskrobot.org/表情机器人网络大赛近
    发表于 09-15 09:44

    stm32红外机器人

    足爬行机器人毕业时的作品,当时还处于入门状态,c程序写的比较菜(程序写的比较乱,仅作参考),一直想把这个机器人作品优化一下,可惜,一直在忙,现借助电路城这个平台
    发表于 03-27 18:51

    工业机器人的主要特点

    ,而且还具有记忆能力、语言理解能力、图像识别能力、推理判断能力等人工智能,这些都是微电子技术的应用,特别是计算机技术的应用密切相关。关节工业机器人的研发设计及制造已经有好几十年的历
    发表于 08-08 11:30

    协作机器人伺服和传感器核心器件揭秘

    机器人设计的这款7柔性多关节机器人,可以说是国内首台7自由度协作机器人,具备快速配置、牵引示教、视觉引导、碰撞检测等功能。如果在一个狭小的
    发表于 10-12 11:02

    机器人协作机器人和移动机器人,你分的清楚吗

    我觉得现在是时候讨论一些更有趣的话题,今天的话题是介绍工业机器人协作机器人和移动机器人。我想每个人都知道机器人是什么。
    发表于 10-30 11:33

    【技术杂谈】用AI读懂人心?情感科学专家:靠表情识别情绪不靠谱

    `AI 能否识别人类感情?原则上来说,AI 可以通过语音识别、视觉识别、文字识别表情识别等数据
    发表于 07-30 04:30

    在黑暗里机器人怎么识别人脸

    在当今的机器人领域,基于视觉的人脸面部识别和检测发展得非常之快,并且已经运用于很多领域。
    发表于 09-17 09:11

    协作机器人的应用类型

    机交互技术。机器人CPS可以使用视觉系统来检测,跟踪和手势识别人类,也可以使用来自人类的音频信号命令机器人。各类传感器和执行器可以使三者之间产生多种不同的交互方式。  在人机协作中,会
    发表于 12-01 14:24

    基于Matlab的开源自由度协作机器人实验平台

    一前言针对机器人相关专业的教学需求,商飞信息科技开发出此开源自由度协作机器人实验平台。该平台有以下几大特色
    发表于 09-07 07:10

    大族机器人-机器人

    大族机器人-机器人
    发表于 12-25 22:15 0次下载

    SEER模拟情绪表达机器人:可同步追踪人脸表情,甚至眼神接触

    在温哥华举行的 SIGGRAPH 2018 计算机图形技术大会上,出现一款名为「SEER」的模拟情绪表达机器人,他可以和人类进行同步的表情,甚至眼神接触,相当栩栩如生。
    发表于 08-31 11:17 2906次阅读

    机器人如何选购?机器人的选购技巧

    山东康道智能资讯:机器人如何选购?现在机床机器人厂家极多,这就使得我们在选择
    发表于 03-21 20:54 970次阅读

    机器人如何选购?

    山东康道智能资讯:关节机器人如何选购?现在关节机器人厂家极多,这就使得我们在选择
    发表于 03-25 21:45 772次阅读

    大象机器人协作机械臂myCobot 320 进行手势识别

    引言 我是一名专注于机器学习和机器人技术自由者。我的热情始于大学期间的人工智能课程,这促使我探索人机交互的新方法。尤其对于机械臂的操作,我一直想要简化其复杂性,使之更加直观和易于使用。 这个项目
    的头像 发表于 01-31 16:17 538次阅读
    大象<b class='flag-5'>机器人</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>协作</b>机械臂<b class='flag-5'>myCobot</b> <b class='flag-5'>320</b> 进行手势<b class='flag-5'>识别</b>!