在提取动画角色的面部时,我得到了UnboundLocalError



这是代码

import cv2
import os
import math 
import requests

tom_xml = requests.get('https://raw.githubusercontent.com/hako/dissertation/master/haar_cascades/tom.xml')
f = open('/content/tom.xml','w')
f.write(tom_xml.text)

def video_to_frames(video, frame_folder):
cam = cv2.VideoCapture("/content/Dataset/" + video)
frame_rate = cam.get(5)
try:        
if not os.path.exists('/content/' + frame_folder): 
os.makedirs('/content/' + frame_folder)  
except OSError: 
print ('Error: Creating directory of data') 
currentframe = 0
while cam.isOpened():
frame_id = cam.get(1)
ret,frame = cam.read()
if (frame_id % math.floor(frame_rate)) == 0:
name = '/content/' + frame_folder +'/frame' + str(currentframe) + '.jpg'
faceCascade = cv2.CascadeClassifier('/content/tom.xml')
faces = faceCascade.detectMultiScale(
frame,
scaleFactor=1.10, 
minNeighbors=20, 
minSize=(48, 48),
flags=cv2.CASCADE_SCALE_IMAGE
)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
roi_color = frame[y:y + h, x:x + w]
cv2.imwrite('/content/' + frame_folder +'/frame{:d}.jpg'.format(currentframe), roi_color)
currentframe += 1
if ret != True:
cam.release()
break
cv2.destroyAllWindows()
print('Completed')

该代码与第一视频文件配合良好,video_to_frames("训练汤姆和杰瑞.mp4","数据训练"(已完成

然而,它抛出UnboundLocalError:在为第二个视频文件赋值之前引用的本地变量"roi_color">

video_to_frames('Test Tom and Jerry.mp4', 'data_test')
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-5-ef0eb71a5dba> in <module>()
----> 1 video_to_frames('Test Tom and Jerry.mp4', 'data_test')
<ipython-input-4-714f5fe4b084> in video_to_frames(video, frame_folder)
31         roi_color = frame[y:y + h, x:x + w]
32 
---> 33       cv2.imwrite('/content/' + frame_folder +'/frame{:d}.jpg'.format(currentframe), roi_color)
34       currentframe += 1
35 
UnboundLocalError: local variable 'roi_color' referenced before assignment

也许有愚蠢的错误。任何类型的帮助都将不胜感激,提前感谢

您的人脸列表没有条目,在启动for循环之前,您需要将roi_color设置为某个常量,如下所示:

roi_color = ...  # Because if there are zero faces, the for loop will never run.
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
roi_color = frame[y:y + h, x:x + w]
cv2.imwrite('/content/' + frame_folder +'/frame{:d}.jpg'.format(currentframe), roi_color)
currentframe += 1

相关内容

  • 没有找到相关文章

最新更新