我正在开发一个程序来检测面部并锁定计算机,如果实时存在某些未知的面部。我先收集21张图像,然后训练模型,但是当程序将所有图像存储在本地数据集中时出现错误,然后“我的标题”是程序中的错误,
ID = int(os.path.split(imagePath)[-1].split('.')[1])
我尝试安装numpy,枕头,最新的opencv,opencv-python,最新的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文件中。但是,程序不会将Trainer的记录保存到.yml文件,因为它发生错误,我希望如果此错误得到解决,那么将有望创建.yml文件。请帮忙。
答案 0 :(得分:0)
我认为您的路径是绝对的,而不是相对的(有关更多信息,请参见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])
答案 1 :(得分:0)
您可以使用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])