OpenCVで画像処理

こんにちは かずまなぶです(*’ω’*)

今日はOpenCVの使い方を学びました。ひたすらメモを残していきます!!

近日、この知識を元に、ラズパイカメラで寸法測定を行うということをやる予定です。

http://toyo-interest.com/rasbery-pi3-b%E3%81%A8opencv%E3%81%A7%e3%80%80%E3%81%99%E3%81%8D%E3%81%BE%E3%82%92%E6%B8%AC%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%84-1/

以下、ひたすらメモ

SSHの使い方 誰かタスケテ

前回、ラズパイでSSHを試みたという話をしましたが、うまくいかなかった状況を記録します。↓うまくいかなかったやつ

========ここからは PC を操作する============
PuTTY をインストールする
https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.70-installer.msi

⑤ラズパイにリモート接続する
PuTTY を起動
Saved Sessionsのテキストボックスにpiと入力しSaveボタンを押す

Host Name of IP address に 192.168.1.81を入力する
Portは22のまま → Open

これで接続できるはずですが、Time out とエラーウィンドウが出て だめでした。

本来ならここでパスワードを打つ画面が出てくるはずです

下記はストリーミング用にいろいろやってみようと思っていたことのメモです。

いろいろ インストールする

エンコード、デコード用

sudo apt-get install -y cmake libjpeg8-dev

html,ストリーミング用

git clone https:github.com/jackaonliam/mjpg-atreamer.git mjpg-streamer→クローン
ls → mjpg-streamerディレクトリが入ったことを確認する
cd ./mgpg-streamer/mgpg-streamer-experimental/ →ディレクトリに移動する
make →ソースコードをコンパイル
sudo make install →コンパイルしたファイルをインストールする

webサーバーの作成用

sudo apt-get -y apache2 →アパッチをインストールする
systemctl status apache2 →アパッチのステータスを確認する active

これでインストールを完了

実行する

export LD_LIBRARY_PATH-.→環境変数を設定
mjpg_streamer -o “output_http.go” -w ./www” -i “input_uvc.go”←まちがってる?

Raspberry Pi 3 Model B+とOpenCVで すきまを測定したい #1

こんにちは かずまなぶです。(‘ω’)

モノとモノの隙間

モノとモノの隙間を測定するときに、ものさしとかノギスとかを使いますが、画像で測定できないかなと思い、押し入れに眠っているRasbery pi3 B+とOpenCVと3.5インチの小型タッチパネルを使って、ハンディな測定器を作れないか検討しはじめました。

手順は下記の通り考えています。

手順

  1. Rasbery piのOSインストーラーをwindows端末からwebにアクセスしてゲット。
  2. OSインストーラをマイクロUSBにコピーし、Rasberypiに指して起動してOSをインストール
  3. 初期設定:IP addr 固定 , ネットワーク接続 , カメラ有効化 , SSH有効化  
  4. OpenCVに必要なライブラリなどをインストールする
  5. OpenCVをインストールする
  6. カメラを接続して、写真を撮る
  7. 撮った写真をOpenCVで画像処理して輪郭検出
  8. 「実スケールの基準物体」と「輪郭検出した画像のエッジ間ピクセル数」との校正曲線を作成する。
  9. 上記輪郭検出によるエッジ間距離を校正曲線によって実スケールに変換する。
  10. 検出したエッジ間距離を表示する。
  11. 番外:タッチパネルを使ってみる
  12. 番外:SSHを使ってみる

事前準備が長いのですが、やっていきましょう。つまずいたらコメント欄から助けてください。(*’▽’)

1.Rasbery piのOSをwindows端末からwebにアクセスしてゲット。

https://www.raspberrypi.org/downloads/noobs/
ここから Rasbianのインストーラをダウンロードする

まずは、上記webサイトからラズパイ用のOSであるRasbianのインストーラをダウンロードしましょう。今回はNOOBSというRasbian+αのインストーラを使います。

NOOBS 「ダウンロードZIPをダウンロード」ボタンを押します。NOOBS Liteの方ではありませんので注意です。1.6GB 10分弱くらいかかりました。 →ダウンロード開始

 

2.OSインストーラをマイクロUSBにコピーして、Rasberypiに指して起動

ダウンロードしたファイル NOOBS_v3_0_0.zip を解凍してマイクロUSBにコピーして、ラズパイに挿します。

ラズパイを起動するとウィザードが立ち上がるので、NOOBSをインストールします。

 

3.初期設定:IP addr 固定 , ネットワーク接続 , カメラ有効化 , SSH有効化

この時点ではwifiを切断しておくこと。

①SSHの有効化(外部端末での接続設定)
メニュー>ラズパイの設定>インターフェイス>SSH有効>OK

ついでに一緒にカメラ有効にもチェックを入れておきましょう。

②IPアドレスの固定
メニュー>wirelessアイコンを右クリック>Wireless & Network Preferences
Configure>SSID
Automatically configure empty options>チェックを外す

IPv4 = 192.168.1.81/24 →81のところは好きな数字で良い
Router = 192.168.1.1
DNS Servers = 192.168.1.1

③wifiの接続
wifi>選択>パスワードを打つ

④固定アドレスになっていることを確認する
ip addr → inet 192.168.1.81

これでSSHからの接続ができる(はずなんですが!!できませんでした!)

