実践コンピュータビジョン 7-10章

6章の画像クラスタリングを含めて7-9章は画像認識を扱っている章になっている。10章はOpenCVを触り程度に紹介。

7章は画像から記述子を取り出してきて、テキストマイニングするような感じで画像検索を行う。というよりtf-idf法を使っているだけなのでわかりやすい。最終的にCherryPyを使ってWebアプリを作っているが、色々応用が効きそうなヒントが得られた。

8章は画像認識で、これまた面白い。最初にkNNを使ってSIFT特徴量から手話画像の認識をさせる。でこれの精度を改良するためにいくつかのアルゴリズムを試す。

最初はベイズ分類+SIFTをPCAで次元削減したものを利用するが精度が改善しない。しかしこの手法の良いところは元のデータを保持しなくていいところ。

次にSVMを使って精度が改善するという流れ。次元を減らしても精度がそれほど落ちないとか、よくある話に持っていく。

今時なら、このあとにRandomForestが出てきて云々がはじまるのが定番なんだけど、この本ではそこまでは説明していないので、興味があればRFまでやってみるのがいいかもしれない。

最後に多クラスSVMとして数独の写真を認識する例がある。3章でやった射影変換を利用して斜めに移った写真でもきちんと正方形になおしてから分類するという内容で興味深かった。

9章は画像の領域分割で「背景を分離する」みたいな話。最大フローとかそういう話題。最初ベイズ分類器が出てくるのがよく分からなかくて悩んだんだけど、図9.2を見ながらよく考えたら理解した。

10章はOpenCVの基本なので。興味を持ったらドキュメントを読むか他の本をあたれというところか。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


まとめ

あまり手を動かしてないので、次は章末の演習問題も解きながらやってみるかもしれない。入門機械学習の次に読む本としても面白いかも(Pythonを書けることが前提になるかもしれないが)。

OpenCVとScipyのドキュメントはひと通り目を通しておく。

他に気になる本

ProductName 詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski
オライリージャパン / 4830円 ( 2009-08-24 )


ProductName Learning Opencv: Computer Vision in C++ With the Opencv Library
Gary Bradski
Oreilly & Associates Inc / 6309円 ( 2013-06 )


フロントエンド(webブラウザ)でPythonを使いたい時の選択肢を調べてみた

普段ブラウザまわりのjavascriptが必要な時にはCoffeeScriptで書いているけど、最近ではHaskellでもかけるしPythonでもかけるようになってきているので調べてみた。尚、Fayに関しては「Introduction to Fay」がわかりやすい。

見つかったのは次の5つのプロジェクト。最初の2つはjavascriptで実装されたPython実行環境で残りの3つはPythonコードをJavascriptに変換するトランスレータ。

Brython

ゴールが非常にわかりやすい。

Brython's goal is to replace Javascript with Python, as the scripting language for web browsers.

CoffeeScriptなんかとは競合しますね。

<script type="text/python" src="test.py"></script>

で実行できるのでpythonでwebアプリが作れます。Galleryも面白いのが増えてた。カンバンエミュレータとかヨーロッパの国名一致させるデモとか。

Compiling and running によるとjavascriptのパーサを通して構文解析して構文木をつくってjavascriptを出力してevalしている。そのため最初立ち上げると若干モサッと感はある。あとjavascriptでモジュール書か必要があるのかな(import implementationのところ)

それからjQueryみたいなjavascriptのライブラリを使いまわせるかどうかは分からなかった。ajax用のライブラリとか実装しているところをみるとできないのかなぁ(要調査)

Skulpt

ブラウザでPythonの実行環境を提供するのが目的なのかなぁ。立ち位置がよくわからん。教育を目的としているのかなぁ。

PythonScript

コードを読んだ感じでは、pythonで書かれたトランスレータを通してjavascriptにコンパイルするという流れ。まず最初に、コードがPythonのastモジュールでパースされ抽象構文木に変換された後、PythonToPythonJSにより抽象構文木がちょいちょいといじられてPythonJS(これまた抽象構文木の状態)という中間言語というか制限付きのPython(RPythonみたいなニュアンス?)みたいなものにされる。その後javascriptにダンプされてます。

ドキュメントもあわせて読むとわかりやすいかも。それからPyPyを参照しているのだけどPyPyも同じような流れなのだろうか?あとで調べるかも。

livereloadなんかのサポートを借りればさくさく開発出来そうという意味で、イメージとしてはSass/Compassに近いかなぁ。

