Contec CMS50E 血氧仪 导出PPG、心率、血氧数据

Contec CMS50E 血氧仪 导出PPG、心率、血氧数据

介绍

通过HID接口实时接收Contec CMS50E串口数据,获取PPG原始信号、心率、SPO2数据并保存。您可以使用原始PPG信号执行进一步的数据分析,包括比较rPPG算法的准确性,训练深度学习网络等等。

Contec CMS50E 血氧仪

用法

  1. 安装python3和相应的pip程序。

  2. 在shell中输入:pip3 Install hidapi安装hidapi

  3. 在电脑上启动智能设备助手软件(通常可以通过血氧仪包装盒附带的U盘安装,也可以咨询客服获取)。

在这里插入图片描述

  1. 把手指放在血氧计上,打开它,然后把它插到电脑上。确保它运行良好,也就是说,在进入下一步之前,您可以在计算机软件上看到曲线变化。

  2. 在设备管理器中检查血氧仪的硬件id(我的设备是VENDOR_ID = 0x28E9, PRODUCT_ID = 0x028A)。修改程序中PPG文件的存放路径,保证数据能够正确存放。

  3. 运行脚本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 data
    check_bit = 0
    data_update_bit = 0
    status_bit = 0
    PPG_bit = 0
    HR_bit = 0
    SPO2_bit = 0
    data_count = 0

    with 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_time
        if time_count > stop_time:
            break

        # Parse the received data
        for 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 SPO2
            if 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 csv
            with 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 + 1

if __name__ == '__main__':
    # Parameters
    VENDOR_ID = 0x28E9
    PRODUCT_ID = 0x028A
    csvPath = 'G:/Project/Fatigue/data/myDataset/test/'
    csvFileName = csvPath + 'Output1' + '.csv'
    stop_time = 70

    device = 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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值