在大家的印象中,機械臂通常被應用在工業領域,執行一些重復性工作,以幫助和替代人類。然而,機械臂不僅限于此,它們也可以成為陪伴型機器人,為我們提供更多樣化的互動體驗。
今天,我想探索機械臂的一些與眾不同的功能。通過結合人臉表情識別技術,我們可以讓機械臂感知到我們的情緒變化。當我們開心時,機械臂可以跟著一起開心地舞動;當我們傷心難過時,它可以過來安慰我們,給予溫暖的撫摸。這種基于表情反饋的互動能讓機械臂更好地陪伴我們。
在接下來的部分中,我們將詳細介紹這種系統的工作原理、技術實現和應用場景,展示機械臂。
文章會分為機械臂介紹,技術點介紹,項目的實現三部分,首先我將介紹我使用到的機械臂。
Robotic Arm
myCobot 320 M5
Mycobot 320,一款具備六自由度的協作型機械臂,憑借其獨特的設計和高精度伺服電機成為了領域內的亮點。這款機械臂擁有最大350mm的工作半徑和最大1000g的末端負載能力,使其適用于廣泛的應用場景。Mycobot 320不僅支持靈活的視覺開發應用,還提供了深入的機械運動原理解析,為用戶帶來了12個標準的24V工業IO接口,滿足不同的開發需求。
它的開放性極高,兼容大多數主流操作系統和編程語言,包括Python和ROS等,為開發者提供了極大的靈活性和自由度。無論是在教育、研發還是工業應用中,Mycobot 320都能提供強大支持,使創新和應用開發更加便捷高效。
攝像頭模組
適配于myCobot 320M5的攝像頭模組可以安裝在機械臂末端。通過攝像頭用USB數據線進行通信,實時獲取到機械臂末端的一個畫面,就能夠識別人臉的表情處于怎樣的一個狀態。
技術概覽
pymycobot
pymycobot 是一個用于與 mycobot 機械臂進行串行通信和控制的 Python API。這個庫是為了方便開發者使用 Python 語言控制 mycobot 機械臂而設計的。它提供了一系列的函數和命令,讓用戶可以通過編程方式控制機械臂的動作和行為。例如,用戶可以使用該庫獲取機械臂的角度、發送角度指令來控制機械臂的移動,或者獲取和發送機械臂的坐標信息。
使用這個庫唯一的標準是,得使用mycobot 系列的機械臂,這是專門為mycobot進行適配的一款機械臂。
pymycobot · PyPI
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
開發過程
項目架構
我將該項目主要分為兩個功能:
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}]
我們可以看到返回的數據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()
就能夠得到下面的效果了。我們可以根據主要的表情來返回數值。
有時候確實會出現一些不夠準確的情況,但是我們可以人為的進行判斷,一個表情長時間出現的時候才觸發機械臂的運動。
機械臂運動控制
在這一部分我來介紹如何對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文章
27847瀏覽量
204644 -
開源
+關注
關注
3文章
3133瀏覽量
42079 -
人臉表情識別
+關注
關注
0文章
2瀏覽量
5962
發布評論請先 登錄
相關推薦
評論