闭眼时长标准差脚本

news2025/1/15 23:09:17

闭眼时长标准差脚本

闭眼时长标准差

平均闭眼时长:识别一分钟内闭眼次数以及每次闭眼的时长,将每次闭眼的时长进行累计相加,最终再取平均值

闭眼标准差公式
闭眼标准差 = ( ( n 1 − n a v g ) 2 + ( n 2 − n a v g ) 2 + . . . ) ∗ 1 / n 闭眼标准差=\sqrt{((n_1-n_{avg})^2+(n_2-n_{avg})^2+...)*1/n} 闭眼标准差=((n1navg)2+(n2navg)2+...)1/n

数据样本格式

在这里插入图片描述

文本内容

在这里插入图片描述

代码

遍历文件夹中所有的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('\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

计算标准差函数

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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/273643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【广度优先搜索】N叉树的层序遍历 | 腐烂的橘子 | 单词接龙 | 最小基因变化 | 打开转盘锁

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

jenkins打包构建springboot项目为docker镜像并上传nexus私服

前提&#xff1a;jenkins,docker,nexus都已经搭建完毕 一. 开启docker远程访问 1.修改docker.service文件 Docker 安装成功之后&#xff0c;首先需要修改 Docker 配置来开启允许远程访问 Docker 的功能。     文件位置&#xff1a;/lib/systemd/system/docker.service    …

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM&#xff08;Java虚拟机&#xff09; JVM 内存模型 结构图 jdk1.8 结构图&#xff08;极简&#xff09; jdk1.8 结构图&#xff08;简单&#xff09; JVM&#xff08;Java虚拟机&#xff09;&#xff1a; 是一个抽象的计算模型。如同一台真实的机器&#xff0c;它有自己…

使用比console.log更优质的前端调试方案

程序调试是程序开发必不可少的一环&#xff0c;刚开始接触前端调试时&#xff0c;最常用的就是 console.log 打印变量进行调试&#xff0c;本文会分享一些笔者学习到的前端调试方法&#xff0c;减少对 console.log 调试方式的依赖&#xff0c;选择更优质的前端调试方案。 本文中…

Android开发进阶——RxJava核心架构分析

简介 RxJava是对响应式扩展&#xff08; Reactive Extensions&#xff0c;称之为 ReactiveX &#xff09;规范的Java 实现&#xff0c;该规范还有其他语言实现&#xff1a;RxJS、Rx.Net、RxScala、RxSwift等等&#xff08;也即&#xff0c;ReactiveX 定义了规范&#xff0c;其他…

pip安装时报错 ascii‘ codec can‘t decode byte 0xe2 in position...

在使用pip安装包的时候报错ascii’ codec can’t decode byte 0xe2 in position… 报错信息 UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe2 in position 1429: ordinal not in range(128) 以前好像见过类似的情况&#xff0c;所以搜了一下怎么修改python默认…

聊聊ChatGPT

最近ChatGPT火出圈。 在过去三个月里&#xff0c;眼见着它的热度火箭一般蹿升&#xff0c;据瑞银上周三发布的报告显示&#xff0c;GPT已经超过了Tiktok&#xff0c;成为人类有史以来最快突破1亿月活跃用户的互联网产品。Tiktok当初用了9个月&#xff0c;而GPT只用了2个月。 …

Spring使用了哪些设计模式?

目录Spring中涉及的设计模式总结1.简单工厂(非23种设计模式中的一种)2.工厂方法3.单例模式4.适配器模式5.装饰器模式6.代理模式7.观察者模式8.策略模式9.模版方法模式Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式&#xff1a; BeanFactory。Spri…

go-grpc的使用和学习

文章目录基础知识&#xff1a;操作流程安装proto文件配置grpc&#xff1a; 正常客户端发送数据(以字节流的方式)&#xff0c;服务器接受并解析&#xff0c;根据约定知道要执行什么&#xff0c;然后把结果返回给客户 rpc将上述过程封装&#xff0c;使其操作更加优化&#xff0c;…

Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

各位朋友你们好呀。今天是立春&#xff0c;明天就是正月十五元宵节了&#xff0c;这种立春 元宵相隔的时候&#xff0c;可是很难遇到的&#xff0c;百年中就只有几次。在这提前祝大家元宵快乐。 今天给大家带来的是Vue 3 中的极致防抖/节流&#xff08;含常见方式防抖/节流&a…

ChatGPT给程序员人手一个,这很朋克

目录ChatGPT、程序员、朋克为什么程序员需要ChatGPT&#xff0c;为什么这很朋克总结ChatGPT、程序员、朋克 本文由ChatGPT编写。 ChatGPT是由OpenAI开发的大型语言模型。它的核心功能是生成人类语言文本&#xff0c;因此有多种应用场景&#xff0c;如文本生成、对话生成、文本…

「VUE架构」Vue2与Vue3的区别

文章目录前言一、性能比Vue2快1.2~2倍1.1 diff算法优化1.2 事件侦听缓存1.3 减少创建组件实例的开销二、 按需编译&#xff0c;体积比Vue2更小三、 Compostion API四、 支持TS五、 自定义渲染API六、更先进的组件七、 更快的开发体验前言 VUE是一套用于构建用户界面的渐进式框…

Nginx常用功能举例解析

Nginx提供的基本功能服务从大体上归纳为"基本HTTP服务"、“高级HTTP服务”和"邮件服务"等三大类。基本HTTP服务Nginx可以提供基本HTTP服务&#xff0c;可以作为HTTP代理服务器和反向代理服务器&#xff0c;支持通过缓存加速访问&#xff0c;可以完成简单的…

【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

前言&#xff1a;本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例&#xff1a;数码管的使用 功能特性&#xff1a; 采用 Xilinx Artix-7 XC7A35T芯片 配置方式&#xff1a;USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器&#xff1a;2M…

Vue-VueRouter

前言 Vue Router 是 Vue.js (opens new window)官方的路由管理器。它和 Vue.js 的核心深度集成&#xff0c;让构建单页面应用变得易如反掌。包含的功能有&#xff1a; 嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、查询、通配符基于 Vue.js 过渡系统的视图过渡效果…

SPSS聚类分析(含k-均值聚类,系统聚类和二阶聚类)

本篇博客主要是根据1、聚类的基本知识点_哔哩哔哩_bilibili系列视频进行的学习记录一、SPSS聚类分析的基本知识点1、什么是聚类分析?聚类分析(Cluster analysis)又叫做群集分析,通过一些属性将对象或变量分成不同的组别&#xff0c;在同一类下的对象或变量在这些属性上具有一些…

最全面的SpringBoot教程(四)——数据库连接

前言 本文为 最全面的SpringBoot教程&#xff08;四&#xff09;——数据库连接 相关知识&#xff0c;下边将对JDBC连接配置&#xff0c;与使用Druid数据源&#xff0c;从添加依赖到修改配置项再到测试进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &…

C语言深度解剖-关键字(5)

目录 if else 组合 if else 的基本用法 注释 深入理解bool float(double)与浮点数的比较 写在最后&#xff1a; if else 组合 if else 的基本用法 #include <stdio.h>int main() {int flag 1;if (flag 1){printf("flag %d\n", flag);}else if (flag…

crmeb pro多门店版二次开发

重启一下swool 新创建的数据库表 ALTER TABLE eb_store_cart ADD price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT 单独改价 AFTER status;ALTER TABLE eb_store_order ADD car_no VARCHAR(255) NOT NULL DEFAULT COMMENT 车牌号 AFTER erp_order_id, ADD frame_no VARCHA…

2023软考系统集成项目管理工程师易混淆知识点~(7)

将2023上半年软考《系统集成项目管理工程师》易混淆知识点&#xff0c;分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01;概念辨析 1:项目、运营概念:(1)项目:项目是为达到特定目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人而提供…