長らく眠っていたUbuntu使用のレッツノートですが、
最近試したいことが増えたので徐々に出番が増えてきています。
現時点(2017年1月)での最新バージョンであるOpenCV3-1-0を入れて動作確認するまでをメモします.
追記:より良いプログラミング環境のために
個人的に初学者がOpenCVを単体でインストールするのはきちんとした目的がない限りあまりお勧めできません.
Pythonで開発したいのであればAnacondaを使って他のパッケージとまとめてインストールするのが良いです.以下,Windows版の記事ですがUbuntuでもほぼ同じ工程をたどります.
ossyaritoori.hatenablog.com
また,Robot制御に興味関心があるのであればROSを入れることでもOpenCVのパッケージは勝手にダウンロードされます.
ossyaritoori.hatenablog.com
これらとは別にOpenCVを入れる動機としては現状,
といった局所的なものになるかと思います.なお,本記事のサンプルコードはどちらの環境でもきちんと動くはずです.(Python2,3系の修正は必要かも)
環境
Ubuntu 16.04.1 LTS
PC:64bit メモリ:8G
Python 2.7.12
所要時間
所要時間は 10分〜30分前後を見たほうがいいと思います。
ダウンロードとmakeのどちらもそれなりに時間がかかります.
インストールファイルの準備
ほぼすべて、以下のブログの手順通りです、
OpenCV3.1.0のインストールメモ (Ubuntu 14.04 LTS) - umejanのブログ
zipの入手
最初のディレクトリは好きに選んでください。とりあえずDownloadsに入れました。
今思えばhome直下に作ってもよかった。
cd ~/Downloads
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
unzip opencv-3.1.0.zip
requirement のインストール
詳細はよくわかってません、とりあえず言うとおりにしておきましょう。
時々新しいバージョンを求められるので、適宜書き換えて使ってください。
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
cmakeによる環境の構築
人によってはcmakeのコマンドが入っていないことも多々あるのでまずはターミナルでcmakeと打ってみてください。
ダメなら表示の指示にしたがってコマンドをインストールすることから始めます。
必ず、opencv-3.1.0のディレクトリに移動してから以下のコマンドを順々に実行していってください。
エラーが出る場合はだいたいがパッケージがないからなので、適宜apt-getしてください。
僕の場合はcheckinstallなんかが引っかかりました。
こいつはいろいろ要求してきましたが大体言うとおりにした結果うまく行っています。
責任は取りませんけどね!
mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON .. make -j4 sudo make install sudo checkinstall sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig echo "OpenCV ready to be used"
ldconifgを行ったあとで以下のような画面がでて完了かと思います.
最後に:cv2.soの移動/ Pythonへの認識のさせ方
/usr/local/lib/python2.7/site-packages/
にcv2.soがないらしいので(?)以下の操作をします。
これをするしないでそこまで変化があるかは謎です。確かに上記ディレクトリにはなにも存在しなかったので
一応言うとおりにしています。
sudo cp ~/Downloads/opencv-3.1.0/build/lib/cv2.so /usr/local/lib/python2.7/site-packages/
追記:二度目の環境ではいろいろと変更が加わっていたため違う感じになっていました.
まず,Importを行うとrosのdist-packagesにcv2がないと怒られたので以下のようにしました.
sudo cp ~/opencv-3.1.0/build/lib/cv2.so /opt/ros/kinetic/lib/python2.7/dist-packages/
動作確認
pythonを起動し以下のように打ち込んで結果を得たらとりあえずはインストール終了と言えるでしょう。
>>> import cv2 >>> cv2.__version__ '3.1.0'
OpenCV3系列を入れたのにimportに書くのはcv2のようです.
どういう意味でしょうね?
インストール後のテストコード
画像のOpen
テストコード実行できればもっと安心ですね。
lenaさんの画像は以下からどうぞ
import cv2 img = cv2.imread('lena.jpg') cv2.imshow('img',img) cv2.waitKey(0)
顔認識
もっと進んだテストがしたい方はこちら。
lenaさんの顔を認識して顔の付近を赤く囲むプログラムです。
実に簡単にかけますね、素晴らしい。
#coding: utf-8 import cv2 import numpy as np faceCascade = cv2.CascadeClassifier('~/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml') img = cv2.imread('lena.png', cv2.IMREAD_COLOR) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale(gray, 1.1, 3) # write rectangle in detected face 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.imshow('detected',img) cv2.waitKey(0) cv2.imwrite('detected.png', img)
トラブルシューティング
error: (-215) !empty() in function detectMultiScale
と出る場合は” faceCascade = cv2.CascadeClassifier('~/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml')”
のpathが間違っているので絶対pathで書き直すか、ファイルそのものを同じディレクトリに持ってきてください。
結果:
初めて自分の環境で書くpythonです(雑魚)
こうしてみると楽ちんでいいですね。python。
実行速度さえなんとかなればな〜。ビデオ版使ってみた感じいうほど遅くないですね。
これが風評被害ってやつか。
Webカメラでリアルタイムに顔認識
Webカメラを繋いで検知するバージョンです。
マルチスレッド化したのも以下の記事に書きました。
ossyaritoori.hatenablog.com
#encode: utf-8 # large part of this source code is from here # http://qiita.com/Algebra_nobu/items/a488fdf8c41277432ff3 import cv2 import os # cascade cascade_file = "/home/yoshiri/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt2.xml" #get feature point cascade = cv2.CascadeClassifier(cascade_file) # Capture from camera cap = cv2.VideoCapture(0) color = (255, 255, 255) # white while(True): # get frame from video stream ret, frame = cap.read() #face recognition facerect = cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10)) for rect in facerect: # put rectangle cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2) # show cv2.imshow("Show FLAME Image", frame) # end after 'q' pressed k = cv2.waitKey(1) if k == ord('q'): break cap.release() cv2.destroyAllWindows()
なんかおかしいな?と思ったら
OpenCVあるあるですがここでpathが通っていないと何もできません
サンプルコードを実行するためにはPATHを通しましょう。
困った場合は以下のページなんかがとっても親切です(バージョンこそ違いますが)
Ubuntu 14.04 LTSにOpenCV2.4.11をインストール | ShumiLinux
Path の通し方
ターミナルにて以下のコマンドを打つことで
PATH= $PATH: 追加したいPath export PATH
PATHは:(半角)を使って追加してください。
参考になりそうな書籍
もしPythonを使うのであれば以下の本が基礎からわかってオススメです。
オライリーは原文の方がいいですが和訳版もまぁまぁ実用的ですね。
- 作者: Jan Erik Solem,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/03/23
- メディア: 大型本
- 購入: 1人 クリック: 22回
- この商品を含むブログ (4件) を見る
そんでもってDeepLearningの本も載せておきます。これも同様のPython環境で遊べるので初学者にはもってこいでしょう。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る
以上宣伝コーナーでした。