樹莓派實時人臉識別

樹莓派實時人臉識別

最近在研究 face_recognition,這個一個人臉識別的庫,可以通過python調用。作者在電腦上用攝像頭實現了一個實時人臉識別的效果,如下圖所示。
實時人臉識別效果
我想在樹莓派上實現這個效果。如果嵌入式設備也能做的這樣,那就太好玩了。就像電影裏的那種效果。(找不到好圖,網上只找到這張)
電影效果

安裝過程

我們可以直接參考項目頁面上的安裝指引 Raspberry Pi 2+ installation instructions。我使用的是樹莓派2B,CPU是4核900MHz,內存1GB(不過face_recognition只會用到單核),並且我將CPU超頻到1050MHz。(關於樹莓派超頻,可以看我另一篇博客樹莓派超頻後性能與功耗的研究
下面我說一下我的安裝步驟。(怎麼裝系統就不說了,網上大把。裝完記得修改源,我在學校,用中科大的源。)
先安裝一大堆需要的庫:

sudo apt-get update
sudo apt-get install build-essential \
    cmake \
    gfortran \
    git \
    wget \
    curl \
    graphicsmagick \
    libgraphicsmagick1-dev \
    libatlas-dev \
    libavcodec-dev \
    libavformat-dev \
    libboost-all-dev \
    libgtk2.0-dev \
    libjpeg-dev \
    liblapack-dev \
    libswscale-dev \
    pkg-config \
    python3-dev \
    python3-numpy \
    python3-pip \
    zip

如果使用樹莓派的攝像頭(CSI接口的那個),執行下面的命令:

sudo apt-get install python3-picamera
sudo pip3 install --upgrade picamera[array]

下載安裝dlib:

mkdir -p dlib
git clone -b 'v19.6' --single-branch https://github.com/davisking/dlib.git dlib/
cd ./dlib
sudo python3 setup.py install --compiler-flags "-mfpu=neon"

安裝face_recognition

sudo pip3 install face_recognition

下載示例代碼並嘗試運行:

git clone --single-branch https://github.com/ageitgey/face_recognition.git
cd ./face_recognition/examples
python3 facerec_on_raspberry_pi.py

到這裏我出現了報錯,說缺少了一個庫。一般缺少庫的話,我們會先用apt-cache search 庫名來搜索到那個庫的安裝包,然後用sudo apt-get install 包名來安裝。
這裏報錯說缺少了libatlas.so.3,那我們就用apt-cache search libatlas來搜索,發現它的包名叫libatlas3-base,所以我們用sudo apt-get install libatlas3-base來安裝。後面測試攝像頭的時候也會遇到這樣的問題,解決辦法是一樣的。
安裝完之後,代碼正常運行。
我們的目標是樹莓派實時人臉識別,所以我們把樹莓派的攝像頭(CSI接口的那個)裝上,並且在raspi-config中啓用攝像頭,然後重啓。(如果不懂的話請搜索一下“樹莓派攝像頭使用”)
然後我們運行一下實時人臉識別的代碼:

python3 facerec_from_webcam_faster.py

會報錯,在import cv2的時候缺少什麼庫,然後根據提示用之前安裝方法安裝就好了。裝完一個庫再運行的時候,發現又提示缺少別的庫,然後再安裝缺少的庫,這樣反覆個三四次,就把缺少的庫都裝好了,然後就不再報缺少庫的錯誤了。(庫名我都忘了,反正很快就弄好的了)
不過再次運行的時候,會報別的錯誤,出錯的代碼是small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25),這是因爲video_capture.read()沒有讀到圖片。攝像頭都裝了,爲什麼會讀不出圖片呢?難道攝像頭壞了?不是。

這是因爲樹莓派中的camera module是放在/boot/目錄中以固件形式加載的,不是一個標準的V4L2的攝像頭驅動,所以加載起來之後會找不到/dev/video0的設備節點。來源:【樹莓派】在OpenCV中調用CSI攝像頭

所以我們可以使用下面的命令來加載驅動模塊,就沒問題了:

sudo modprobe bcm2835-v4l2

如果想開機自動加載,我們可以修改/etc/modules文件,添加一行:

bcm2835-v4l2

如下圖所示:
開機自動加載模塊示意圖
然後,我們再運行代碼進行測試:

python3 facerec_from_webcam_faster.py

現在代碼能正常運行了。會彈出一個圖像框,裏面顯示出攝像頭的拍攝內容。下面是我的測試圖片:
奧巴馬測試
普京測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章