需求如下:在python项目中集成wqrs、sqrs、gqrs、xqrs等QRS波检测算法,对MIT心律不齐数据库中的数据进行检测,得到QRS波位置并与R波真实位置进行可视化比较,在这里记录一下我自己的做法。

1.首先是到Physionet官网上下载WFDB算法包,它是用C语言编写的(xqrs和gqrs有对应的python版wfdb算法包,可以直接调用),如果在windows下运行它的一些算法,需要使用Cygwin或MinGW进行编译,再针对需要使用的算法分别编译使用,Physionet上有如何安装及使用的说明,在这里就不赘述了。在这里笔者使用的是Cygwin64,因为后面涉及到在python中调用dll,笔者用的64位的python只能对应调用64位的dll。

在这里试一试编译好的wqrs算法,可以正常使用,(注意100这个数据并没有包含在算法包里,是我自己放进数据目录的,wfdblib.h中用DEFWFDB对数据目录进行了宏定义,默认是在usr/local/database,可以自行修改)

python调用包中的方法 怎么用python调用算法包_python调用包中的方法

python调用包中的方法 怎么用python调用算法包_WFDB_02

2.那么现在如何所需要的算法编译成dll呢,在这里笔者使用Visual Studio创建了dll项目,将所需要用到的.h头文件和.c文件放进vs项目中,并进行修改,主要修改的地方有:存放数据的目录、目录分隔符(linux和windows的目录分隔符不同)、将curl的相关依赖放入vs项目、算法输入输出等,找bug用的printf调试大法(耗时且痛苦),终于把算法封装成如下函数形式调用:

python调用包中的方法 怎么用python调用算法包_QRS_03

3.在vs中生成dll后,把dll放进python中调用,这里用到了ctypes这个python库,可以直接加载dll,并使用里面的函数,只需要对参数和函数返回值进行相应的转换就可以正常使用了。需要注意的一点是要想正常调用在vs生成的那个dll文件,还必须把它所依赖的其它dll一并加入系统路径才行,否则会报错 “OSError: [WinError 126] 找不到指定的模块。”

4.为了实现数据的可视化展示,参考 的内容,在心电图上绘制出检测的qrs位置与参考注释的位置,进行对比。效果如图所示:

python调用包中的方法 怎么用python调用算法包_python调用包中的方法_04