JSで囲めば素のjavascriptとして実行されるのと、jQueryがJ()で使えるようになっている。fayがpreludeを置き換え版を提供しているように、PythonScript用の標準モジュールみたいなものを提供することになるのだろうかな?

あとCreating bindings is very easy, jQuery bindings are available. と説明されているようにバインディング書くのは楽そうなので、既存のjavascript資産は有効利用できそうな感じなんだけど、手で書かなきゃいけないのかなぁ。あとでなんか書いてみる。

Pyjaco

py2jsのフォークらしい。PythonScriptと似た感じだけど開発はアクティブではない感じ。version1.0だからひと通り実装できたと見るべきなのかなぁ。

jQueryの呼び出しはこんな感じ。デコレータ使えるのはいいかも。

Pyjs

webアプリケーションを作るためのフレームワークを目指しているらしい。

pyjs contains a Python-to-JavaScript compiler, an AJAX framework and a Widget Set API. pyjs started life as a Python port of Google Web Toolkit, the Java-to-JavaScript compiler.

もともとpyjamasという名前だったのが、名前を変えて新しい開発体制で動いているそうだ。PythonScriptやPyjaco同様トランスレータでjavascriptに変換しているとのことだが、ソースコードをちゃんと読んでないので詳しいところはわからん。

PyjsもJS()で囲めばjavascriptをそのまま実行するらしくjQueryの呼び出しはこうやれば良いらしい。

まとめ

自分が使うならPyjacoがいいかなと思うが、開発の勢い次第ではPythonScriptのほうが充実しそうかなぁ。多分両方使って使いやすい方を選択することになると思う。Brythonも気になるけどjQueryを一緒に使えるのかどうかわからないのとCoffeeScriptみたいにコンパイルされたJavascriptを出力できるのかどうかわからない(プロダクション環境では毎回コンパイルさせたくない)のでそこら辺調べてから決める。

個人的にはbrythonでpython版Spineを書いてみるのは面白いかなと思っているんだけど。まぁそのうちpython版のクライアントサイドMVCフレームワークはなんか出てくるんじゃないかなぁ(出て欲しいなぁ)と。

インタフェースデザインの心理学

Design Rule Indexよりこちらのほうが好み。心理学的な観点からデザインの指針を説く。

例えば、クリック数が少ないほうユーザーにとって使いやすいという常識を、「それはなぜなのか->迷いにくいかkら」ともう一段深い視点にたって、

クリックを増やすか、ユーザーに考えさせるかで迷ったらクリックを増やすほうをとりましょう

というアドバイスされている。

また、目標勾配効果というものもあって、スタンプが押されていない10個のマスとスタンプが2個押された12個のマスでは後者のほうがスタンプを集めるのが早いそうだ。これはゲーミフィケーションなんかでも出てくる話題だと思うが、最近のサービスでよく見られる仕組みですね。

実践コンピュータビジョン 4-6章

面白いのでどんどん読んでいる。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


4章はピンホールカメラモデルを使って拡張現実の基礎っぽいあたりを静止画像に対してやっている。つづいて5章では多視点の幾何に移っていくが、こっちはあまり興味が沸かなかったのでとりあえず読み流した。

4章はもうちょっとサンプル的に面白いものを選択して欲しかった。よくあるOpenGLのティーポットが乗っかっててもなぁ。あとで自分でいじってみてなんか他のものをあわせてみる。こびとのモデルとかあればいいんだけど。

6章からは画像のクラスタリングの話に移って、7章で検索、8章が画像認識、9章が領域分割なので6-9がひとまとまりだと思うけど、今日は6章までしか読んでない。K-meansとスペクトラルクラスタリングというオーソドックスな手法。 K-meansはあちこちに分かりやすい説明(これとか)があるけどスペクトラルクラスタリングは本書の説明だけではわかりにくいかもしれないので、きちんと理解したければ「Rで学ぶクラスタ解析」をよめばよい。

ProductName Rで学ぶクラスタ解析
新納 浩幸
オーム社 / 3360円 ( 2007-11 )


SciPyでK-meansって初めて書いたけど、わかりやすかった。

from scipy.cluster.vq import *
from pylab import *
import numpy as np

