天天看點

關于運作“基于極限學習機ELM的人臉識别程式”代碼犯下的一些錯誤

代碼來源 基于極限學習機ELM的人臉識别程式

感謝文章主的分享

我的環境是

  • win10
  • anaconda Command line client (version 1.6.5)(conda 4.3.30)
  • tensorflow-gpu 1.1.0
  • python 3.6.2

1. 直接運作代碼塊,提示“未知引用 import hpelm"

這是因為我的Python環境沒有安裝hpelm導緻的,運作代碼

pip install hpelm

。第一次安裝沒有成功,查詢發現可能是pip版本問題,更新了pip版本,運作

pip3 install hpelm

,安裝成功,兩次使用的安裝指令不同,不知道是不是因為更新了pip版本才安裝hpelm成功的。

2. 提示‘import cv2’錯誤

安裝hpelm後,再次運作代碼,提示上述錯誤,因為我的環境沒有安裝opencv,運作

  1. pip install numpy Matplotlib

  2. pip install opencv-python

    安裝成功即可

3. 提示numpy版本不對

再次運作代碼,提示numpy版本不對,提示錯誤

RuntimeError: module compiled against API version 0xc but this version of numpy is 0xa

網上提示更新numpy版本,方法:

  1. 運作

    pip uninstall numpy

  2. pip install -U numpy

    安裝成功即可。

4. 提示錯誤'AssertionError: X has wrong dimensionality: expected 10000, found 1'

錯誤如下:

Traceback (most recent call last):

File "train_hpelm.py", line 38, in <module>

elm.train(np.array(input_data),np.array(output_data))

File "C:\Users\caichangqing\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\hpelm\elm.py", line 182, in train

X, T = self._checkdata(X, T)

File "C:\Users\caichangqing\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\hpelm\elm.py", line 533, in _checkdata

(self.nnet.inputs, X.shape[1])

AssertionError: X has wrong dimensionality: expected 10000, found 1

由于路徑問題,代碼中路徑的格式’D:\abc\abc\a',中間''符号被當成轉義字元,造成路徑錯誤,應該改成

  • D:\\abc\\abc\\a
  • 或者 D:/abc/abc/a

5. AttributeError: module 'opencv' has no attribute 'resize'

AttributeError: module 'opencv' has no attribute 'resize'

在代碼的引用中,導入opencv是'import opencv as cv2',我的環境是'python 3.6',應該使用'import cv2'導入

6. 讀入圖檔錯誤

OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in cv::resize, file C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp, line 4044

File "train_hpelm.py", line 15, in

試了很多,最後發現我下載下傳的人臉庫有問題,同樣環境下,cv2.imread()可以讀取别的圖檔,不能讀取我下載下傳的人臉庫圖檔,cv2.imread()讀取後傳回值是None。同時,所有不能正确讀入圖檔都會提示該錯誤。

(後來同學說cv2.imread不能讀取gif圖檔,我下的是這個格式的)

7. 新下載下傳的庫,改名就行了

我使用的

yale人臉庫

下載下傳位址

#coding=utf-8  
import os
path = "D:\\tensorflow\\face\\yale" #更改為你自己的人臉庫路徑
count = 1
flag = 1
for i in range(1,166):
   flag = i%11
   add_pre=lambda x:'0'+str(x) if len(str(x))==1 else str(x)      #加字首
   if(flag == 0 ):
      flag = 11
   files = os.path.join(path, 's{}.bmp'.format(i))
   if(os.path.isfile(files)):
        filename=os.path.splitext(files)[0];#檔案名
      filetype=os.path.splitext(files)[1];#檔案擴充名
      Newdir=os.path.join(path,'subject{}_{}'.format(add_pre(count),flag)+filetype);#新的檔案路徑
      os.rename(files,Newdir)#重命名
   if(flag == 11): count += 1           

繼續閱讀