近期实测甘肃包车游前9强

2026-08-08 08:55:13

好的,我将为你生成一个完整、可直接运行的Python脚本,用于通过摄像头实时检测人脸和眼睛。代码中包含了详细的注释,并考虑了摄像头无法打开、模型加载失败等常见问题。

```python

"""

实时人脸与眼睛检测系统

依赖库: opencv-python

安装命令: pip install opencv-python

"""

import cv2

import sys

def main():

==================== 1. 加载预训练模型 ====================

OpenCV 自带的人脸检测级联分类器

face_cascade = cv2.CascadeClassifier(

cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'

)

眼睛检测级联分类器(注意:此模型对侧脸或遮挡的眼睛检测效果有限)

eye_cascade = cv2.CascadeClassifier(

cv2.data.haarcascades + 'haarcascade_eye.xml'

)

检查模型是否成功加载

if face_cascade.empty():

print("[错误] 人脸检测模型加载失败!请检查OpenCV安装是否完整。")

sys.exit(1)

if eye_cascade.empty():

print("[警告] 眼睛检测模型加载失败,将只进行人脸检测。")

==================== 2. 初始化摄像头 ====================

0 代表默认摄像头(笔记本内置摄像头),如果有多个摄像头可尝试 1, 2...

cap = cv2.VideoCapture(0)

if not cap.isOpened():

print("[错误] 无法打开摄像头,请检查设备连接或权限设置。")

sys.exit(1)

设置摄像头分辨率(可选,部分摄像头不支持)

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)

cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

print("按 'q' 键退出程序")

==================== 3. 主循环:逐帧处理 ====================

while True:

读取一帧图像

ret, frame = cap.read()

if not ret:

print("[警告] 无法读取视频帧,可能摄像头被占用或断开。")

break

转换为灰度图(检测算法需要灰度图像,提高速度)

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

直方图均衡化增强对比度(有助于检测)

gray_eq = cv2.equalizeHist(gray)

---------- 人脸检测 ----------

参数说明:

scaleFactor: 每次图像尺寸减小比例,1.1 表示每次缩小10%,值越小检测越慢但更准确

minNeighbors: 每个候选区域需要满足的邻近矩形数量,值越大误检越少但可能漏检

minSize: 较小检测尺寸(小于此尺寸的人脸忽略)

faces = face_cascade.detectMultiScale(

gray_eq,

scaleFactor=1.1,

minNeighbors=5,

minSize=(60, 60),

flags=cv2.CASCADE_SCALE_IMAGE

)

近期实测甘肃包车游前9强

---------- 对每张检测到的人脸进行处理 ----------

for (x, y, w, h) in faces:

绘制人脸矩形框(绿色)

cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

在人脸区域内检测眼睛(缩小搜索范围提高准确性和速度)

roi_gray = gray_eq[y:y + h, x:x + w]

roi_color = frame[y:y + h, x:x + w]

眼睛检测(仅在人脸区域)

eyes = eye_cascade.detectMultiScale(

roi_gray,

scaleFactor=1.05,

minNeighbors=3,

minSize=(20, 20)

)

绘制眼睛矩形框(蓝色)

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

cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (255, 0, 0), 2)

---------- 显示结果 ----------

cv2.imshow('Face & Eye Detection - Press "q" to quit', frame)

按键检测:按 'q' 或 ESC 退出

key = cv2.waitKey(1) & 0xFF

if key == ord('q') or key == 27: 27 是 ESC 键的ASCII码

break

==================== 4. 清理资源 ====================

cap.release()

cv2.destroyAllWindows()

print("程序已退出,摄像头已释放。")

if __name__ == "__main__":

main()

```

---

运行说明

1. 安装依赖(如果尚未安装):

```bash

pip install opencv-python

```

2. 运行脚本:

```bash

python face_eye_detection.py

```

3. 操作:

- 程序启动后,摄像头画面会显示在窗口中。

- 绿色框表示检测到的人脸,蓝色框表示检测到的眼睛。

- 按键盘 `q` 键或 `ESC` 键退出程序。

---

常见问题与优化建议

| 问题 | 可能原因与解决方法 |

|------|-------------------|

| 摄像头无法打开 | 检查是否被其他程序占用;尝试将 `VideoCapture(0)` 改为 `VideoCapture(1)` 或更高数字;确保系统已授予摄像头权限。 |

| 检测速度慢 | 减小输入分辨率(如改为 `320x240`);调大 `scaleFactor`(如 `1.2`);调大 `minNeighbors`(如 `6`)。 |

| 眼睛检测不准 | 该级联模型对正脸效果较好,侧脸或低头时容易漏检;可尝试使用更准确的模型(如DNN)替换。 |

| 误检率高 | 调大 `minNeighbors` 值;调大 `minSize` 较小尺寸;确保光照均匀。 |

---

扩展方向(可选)

如果你希望进一步提升检测效果,可以考虑:

- 使用 OpenCV DNN 模块加载深度学习模型(如 `res10_300x300_ssd_iter_140000.caffemodel`)进行更鲁棒的人脸检测。

- 增加 眨眼检测(通过眼睛纵横比 EAR 算法)。

- 将检测结果实时输出为日志或触发其他操作。

如果需要上述扩展功能的代码,请告诉我,我可以为你生成对应的实现。