1. 项目概述
这是一个基于PyQt框架开发的单摄像头视线追踪系统,通过普通笔记本电脑摄像头捕捉用户眼部图像,结合LBP纹理特征和回归模型预测屏幕注视点坐标。系统采用OpenCV进行图像处理,dlib库实现面部特征点检测,最终在PyQt构建的图形界面中实时显示预测结果。
我在开发这个毕设项目时,发现现有视线追踪方案大多依赖昂贵硬件,而普通摄像头方案又存在精度不足的问题。这个系统通过机器学习方法,在低成本硬件上实现了可用的注视点预测功能,特别适合学生进行计算机视觉和机器学习相关研究。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心技术解析
2.1 系统架构设计
系统采用模块化分层架构,主要分为四个功能模块:
-
数据采集模块:负责摄像头画面捕获和校准数据收集。使用OpenCV的VideoCapture接口获取视频流,在校准阶段引导用户注视屏幕特定点,同时记录对应的眼部图像。
-
图像处理模块:
- 面部检测:dlib的68点面部特征模型定位眼部区域
- 图像预处理:灰度转换、尺寸标准化
- 特征提取:LBP算法计算眼部纹理特征
-
模型训练模块:
- 数据准备:将采集的LBP特征与屏幕坐标对应
- 模型训练:支持随机森林和线性回归两种算法
- 性能评估:计算预测误差指标
-
用户界面模块:PyQt构建的GUI,包含:
- 摄像头画面显示区
- 控制面板(校准、训练、预测按钮)
- 预测结果显示区(模拟屏幕和注视点光标)
2.2 关键算法实现
2.2.1 眼部检测算法
使用dlib的预训练模型实现面部特征点检测:
python复制import dlib
import cv2
# 加载面部检测器和特征点模型
face_detector = dlib.get_frontal_face_detector()
landmark_predictor = dlib.shape_predictor("shape_predictor_68.dat")
def detect_eyes(frame):
# 检测人脸并获取特征点
faces = face_detector(frame)
if not faces:
return None, None
landmarks = landmark_predictor(frame, faces[0])
# 提取左右眼区域坐标(36-41点为左眼,42-47点为右眼)
left_eye = [(landmarks.part(i).x, landmarks.part(i).y) for i in range(36,42)]
right_eye = [(landmarks.part(i).x, landmarks.pa
