【问题标题】:Python - Invalid literal for int() with base 10: 'x'Python - 以 10 为底的 int() 的无效文字:'x'
【发布时间】:2019-10-29 15:55:30
【问题描述】:

我正在开发一个程序来检测人脸并在实时存在未知人脸时锁定计算机。我先收集了 21 张图像然后训练模型,但是当程序将所有图像存储在本地数据集中,然后“我的标题”是程序中的错误时出现错误

ID = int(os.path.split(imagePath)[-1].split('.')[1])

我尝试安装numpy、pillow、latest opencv、opencv-python、latest python、pip3、cv2

def getImageWithID(path):
    imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
    #print(f"{imagePaths}\n")
    for imagePath in imagePaths:
        faceImg = Image.open(imagePath).convert('L')
        #cv2.imshow('faceImg', faceImg)
        faceNp = np.array(faceImg, 'uint8')
        ID = int(os.path.split(imagePath)[-1].split('.')[1])
        #print(ID)

我希望程序将结果存储在 .yml 文件中。但是,程序没有将培训师的记录保存到 .yml 文件,因为它发生了错误,我希望如果这个错误得到解决,那么 .yml 文件将有望被创建。请帮忙。

【问题讨论】:

  • 您遇到的错误是什么?
  • os.path.split(imagePath)[-1].split('.')[1] 在你的情况下是一个字符串 x
  • 那怎么解决?
  • 错误是什么?用错误更新您的问题。
  • 没有人要求您粘贴完整的代码。您还没有准备好调试为什么 int() 调用有字符串 x 并且您还没有准备好分享 path 有什么以便人们可以提供帮助。 StackOverflow 不像你期望的那样工作,写一封邮件。整个目的就是在这里解决人们的问题。添加print os.path.split(imagePath)[-1].split('.')[1] 并使用输出更新问题。

标签: python opencv cv2


【解决方案1】:

你为函数设置了什么路径?

你可以用glob抓取路径,非常简单

recursive=True 使用 '**' 搜索当前所有文件夹,并返回带有文件名的路径列表

import os
from glob import glob

files = glob('**\\*.txt', recursive=True)  # '**' is used to search in any folder, 
# '*' is wild card, use it to fit with file formats

for path in files:
    print(path)  # this is relative path
    print(os.path.abspath(path))  # this will convert relative path to absolute

如果你只想要文件名,而不是这个: ID = int(os.path.split(imagePath)[-1].split('.')[1])

你应该只使用os.path.basename(path)

name = (os.path.basename(path).split('.')[0])
file_format = (os.path.basename(path).split('.')[1])

【讨论】:

    【解决方案2】:

    我认为您的路径是绝对的,而不是相对的(有关更多信息,请参阅 this)。 然后我假设imagePath/home/user/docs/1.png 所以让我们看看我们有什么:

    >>> os.path.split(imagePath)[-1].split('.')
    ['1', 'png']
    >>> os.path.split(imagePath)[-1].split('.')[1]
    'png'
    >>> ID = int(os.path.split(imagePath)[-1].split('.')[1])
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'png'
    

    所以也许你的文件名是 'somenumber.x' ? 尝试将[1]修改为[0]

    ID = int(os.path.split(imagePath)[-1].split('.')[0])
    

    【讨论】:

    • 正如@Krug 所说,这取决于您使用的路径。我只是根据您的输出进行猜测。以后如果遇到什么问题,可以像我一样使用控制台一步步打印出来,这样你就可以发现你的bug了。
    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多