Eye Movement Recognition
一个先进的实时系统,能够准确检测和分类眼睛和眉毛的细微动作,包括'是'、'否'和'正常'三种动作。
下载量 105
发布时间 : 11/8/2024
模型简介
该模型采用CNN-LSTM架构,能够有效捕捉单帧的空间特征和帧序列的时间动态,确保在真实场景中的稳健和可靠表现。
模型特点
实时检测
持续处理实时摄像头画面,无显著延迟地检测眼眉动作。
GPU加速
通过TensorFlow-Metal在macOS上优化GPU使用,确保高效计算。
可扩展设计
系统设计易于扩展以支持更多面部手势或动作。
高准确率
在区分支持的动作方面表现出高准确率,是实时面部手势识别的可靠工具。
模型能力
实时眼眉动作检测
面部表情分类
非语言交流辅助
使用案例
人机交互
手势控制界面
通过眼眉动作增强用户界面交互。
提供更自然的交互方式
辅助技术
非语言交流工具
为言语障碍者提供通过眼眉动作进行交流的能力。
提高沟通效率
行为分析
面部表情监测
用于心理学或市场研究中的面部表情分析。
提供客观的行为数据
🚀 眼部和眉毛动作识别模型
本模型是一个先进的实时系统,能够精确检测和分类眼部及眉毛的细微面部动作。它采用 CNN - LSTM 架构,可有效捕捉单帧的空间特征和帧序列的时间动态,适用于人机交互、辅助技术等多种领域。
🚀 快速开始
前提条件
- 硬件:具备 Apple Silicon(M1、M1 Pro、M1 Max、M2 等)的 Mac,以支持 Metal GPU。
- 操作系统:macOS 12.3(Monterey)或更高版本。
- Python:版本 3.9 或更高。
安装步骤
- 克隆仓库
git clone https://huggingface.co/shayan5422/eye-eyebrow-movement-recognition
cd eye-eyebrow-movement-recognition
- 安装 Homebrew(若尚未安装) Homebrew 是 macOS 的包管理器,可简化软件安装过程。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装 Micromamba Micromamba 是与 Conda 环境兼容的轻量级包管理器。
brew install micromamba
- 创建并激活虚拟环境 使用 Micromamba 为项目创建一个隔离的环境。
# 创建一个名为 'eye_movement' 的新环境,使用 Python 3.9
micromamba create -n eye_movement python=3.9
# 激活环境
micromamba activate eye_movement
- 安装所需库
安装支持 Metal 的 TensorFlow(
tensorflow-macos
和tensorflow-metal
)以及其他必要的库。
# 为 macOS 安装 TensorFlow
pip install tensorflow-macos
# 安装 TensorFlow Metal 插件以实现 GPU 加速
pip install tensorflow-metal
# 安装其他依赖项
pip install opencv-python dlib imutils tqdm scikit-learn matplotlib seaborn h5py
⚠️ 重要提示
在 macOS 上安装
dlib
有时可能会遇到挑战。如果遇到问题,可考虑通过 Conda 安装或参考 dlib 的官方安装说明。
- 下载 Dlib 的预训练形状预测器 此模型对面部特征点检测至关重要。
# 导航到项目目录
cd /path/to/your/project/eye-eyebrow-movement-recognition/
# 下载形状预测器
curl -LO http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
# 解压缩文件
bunzip2 shape_predictor_68_face_landmarks.dat.bz2
确保 shape_predictor_68_face_landmarks.dat
文件与脚本位于同一目录中。
加载模型
import tensorflow as tf
# 加载训练好的模型
model = tf.keras.models.load_model('final_model_sequences.keras')
进行预测
import cv2
import numpy as np
import dlib
from imutils import face_utils
from collections import deque
import queue
import threading
# 初始化 dlib 的人脸检测器和特征点预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 初始化线程队列
input_queue = queue.Queue()
output_queue = queue.Queue()
# 定义序列长度
max_seq_length = 30
def prediction_worker(model, input_q, output_q):
while True:
sequence = input_q.get()
if sequence is None:
break
# 预处理和预测
# [添加你实际的预测逻辑]
# 示例:
prediction = model.predict(sequence)
class_idx = np.argmax(prediction)
confidence = np.max(prediction)
output_q.put((class_idx, confidence))
# 启动预测线程
thread = threading.Thread(target=prediction_worker, args=(model, input_queue, output_queue))
thread.start()
# 开始视频捕获
cap = cv2.VideoCapture(0)
frame_buffer = deque(maxlen=max_seq_length)
while True:
ret, frame = cap.read()
if not ret:
break
# 预处理帧
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rects = detector(gray, 1)
if len(rects) > 0:
rect = rects[0]
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)
# 提取感兴趣区域并预处理
# [添加你实际的 ROI 提取和预处理逻辑]
# 示例:
preprocessed_frame = preprocess_frame(frame, detector, predictor)
frame_buffer.append(preprocessed_frame)
else:
frame_buffer.append(np.zeros((64, 256, 1), dtype='float32'))
# 如果缓冲区已满,发送进行预测
if len(frame_buffer) == max_seq_length:
sequence = np.array(frame_buffer)
input_queue.put(np.expand_dims(sequence, axis=0))
frame_buffer.clear()
# 检查预测结果
try:
while True:
class_idx, confidence = output_queue.get_nowait()
movement = index_to_text.get(class_idx, "Unknown")
text = f"{movement} ({confidence*100:.2f}%)"
cv2.putText(frame, text, (30, 30), cv2.FONT_HERSHEY_SIMPLEX,
0.8, (0, 255, 0), 2, cv2.LINE_AA)
except queue.Empty:
pass
# 显示帧
cv2.imshow('Real-time Movement Prediction', frame)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 清理资源
cap.release()
cv2.destroyAllWindows()
input_queue.put(None)
thread.join()
⚠️ 重要提示
请将占位符注释替换为你脚本中实际的预处理和预测逻辑。
✨ 主要特性
- 实时检测:持续处理实时网络摄像头输入,无明显延迟地检测眼部和眉毛动作。
- GPU 加速:通过 macOS 上的 TensorFlow - Metal 进行 GPU 优化,确保高效计算。
- 可扩展设计:目前支持“是”“否”和“正常”动作,系统设计易于扩展以支持更多面部手势或动作。
- 用户友好界面:将预测结果直接叠加在实时视频流上,提供直观的视觉反馈。
- 高准确率:在区分支持的动作方面表现出高准确率,是实时面部手势识别的可靠工具。
📦 安装指南
安装步骤如上述“快速开始”部分所述,包括克隆仓库、安装依赖、下载预训练模型等。
💻 使用示例
基础用法
import tensorflow as tf
# 加载训练好的模型
model = tf.keras.models.load_model('final_model_sequences.keras')
高级用法
import cv2
import numpy as np
import dlib
from imutils import face_utils
from collections import deque
import queue
import threading
# 初始化 dlib 的人脸检测器和特征点预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 初始化线程队列
input_queue = queue.Queue()
output_queue = queue.Queue()
# 定义序列长度
max_seq_length = 30
def prediction_worker(model, input_q, output_q):
while True:
sequence = input_q.get()
if sequence is None:
break
# 预处理和预测
# [添加你实际的预测逻辑]
# 示例:
prediction = model.predict(sequence)
class_idx = np.argmax(prediction)
confidence = np.max(prediction)
output_q.put((class_idx, confidence))
# 启动预测线程
thread = threading.Thread(target=prediction_worker, args=(model, input_queue, output_queue))
thread.start()
# 开始视频捕获
cap = cv2.VideoCapture(0)
frame_buffer = deque(maxlen=max_seq_length)
while True:
ret, frame = cap.read()
if not ret:
break
# 预处理帧
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rects = detector(gray, 1)
if len(rects) > 0:
rect = rects[0]
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)
# 提取感兴趣区域并预处理
# [添加你实际的 ROI 提取和预处理逻辑]
# 示例:
preprocessed_frame = preprocess_frame(frame, detector, predictor)
frame_buffer.append(preprocessed_frame)
else:
frame_buffer.append(np.zeros((64, 256, 1), dtype='float32'))
# 如果缓冲区已满,发送进行预测
if len(frame_buffer) == max_seq_length:
sequence = np.array(frame_buffer)
input_queue.put(np.expand_dims(sequence, axis=0))
frame_buffer.clear()
# 检查预测结果
try:
while True:
class_idx, confidence = output_queue.get_nowait()
movement = index_to_text.get(class_idx, "Unknown")
text = f"{movement} ({confidence*100:.2f}%)"
cv2.putText(frame, text, (30, 30), cv2.FONT_HERSHEY_SIMPLEX,
0.8, (0, 255, 0), 2, cv2.LINE_AA)
except queue.Empty:
pass
# 显示帧
cv2.imshow('Real-time Movement Prediction', frame)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 清理资源
cap.release()
cv2.destroyAllWindows()
input_queue.put(None)
thread.join()
📚 详细文档
预期用途
本模型适用于多种应用场景,包括但不限于:
- 人机交互(HCI):通过基于手势的控制增强用户界面。
- 辅助技术:为言语障碍者提供非语言交流工具。
- 行为分析:监测和分析面部表情,用于心理学或市场研究。
- 游戏:通过面部手势控制创造更沉浸式和响应式的游戏体验。
⚠️ 重要提示
该模型仅用于研究和教育目的。在实际应用中,请确保遵守隐私和道德准则。
模型架构
模型采用 CNN - LSTM 架构来捕捉空间和时间特征:
- TimeDistributed CNN 层:
- Conv2D:独立提取每一帧的空间特征。
- MaxPooling2D:减少空间维度。
- BatchNormalization:稳定并加速训练。
- Flatten 层:将 CNN 层的输出展平,为 LSTM 处理做准备。
- LSTM 层:捕捉帧序列的时间依赖关系。
- 全连接层:基于组合的时空特征进行最终分类。
- 输出层:使用 Softmax 激活,提供三个类别(“是”“否”“正常”)的概率分布。
训练数据
模型在精心策划的数据集上进行训练,该数据集包含捕捉三种目标动作的短视频片段(1 - 2 秒):
动作 | 样本数量 |
---|---|
是 | 50 |
否 | 50 |
正常 | 50 |
每个视频在不同光照条件和背景下使用标准网络摄像头录制,以确保模型的鲁棒性。视频经过手动标注并按类别组织到相应目录进行预处理。
评估
模型在每个类别包含 60 个样本的单独测试集上进行评估,评估指标如下:
指标 | 数值 |
---|---|
准确率 | 85% |
精确率 | 84% |
召回率 | 86% |
F1 分数 | 85% |
🔧 技术细节
模型使用 CNN - LSTM 架构,结合卷积神经网络提取空间特征和长短期记忆网络捕捉时间动态。通过 TimeDistributed 层处理视频帧序列,利用 BatchNormalization 稳定训练过程。在训练过程中,使用了多种数据增强技术和优化算法,以提高模型的泛化能力和性能。
🔧 局限性
- 动作范围:目前,模型仅限于识别“是”“否”和“正常”动作。扩展到其他动作需要进一步的数据收集和训练。
- 环境限制:模型在良好光照条件和清晰正面人脸视图下表现最佳。光照变化、遮挡或极端角度可能影响准确率。
- 单人脸假设:系统设计用于处理单个人脸。多个人脸可能导致不可预测的行为。
⚖️ 伦理考量
- 隐私:确保用户知晓并同意使用其面部数据。负责任地处理所有捕获的数据,遵守相关隐私法律法规。
- 偏差:模型性能可能因不同人群而异。在多样化数据集上训练模型以减少与年龄、性别、种族等因素相关的偏差至关重要。
- 滥用:与所有面部识别技术一样,存在滥用的可能性。实施保障措施,防止模型被未经授权或不道德地使用。
📄 许可证
本项目采用 MIT 许可证。
🙏 致谢
感谢以下开源项目和工具的支持:
欢迎提出建议或贡献代码,以增强本模型的功能!
Vit Face Expression
Apache-2.0
基于视觉变换器(ViT)微调的面部情绪识别模型,支持7种表情分类
人脸相关
Transformers