⑤Puttyをwindows端末にインストールして、192.168.1.81にSSHでアクセスする。

→できませんでした。time outになります!!助けてください!

4.OpenCVに必要なライブラリなどをインストールする

 

SSHができなくても、何ら問題はないのでOpenCV関連をインストールして行きましょう。

インストール済みのパッケージをアップデートする。

何回か繰り返さないと完全にアップデートできませんでした。

私は アップデート2回→アップグレード1回で終わりました。1回目は結構時間がかかります。

cmake関係のインストール

 (コンパイラに依存しないビルドの自動化)
sudo apt-get install build-essential cmake pkg-config

画像の入出力用のパッケージをインストール

 

動画の入出力用のパッケージをインストール

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264
↑エラー発生 E: パッケージ libx264 が見つかりません

GTKをインストール(OpenCV のhighguiモジュールに必要)

sudo apt-get install libgtk2.0-dev

OpenCVの行列演算パッケージをインストール

sudo apt-get install libatlas-base-dev gfortran

Python 2.7とPython 3のヘッダファイルをインストール

sudo apt-get install python2.7-dev python3-dev

python2.7-dev はすでに最新バージョン (2.7.13-2+deb9u3) です。
python3-dev はすでに最新バージョン (3.5.3-1) です。

5.OpenCVをインストールする

OpenCVのソースコードをダウンロードして、解凍する

wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip

OpenCVの追加機能のソースコードをダウンロードして、解凍する

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib

解凍したソースコードを下記ディレクトリの中に入れる(まとめておく)

ディレクトリ:/home/pi/Library/opencv/

pipをインストール

wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

virtualenvとvirtualenvwrapperをインストール

sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
↑なんか消す

vimをインストール

sudo apt-get install vim

vimで /home/pi/.bashrcを開く

[a]キーで行末に追記モード
下記8行を行末に追加する。
escapeキーで追記モードを抜けて :wqでファイルに保存する。

慣れてないと、なんでこんな操作方法にしたのか、意味不明に思います。

#virtualenv and virtualenvwrapper

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.5
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=’–no-site-packages’
source /usr/local/bin/virtualenvwrapper.sh

ここまで

今編集した /home/pi/.bashrcを実行

source ~/.bashrc

一旦リブートしておく

sudo reboot

※2019.3.24現在、以下の仮想環境作成が動作しなくなりました。

替わりに、この時点で再度ターミナルを開いて下記のコマンドを打つと、OpenCVがインストールされました。(注:でもやってはだめです。)

sudo apt-get install python-opencv

しかし、この方法ではpython2のほうに古いopenCVが入ってしまい、python3でインポートしようとしてもエラーになります!!

解決策;

ひとまず仮想環境の構築はあきらめます。

作成したディレクトリ /home/pi/Library/opencv/のさらに下、

解凍したopencv-3.1.0に入ります。

下記のコードでターミナルから操作しましょう。

 

cd opencv-3.1.0
mkdir build-python3
cd build-python3

そして、

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D WITH_FFMPEG=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF ..

そしてビルドします

make

このとき、makeの後ろにはなにもつけません。-j4をつけて CPUをフルでまわすと、とんでもない灼熱になり、ハングアップしてしまいます。

なにもつけなければ、1コア使用することになり、全部で4コアありますから25%のCPU使用量です。8時間くらいかかりました・・・

 -j2をつけて、2コアの50%でもよかったかもしれません。

続いて、インストールします
sudo make install

そして共有ライブラリの更新
sudo ldconfig

確認のために python3からimport cv2しましょう。エラーが出なければOKです。

超重要:このあと、openCVでカメラを起動しようにもできませんでした。

シェルコマンドではraspistillとかいうやつで起動できるのですが、cv2.VideoCapture(0)が機能しません。

ここではラズパイ専用カメラをしようしているので、一般的なwebカメラとして認識できるように下記のコードを実行することが必要でした。

注意点としては 最後の部分は 「ぶい よん える に」 です。

「ぶい よん いち に」 だと思って奮闘してしまいました。

sudo modprobe bcm2835-v4l2

最後に、テストコードを記載しておきます。これで動けばOKです。

 

以上より、これ以降の記事は捨てます。

仮想環境を作成する 名称:cv-python3の場合

mkvirtualenv cv-python3 -p python3

作成した仮想環境に入る

worken cv-python3 -p python3

成功すると(cv-python3) pi@raspberrypi:~ $ になる

仮想環境から抜けるとき(まだやらなくていい)

deactivate

作成した仮想環境を削除する(まだやらなくていい)

rmvirtualenv

numpyをインストール(仮想環境)

pip install numpy

OpcenCVをコンパイルしてインストールする(仮想環境)

workon cv-python3
cd opencv-3.1.0
mkdir build-python3
cd build-python3

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D WITH_FFMPEG=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF ..

ビルドする

make

インストール
sudo make install

共有ライブラリの更新
sudo ldconfig

ファイル名をわかりやすいように変更する

cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so

共有ライブラリから仮想環境の共有ライブラリにリンクさせる

cd ~/.virtualenvs/cv-python3/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

OpenCVの起動をテストする

workon cv-python3
python3

import cv2
cv2.version

‘3.1.0’

ここでいったん休憩しましょう。いやー長すぎですよね!次回はOpenCVを使って輪郭検出をやっていきましょう。