本文主要是介绍Contec CMS50E 血氧仪 导出PPG、心率、血氧数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Contec CMS50E 血氧仪 导出PPG、心率、血氧数据
介绍
通过HID接口实时接收Contec CMS50E串口数据,获取PPG原始信号、心率、SPO2数据并保存。您可以使用原始PPG信号执行进一步的数据分析,包括比较rPPG算法的准确性,训练深度学习网络等等。
用法
-
安装python3和相应的pip程序。
-
在shell中输入:
pip3 Install hidapi
安装hidapi -
在电脑上启动智能设备助手软件(通常可以通过血氧仪包装盒附带的U盘安装,也可以咨询客服获取)。
-
把手指放在血氧计上,打开它,然后把它插到电脑上。确保它运行良好,也就是说,在进入下一步之前,您可以在计算机软件上看到曲线变化。
-
在设备管理器中检查血氧仪的硬件id(我的设备是VENDOR_ID = 0x28E9, PRODUCT_ID = 0x028A)。修改程序中PPG文件的存放路径,保证数据能够正确存放。
-
运行脚本
cms50e_hid.py
加载数据并保存为csv文件。
代码
import time
import hid
import csv'''
This program is used to extract data information from the Contec CMS50E,
including PPG signals, Heart rate signals, and SPO2 signals.
Before use, you need to determine the hardware ID of the CMS50E after connected to the computer.
'''# Delay the start time of data collection, ready to start collecting data
def delay_start(delay_time):print("Start recording in...")for i in range(delay_time):print(delay_time - i)time.sleep(1)def collect_data(device, csvFileName):# Initialize datacheck_bit = 0data_update_bit = 0status_bit = 0PPG_bit = 0HR_bit = 0SPO2_bit = 0data_count = 0with open(csvFileName, 'w', newline='') as file:writer = csv.writer(file)writer.writerow(['Count', 'PPG', 'HR', 'SPO2'])delay_start(3)start_time = time.time()while True:data = device.read(18)# hex_data = []# for i in range(len(data)):# hex_data.append(hex(data[i]))# print(hex_data)print(data)current_time = time.time()time_count = current_time - start_timeif time_count > stop_time:break# Parse the received datafor i in range(3):check_bit = data[0 + 6*i]data_update_bit = data[1 + 6*i]status_bit = data[2 + 6*i]# while data_update_bit==1, Update HR and SPO2if data_update_bit == 0:PPG_bit = data[3 + 6*i]elif data_update_bit == 1:HR_bit = data[3 + 6 * i]SPO2_bit = data[4 + 6 * i]# Save PPG, HR, SPO2 in csvwith open(csvFileName, 'a', newline='') as file:writer = csv.writer(file)writer.writerow([str(data_count), str(PPG_bit), str(HR_bit), str(SPO2_bit)])data_count = data_count + 1if __name__ == '__main__':# ParametersVENDOR_ID = 0x28E9PRODUCT_ID = 0x028AcsvPath = 'G:/Project/Fatigue/data/myDataset/test/'csvFileName = csvPath + 'Output1' + '.csv'stop_time = 70device = hid.device()device.open(VENDOR_ID, PRODUCT_ID)print("Opening the device")collect_data(device, csvFileName)
规范
- 设备的“采样频率”为60Hz。
- 血氧仪每秒向PC发送60个数据,每个数据包含6字节,不同的数据用
0xeb
分隔。 - 当第二个字节为0时,血氧仪处于采集PPG信号阶段,此时第四个字节的数据为PPG信号;当第二个字节为1时,血氧仪处于更新数据显示阶段,此时第四个字节的数据为心率值,第五个字节的数据为SPO2。数据大约每秒更新一次。
结果
PPG信号波形(前10s)
更多
更多详细信息请见GitHub仓库:https://github.com/SunHaixin0324/CMS50E_PPG_loader
这篇关于Contec CMS50E 血氧仪 导出PPG、心率、血氧数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!