# サンプルデータを作成
class1 = 1.5 * np.random.randn(100, 2)
class2 = np.random.randn(100, 2) + np.array([5,5])
features = np.vstack((class1, class2))
# 分類
centroids, variances = kmeans(features, 2)
code, distances = vq(features, centroids)
# 可視化
figure()
ndx = where(code==0)[0]
plot(features[ndx,0], features[ndx,1], '*')
ndx = where(code==1)[0]
plot(features[ndx,0], features[ndx,1], 'r.')
plot(centroids[:,0], centroids[:,1], 'go')
axis('off')
show()

出来た図

kmeans

初夏を味わう 黒龍の会

酒のいわせさん主催の酒の会に久しぶりに参加。御殿場線も久しぶりに乗った。

1368311018 1368311013

徳利もグラスもずらり

1368311015 1368311020

仕込み水美味い。白山系の軟水で、地下75mのとこから組み上げた井戸水だそう。

1368311016

大吟醸「しずく」で乾杯。日本酒の繊細さを考えると、大吟醸から始まるのは基本ですね。

1368311021 1368311031

利休餡がけには吟十八号を。フレッシュ生(一回火入れ)

1368311023 1368311024

刺身には吟醸の精米歩合50%のものをあわせてた。

1368311026 1368311028

鮎と鴨とか色々。

1368311029 1368311032

アイナメと水茄子だったかな。ココらへんから燗酒に突入。燗旨い。

1368311034 1368311036

漬物とミョウガの入った粥。これは美味しかった。

1368311037 1368311039

黒龍の酒粕をつかったデザート、吟醸か大吟醸の酒粕で米の食感が残っていて美味しかった。

1368311041

クイズで頑張ったので、Tシャツをゲット。にでも着ていこうか。

1368311042

食事、酒の量もちょうどよかったうえに、クオリティも非常に高かったので満足。

最近の家庭菜園(130512)

Sassが使いやすいので、ブログのデザインをSassベースのフレームワークであるFoundation4に変えようと思っているのだが、まとまった時間がとれないので、もうちょっと手軽な家庭菜園管理用のグリッドシステムを作って遊んでみた。

レスポンシブなグリッドデザインだとwidthを%で指定していくんだけど、それだと高さがうまく指定できなくて困っている。CSSだけでうまく指定できるんだろうか?それともjavascriptで高さと幅を計算する必要があるのかわからん。

とりあえず600px x 600px固定で50pxの12グリッドシステムで書いているがSassのforループで1x1から12x12の区画をサクッと作れるので便利。正直cssだけで書く気にはなれん。ちなみに色はFlat-UIのcolor-swatchを拝借した。

家庭菜園

130506

ゴールデンウィークの最終日は、トマトとナスを定植してきた。除草が面倒なのと、経験上マルチをしたほうがナスの生育がいいので、マルチングも施した。

1368318316 1368318318

130510

雨がふる前にゴーヤを定植。人参は順調な感じだけど、発芽率が悪い。

1368318319 1368318321

ニンニクは葉が枯れてきたので、去年よりは早めに収穫することになりそう。ジャガイモも花が咲いてた。

1368318322 1368318324

実践コンピュータビジョン 1-3章

実践コンピュータビジョンはPythonで画像処理とかコンピュータビジョンの解説をしている本です。

入門機械学習とはちがって数式による説明がされているので、線形代数くらいの基礎知識はあったほうがいいかも。なくてもPythonのコードが読めればなんとかなる気もするが。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


1章はPythonの基本的な 画像処理の説明に費やされていて、PILとかnumpy,Scipy,matplotlibとか定番の話。ちなみにmabplotlibはインストールにはまりやすいので素直にScipy Superpackを入れるのが確実。でもこれだと/usr/bin/python使わないといけないのでhomebrewで入れたopencvをインポート出来ないのでちょっと悲しい。

matplotlibを諦めればnumpy,scipyは入るのでそっちでもいいかも。ただし、今朝もこれではまってたので注意

最近pandasをバリバリ使っていて、なんとなくRよりはPythonでなんでもやる方向にシフトしたほうが幸せになれるのかなぁといったことを考えている。ggplot2がPythonに移植されればなぁ。

2章はHarrisコーナー検出アルゴリズムやSIFTという記述子を利用して画像(ホワイトハウス)をグルーピングするという内容。静岡県民としては富士山がどこから撮影されたかのグルーピングを試してみたいところ。

3章はアフィン変換で画像を変形したりして最終的にパノラマを作成する。この章は個人的にはあまりそそられなかったので流し読みした。

PythonでOpenCVを利用するのは簡単そうだ

