测试场景:

1.

当用户瞳孔移动时,需要精确定位到瞳孔位置,保证眼动跟踪正常

2.

当有其他人进入摄像头工作范围时,不会干扰之前锁定用户的瞳孔定位功能

测试对象:

1.

自研算法

+

限定硬件(

Acer

Realsense

摄像头)

2. 

竞品:

tobill

Acer

Realsense

摄像头

测试范围:基于不同需求测试项,测试算法精度

测试项 说明 是否需要测试 优先级 备注 瞳孔状态 静止、移动 是 P0 已与研发确认 双目锁定 单人 是 P0 干扰 遮挡、是否佩戴眼镜  是 P0 光照 室内 是 P1 室外 否 P2 资源消耗 CPU、GPU、Memory 否 P2

评测指标

维度 指标 计算方式 说明 测试优先级 是否需要测试 备注 准确度 accuracy 均方根误差 RMSE=√Σ(Yi-Yi^) ²/n 衡量估计值与真实值的平均误差 P0 是 已与研发确认 精确度 precision 相对位移 D=-(xC−xA,yC−yA,zC−zA)-|dc-da|/n 衡量每两次的估计值与真实值的相对位移差值 P0 是 平均绝对误差 MAE = (Σ|xi - yi|) / N 衡量估计值和真实值之的平均绝对误差分布 P1 是 标准差    σ = √[Σ(xi-μ)²/n] 衡量估计值的分散度 P2 否 连续漏检率 cfnr CFNR 首帧检测时间、时间离散和集中程度、丢帧率 连续时间内的漏检帧数采样 P1 是 漏检率 fnr FNR FN / FN + TP 正例样本帧数采样 P2 否 误报率 fpr FPR FP / FP + TN 负例样本帧数采样 P2 否

评测指标-误报率

脚本设计方案:

使用OpenCV库进行本地视频中的面部和眼部检测,并将检测到的帧保存到磁盘

1.

加载

Haar

级联分类器文件,用于眼部和面部检测

2.

读取视频路径,视频分帧,循环从视频中读取每一帧将帧转换为灰度图像,并使用

Haar

级联分类器检测眼部

3.

保存检测到的帧和绘制标记。如果检测到

瞳孔

,绘制一个红色的点阵。如果检测到面部,绘制一个绿色的矩形

4.

检测窗口会显示每帧的图像,用红点阵和绿矩形标记眼部和面部。按下

Esc

键后,检测窗口会关闭

5.

统计并打印

Total

TP

TN

的数目,数据入盘

6.

测试过程中录制视频,视频数据包括双目闭合

/

遮挡、单目闭合

/

遮挡,不可正常识别到瞳孔

7.

将录制完成的视频放到测试代码(

OpenCV

),运行代码

8.

统计总帧数

Total

、检测到红色标识的帧数

FP

、未检测到红色标识的帧数

TN

,并保存

FP

到本地磁盘

9.

人工查看检测

fp

,确保代码检测无误

10.

计算误报率:

FPR = FP / FP + TN

测试数据集

编号 名称 用途及特点 备注 1 UnityEyes Dataset 计算机图形学、虚拟现实和眼动追踪 三维坐标。三维数据集不可用原因: 1. 算法数据格式:左右相机图像+相机内外参+瞳孔三维坐标 2. tobii 提供的SDK接口无法直接操作摄像头输入,即使是数据集格式符合条件,也不具备可操作性 2 TEyeD 包含 2000 多万张图像,眼动数据集 二维坐标。二维数据集不符合3D精度要求 3 BioID Face Database 瞳孔检测和人脸识别的研究 4 MPIIGaze Dataset 瞳孔定位和视线追踪 5 UT Multiview Datase 多视图瞳孔数据,瞳孔追踪和检测 6 GazeCapture 不同摄像头和场景的眼睛追踪数据

开发数据集

编号 名称 用途及特点 备注 1 ColumnbiaGaze 眼动跟踪和注视点估计 - 2 GI4E 人眼瞳孔中心检测 3 MPIIFaceGaze 视线跟踪技术数据集 4 LFW 人脸识别的数据集 二维图像 5 UBIRIS v2 虹膜识别数据集 6 GazeCapture 不同摄像头和场景的眼睛追踪数据 二维坐标

论文参考

[1] Macneil R .Tracking the Closed Eye by Calibrating Electrooculography with Pupil-Corneal Reflection[J].  2020.DOI:10.14288/1.0394158.

[2] Fuhl W , Weber D , Kasneci E .Pistol: Pupil Invisible Supportive Tool to extract Pupil, Iris, Eye Opening, Eye Movements, Pupil and Iris Gaze Vector, and 2D as well as 3D Gaze[J].  2022.DOI:10.48550/arXiv.2201.06799.

