.. title:: Pythonで心理実験 - 例題17-1
例題17-1:Webカメラを試す
================================
**B:** うひゃー、ひどい目にあいました。
**A:** ん? ずぶ濡れだな。雨降ってんのか。
**B:** 雨降ってののかってAさん、今日は朝から結構降ってるじゃないですか。
**A:** んあ。昨日の晩からずっと作業してるからな。そういえば飯食ってねえや。
**B:** 飯って、今5時ですよ。夕方の。昨日からずっと食べてないんですか??
**A:** ふむ。集中すると空腹が気にならなくなるタイプなんでな。腹が減らないんじゃないぞ。腹が減っても食いに行くのが面倒くさいのだ。
**B:** タイプって、そんなタイプ聞いたことありません。
**A:** 学生の時に何日か飯食うの忘れてて、ある朝起きたら体が起こせなくて焦ったことがある。とりあえず台所にあった生の米を食ったら動けるようになったからコンビニへ買い出しに行った。
**B:** 食べるのは面倒くさいくせに寝るのは寝るんですか。
**A:** うむ。睡眠は重要だぞ。規則正しく睡眠をとらないと結局集中力が続かなくて仕事がはかどらない。
**B:** そんな乱れた食生活をしている人が言うセリフじゃないと思いますが。
**A:** んー。なんかBくんと話していたら無性に何か食べたくなってきたな。おやつにするか。
**B:** 本当に信じられないおっさんだな…。で、そんなに熱中して何してたんですか。
**A:** ああ、ちょっと実験中の参加者の様子を動画で記録しておこうと思ってな。金がないから私物のやっすいwebカメラで撮れないかと思って。
**B:** へえ。skypeとかに使うアレですよね。そんなこと出来るんですか。
**A:** うーむ。微妙なところだな。正直期待していた性能は出なかったけど、まあ用途によっては使えなくもない。
**B:** はあ、中途半端ですな。
**A:** 実際に動いているところを見てみるか?
**B:** あ、はい。見られるんならぜひ。
**A:** んじゃ、書き散らしたプログラムを単純な物から順番に見せるか。まずは単にカメラ画像を表示するだけのプログラム。
**B:** あれ、これPythonのスクリプトじゃないですか。Pythonからそんなこと出来るんですか。
**A:** 出来る出来る。今回のサンプルではVideoCapture( `http://videocapture.sourceforge.net/ `_ )というモジュールを使う。Win32専用なので、今回のサンプルはLinuxなどでは動かないのでご注意あれ。
**B:** へええ、本当にPythonはいろんなモジュールがありますねえ。Linuxではwebカメラは使えないんですか?
**A:** えーと、例えばOpenCVという超有名な画像処理ライブラリがあるが、こいつにはWebカメラから画像を取り込める機能がある。んだがなぁ。
**B:** だが?
**A:** なんだか不安定で動かないカメラが多いんだよね。UVC(USB Video Class)に対応していりゃ動くはずなんだが、実際動かないものが多い( **2012/9/26追記:2012年9月現在の安定バージョンのver2.4では安定して使用できます** )。うちの研究室でかき集めた分で使えたのはLogicoolのwebカメラだけだったね。その点今回使っているVideoCaptureは私が試した範囲ではすべて使えている。
**B:** ほう、そりゃ優秀。
**A:** まあ複数のプラットフォーム、いくつあるのかわかんないメーカーのハードウェアをサポートし尽くすというのは無茶な話なわけで。VideoCaptureはWin32しかサポートしていない分対応しているカメラが多いということだと私は **勝手に** 判断している。
**B:** 勝手にですか。
**A:** そんなもんいちいち裏取っていられるかっての。ちなみにpygameでも1.9から試験的にカメラのサポートが始まっている。まあウチの環境(Win32+Python2.7+pygame1.9.2pre)で試したらまだまだ全く駄目だったが。
**B:** まったくだめ?
**A:** 初期化が出来なかった。まあまだExperimentalだって言ってるから仕方ない。今後OpenCVやpygameの改善が進めばWin32以外でもちょっと書き換えるだけで今回のサンプルプログラムを使えると思う。とにかくサンプルを見てみよう。動作確認してみる人はUVC対応のwebカメラを使える状態にしておいて、VideoCaptureをインストールしておいてください。VideoCaptureは今までのパッケージとちょっとインストール方法が異なっていて、ZIPファイルをダウンロードしたら自分が使っているバージョンのディレクトリをPythonのインストールディレクトリに上書きしてください。例えばPython2.5を使っているのならPython25というディレクトリを展開してインストールディレクトリに上書きするわけです。DLLsやLibというディレクトリを結合するかと聞いてくるので、それはOKで。
**B:** 面倒くさいですね。
**A:** そうそう、Python2.7の人は64bit PythonのためのDLLも入っているので適切な方を展開して上書きしてくださいね。Windowsが64bitでもPythonが32bitならインストールするのは32bitの方なのでご注意あれ。
+ 行番号なしのソースファイルをダウンロード→ `17-1.py