2017-12-22 3 views
0

こんにちはすべてのシニアプログラマ!私はeigenfaces画像トレーニングの部分にエラーがあります。Eigenfacesトレーニング画像ピクセルサイズエラー

エラー:OpenCVエラー:サポートされていないフォーマットまたはフォーマットの組み合わせ(Eigenfacesメソッドでは、すべての入力サンプル(トレーニング画像)は同じサイズでなければなりません!cv :: faceの27889ピクセルが必要ですが、27556ピクセル:: Eigenfaces ::列車、ファイルC:¥projects¥opencv-python¥opencv_contrib¥modules¥face¥src¥eigen_faces.cpp、行68

私の写真が同じサイズでないことを意味する。私はカメラから画像をキャプチャするときにcv2.rezise()を試みますが、それでも動作しません。

は、ここに私のキャプチャコードです:

import cv2 
cam = cv2.VideoCapture(0) 
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

Id = input('enter your id: ') 
sampleNum = 0 

while(True): 
    ret, img = cam.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    faces = detector.detectMultiScale(gray, 1.3, 5) 

    for (x,y,w,h) in faces: 
     cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 

     sampleNum = sampleNum+1 

     cv2.imwrite("dataSet/user."+Id+'.'+str(sampleNum)+".jpg",cv2.resize 
     (gray[y:y+h,x:x+w],(70,70))) 

     cv2.imshow('frame',img) 

    if cv2.waitKey(100) & 0xFF == ord('q'):#waitKey is for delay in video capture 
     break 
    elif sampleNum >= 50:#how many picture capture? 
     break 

cam.release() 
cv2.destroyAllWindows() 

、ここでトレーニング一部です:

import cv2,os 
import numpy as np 


recognizer = cv2.face.EigenFaceRecognizer_create() 
detector= cv2.CascadeClassifier("haarcascade_frontalface_default.xml") 


def getImagesAndLabels(path): 

    imagePaths=[os.path.join(path,f) for f in os.listdir(path)] 
    faceSamples=[] 
    Ids=[] 

    for imagePath in imagePaths: 

     pilImage = Image.open(imagePath).convert('L') 

     imageNp = np.array(pilImage,'uint8') 

     Id = int(os.path.split(imagePath)[-1].split(".")[1]) 

     faces = detector.detectMultiScale(imageNp) 

     for (x,y,w,h) in faces: 
      faceSamples.append(imageNp[y:y+h,x:x+w]) 
      Ids.append(Id) 

    return faceSamples,Ids 

faces,Ids = getImagesAndLabels('dataSet') 
recognizer.train(faces, np.array(Ids)) 
recognizer.write('trainner/trainnerEi.yml') 

PS。私はありがとうLBPHFaceRecognizer からこのコードを適応させる!* 3

+0

検出されたサイズ変更された顔画像について、なぜ「getImagesAndLabels」で再度検出しますか? – Silencer

+0

真実は分かりません。私はちょうどYouTubeからLBPHFaceRecognizerのためにこのコードを取得します。シニアを助けてください。 – LotOfQuestion

答えて

0
  • オーケーを固有顔のみ動作しますので、すべての画像の寸法はピクセル空間で同じであれば、トレーニングで使用される画像が1枚サイズ28X28のであれば意味
  • トレーニング中とテスト中の他のすべての画像は、サイズが28x28でなければなりません
  • 画像サイズが同じでない場合、opencvはそのエラーをスローします
  • エラーは単に画像の1つが27889画素空間内の寸法は27556次元の画素空間であった。

    import cv2,os 
    import numpy as np 
    
    
    recognizer = cv2.face.EigenFaceRecognizer_create() 
    detector= cv2.CascadeClassifier("haarcascade_frontalface_default.xml") 
    
    
    def getImagesAndLabels(path): 
        width_d, height_d = 280, 280 # Declare your own width and height 
        imagePaths=[os.path.join(path,f) for f in os.listdir(path)] 
        faceSamples=[] 
        Ids=[] 
    
        for imagePath in imagePaths: 
    
         pilImage = Image.open(imagePath).convert('L') 
    
         imageNp = np.array(pilImage,'uint8') 
    
         Id = int(os.path.split(imagePath)[-1].split(".")[1]) 
    
         faces = detector.detectMultiScale(imageNp) 
    
         for (x,y,w,h) in faces: 
          ########################################      
          # The line to be changed by cv2.resize() 
          ######################################## 
          faceSamples.append(cv2.resize(imageNp[y:y+h,x:x+w], (width_d, height_d)) 
          Ids.append(Id) 
    
        return faceSamples,Ids 
    
    faces,Ids = getImagesAndLabels('dataSet') 
    recognizer.train(faces, np.array(Ids)) 
    recognizer.write('trainner/trainnerEi.yml') 
    
  • 心さえもテストしてください:

  • 私はあなたが同じサイズ
  • 使用あなたのためのリファレンスとして、以下のコード訓練部分のすべての画像を作るためにcv2.resize()機能を使用することをお勧めします画像は同じサイズでなければなりません

+0

ありがとう!シニア:D – LotOfQuestion

+0

私は助けになってうれしいです:D – Jai

関連する問題