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

地元に鮎の美味しいお店があって,そこの背ごしは最高の絶品だったりします.また行きたいですが,地元でも山の中なので,行くこと自体がけっこう大変.

さて,Computer Vision Advent Calendarの担当日からすでに3時間遅刻していますがこれはその記事ではありません.
今,がんばって書いてるところです(←

手元のLinux環境でOpenCVを野良ビルドするとき,libv4l-devをインストールしてからでないと,cv::VideoCaptureが動かないみたいです.

$ sudo apt-get install libv4l-dev
 ...
 --   Video I/O:
 --     DC1394 1.x:                  NO
 --     DC1394 2.x:                  YES (ver 2.2.0)
 --     FFMPEG:                      YES
 --       codec:                     YES (ver 53.35.0)
 --       format:                    YES (ver 53.21.0)
 --       util:                      YES (ver 51.22.1)
 --       swscale:                   YES (ver 2.1.0)
 --       gentoo-style:              YES
 --     GStreamer:                   NO
 --     OpenNI:                      NO
 --     OpenNI PrimeSensor Modules:  NO
 --     PvAPI:                       NO
 --     GigEVisionSDK:               NO
 --     UniCap:                      NO
 --     UniCap ucil:                 NO
 --     V4L/V4L2:                    Using libv4l (ver 0.8.6)
 --     XIMEA:                       NO
 --     Xine:                        NO
 ...

ここでUsing libv4lとなってることが重要みたいです.

cv::VideoCaptureが無言でエラーだけ返すので困りましたがそういうことだったみたいです.

今週のサーベイ(2012/11/30)

11月が旬のお魚って何があるかな?と思って調べてたんですが,アイナメって年中おいしくいただけるんですね知りませんでした.

さて,研究に関係することも純粋な興味も,なんかいろいろサーベイしながら構造的に記録取ってなくて時間の無駄感MAXなので毎週簡単にログ書くことにしました.
あんまり自分の研究に近いものはちょっと省きます.何をどうやってやろうとしてるかバレちゃうのでw
なんで,ここに書いたのの数倍は呼んでるんじゃないかなw

継続的にやります.うん.

"Online Moving Camera Background Subtraction"
  • Ali Elqursh, Ahmed Elgammal(Rutgers University)
  • ECCV2012 poster
  • 非固定カメラからの動物体領域をdenseに推定する手法の提案

    • このタイトル誤解を招くよ…
    • いわゆる背景差分の要素はないです
  • ラボの論文紹介で紹介
  • 今度の関東CVのECCV2012読み会で紹介します〜
“A Database and Evaluation Methodology for Optical Flow”
  • S.Baker,D.Scharstein,J.P.Lewis,S.Roth,M.J.Black,R.Szeliski
  • IJCVのジャーナル(2011)
  • optical flowを算出する各種手法を統一的に評価するデータセット
“A Stereo Vision System for 3D Reconstruction and Semi-Automatic Surveillance of Museum Areas”
  • Shahram Bahadori, Luca Iocchi
  • イタリア国内のワークショップ?2003年とこの分野のstate-of-the-artからすると古め
  • ステレオ映像から3次元復元をベースにしたactivityのsurveillance
  • システムとしてはおもしろいけど手法としてはまぁ

    • ページ数が少ないのでそれほどわかんないですけどね

第21回 名古屋CV・PRML勉強会を開催しました.

懇親会のとき11人掛けのテーブルに2皿来たほっけのうち1皿をぼく一人で半分くらい食べてすみませんでした.

さて,先日2012/11/18に,第21回 名古屋CV・PRML勉強会を開催いたしました.

実は第1回勉強会は2010年の11月に開催されており,今回をもって勉強会も晴れて3周年目に突入いたしました.
基本毎月ペースですが,例年8月と今年については6月にお休みだったぶんで回数が合いますね.

概要

内容と感想

藤吉先生・山内さんより,「[サーベイ報告]統計的学習手法による人検出」
  • スライドは統計的学習手法よる人検出 – Slideshare
  • paperはhttp://www.vision.cs.chubu.ac.jp/04/pdf/TS04.pdf
  • 9月のPRMUで発表された内容でした
  • その時私は自分の発表とかぶってて聞けませんでした(´;ω;`)なので非常に楽しみでした

    • ぼくはまさに人検出をやっておりますw
  • 人検出はやっぱりすごいホット
  • 手法的には落ち着きを見せ始めてる印象,すなわち,トップ会議に見る最新の動向を見ると,手法として高精度化するよりは学習手法などの点で高精度化し実用的にする流れが増えている
広島大学・平川さんより,「初めてのグラフカット」
  • 遠いところからはるばる,ありがとうございました!
  • セグメンテーションをするためにグラフカットを勉強した,という立場からグラフカット入門
  • わからなかった人がわかるようになった過程をたどって教えてくれるのが最も効果的なので,非常に貴重なご発表でした
  • 即席とは思えないくらいよく作り込んであって,ちょっと同い年として非常に危機感を…w

    • 玉木先生といえばプレゼンが非常にわかりやすいことで僕の中で有名ですが,やはりそこの学生さん,さすがです…!
    • 3次元でグラフの雰囲気を表示してる図というのは僕は初めて見ましたw
高橋さんより,「ACCVと私」
  • 11月に開催されたACCV,名古屋クラスタとしてほぼ唯一参加されたとのことで,前回のECCVに引き続きぜひご報告を…!とお願いしました
  • 韓国・テジョンにて

    • わりと周りに何もなかったらしいw
  • statistics,awardsなど

    • awardsの各論文の内容まで紹介いただいて勉強になりました…!
  • もはやACCVもトップ会議に近いくらいの水準になりつつあるんですねぇ…
玉木先生より,ICPR2012の参加報告
  • 時間が余ればということでICPR2012についてお話をいただきました
  • preziを実際に使われた発表というのは実は初めて見ましたw
  • ICPR,規模がすごい

    • オーラル何パラ,どころか,オーラルとポスターがパラレルだったりinvited talkがパラレルだったりshotgunプレゼンがパラレルだったりというw
    • 日本だとやっぱ狭い…
  • 次回は2014年,ストックホルムにて

懇親会

  • 今回は藤吉先生が幹事をされまして25人という大盛り上がり
  • 学生さんが多かったですね

    • M1が多かったです
    • B3の人も2名いました
    • 2年前僕が初めて参加した時がちょうどB3の11月でしたので,なにか非常に嬉しいものでした
  • いろいろ楽しいお話も聞けました
  • PRMUアルコンにnagoyacvから横割りでチーム組んで出ようという案

    • 僕自身も6月頃から考えていたのですが,他の方も考えていたそうです
    • こりゃやるっきゃないww

全体の感想,その他

  • 人が多いとやっぱ楽しい
  • 今回は準備おくれてすみません(´;ω;`)
  • 次回は一応12月15日開催予定です

    • テーマどうしようかな…

CUDAで二次元配列の転置は高効率にできないと言ったな!あれは嘘だ!

寒くなってくるとお魚で鍋とかもしたくなってきますね.
海辺のお魚屋さんでは人々が行列を成してるんでしょうか.

行列といえばGPGPUが活躍する最も重要な分野の一つと言えますね.

んで,そんな行列でよく使われるタスクのひとつに「転置」があります.

  \bold{A}=  \begin{pmatrix}  1 & 2 & 3 \\  4 & 5 & 6 \\  7 & 8 & 9 \\  \end{pmatrix},  \bold{A}^{\mathrm{T}}=  \begin{pmatrix}  1 & 4 & 7 \\  2 & 5 & 8 \\  3 & 6 & 9 \\  \end{pmatrix}
  \bold{B}=  \begin{pmatrix}  1 & 2 & 3 \\  4 & 5 & 6 \\  \end{pmatrix},  \bold{B}^{\mathrm{T}}=  \begin{pmatrix}  1 & 4 \\  2 & 5 \\  3 & 6 \\  \end{pmatrix}

画像屋さんなら,線形なフィルタをかけるときには縦方向にフィルタして横方向にフィルタすればいいのですが,実装的には横方向にフィルタして画像全体を転置してまた横方向にフィルタして転置して戻す方法のほうが効率的なことが多いです.特にGPGPUなどでは.

ということでよく使う転置というタスクですが,CUDAでやるにはちょっと工夫しないとメモリアクセス効率が下がります.今日のお題はそれで.

Continue reading

第20回 名古屋CV・PRML勉強会を開催しました

だんだん寒くなってきて体調崩さないか少し怖いです.深海魚になれば温度は安定しているのになと思うと地上生活もラクじゃありませんね.

さて,先日2012/10/20に,第20回 名古屋CV・PRML勉強会を開催いたしました.

概要

内容

  • @sakanazensen(ぼくです):高専プロコンとComputer Vision

    • 今年の高専プロコン競技部門で出されたタスクがCVに関するものでした
    • いままでもそういうのあったので,非常に若い(10代中頃〜)のひとがCVに興味を持ってやってくれてることを紹介したくて発表しました
    • 資料は未許諾の画像の引用があるので,非公開です>< すみません・・・
  • @yasutomo57jpさん:背景モデリングに関する研究紹介

    • 発表資料資料
    • 定点カメラ映像から背景画像を推定する

      • 定点カメラ映像と言えども照明変動や木の揺れなどの変動を含むので,ロバストな背景推定は難しい問題だったりするわけです
    • 高専時代の卒論には背景差分を使ってて,背景画像の自動推定・更新をやってました

      • その時使った手法としては今回の話で分類すると「確率分布に基づく手法」になりますね
    • D論の関連研究紹介
    • 個人的で恐縮ですが,今回初めてお互い認識してお会いできたのが非常に嬉しかったです
  • @takminさん:Deep Learningに関する研究紹介

    • Building High-level Features Using Large Scale Unsupervised Learning
    • 大規模物体認識コンテストILSVRCで黒船のごとくやってきたDeep Learning,それに関する論文の紹介
    • 生の画素データを入力して,ニューラルネットで低次の特徴から徐々に高次の特徴に反応するネットワークを組む

      • 最上位でどのニューロンが生起したかでclassifyができるよ!という手法
    • とにかく規模がえげつない.
    • googleさんスゲー…
    • ただ,特徴抽出からの識別というオーソドックスな枠組みを一夜にして時代遅れにするものではなくて,DeepLearningの知見を生かしたHand-craftedな特徴量設計というアプローチが今後はでるはず
  • 高橋さん:ECCV2012報告

    • 今月開催されたばかりのトップ会議ECCV2012の参加報告
    • 採択率の話や,投稿数の話など
    • 面白そうだった研究など

      • 問題設定の新しさなどのアイデアでけっこう勝負できるということを再確認できましたね

懇親会

発表者4人(これ自体はたまたま)で懇親会(反省会ともいう?w)をしました.
ちょっと印象的だったのは, ちょっと印象的だったのは,機械学習の人が黒船が如くやってきて,CVをやっていた人たちが生き残るにはどうしたらいいんだろう?という話でした.機械学習の人が黒船が如くやってきて,CVをやっていた人たちが生き残るにはどうしたらいいんだろう?という話でした.
インタフェースの分野や制御の分野に進出することはひとつの生き方だし,機械学習の人がやってくるなら自分たちが機械学習の人になるというのもあるね,というかんじに.

(そもそも,たぶんこういうテリトリー思考すらも既に古い考えなのでしょうね.)

振り返って

今回は最先端なお話ばかりということで本当に楽しませていただきました.
僕個人としては発表内容の理解度がいつもよりよかったように思います.発表者の方の説明が大変わかりやすかったのもありますし,ここ最近けっこう勉強してきたのが生きたかな,とか思っておりますw

勉強会自体はいつの間にか20回を数えるまでになりましたね.ここまで来れたのもみなさんのご協力あってのことで大変感謝しております.

今回は発表者確保に手間取ってしまった故に告知が遅れてしまい,参加者は少なめ…かな?と思いきや,実際に開催してみるとけっこうな数の方に来ていただけました.
反省点は反省点として取っておくとして,それでも内容の濃さももちろん皆様からの質疑も結構活発でいいかんじだったんじゃないかなと思ってます.

あと,発表者の方の時間感覚が素晴らしくて,予定のタイムテーブルから3分とズレることなく最後までいけました.大変ありがたいことです.
僕自身は「これで時間使いきれるのかな?><」くらいの感覚でちょうどいいんだなと実感しましたw

無理を言って発表していただきました@yasutomo57jpさん,@takminさん,高橋さん本当にありがとうございます.
いつも場所をお貸しいただいてる中部大の藤吉先生(@hf149さん)やustしていただいた@fararrow9先輩にもこの場を借りて感謝いたします.

次回について

次回は2012/11/17(土)の予定です.
中部大・中京大の学生さん(配属前?)が多く来られるかもしれない,とのことです.
テーマは未定ですが,ここのところ最先端の研究紹介が続いたこともありますし,この際だからアプリケーションの紹介やCVの可能性の話などattractiveな内容にしてもいいかもな〜などと考えております.

実は次回の開催は,第1回勉強会開催から2周年ということになります.なにかそれに関しても考えてみようかな(・∀・)

HDDが複数ある状態で片方にWindows 7を新規インストールすると出るエラー

さいきん鮭にはまっています.旬ですからね,旬.シンプルにグリルで焼くと美味しい.

さて,デスクトップPCを自作しまして,SSDとHDD構成にしました.
SSDにはメイン使いのためにLinuxを,HDDには何かで必要なときのためにWindows 7を入れます.
なのでSSDが一番上に認識されてる状態です.
その状態でHDDにWindowsを入れようとすると,インストール先パーティションの設定の画面でHDDを選んで進もうとしても

新しいシステムパーティションを作成できなかったか、既存システムパーティションが見つかりませんでした。詳細については、セットアップログファイルを確認してください。

なんて言われて進めません.

こんなときは,SSDを一旦物理的に抜いてしまうと問題なくいけました.
う〜ん.謎でございます.Windowsさんはイチバンでなきゃ気が済まないんですかね.運動会シーズンは過ぎたのでその思いは封印して欲しかったな.

Line Segment Detector線分検出器で秋をおいしくいただく

夏の暑さもだいぶやわらぎ,おさかなが美味しい季節になってきましたね.

画像からの線分検出といえばHough変換やRANSACなどがあり,そんな手法のひとつであるLSD;Line Segment Detectorを使ってみた.
原著は2010年のIEEE論文誌で発表されたようですね.今でもこれ系の分野がアツいということで見ていて楽しいですw

さて,ところで今日の記事は,
JugglerYou日記 :: LineSegmentDetectorを使ってみた
さんの記事の丸パクリに近い.
juggler_youさんはリアル知り合いだったりします.thx!

Continue reading

Xfceのマルチディスプレイ設定

もうそろそろかれこれ1年近くXfce派です.
最近はLinux Mint 13のXfce版を使ってます.

さて,マルチディスプレイをするときですが,標準の設定ツール(「ディスプレイ」ダイアログ)は全く使い物になりません.並べて表示すらできない.
ですが,「設定エディタ」ダイアログを使うと自由自在に設定できるので,メモ.

Continue reading

OpenCVの二値画像からの画素値の取得でハマった

OpenCVの画像形式cv::Matはいろんな格納方式ができて,二値画像ももちろんいけるんですが,画素値を個別にアクセスするときのやり方でうっかりしたミスでハマってしまいました.

ということで自虐を兼ねてメモ.(逆では

//画像を読み込む
cv::Mat img = cv::imread("fugafuga.png", CV_LOAD_IMAGE_GRAYSCALE);

//大津の方法で二値化.こうすると二値画像のフォーマットでMatに格納してくれます
//srcとdstが一緒ですが一応問題ないです
cv::threshold(img, img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

//全画素をPGMフォーマットで出してみる
std::cout << "P1" << std::endl;
std::cout << img.cols << " " << img.rows << std::endl;
for(int y = 0; y < img.rows; y++)
{
    for(int x = 0; x < img.cols; x++)
    {
        //std::cout << img.at<int>(y, x) << " ";    //まちがい!!
        std::cout << static_cast<int>(img.at<unsigned char>(y, x)) << " ";
    }
    std::cout << std::endl;
}

at<int>()はカラー画像のBGRAをごそっと取り出すとき用だったりするので,二値画像の画素値を出すときはat<unsigned char>()を使いましょうというお話でした.static_castはべつにせんでもええです.
ちなみにat<int>()でやると事実上のゴミが出てきます.
何をいまさらこんなところでつまづいてるのか小一時間問い詰めたい.

Tesseract OCRのUbuntuでのインストール手順

オープンソースOCRライブラリのTesseract OCRをUbuntu 11.10に入れる手順です.

最近ネタが無いのでずっと昔のメモを掘り起こして記事にしてみたw

インストール手順

http://code.google.com/p/tesseract-ocr/downloads/listから最新版(tesseract-3.01.tar.gz)をダウンロードしてから,

% sudo apt-get install m4 autoconf libtool libleptonica
% tar xf tesseract-3.01.tar.gz 
% cd tesseract-3.01
% ./autogen.sh
% ./configure
% make
% sudo make install
% tesseract --version
tesseract 3.01

他のLinuxディストロの場合も最初のapt-getの行を適切に置き換えるだけでよいと思います.

make時にエラーが出たら,viewer/svutil.cppの頭に

#include <unistd.h>

を追加してmakeしなおすといけます.

Tesseract OCRについて

Tesseract OCRについては@takminさんの資料
Tesseract OCRに触ってみた (2011/07/19 JapanCV発表資料)- takminの書きっぱなし備忘録
がおすすめです.

JapanCVは昨年2011年に開催されてて僕も行きましたが最高のイベントでした.
さかな前線 » 全日本CV勉強会に参加しました.ついでに少ししゃべりました.
という宣伝(を