在大家的印象中,機(jī)械臂通常被應(yīng)用在工業(yè)領(lǐng)域,執(zhí)行一些重復(fù)性工作,以幫助和替代人類(lèi)。然而,機(jī)械臂不僅限于此,它們也可以成為陪伴型機(jī)器人,為我們提供更多樣化的互動(dòng)體驗(yàn)。
今天,我想探索機(jī)械臂的一些與眾不同的功能。通過(guò)結(jié)合人臉表情識(shí)別技術(shù),我們可以讓機(jī)械臂感知到我們的情緒變化。當(dāng)我們開(kāi)心時(shí),機(jī)械臂可以跟著一起開(kāi)心地舞動(dòng);當(dāng)我們傷心難過(guò)時(shí),它可以過(guò)來(lái)安慰我們,給予溫暖的撫摸。這種基于表情反饋的互動(dòng)能讓機(jī)械臂更好地陪伴我們。
在接下來(lái)的部分中,我們將詳細(xì)介紹這種系統(tǒng)的工作原理、技術(shù)實(shí)現(xiàn)和應(yīng)用場(chǎng)景,展示機(jī)械臂。
文章會(huì)分為機(jī)械臂介紹,技術(shù)點(diǎn)介紹,項(xiàng)目的實(shí)現(xiàn)三部分,首先我將介紹我使用到的機(jī)械臂。
Robotic Arm
myCobot 320 M5
Mycobot 320,一款具備六自由度的協(xié)作型機(jī)械臂,憑借其獨(dú)特的設(shè)計(jì)和高精度伺服電機(jī)成為了領(lǐng)域內(nèi)的亮點(diǎn)。這款機(jī)械臂擁有最大350mm的工作半徑和最大1000g的末端負(fù)載能力,使其適用于廣泛的應(yīng)用場(chǎng)景。Mycobot 320不僅支持靈活的視覺(jué)開(kāi)發(fā)應(yīng)用,還提供了深入的機(jī)械運(yùn)動(dòng)原理解析,為用戶(hù)帶來(lái)了12個(gè)標(biāo)準(zhǔn)的24V工業(yè)IO接口,滿(mǎn)足不同的開(kāi)發(fā)需求。

它的開(kāi)放性極高,兼容大多數(shù)主流操作系統(tǒng)和編程語(yǔ)言,包括Python和ROS等,為開(kāi)發(fā)者提供了極大的靈活性和自由度。無(wú)論是在教育、研發(fā)還是工業(yè)應(yīng)用中,Mycobot 320都能提供強(qiáng)大支持,使創(chuàng)新和應(yīng)用開(kāi)發(fā)更加便捷高效。
攝像頭模組
適配于myCobot 320M5的攝像頭模組可以安裝在機(jī)械臂末端。通過(guò)攝像頭用USB數(shù)據(jù)線(xiàn)進(jìn)行通信,實(shí)時(shí)獲取到機(jī)械臂末端的一個(gè)畫(huà)面,就能夠識(shí)別人臉的表情處于怎樣的一個(gè)狀態(tài)。

技術(shù)概覽
pymycobot
pymycobot 是一個(gè)用于與 mycobot 機(jī)械臂進(jìn)行串行通信和控制的 Python API。這個(gè)庫(kù)是為了方便開(kāi)發(fā)者使用 Python 語(yǔ)言控制 mycobot 機(jī)械臂而設(shè)計(jì)的。它提供了一系列的函數(shù)和命令,讓用戶(hù)可以通過(guò)編程方式控制機(jī)械臂的動(dòng)作和行為。例如,用戶(hù)可以使用該庫(kù)獲取機(jī)械臂的角度、發(fā)送角度指令來(lái)控制機(jī)械臂的移動(dòng),或者獲取和發(fā)送機(jī)械臂的坐標(biāo)信息。
使用這個(gè)庫(kù)唯一的標(biāo)準(zhǔn)是,得使用mycobot 系列的機(jī)械臂,這是專(zhuān)門(mén)為mycobot進(jìn)行適配的一款機(jī)械臂。
pymycobot · PyPI

deepface
DeepFace 是一個(gè)強(qiáng)大的 Python 庫(kù),用于面部識(shí)別和面部屬性分析。它基于多種深度學(xué)習(xí)模型,如 VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID 和 Dlib 等,提供了面部驗(yàn)證、面部檢測(cè)、面部屬性分析(如性別、年齡、種族和情緒)等功能。DeepFace 通過(guò)簡(jiǎn)單的接口使得復(fù)雜的面部識(shí)別和分析任務(wù)變得更加容易,廣泛應(yīng)用于安全系統(tǒng)、用戶(hù)身份驗(yàn)證和智能交互等領(lǐng)域。
GitHub - serengil/deepface: A Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python

