class AnalysisEdf(object):
'''脑电波解析'''
def __init__(self, path):
self.f = mne.io.read_raw_edf(path)
self.labels = self.f.ch_names
self.timestart = self.f.times[-1]
def get_data_file(self, name=None, t_min=0, t_max=10):
"""
获取不同波形的坐标,默认取第一个波形图
"""
if name is None:
name = self.labels[0]
sfreq = int(self.f.info['sfreq'])
sample_rate = self.f.get_data(name, t_min * sfreq, t_max * sfreq)
data_list = list(enumerate(sample_rate[0]))
return {name: data_list}
async def get_edf_wave(user_id, key, bucket, start_time, end_time, name, s3, ROOT):
’‘’获取脑电波‘’‘
if not user_id:
return {'error': 'no data'}
if not isinstance(start_time, int) or not isinstance(end_time, int):
return {'error': 'type error'}
save_path = pathlib.Path(ROOT, 'datasets/brain_wave', str(user_id), key)
logger.log(25, f'get_brain_wave: {save_path}')
if not save_path.parent.exists():
save_path.parent.mkdir(parents=True)
if not save_path.exists():
try:
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False)) as session:
async with session.get(s3.get_show_file_url(bucket, key)) as response:
response = await response.read()
save_path.write_bytes(response)
except Exception as e:
logger.exception(f"download edf error:", str(e))
return 2
try:
edf = AnalysisEdf(save_path.as_posix())
except Exception as e:
logger.exception(f"download edf error:", str(e))
return 3
if end_time > edf.timestart:
end_time = edf.timestart
if start_time > end_time:
start_time = end_time - 20
if end_time - start_time > 120:
end_time = start_time + 120
data_list = edf.get_data_file(name, start_time, end_time)
return {'data': data_list, 'total_time': edf.timestart, 'labels': edf.labels}
使用mne模块读取edf文件
最新推荐文章于 2022-01-11 18:19:24 发布