Python输出会重复,即使它应该中断
我有一个使用OpenCV查找面的脚本,如果找不到面,它将输出“找不到面”,但它不会执行任何其他操作。它应该向后看,并要求另一个图像。有人能告诉我为什么它只打印“找不到面”,直到我按下CTRL+CPython输出会重复,即使它应该中断,python,python-2.7,Python,Python 2.7,我有一个使用OpenCV查找面的脚本,如果找不到面,它将输出“找不到面”,但它不会执行任何其他操作。它应该向后看,并要求另一个图像。有人能告诉我为什么它只打印“找不到面”,直到我按下CTRL+C def Crop( imagePattern, boxScale, outputimg, padding, ): happy = True imgList = glob.glob(imagePattern) while happy:
def Crop(
imagePattern,
boxScale,
outputimg,
padding,
):
happy = True
imgList = glob.glob(imagePattern)
while happy:
if len(imgList) <= 0:
return
else:
for img in imgList:
pil_im = Image.open(img)
cv_im = pil2cvGrey(pil_im)
faces = DetectFace(cv_im, faceCascade)
if faces:
n = 1
for face in faces:
croppedImage = imgCrop(pil_im, face[0],
padding, boxScale=boxScale)
(fname, ext) = os.path.splitext(img)
fname = os.path.basename(fname)
croppedImage.save(outputimg + '\\' + fname
+ ' -c' + ext)
n += 1
print 'Cropping:', fname
else:
print 'No faces found:', img
break
# Verify image
# savedPath = outputimg + '\\' + fname + ' -c' + ext
# verify = cv2.imread(savedPath, 0)
# cv2.imshow('Saved Image', verify)
print 'Please open the file manually to view for now'
print 'Are you happy with the final crop?'
happyTest = raw_input('Enter y or n: ')
happyTest = happyTest.strip()
if happyTest == 'y':
happy = False
elif happyTest == 'n':
padding = int(raw_input('Enter crop padding:'))
else:
print 'Not a valid input'
print 'Do you have more pictures to take?'
again = raw_input('Enter y or n: ')
if again == 'y':
Webcam(webcam, padding, boxScale)
else:
print 'Closing application'
time.sleep(3)
raise SystemExit
def裁剪(
图像模式,
箱形秤,
输出,
衬垫,
):
快乐=真实
imgList=glob.glob(图像模式)
虽然快乐:
if len(imgList)我不知道这是否是问题所在,但这是您发布它的方式:else语句之后的命令没有缩进。它不应该给你一个错误吗?我不知道这是否是问题所在,但这是你发布它的方式:else语句之后的命令没有缩进。它不应该给你一个错误吗?你的代码上有一个extar中断
-这个版本应该可以:
for img in imgList:
pil_im=Image.open(img)
cv_im=pil2cvGrey(pil_im)
faces=DetectFace(cv_im,faceCascade)
if faces:
n=1
for face in faces:
croppedImage=imgCrop(pil_im, face[0], padding, boxScale=boxScale)
fname,ext=os.path.splitext(img)
fname = os.path.basename(fname)
croppedImage.save(outputimg + '\\' + fname + ' -c' + ext)
n+=1
print 'Cropping:', fname
else:
print 'No faces found:', img
因此,尽管在其他答案和评论中,你不应该在else
语句中出现“中断”,但你在问题中提出的问题之所以出现,是因为你根本没有中断:如果代码到达else
块,它将在imgList:
循环中中断img的,不再进一步处理
除此之外,我在这段代码中还修复了两件事:
缩进——在Python中,这是一项严肃的工作,而不是“什么工作就好”。建议每个块嵌套使用4个空格-不多、不少、从不混合制表符和空格。您必须在代码编辑器首选项中配置它
代码中与Python无关的另一部分是循环前的验证
如果len(imgList)你的代码上有一个extarbreak
-这个版本应该可以:
for img in imgList:
pil_im=Image.open(img)
cv_im=pil2cvGrey(pil_im)
faces=DetectFace(cv_im,faceCascade)
if faces:
n=1
for face in faces:
croppedImage=imgCrop(pil_im, face[0], padding, boxScale=boxScale)
fname,ext=os.path.splitext(img)
fname = os.path.basename(fname)
croppedImage.save(outputimg + '\\' + fname + ' -c' + ext)
n+=1
print 'Cropping:', fname
else:
print 'No faces found:', img
因此,尽管在其他答案和评论中,你不应该在else
语句中出现“中断”,但你在问题中提出的问题之所以出现,是因为你根本没有中断:如果代码到达else
块,它将在imgList:
循环中中断img的,不再进一步处理
除此之外,我在这段代码中还修复了两件事:
缩进——在Python中,这是一项严肃的工作,而不是“什么工作就好”。建议每个块嵌套使用4个空格-不多、不少、从不混合制表符和空格。您必须在代码编辑器首选项中配置它
代码中与Python无关的另一部分是循环前的验证
if len(imgList)您使用的是break
语句,它完全停止for
循环
相反,在那里使用continue
语句跳过当前图像,并在for
循环中转到下一个图像
阅读有关中断
和继续
此外,您同时使用制表符和空格,这会导致块的缩进未对齐。虽然它们看起来好像对齐得很好,但调试选项卡错误时会有噩梦,所以只需更改编辑器设置,将选项卡用作4个空格即可
编辑
您的代码中存在多个问题:
您正在检查len(imgList)您正在使用break
语句,该语句完全停止for
循环
相反,在那里使用continue
语句跳过当前图像,并在for
循环中转到下一个图像
阅读有关中断
和继续
此外,您同时使用制表符和空格,这会导致块的缩进未对齐。虽然它们看起来好像对齐得很好,但调试选项卡错误时会有噩梦,所以只需更改编辑器设置,将选项卡用作4个空格即可
编辑
您的代码中存在多个问题:
您正在检查len(imgList)中断break
您在imgList:
循环中为img编码了中断,而不是快乐:
循环。而且,由于用于询问用户裁剪是否满意的代码位于该循环内(并且在中断之后),因此永远无法到达该循环(因此快乐
永远无法设置假
)。中断
您在imgList:
循环中为img编码的中断,不快乐时的:
循环。而且,由于用于询问用户裁剪是否满意的代码位于该循环内(在中断之后),因此永远无法到达该循环(因此快乐
永远无法设置假
)。您在混合制表符和空格。不要那样做。很抱歉,这是一个糟糕的复制和粘贴。我已经编辑了我的文章来纠正这一点和其他一些小的复制问题。原因可能是缩进。当你在使用Python时,它是非常重要的。它不是一个“糟糕的复制和粘贴”,它是制表符和空格混合的直接结果。在某些文本编辑器中看起来缩进的内容在其他文本编辑器中看起来不会缩进。您正在混合制表符和空格。不要那样做。很抱歉,这是一个糟糕的复制和粘贴。我已经编辑了我的文章来纠正这一点和其他一些小的复制问题。原因可能是缩进。当你在使用Python时,它是非常重要的。它不是一个“糟糕的复制和粘贴”,它是制表符和空格混合的直接结果。在某些文本编辑器中看起来缩进的内容在其他文本编辑器中看起来不会缩进。很抱歉,这是一个错误的复制粘贴。我对所有东西都使用标签,所以当我粘贴代码时,它的格式很奇怪。我会重新上漆,让它保持原样。我早该知道那会给你一个错误!对不起,这是一个坏的复制粘贴。我对所有东西都使用标签,所以当我粘贴代码时,它的格式很奇怪。我会重新上漆,让它保持原样。我早该知道会这样