OSError:无法识别图像文件' dataSet / .DS_Store'

时间:2017-12-05 02:26:15

标签: opencv python-imaging-library

您好我正在尝试运行面部识别训练器,该教练会查看面部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,但没有太多帮助解决这个问题。有什么想法吗?

2 个答案:

答案 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.jpgdirectory/asdf.jpg以及从directory/开始到以.jpg结尾的所有其他可能性。

或者只需使用

将其从终端目录中删除即可
rm .DS_Store

但这只是一个临时解决方案,因为下次在Finder中查看文件夹时,macOS会再次插入文件。

答案 1 :(得分:0)

在终端,cd 目录并运行 rm .DS_Store