linux平臺基于python語言的MYO手環手勢識別開發(一)
這是筆者在CSDN上發表的第一次文章也是值得紀念的日子,希望在這里和大家一起學習一起討論一起進步!

文章目錄
- linux平臺基于python語言的MYO手環手勢識別開發(一)
- 一、實作myo手環資料讀取
- 1.引入庫
- 2.定義方法joint_event_handler
- 二、把收集的資料轉化為csv格式
- 1.引入庫
- 2.在方法joint_event_handler中添加代碼
- 三、主方法實作藍牙鏈接及測驗資料收集情況
- 四、未來規劃
- 五、最后
一、實作myo手環資料讀取
1.引入庫
這里我們先從github上下載作者sebastiankmiec發布的
PythonMyoLinux專案檔案中的pymyolinux(myo核心模塊)
以下是下載地址:
URL:https://github.com/sebastiankmiec/PythonMyoLinux/tree/master/pymyolinux
接著importMyoDongle模塊
from pymyolinux.core.myo import MyoDongle
2.定義方法joint_event_handler
收集8個肌電傳感器信號,4個4元數方向資料,3個加速度計值資料,3個陀螺儀資料(對應Myo上的EMG和IMU單元,并且整合為dic資料結構,代碼如下:
def joint_event_handler(emg_list, orient_w, orient_x, orient_y, orient_z, accel_1, accel_2, accel_3, gyro_1, gyro_2,
gyro_3, sample_num):
MYOHW_ACCELEROMETER_SCALE = 2048.0
MYOHW_GYROSCOPE_SCALE = 16.0
MYOHW_ORIENTATION_SCALE = 16384.0
# CoreDataDic
myoDataDictionary = {'emg_1:': emg_list[0], 'emg_2': emg_list[1], 'emg_3': emg_list[2], 'emg_4': emg_list[3],
'emg_5': emg_list[4], 'emg_6': emg_list[5], 'emg_7': emg_list[6], 'emg_8': emg_list[7],
'orient_w': orient_w / MYOHW_ORIENTATION_SCALE, 'orient_x': orient_x / MYOHW_ORIENTATION_SCALE,
'orient_y': orient_y / MYOHW_ORIENTATION_SCALE, 'orient_z': orient_z / MYOHW_ORIENTATION_SCALE,
'accel_1': accel_1 / MYOHW_ACCELEROMETER_SCALE, 'accel_2': accel_2 / MYOHW_ACCELEROMETER_SCALE,
'accel_3': accel_3 / MYOHW_ACCELEROMETER_SCALE,
'gyro_1': gyro_1 / MYOHW_GYROSCOPE_SCALE, 'gyro_2': gyro_2 / MYOHW_GYROSCOPE_SCALE,
'gyro_3': gyro_3 / MYOHW_GYROSCOPE_SCALE
}
二、把收集的資料轉化為csv格式
注:csv資料格式有利于之后機器學習用sklearn的資料處理分析,本來想用txt檔案形式但是感覺不能很好的表達出資料樣本特征
1.引入庫
import os
import pandas
import pandas as pd
2.在方法joint_event_handler中添加代碼
代碼如下:
#covert to csv
# 實體化DataFrame物件(記得索引index=[0])
df=pd.DataFrame(myoDataDictionary,index=[0])
# 防止回圈時標題頭被重復寫入(若檔案還沒創建標題頭可寫,否則header=False不可寫)
if not os.path.exists('data.csv'):
df.to_csv('data.csv', encoding='utf_8_sig', mode='a',index_label=False)
else:
df.to_csv('data.csv', encoding='utf_8_sig', mode='a', header=False,index=True)
三、主方法實作藍牙鏈接及測驗資料收集情況
主方法主要用 MyoDongle()API實作終端對MYO手環的鏈接同步
代碼如下:
if __name__ == '__main__':
device_1 = MyoDongle("/dev/ttyACM0")
device_1.clear_state()
myo_devices = device_1.discover_myo_devices()
if len(myo_devices) > 0:
device_1.connect(myo_devices[0])
else:
print("No devices found, exiting...")
exit()
device_1.enable_imu_readings()
device_1.enable_emg_readings()
device_1.add_joint_emg_imu_handler(joint_event_handler)
# device_1.scan_for_data_packets_conditional()
device_1.scan_for_data_packets(3)
好了讓我們來看看運行情況:



注:若遇到埠/dev/ttyACM0’權限問題
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: '/dev/ttyACM0'
用以下代碼解決:
sudo chmod 777 /dev/ttyACM0
但是這種方法只能一次使用,所以每次都要這樣,暫時沒什么好的方法解決,如果各位有好的辦法歡迎留言!
四、未來規劃
對收集到的csv檔案針對握拳手勢進行特征提取及資料處理
五、最后
寫文章可能要壓榨一些本來不多的課余時間,更新進度可能比較緩慢請大家原諒!這個專案是我在本科生期間加入校內實驗室需要研究的專案,希望能在這些天里有不錯的進展,給自己的校園生活添一點樂趣,各位共勉!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301673.html
標籤:AI