[3] Ou W L , Kuo T L , Chang C C ,et al.Deep-Learning-Based Pupil Center Detection and Tracking Technology for Visible-Light Wearable Gaze Tracking Devices[J].Applied Sciences, 2021.DOI:10.3390/app11020851.

[4] Fei X , Zhang Y , Kong D ,et al.Quantitative Model Study of the Psychological Recovery Benefit of Landscape Environment Based on Eye Movement Tracking Technology[J].  2023.

[5]Diane C. Mézière, Yu L , Reichle E D ,et al.Using Eye‐Tracking Measures to Predict Reading Comprehension[J].Reading Research Quarterly, 2023, 58(3):425-449.

[6] Cheng S , Ping Q , Wang J ,et al.EasyGaze:Hybrid eye tracking approach for handheld mobile devices[J].虚拟现实与智能硬件(中英文), 2022(002):004.

人眼数据集通常用于眼部相关的计算机视觉、眼动追踪、瞳孔检测、情感识别以及生物特征识别等领域的研究和开发。以下是一些常见的人眼数据集:

BioID Face Database: 这个数据库包含1,521张近距离的人脸图像,其中包括瞳孔位置的标记。它通常用于瞳孔检测和人脸识别的研究。 Columbia Gaze Data Set: 这个数据集包含56名参与者的近距离肖像图像,每名参与者提供了9张图像,其中包括注视点的标记。这个数据集通常用于研究注视点估计。 MPIIGaze Dataset: 这个数据集包括多个参与者的眼部图像,每个参与者在室内和室外环境下进行拍摄。它用于研究眼动追踪和注视点估计。 UnityEyes Dataset: 这个数据集包括以3D模型生成的虚拟眼部图像。它通常用于眼动追踪和瞳孔检测的研究。 GazeCapture Dataset: 该数据集包含来自移动设备的用户眼睛图像,被广泛用于研究用户的视线和注视点。 UT Multiview Dataset: 这个数据集包含多视图图像,用于眼部特征提取和眼部运动研究。

这些数据集在不同研究领域和应用中都有其特定的用途。在研究中,根据需要选择一个适合的数据集,并确保遵守数据使用的相关规定和协议。这些数据集通常由学术界或研究机构提供,可以在它们的官方网站或研究论文中找到更多信息。

下载xml依赖-面部 眼部

https://github.com/opencv/opencv/blob/4.x/data/haarcascades/haarcascade_eye.xml

import cv2

import os

# 加载Haar级联分类器文件

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 打开本地视频文件

video_path = '1.mp4'

cap = cv2.VideoCapture(video_path)

# 检查视频是否成功打开

if not cap.isOpened():

print("无法打开视频文件")

exit()

# 创建目录用于保存分帧图片

output_dir = 'frames'

if not os.path.exists(output_dir):

os.makedirs(output_dir)

frame_count = 0

eye_detected_count = 0

face_detected_count = 0

frame_filename_list = []

frame_filename_no_eyes = []

while True:

ret, frame = cap.read()

if not ret:

break

frame_count += 1

frame_filename = 0

# 在每一帧上检测眼部

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

if len(eyes) > 0:

eye_detected_count += 1

for (ex, ey, ew, eh) in eyes:

# 在眼部位置显示红色点阵

cv2.circle(frame, (ex + ew // 2, ey + eh // 2), 10, (0, 0, 255), -1)

else:

# 未检测到眼部的分帧图片

frame_filename = os.path.join(output_dir, f'frame_{frame_count:04d}_no_eyes.jpg')

cv2.imwrite(frame_filename, frame)

frame_filename_no_eyes.append(frame_filename)

# 在每一帧上检测面部

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

if len(faces) > 0:

face_detected_count += 1

for (fx, fy, fw, fh) in faces:

# 在面部位置显示绿色矩形

cv2.rectangle(frame, (fx, fy), (fx + fw, fy + fh), (0, 255, 0), 2)

cv2.imshow('Face and Eye Detection', frame)

# 按Esc键退出检测窗口

if cv2.waitKey(1) == 27:

break

# 保存分帧图片

frame_filename = os.path.join(output_dir, f'frame_{frame_count:04d}.jpg')

cv2.imwrite(frame_filename, frame)

# 释放视频捕获对象

cap.release()

cv2.destroyAllWindows()

# 打印统计信息

print(f"总帧数: {frame_count}")

print(f"检测到眼部的帧数: {eye_detected_count}")

print(f"检测到面部的帧数: {face_detected_count}")

print(f"未检测到眼部的图片数: {len(frame_filename_no_eyes)}")

print("未检测到眼部的图片名称:")

for filename in frame_filename_no_eyes:

print(filename)

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: