こんにちは かずまなぶです。(‘ω’)
モノとモノの隙間を測定するときに、ものさしとかノギスとかを使いますが、画像で測定できないかなと思い、押し入れに眠っているRasbery pi3 B+とOpenCVと3.5インチの小型タッチパネルを使って、ハンディな測定器を作れないか検討しはじめました。
手順は下記の通り考えています。
手順
- Rasbery piのOSインストーラーをwindows端末からwebにアクセスしてゲット。
- OSインストーラをマイクロUSBにコピーし、Rasberypiに指して起動してOSをインストール
- 初期設定:IP addr 固定 , ネットワーク接続 , カメラ有効化 , SSH有効化
- OpenCVに必要なライブラリなどをインストールする
- OpenCVをインストールする
- カメラを接続して、写真を撮る
- 撮った写真をOpenCVで画像処理して輪郭検出
- 「実スケールの基準物体」と「輪郭検出した画像のエッジ間ピクセル数」との校正曲線を作成する。
- 上記輪郭検出によるエッジ間距離を校正曲線によって実スケールに変換する。
- 検出したエッジ間距離を表示する。
- 番外:タッチパネルを使ってみる
- 番外:SSHを使ってみる
事前準備が長いのですが、やっていきましょう。つまずいたらコメント欄から助けてください。(*’▽’)
1.Rasbery piのOSをwindows端末からwebにアクセスしてゲット。
まずは、上記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関連をインストールして行きましょう。
Contents
インストール済みのパッケージをアップデートする。
1 2 3 |
# on tarminal sudo apt-get update sudo apt-get upgrade |
何回か繰り返さないと完全にアップデートできませんでした。
私は アップデート2回→アップグレード1回で終わりました。1回目は結構時間がかかります。
cmake関係のインストール
(コンパイラに依存しないビルドの自動化)
sudo apt-get install build-essential cmake pkg-config
画像の入出力用のパッケージをインストール
1 |
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev |
動画の入出力用のパッケージをインストール
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です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import numpy as np import cv2 cap = cv2.VideoCapture(0) while(True): ret, frame = cap.read() cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() |
以上より、これ以降の記事は捨てます。
仮想環境を作成する 名称: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-python3cd opencv-3.1.0mkdir build-python3cd 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-python3python3
import cv2cv2.version↓‘3.1.0’
ここでいったん休憩しましょう。いやー長すぎですよね!次回はOpenCVを使って輪郭検出をやっていきましょう。
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日