You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决人脸识别项目中TypeError: cannot unpack non-iterable NoneType object错误

问题解决:TypeError: cannot unpack non-iterable NoneType object

错误原因分析

这个错误出现是因为video_capture.read()返回了None,无法执行解包操作,根源在于两处关键初始化缺失:

  1. cv2.VideoCapture()未传入参数,没有正确打开摄像头或视频文件
  2. face_cascade = cv2.CascadeClassifier()没有加载人脸检测的分类器模型,后续人脸检测也会失败
  3. 资源释放代码在break语句后,永远不会执行

修复步骤

  • 初始化视频捕获对象:给cv2.VideoCapture()传入0(调用电脑默认摄像头),如果是读取本地视频,传入视频文件的完整路径
  • 加载人脸分类器:调用face_cascade.load(cascPath)加载预定义的人脸检测模型
  • 调整资源释放位置:将video_capture.release()和cv2.destroyAllWindows()移到循环外部,确保程序退出时能释放资源

修正后的完整代码

import cv2
import os

cascPath = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier()
# 加载人脸分类器模型
face_cascade.load(cascPath)
# 初始化视频捕获,0表示调用默认摄像头
video_capture = cv2.VideoCapture(0)

while True:
    # 捕获视频帧
    ret, frames = video_capture.read()
    # 检查是否成功读取帧
    if not ret:
        print("无法读取视频帧")
        break
        
    gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30)
    )
    # 为人脸绘制矩形框
    for (x, y, w, h) in faces:
        cv2.rectangle(frames , (x, y), (x + w, y + h), (0, 255, 0), 2)
    # 显示处理后的帧
    cv2.imshow('Video', frames)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放视频捕获资源并关闭窗口
video_capture.release()
cv2.destroyAllWindows()

额外说明

  • 如果提示无法打开摄像头,检查摄像头是否被其他程序占用,可尝试更换参数1调用外接摄像头
  • 若要读取本地视频,将cv2.VideoCapture(0)替换为cv2.VideoCapture("你的视频文件完整路径")

内容的提问来源于stack exchange,提问作者Shashikala M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:01:02