遅ればせながらDeep Learningアツいぜっていう感情の高まりがアップしたので、画像いじりが再燃した。ちなみにglitchとか好きです

Deep Learningはここらへんを読むと良いです。

opencvはbrewで入れた。ffmpegを入れておく必要があります。

あと上記URLを参考に。

PythonからOpenCVを使う

import cv2
cap = cv2.VideoCapture(0)
ret, im = cap.read()
cv2.imwrite('cap.jpg', im)

と書くだけで、MBAのカメラからキャプチャしてcap.jpgという名前で保存します。おもろい。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


Facebookのダークサイドを避けろ: Facebook救命病棟

知人が「Facebookはリア充ばかりだな」とポストしていたので、ちがうよ、それはちがうよと。

ちょっと考えるとわかるけど、リア充っぽく見えているという時点で「FBに投稿して充実度を誇張するだけの余力があるんじゃねーの?」っていう救いようのない矛盾を抱えているのです。さらに受け取る側からリア充と判断されるためには、誇張表現、虚言、妄想でレバレッジをかける必要があるため、見かけ上のリア充(extrinsic rea-ju)と真のリア充(intrinsic rea-ju)を見極めねばなりません。

さて、Facebook救命病棟から、ちょっと長いですがそんなFacebookユーザーのリア充度のリストを引用してみます。

リアジュウ

Facebookを利用していない、もしくはコンタクトリスト代わりで投稿もイイネもしない

普通のリア充ですね。ポストする暇など皆無

リアキュウ

Facebookのポストへのコメントを口頭もしくはメールで返す

ビジネスつながりだとたまにある

リアハチ

イイネかメッセンジャーしか使わない

友人とのやりとりにはメッセンジャーは便利。Lineは最近使ってないなぁ。

リアナナ

instagramやtwitterなど外部サービスの同期が投稿のメイン

リアロク

mixiのノリで私生活を軽く盛る

Facebookは所謂強連結ネットワークなので「あー今日も元気に盛ってるなぁ」と周りにはすっかりバレてますが、主観とか解釈の範囲内なのでまぁいいんじゃないですかね。実害ないし。現実で虚言癖とつきあうよりはずっと可愛いもんです。

リアゴ

帰属感をマックスにするため、シェアしまくったり、どうでもいいことにイイネ(うざイイね)したりする。

ごく一般的なFacebookユーザーなのではないでしょうか

リアヨン

ポジティブなことしか言わない。常に感謝する "友人にかんしゃぁ〜食材にかんしゃぁ〜生きとし生けるものすべてにかんしゃぁ〜" パラッパラッパー

リアサン

ポストをみたらイイネとともにすかさずコメントするのがすっかり習慣づいている(若干強迫観念が)。相手からは「常駐してんのかボットなのか?」と悩まれるレベル。

リアニ

mixi疲れに懲りずにFacebook疲れまで患った

リアイチ

フレンド数がダンバー数(150くらい)を大幅に超えている

Facebookに何を求めているのか?よくわからない。本人もよくわかってないのではなかろうか

リアゼロ

行動と投稿に矛盾が生じている。画像の流用や、合成の跡がみられる

病気ですね。宇宙飛行士にでもなるつもりなのか?

いかがでしょうか。リアいくつに相当したでしょうか。僕が知る限り、リア7以上のFacebookユーザーはそんなに多くないようです。リア8以上になると、周囲の知人から探すのが難しくなってきます。リア9以上の人は、知人の中には片手で数えられる程度しかいません。

ProductName うそつき―うそと自己欺まんの心理学
チャールズ・V. フォード
草思社 / 1890円 ( 2002-04 )


参考

Design Rule Index

さらさらと眺めてみた。ゲシュタルト要因の話が多めかな。

ProductName Design Rule Index[第2版]― デザイン、新・25+100の法則
William Lidwell
ビー・エヌ・エヌ新社 / 4200円 ( 2010-10-27 )


処理の深度っていう項目があって

深く分析された情報のほうが、表面的に分析された情報よりも思い出しやすい、という記憶の現象

これって中々難しいよね。ユーザーは分かった気になるような表現を好むしなぁ。

5つの帽子掛け

  • カテゴリー
  • 時間
  • 位置
  • アルファベット
  • 連続量

干渉効果

  • ストループ効果
  • ガーナー干渉
  • 順向抑制
  • 逆行抑制

レストルフ現象

ありきたりのものより、変わったもののほうが再生されやすいという記憶の現象