这篇文章主要介绍“Python闭眼时长标准差脚本怎么使用”,在日常操作中,相信很多人在Python闭眼时长标准差脚本怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python闭眼时长标准差脚本怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
闭眼时长标准差
平均闭眼时长:识别一分钟内闭眼次数以及每次闭眼的时长,将每次闭眼的时长进行累计相加,最终再取平均值
闭眼标准差公式
数据样本格式
文本内容
代码
遍历文件夹中所有的txt文本文件
#遍历文件夹中的所有txt文件 def scanner_txt(inputSrc,txt_list): file_list = os.listdir(inputSrc) for file in file_list: curr_file=path.join(inputSrc,file) #递归实现 if(path.isdir(curr_file)): scanner_txt(curr_file,txt_list) else: curr_file_name=curr_file.split(".") curr_file_type=curr_file_name[len(curr_file_name)-1] if curr_file_type=="txt": txt_list.append(curr_file) return txt_list
读取文本中的内容,挑选数据中为”帧号,状态类型,状态持续时间“的数据
def readTxtDataProprocessing(filepath,kss7sd,kss8sd,kss9sd): resFrame=[] print(filepath) with open(filepath,encoding='utf-8') as f: for line in f: frame_info=line.split(',') if(len(frame_info)<3): continue framenum=frame_info[0] frametime=frame_info[2].split(' ')[0] resFrame.append([int(framenum),int(frametime)]) f.close() #文件内闭眼时长为空的不处理 if(len(resFrame)==0): return #去掉重复的值,归并成统一的值 totalSD=deduplicationData(resFrame) filename=filepath.split('')[-1] kssLevel=filename.split('-')[2] print("文件:{} 总体闭眼时长标准差为:{}".format(filename,totalSD)) print() if(kssLevel=='KSS7'): kss7sd.append(totalSD) elif(kssLevel=='KSS8'): kss8sd.append(totalSD) elif(kssLevel=='KSS9'): kss9sd.append(totalSD)
去除文本数据只出现的一次的数据,以及将出现2次和3次的数据进行合并
def deduplicationData(resFrame): uniqueRes = [] framelength = len(resFrame) i = 0 while (i < framelength): if (resFrame[i][0] == 17924): t = 1; count = 1 if (i + 1 < framelength): if (resFrame[i][1] == resFrame[i + 1][1]): count += 1 if (i + 1 >= framelength): break if (i + 2 < framelength): if (resFrame[i][1] == resFrame[i + 2][1]): count += 1 if (count != 1): uniqueRes.append([resFrame[i][0], resFrame[i][1]]) i += count #计算闭眼时长标准差 return closeEyeTimeSD(uniqueRes) # for i in range(len(uniqueRes)): # print("frameNum:", uniqueRes[i][0], "frameTime:", uniqueRes[i][1], "ms")
数组划分区间,按分钟进行划分
#data 经过去重和选帧后得到的列表 def closeEyeTimeSD(data): #按每一分钟的时间间隔划分区间:1秒钟30帧,1分钟1800帧 #建立分割数组保存第n分钟内的睁闭眼数据,划分成12段 dividArr=[] for i in range(12): dividArr.append([]) for i in range(len(data)): index=int(data[i][0]/1800) dividArr[index].append(data[i][1]) #获取标准差 sdArr=[] for i in range(len(dividArr)): avergeTime,sdArray=countTotalSD(dividArr[i]) if(dividArr[i]!=[]): sdArr.append(sdArray) print("第{}分钟平均眨眼时长为:{},闭眼时长标准差为:{}".format(i+1,avergeTime,sdArray)) totalSD=countTotalSD(sdArr)[1] return totalSD
计算标准差函数
def countTotalSD(sdArray): if(len(sdArray)==0): return [0,0] sumArray = 0 for i in sdArray: sumArray += i # 计算全部的标准差 averageSD = sumArray / len(sdArray) sumSD = 0 for i in sdArray: sumSD += pow((i - averageSD), 2) totalSD = math.sqrt(sumSD / len(sdArray)) return [averageSD,totalSD]