頑張って、長続きしたい。

メモ書きをひたすら書く。継続は力なり。

OpenCV + Webカメラ in Linux

Webカメラを使った画像処理のプログラムをlinuxで作りたかったのでOpenCVからWebカメラを使えるの環境を作った。

Windows上では簡単にできていたのに、色々と苦労した。


とりあえず,サンプルプログラムをそのまま動かしてみたけど,動かない。

lsusbコマンドでWebカメラが認識してるか確認してみたが,正常に認識してそう。

/usr/sbin/lsusb 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 046d:082d Logitech, Inc. HD Pro Webcam C920
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0461:4d0f Primax Electronics, Ltd HP Optical Mouse
Bus 002 Device 004: ID 04f2:1060 Chicony Electronics Co., Ltd 
Bus 002 Device 005: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

いろいろ調べて見るとlibv4lが入ってる状態でOpenCVを入れないと行けないみたい。

さかな前線 » Linuxでの野良ビルドのOpenCVでカメラをちゃんと使うにはlibv4l-devが必要みたい

apt-get install libv4l libv4l-devel

この状態でOpencv2.4.9を入れていく。

cmake -DBUILD_DOCS=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=RELEASE -DWITH_TBB=ON -DWITH_GTK=ON -DWITH_OPENGL=ON -DWITH_QT=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENCL=OFF -DWITH_CUDA=OFF -DWITH_OPENNI=ON -DWITH_UNICAP=ON -DWITH_V4L=ON -DWITH_XINE=ON .

make

しかしmakeでエラー。
modules/highgui/cap_libv4l.cppでエラー。

cmakeのオプションに-DWITH_LIBV4L=OFFを入れるとエラーがなくなった。

そのままmake installでサンプルプログラムが動くようになったが、エラーが出力された。

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

でも、一応動いてるからとりあえず今は放置で。


結局libv4lが必要というより、-WITH_V4L=ONになってたらいいのかな?
(前回はエラーが出た時に-WITH_V4L=OFFにしていた。)





【追記】

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

放置してたこのエラーのせいで、Webカメラの解像度が変えられないというちょい重大な問題発生。

v4l−utilsをソースからインストールして,OpenCVでcmakeの-DWITH_LIBV4L=OFFをONにすることで解決。

やっぱりlibv4lは必要だった(手のひら返し)

Github実践入門を買った

Githubを本格的に勉強しようと思って購入。

とりあえず、4章まで読んで6章のPull Requestを試してみた。
5章と7章以降はこれから読んでいく。
pushとpullしか知らなかったけど,branchとかmergeについてわかった気がする。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

python numpyのwhereで複数の条件をつける

numpyのwhereで複数条件にするときは、それぞれの条件をちゃんと()でくくる!
初歩的な文法をわかりきってないからこうなる・・・

import numpy as np
import scipy as sp
import matplotlib.pyplot as plt

import sys

filename=sys.argv[1]

data=np.loadtxt(filename,delimiter=' ',
                dtype={'names':('code','pow','alpha','k',
                                'xyz','normal','z','normal2','z2'),
                       'formats':('S4','S3','S3','i4',
                                  'f8','f8','f8','f8','f8')})

for alpha in np.unique(data['alpha']) :
    for pow in np.unique(data['pow']) :
        print data[np.where((data['alpha']==alpha) & (data['pow']==pow))]

WindowsにPython入れてみた。

研究に使うデータ分析のお供にPython環境をWindowsに導入してみた。

 

Cygwin上に入れてみようとしたけれど、SciPyを導入するのがかなりややこしかったので断念*1

 

下記の記事を参考にWindows用のバイナリを使ってインストール。

ITエンジニアのためのデータサイエンティスト養成講座(2):データ分析がデキるITエンジニアになるために必要な「道具」を揃える (3/4) - @IT

 

Scikit-learn という機械学習用ライブラリもインストールして、研究のデータをPCAかけて3次元プロットして遊んでました。

 

 

 

 

*1:色んな人が試しているけど成功例がなかった・・・。めもめも ...〆(。_。) Python迷走した