21xrx.com
2025-03-16 13:32:59 Sunday
文章检索 我的文章 写文章
OpenCV闭眼检测:完整代码实现教程
2023-10-01 21:07:05 深夜i     54     0
OpenCV 闭眼检测 完整代码 实现教程

OpenCV是计算机视觉领域广泛应用的一种开源库,它提供了许多强大的图像处理功能。在许多应用中,有时需要进行闭眼检测,以确保人眼在特定情况下保持睁开。本文将介绍如何使用OpenCV库来实现闭眼检测的完整代码。

首先,我们需要安装OpenCV库。可以使用以下命令在Python环境中安装OpenCV:

python
pip install opencv-python

接下来,我们将导入所需的库:

python
import cv2
import dlib
from scipy.spatial import distance

我们还需要一个预训练的眼部检测模型,可以从dlib官方网站下载。下载完毕后,我们将提取眼部检测器的特征点:

python
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
(l_start, l_end) = (42, 48)
(r_start, r_end) = (36, 42)

在代码中,我们定义了左眼和右眼的起始和结束索引。这将帮助我们提取眼部特征。

下一步是定义一个函数,用于计算两个眼睛之间的欧氏距离:

python
def eye_aspect_ratio(eye):
  A = distance.euclidean(eye[1], eye[5])
  B = distance.euclidean(eye[2], eye[4])
  C = distance.euclidean(eye[0], eye[3])
  ear = (A + B) / (2.0 * C)
  return ear

计算眼睛的宽度和高度,并返回它们的二维的欧氏距离。接下来,我们定义一个阈值来判断是否闭眼:

python
EAR_THRESH = 0.2

阈值可以根据实际应用进行调整。下面是主要的闭眼检测代码:

python
video_capture = cv2.VideoCapture(0)
while True:
  ret, frame = video_capture.read()
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  faces = detector(gray, 0)
  
  for rect in faces:
    shape = predictor(gray, rect)
    shape = shape_to_np(shape)
    
    leftEye = shape[l_start:l_end]
    rightEye = shape[r_start:r_end]
    
    left_ear = eye_aspect_ratio(leftEye)
    right_ear = eye_aspect_ratio(rightEye)
    
    avg_ear = (left_ear + right_ear) / 2.0
    
    # check if eyes are closed
    if avg_ear < EAR_THRESH:
      cv2.putText(frame, "Eyes Closed", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
      # do something when eyes are closed
      
    else:
      cv2.putText(frame, "Eyes Open", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
      # do something when eyes are open
      
  cv2.imshow("Video", frame)
  
  if cv2.waitKey(1) & 0xFF == ord('q'):
    break
video_capture.release()
cv2.destroyAllWindows()

在此代码中,我们首先从视频流中读取每一帧图像,在灰度图像上检测人脸,并将其转换为68个面部特征点。然后,我们提取左右眼的特征点,并计算左右眼的欧氏距离。接下来,我们求得平均欧氏距离,并根据阈值判断眼睛是否闭合。最后,我们通过在视频中显示文本来表示眼睛的状态。

通过以上步骤,我们已经完成了OpenCV的闭眼检测实现。可以根据实际需求进行修改和拓展,例如,当检测到闭眼时,可以触发警报或采取其他必要的措施。OpenCV库的强大功能为计算机视觉领域带来了许多创新应用的可能性。

  
  

评论区