这篇文章主要介绍了Python闭眼时长标准差脚本使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
#遍历文件夹中的所有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('\n')[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
计算标准差函数