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

运行Python人脸检测脚本报错NameError: name 'roi_gray'未定义如何解决

报错日志如下:

PS C:\Users\Windows 10> python -u "d:\tugas sem 1\pak angga\deteksimasker\Pendeteksi\bismillah deteksi wajah 2.py"
Traceback (most recent call last):
File "d:\tugas sem 1\pak angga\deteksimasker\Pendeteksi\bismillah deteksi wajah 2.py", line 27, in 
hidung = nosecascade.detectMultiScale(roi_gray, 1.18, 35)
NameError: name 'roi_gray' is not defined
[ WARN:0] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
报错原因与修复方案

1. 核心终止错误:NameError: name 'roi_gray' is not defined

触发原因

  • 脚本第27行调用鼻子级联检测器时传入了roi_gray参数,但该变量在此之前没有被成功定义:要么是完全漏掉了变量声明赋值步骤,要么是变量写在if/for等代码块里没有执行到对应分支,要么是变量名拼写错误。
  • 常规人脸检测逻辑中,roi_gray是人脸区域的灰度感兴趣区域,需要先检测到人脸、截取人脸对应灰度区域后才会生成这个变量。

修复方法

  • 检查变量拼写:确认roi_gray的大小写、字母拼写没有错误。
  • 补全变量定义逻辑,参考标准写法调整代码顺序:
import cv2

# 提前加载人脸、鼻子级联分类器(路径替换成你自己的分类器文件路径)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
nosecascade = cv2.CascadeClassifier('你的鼻子分类器路径.xml')

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 1. 先把整帧转灰度图
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 2. 检测人脸区域
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
    for (x, y, w, h) in faces:
        # 3. 截取人脸对应的灰度区域赋值给roi_gray
        roi_gray = gray[y:y+h, x:x+w]
        # 4. 再调用鼻子检测,必须放在roi_gray定义之后
        hidung = nosecascade.detectMultiScale(roi_gray, 1.18, 35)
        # 后续画框等逻辑
  • 增加分支容错:如果roi_gray只有在检测到人脸时才会定义,要加判断逻辑,只有变量存在时才执行鼻子检测代码,避免未检测到人脸时触发未定义错误。

2. 非致命警告:MSMF异步回调终止提示

触发原因

这是OpenCV在Windows系统调用媒体基础框架读取摄像头时,程序退出释放资源的常规提示,本身不影响脚本正常运行。

修复方法

如果要屏蔽警告,初始化摄像头时指定使用DSHOW后端即可:

# 把原有初始化代码替换为
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

内容的提问来源于stack exchange,提问作者Salsabila Fatmasari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:08