V
trpakov
9.2M
66
Facial Emotions Image Detection
Apache-2.0
基于Google的ViT-base模型微调的面部情绪识别模型,在测试集上达到91%的准确率。
人脸相关
Transformers

F
dima806
198.83k
81
Man Woman Face Image Detection
Apache-2.0
基于人脸图像的高精度性别分类模型,准确率约98.7%
人脸相关
Transformers

M
dima806
50.08k
10
Vit Facial Expression Recognition
基于ViT的面部表情识别模型,在FER2013、MMI和AffectNet数据集上微调,支持七种情绪分类
人脸相关
Transformers

V
mo-thecreator
8,730
16
Vit Facial Expression Recognition
基于ViT的面部表情识别模型,在FER2013、MMI和AffectNet数据集上微调,能够识别七种基本情绪
人脸相关
Transformers

V
motheecreator
4,221
13
Resmasknet
MIT
ResMaskNet是一种结合残差掩码机制与U-Net架构的卷积神经网络,用于面部情绪识别。
人脸相关
R
py-feat
4,122
0
Attractive Faces Celebs Detection
Apache-2.0
基于Vision Transformer的面部吸引力评分模型,可对输入的面部图像返回0到1的吸引力评分,准确率约为83%。
人脸相关
Transformers

A
dima806
2,473
8
Vit Deepfake Detection
该模型由Rudolf Enyimba训练完成,用于检测深度伪造图像,测试准确率达98.70%。
人脸相关
Transformers 英语

V
Wvolf
1,990
13
Facial Expression Detection
基于预训练模型微调的面部表情识别模型,能有效识别八种不同面部表情。
人脸相关
Transformers

F
HardlyHumans
1,266
1
Miewid Msv3
MiewID-msv3是一个通过对比学习训练的特征提取器,用于在包含64种陆生和水生野生物种的大规模高质量数据集上进行个体重识别。
人脸相关
Transformers

M
conservationxlabs
974
2
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98
智启未来,您的人工智能解决方案智库
简体中文