###前提・実現したいこと
http://fixxman.hatenablog.com/entry/2016/01/12/013344
に書かれているプログラムの
#データの読み込み
の部分のプログラムを
http://qiita.com/hitomatagi/items/8f2f37646179aca68649#_reference-cda83def48b86e81b94e
に書かれているプログラムで書き換えたいのですがPCAの部分でエラーが出てしまいうまくいきません。
ご享受お願い致します。
###発生している問題・エラーメッセージ
Traceback (most recent call last): File "c:\users\aaa\documents\visual studio 2015\Projects\face_predict\face_predict\face_predict.py", line 70, in <module> pca = RandomizedPCA(n_components=n_components, whiten=True).fit(X) File "C:\Users\aaa\Anaconda2\lib\site-packages\sklearn\decomposition\pca.py", line 571, in fit self._fit(check_array(X)) File "C:\Users\aaa\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 415, in check_array context)) ValueError: Found array with 0 feature(s) (shape=(1, 0)) while a minimum of 1 is required.
###該当のソースコード
#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import print_function import cv2, os import numpy as np from PIL import Image import matplotlib.pyplot as plt from sklearn.cross_validation import train_test_split from sklearn.datasets import fetch_lfw_people from sklearn.grid_search import GridSearchCV from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.decomposition import RandomizedPCA from sklearn.svm import SVC from sklearn.cross_validation import cross_val_score # トレーニング画像 train_path = '../Ariel_Sharon/' # Haar-like特徴分類器 cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2.CascadeClassifier(cascadePath) # 指定されたpath内の画像を取得 def get_images_and_labels(path): # 画像を格納する配列 images = [[]] # ラベルを格納する配列 labels = [] # ファイル名を格納する配列 files = [] for f in os.listdir(path): # 画像のパス image_path = os.path.join(path, f) # グレースケールで画像を読み込む image_pil = Image.open(image_path).convert('L') # NumPyの配列に格納 image = np.array(image_pil, 'uint8') # Haar-like特徴分類器で顔を検知 faces = faceCascade.detectMultiScale(image) # 検出した顔画像の処理 for (x, y, w, h) in faces: # 顔を 200x200 サイズにリサイズ roi = cv2.resize(image[y: y + h, x: x + w], (200, 200), interpolation=cv2.INTER_LINEAR) # 画像を配列に格納&ファイル名を配列に格納 images.append([roi,f]) # ファイル名からラベルを取得 labels.append(int(f[7:9])) return images, labels def get_accuracy(clf, train_features, train_labels): scores = cross_val_score(clf, train_features, train_labels, cv=5) print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # トレーニング画像を取得 X, y = get_images_and_labels(train_path) n_components = 150 pca = RandomizedPCA(n_components=n_components, whiten=True).fit(X) X_train_pca = pca.transform(X) X_test_pca = pca.transform(X)
あなたの回答
tips
プレビュー