这篇文章主要介绍“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]