Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python输出会重复,即使它应该中断_Python_Python 2.7 - Fatal编程技术网

Python输出会重复,即使它应该中断

Python输出会重复,即使它应该中断,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:

我有一个使用OpenCV查找面的脚本,如果找不到面,它将输出“找不到面”,但它不会执行任何其他操作。它应该向后看,并要求另一个图像。有人能告诉我为什么它只打印“找不到面”,直到我按下CTRL+C

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)你的代码上有一个extar
break
-这个版本应该可以:

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时,它是非常重要的。它不是一个“糟糕的复制和粘贴”,它是制表符和空格混合的直接结果。在某些文本编辑器中看起来缩进的内容在其他文本编辑器中看起来不会缩进。很抱歉,这是一个错误的复制粘贴。我对所有东西都使用标签,所以当我粘贴代码时,它的格式很奇怪。我会重新上漆,让它保持原样。我早该知道那会给你一个错误!对不起,这是一个坏的复制粘贴。我对所有东西都使用标签,所以当我粘贴代码时,它的格式很奇怪。我会重新上漆,让它保持原样。我早该知道会这样