Irregular Error - python cv2.imshow NameError: name "definition" is not defined

Irregular Error - python cv2.imshow NameError: name "definition" is not defined

我正在通过 cv2.imshow 接线员 运行 录制视频。大多数时候,当我在命令行中调用它时,代码 运行s,但偶尔我会得到以下 NameError:

NameError: name 'masked' is not defined

然而,'masked'在cv2.imshow中被调用之前是绝对定义的:

image = frame.array

miniframe = image

masked = cv2.bitwise_and(image, image, mask=circle_img)

cv2.imshow("frame", masked)

以这种方式定义 'masked' 时会发生同样的事情:

image = frame.array

miniframe = image

M = np.float32([[1,0,x+w/2],[0,1,y+h/2]])
masked  = cv2.warpAffine(image, M, (x+w, y+h))

cv2.imshow("frame", masked)

print masked 插入到 cv2.imshow 行上方时,它会导致数组打印为数字 - 当代码运行时。当它不工作时,它会导致 NameError traceback 指向 print masked.

需要说明的是,在任何一种情况下,NameError 似乎都是随机发生的,无需修改代码。所以,我可以 运行 它一次或 20 次就好了,但是它会突然在命令行中不起作用,并回溯到 cv2.imshow 行。有时,从以前的版本中复制粘贴相同的代码块可以让它再次运行,但经过几次未修改的尝试后,又回到 NameError

我已经阅读了 Python NameError when var IS most definitely defined,并使用 cat -A filename.py 来检查不可见的控制字符。在取消和重新缩进之后,它又工作了 2 次,然后又回到了 NameError。

如有任何帮助,我们将不胜感激!

找到解决方案。我的问题与 'masked' 中未满足的条件有关。这是一个依赖人脸检测的程序,但对于任何必须满足的随机、持续的条件,我的问题都是一样的。

故障排除步骤包括: - 回顾我的回溯 - 通过在开始时将脸放在镜头前来测试 IRL,然后在开始时将手放在镜头上。这证实如果在启动时检测到人脸,程序将 运行,但如果没有人脸则不会。

为了解决这个问题,我对 cv2.imshow("frame", masked) 使用了 try/except 条件,导致代码如下所示:

image = frame.array

miniframe = image

M = np.float32([[1,0,x+w/2],[0,1,y+h/2]])
masked  = cv2.warpAffine(image, M, (x+w, y+h))

try:
    cv2.imshow("frame", masked)
except NameError:
    cv2.imshow("frame", image)

我是一个 rank 新手,这真的教会了我测试和审查回溯的价值!