開(kāi)發(fā)過(guò)程
項(xiàng)目架構(gòu)
我將該項(xiàng)目主要分為兩個(gè)功能:
Emotion detection Recognition: 主要用來(lái)處理人臉面部的情緒識(shí)別,能夠返回信息當(dāng)前人臉的情緒主要是什么,平常,開(kāi)心,還是傷心等表情
Robotic Arm Control:主要功能用于設(shè)置機(jī)械臂的運(yùn)動(dòng)控制,例如坐標(biāo)控制,角度控制等等。
情緒識(shí)別功能實(shí)現(xiàn)
現(xiàn)在的人臉情緒識(shí)別已經(jīng)很多厲害的人提供了各種識(shí)別的方法在github上了,但如果想自己做一個(gè)識(shí)別人臉情緒的功能的話(huà)還是分為4 個(gè)步驟:
1. 數(shù)據(jù)收集和預(yù)處理
2. 模型選擇和訓(xùn)練
3. 模型優(yōu)化和測(cè)試
4. 部署和應(yīng)用
從0開(kāi)始的話(huà),需要做蠻多步驟的,如果我們只是單純的使用,沒(méi)有刻意需要用在某些應(yīng)用場(chǎng)景當(dāng)中,我們可以選擇一款別人已經(jīng)訓(xùn)練好的檢測(cè)模型,我們直接使用就好了!現(xiàn)在目前有OpenCV,FER(Facial Expression Recognition),DeepFace,Microsoft Azure Face API等等。
這次我們用deepface進(jìn)行emotion識(shí)別的使用。
環(huán)境搭建
首先當(dāng)然是安裝使用環(huán)境啦,opencv的版本不要使用較低的版本會(huì)影響使用。
pip install deepface pip install opencv-python
它有很多功能有年齡的檢測(cè),性別的檢測(cè),情緒的檢測(cè)等等多種模型,本次我們主要是用到的是情緒的檢測(cè),要用到“facial_expression_model_weights.h5”這個(gè)模型,再使用的過(guò)程會(huì)自動(dòng)幫忙下載這個(gè)模型來(lái)使用。
簡(jiǎn)單介紹一下使用的功能。
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}]

我們可以看到返回的數(shù)據(jù)angry 占81就說(shuō)明此時(shí)的表情是生氣的。
這只是一張圖片的檢測(cè),我們多看看幾張圖片檢測(cè)他的準(zhǔn)確率如何。
這是圖片的檢測(cè),我們需要用到一個(gè)持續(xù)的,所以就會(huì)要啟動(dòng)攝像頭一直的對(duì)畫(huà)面進(jìn)行分析,所以將一張張照片拼接在一起就是一個(gè)視頻了。
以下是對(duì)視頻的代碼處理。
import cv2
from deepface import DeepFace
# 打開(kāi)攝像頭
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
# 釋放攝像頭并關(guān)閉窗口
cap.release()
cv2.destroyAllWindows()
就能夠得到下面的效果了。我們可以根據(jù)主要的表情來(lái)返回?cái)?shù)值。

