Header
2019-08-20
2019-09-19

ラズパイ(Raspberry Pi)へOpenCVをインストールして画像解析する

2019 08 24 90a732115c0c4158bb84515c63dc9e97 s

今回はラズパイへ画像認識ライブラリのOpenCvをインストールし、画像処理を行います。

○開発環境○

プログラミング言語:Python 3.6

使ったラズパイのモデル:Raspberry Pi 3 Model b+ ラズベリーパイ 3 b

なお、Pythonはpvenvを利用してインストールしています。

インストールパスは以下

/home/pi/.pyenv/shims/python

PvenvとPythonのインストール方法は以下

ラズパイ(Raspberry Pi)へPyenvでPython3をインスールする

OpenCVとは

インテルが開発したオープンソースの画像解析ライブラリになります。

これを利用して画像から人物判定を行ったり、画像にモザイクをかけるなど様々な機能が搭載されています。様々なプログラミング言語で利用可能ですが

今回はこちらをPythonで利用します。

OpenCVをラズパイにインストールする

基本的にこちらの記事を参考にしました。

上記を元につまづいたところに解説を付記します

ホームディレクトリでパッケージ管理システムをアップデート

cd ~

sudo apt-get update
sudo apt-get upgrade

各種ライブラリのインストール

sudo apt-get install build-essential cmake unzip pkg-config
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3-dev

OpenCVを公式からダウンロード

バージョン3.4.3をwgetでダウンロード

wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.3.zip

モジュールをダウンロード

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.3.zip

ファイルを解凍

unzip opencv.zip
unzip opencv_contrib.zip

PythonへpipとNumPyをインストール

sudo apt-get install python3-pip

numpyをインストール(5分くらいかかります)

pip3 install numpy

installと表記されて、画面が進まない事がありますが、問題ありません。そのままお待ち下さい

OpenCVのビルドを行います。

cd ~/opencv-3.4.3/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.3/modules \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D BUILD_EXAMPLES=ON ..

OpenCVのコンパイル

makeでコンパイルしますが、1時間以上かかります。 2回ほど途中で中断しましたが、中断しても続きからコンパイルされます。

make -j4

OpenCVをインストールする

sudo make install
sudo ldconfig

以下コマンドでOpenCVがインストールされたか確認

pkg-config --modversion opencv
3.4.3

pythonのパッケージとして、インストールされているか確認

 ls /usr/local/lib/python3.6/site-packages/
 cv2.cpython-36m-x86_64-linux-gnu.so

名称変更

cd /usr/local/lib/python3.6/site-packages/
sudo mv cv2.cpython-36m-x86_64-linux-gnu.so cv2.so

pyenvを利用している場合はpyenv配下のsite-packagesへ移動

sudo mv cv2.so /home/pi/.pyenv/versions/3.6.0/lib/python3.6/site-packages

pythonコマンドで動作確認

python3
>> import cv2
>> cv2.__version__

OpenCVのサンプルコードを利用して、顔の画像に枠を設定する

OpenCVに以下と同様のサンプル画像があります

lena

処理を加えると

lena

上記のように顔の部分に枠が設定され、顔認識されます。

PythonでOpenCVを利用する際のサンプルコード

以下が全コードです

import cv2
import numpy as np

faceCascade = cv2.CascadeClassifier('opencv-3.4.3/data/haarcascades_cuda/haarcascade_frontalface_alt.xml')

img = cv2.imread('topencv-3.4.3/samples/data/lena.jpg', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceCascade.detectMultiScale(gray, 1.1, 3)

if len(face) > 0:
        for rect in face:
                cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2)
else:
        print( "no face" )

cv2.imwrite('detected.jpg', img)

コードは以下の内容を参考にしています。

参考サイト

サンプル画像を調べるには、以下のコマンドでパスを確認します

find opencv-3.4.3 -name lena.jpg

opencv-3.4.3/doc/js_tutorials/js_assets/lena.jpg
opencv-3.4.3/samples/data/lena.jpg

カスケードファイルについても指定を誤るとエラーになります 以下コマンドでパスを確認できます。

find opencv-3.4.3 -name haarcascade_frontalface_alt.xml

function 'cvtColor'

画像パスの指定が間違っている 画像ファイル名の名前の指定が誤っています。

 error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

detectMultiScale

カスケードファイルのパス指定が間違っている。

error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

findコマンドでカスケードファイルのパスを確認

find opencv-3.4.3 -name haarcascade_frontalface_alt.xml


opencv-3.4.3/data/haarcascades_cuda/haarcascade_frontalface_alt.xml
opencv-3.4.3/data/haarcascades/haarcascade_frontalface_alt.xml
opencv-3.4.3/samples/winrt_universal/VideoCaptureXAML/video_capture_xaml/video_capture_xaml.Windows/Assets/haarcascade_frontalface_alt.xml
opencv-3.4.3/samples/winrt/FaceDetection/FaceDetection/Assets/haarcascade_frontalface_alt.xml

上記で出力されたパスを相対かフルパスで指定すれば解決します。

以上になります。

ラズパイへカメラを接続すれば、ご自身で撮影した写真を解析する事も可能です。詳細は以下から御覧ください

ラズパイ(Raspberry Pi) 3 Model b+でカメラを操作する

ラズパイ(Raspberry Pi) 3 Model b+で人感センサーで監視カメラを作成する

その他関連記事

Python3でDjangoをインストールし、HellowWoldを表示する

BeautifulSoupとpython3を利用し、画像をスクレイピングしてローカルに保存する

Djangoでページを追加し表示する|初心者・独学者向け入門コンテンツ

Python3.7をインスールすると No module named '_ctypes' というエラーになる

Ruby on RailsでSambal (サンバル)を利用する

前の記事
次の記事
人気記事
カテゴリーから記事を探す