您好我正在尝试运行面部识别训练器,该教练会查看面部jpg图像的文件夹
almostD = D - 1
choices_for_y = [0, almostD]
i = 0
while i < D:
x = random.randint(0, almostD) # anywhere horisontally
y = random.choice(choices_for_y) # top or bottom
if random.random() < 0.5: # flip x and y in half the cases
x, y = y, x
if a[x, y] == 0:
a[x, y] = 1
i += 1
反过来又返回错误
import os # importing the OS for path
import cv2 # importing the OpenCV library
import numpy as np # importing Numpy library
from PIL import Image # importing Image library
EigenFace = cv2.face.EigenFaceRecognizer_create(15) # creating EIGEN FACE RECOGNISER
FisherFace = cv2.face.FisherFaceRecognizer_create(2) # Create FISHER FACE RECOGNISER
LBPHFace = cv2.face.LBPHFaceRecognizer_create(1, 1, 7,7) # Create LBPH FACE RECOGNISER
path = 'dataSet' # path to the photos
def getImageWithID (path):
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
FaceList = []
IDs = []
for imagePath in imagePaths:
faceImage = Image.open(imagePath).convert('L') # Open image and convert to gray
faceImage = faceImage.resize((110,110)) # resize the image so the EIGEN recogniser can be trained
faceNP = np.array(faceImage, 'uint8') # convert the image to Numpy array
ID = int(os.path.split(imagePath)[-1].split('.')[1]) # Retreave the ID of the array
FaceList.append(faceNP) # Append the Numpy Array to the list
IDs.append(ID) # Append the ID to the IDs list
cv2.imshow('Training Set', faceNP) # Show the images in the list
cv2.waitKey(1)
return np.array(IDs), FaceList # The IDs are converted in to a Numpy array
IDs, FaceList = getImageWithID(path)
文件夹dataSet存在,我在我的mac上运行代码,最新版本的Pillow,numpy和cv2,我用Google搜索了OSError,但没有太多帮助解决这个问题。有什么想法吗?
答案 0 :(得分:2)
os.listdir()
会为您提供目录中的每个文件,包括.DS_Store
等隐藏文件。在macOS中,.DS_Store
是一个隐藏文件(任何以.
开头的文件,从Finder中隐藏)只要您使用Finder查看它们就可以插入目录中,以加快加载文件图标并保存缩略图的首选项该文件夹中的大小等。您可以阅读有关文件on Wikipedia的更多信息。
如果您导航到该目录并使用ls -a
列出终端中的文件,则可以看到该文件。
在任何情况下,您只需要尝试将其作为图像文件读取。有许多方法可以避免这种情况,这里有一些:
for imagePath in imagePaths:
if imagePath == directory + '.DS_Store':
continue
# rest of your program
或
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
if directory + '.DS_Store' in imagePaths:
imagePaths.remove(directory + '.DS_Store')
或只使用glob
仅使用您想要的扩展程序获取文件:
import glob
imagePaths = [f for f in glob.glob(directory+'*.jpg')] # or .png, .tif, etc
这里*
是一个通配符含义&#34;任何字符序列&#34;因此,这将抓取directory/1.jpg
和directory/asdf.jpg
以及从directory/
开始到以.jpg
结尾的所有其他可能性。
或者只需使用
将其从终端目录中删除即可rm .DS_Store
但这只是一个临时解决方案,因为下次在Finder中查看文件夹时,macOS会再次插入文件。
答案 1 :(得分:0)
在终端,cd 目录并运行 rm .DS_Store