有時(shí)候確實(shí)會(huì)出現(xiàn)一些不夠準(zhǔn)確的情況,但是我們可以人為的進(jìn)行判斷,一個(gè)表情長(zhǎng)時(shí)間出現(xiàn)的時(shí)候才觸發(fā)機(jī)械臂的運(yùn)動(dòng)。
機(jī)械臂運(yùn)動(dòng)控制
在這一部分我來(lái)介紹如何對(duì)mycobot 320進(jìn)行機(jī)械臂的控制,主要用到的是pymcyobot庫(kù)。
首先還是安裝環(huán)境
pip install pymycobot
以下是幾種常用mycobot機(jī)械臂的控制方法,
from pymycobot.mycobot import MyCobot
send_angles(degrees, speed)
功能: 發(fā)送所有角度給機(jī)械臂所有關(guān)節(jié)
參數(shù):
degrees: (List[float])包含所有關(guān)節(jié)的角度 ,六軸機(jī)器人有六個(gè)關(guān)節(jié)所以長(zhǎng)度為 6,四軸長(zhǎng)度為 4,表示方法為:[20,20,20,20,20,20]
speed: 表示機(jī)械臂運(yùn)動(dòng)的速度,取值范圍是 0-100
ex:
mc = MyCobot("com10",115200)
mc.send_angles([0,0,0,0,0,0],100)
角度控制是對(duì)每個(gè)關(guān)節(jié)的角度進(jìn)行調(diào)整,用于一些固定點(diǎn)位的控制比較合適,使用的范圍比較局限,接下來(lái)還有另一種控制方法,坐標(biāo)控制。
坐標(biāo)控制指的是精準(zhǔn)控制機(jī)械臂末端執(zhí)行器的位置和姿態(tài),使其在特定的坐標(biāo)系中完成各種操作任務(wù),是比較常用的一種控制方式。
from pymycobot.mycobot import MyCobot
send_coords(coords, speed, mode)
功能: 發(fā)送整體坐標(biāo)和姿態(tài),讓機(jī)械臂頭部從原來(lái)點(diǎn)移動(dòng)到您指定點(diǎn)
參數(shù):
coords:
六軸:[x,y,z,rx,ry,rz]的坐標(biāo)值,長(zhǎng)度為 6
四軸:[x,y,z,rx]的坐標(biāo)值,長(zhǎng)度為 4
speed: (int) 表示機(jī)械臂運(yùn)動(dòng)的速度,范圍是 0-100
mode: (int): 取值限定 0 和 1
0 表示機(jī)械臂頭部移動(dòng)的路徑為非線(xiàn)性,即隨機(jī)規(guī)劃路線(xiàn),只要機(jī)械臂頭部以保持規(guī)定的姿態(tài)移動(dòng)到指定點(diǎn)即可。
1 表示機(jī)械臂頭部移動(dòng)的路徑為線(xiàn)性的,即智能規(guī)劃路線(xiàn)讓機(jī)械臂頭部以直線(xiàn)的方式移動(dòng)到指定點(diǎn).
ex
mc = MyCobot("com10",115200)
mc.send_coords([100,20,30,-50,60,-100],100,1)
為了讓整體代碼看起來(lái)可讀性高,可修改性高,創(chuàng)建機(jī)械臂類(lèi)方便進(jìn)行調(diào)用和修改,將對(duì)應(yīng)的動(dòng)作給提前寫(xiě)入進(jìn)去。
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):
...
當(dāng)我生氣的時(shí)候在我面前打招呼
當(dāng)我開(kāi)心的時(shí)候它和我一起開(kāi)心的跳起舞來(lái)了
總結(jié)
科技發(fā)展的越來(lái)的越快,在未來(lái)應(yīng)該也會(huì)有智能的人形機(jī)器人,搭配ChatGPT等一些人工智能的模型,說(shuō)不定在某一天能夠幫助人們排憂(yōu)解難,甚至可以成為心理醫(yī)生來(lái)治療一些有心理疾病的人,真期待未來(lái)科技的發(fā)展。
審核編輯 黃宇
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
31096瀏覽量
222361 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
4209瀏覽量
46179 -
人臉表情識(shí)別
+關(guān)注
關(guān)注
0文章
2瀏覽量
6101 -
大象機(jī)器人
+關(guān)注
關(guān)注
0文章
86瀏覽量
380
發(fā)布評(píng)論請(qǐng)先 登錄
大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源六軸機(jī)械臂產(chǎn)品
表情機(jī)器人網(wǎng)絡(luò)大賽
表情機(jī)器人網(wǎng)絡(luò)大賽
stm32紅外六足機(jī)器人
六軸工業(yè)機(jī)器人的主要特點(diǎn)
協(xié)作機(jī)器人伺服和傳感器核心器件揭秘
【技術(shù)雜談】用AI讀懂人心?情感科學(xué)專(zhuān)家:靠表情識(shí)別情緒不靠譜
基于Matlab的開(kāi)源六自由度協(xié)作機(jī)器人實(shí)驗(yàn)平臺(tái)
SEER模擬情緒表達(dá)機(jī)器人:可同步追蹤人臉表情,甚至眼神接觸
六軸機(jī)器人如何選購(gòu)?六軸機(jī)器人的選購(gòu)技巧
六軸機(jī)器人如何選購(gòu)?
大象機(jī)器人六軸協(xié)作機(jī)械臂myCobot 320 進(jìn)行手勢(shì)識(shí)別!
大象機(jī)器人myCobot 320六軸協(xié)作機(jī)械臂用戶(hù)開(kāi)箱!
大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源六軸機(jī)械臂產(chǎn)品
開(kāi)源六軸協(xié)作機(jī)器人myCobot 320結(jié)合人臉表情識(shí)別情緒!
評(píng)論