utsurigi.net

dvorak練習中: e-typing Good! 284pt 300kpm 3日休んだら大分落ちた

C# 再び 能率の上がらない日々

2008/10/14 火曜日
カテゴリー: C#, 雑記 — toto @ 0:11:44

秋も深まり、研究やら趣味のプログラミングやらが充実するかと思いきや、毎日だるくて寝てばかり。久々にC#を弄ったら全然書けなくなっていて驚きました。クラス・メソッド・メンバ変数・ローカル変数・引数の命名規則がごちゃごちゃで頭が痛い。

しばらく離れていたうちにC#もバージョンアップしたらしく、最近のはラムダ式まで使えて、(x, y) => x+yなんて表記で匿名関数が作れてしまうようです。
型推論が働いて、引数や戻り値の型を指定しなくてもだいたい上手く行くのが良い。

リハビリにと、以下の記事を読んでいます。
C# による L2 Lisp の実装
ぱっと見綺麗に実装されているようで、何かと参考になりそうです。

もう10年くらいプログラム書いててこの程度というのが笑えますが、趣味で勉強できる時間もそう残っていないので、色々効率よく進めたいところ。

OpenCVで視線検出 (虹彩検出編)

2008/10/13 月曜日
カテゴリー: Python, 画像処理 — toto @ 2:56:20

せっかく割と高いウェブカメラを買ったので、視線検出でもしてみようと思い立ち、まずは虹彩を検出してみました。

(モノクロで見にくいですが、虹彩の周りの太い円が検出結果)

処理の流れとしては

  1. cvQueryFrameでキャプチャ
  2. 1/8縮小画像にてcvHarrDetectObjectsを用いて顔検出
  3. 最大の検出領域を顔と推定して、その矩形の左上1/4、右上1/4をそれぞれ左目、右目が含まれると推定
  4. 各々の目を含む画像でグレースケール化、cvAdaptiveThresholdの後ハフ変換で円を検出。cvHoughCirclesは半径の大きい方から列挙していくので、今回の目的からすれば不適当ですが、まあ実験ということで。
  5. 列挙された円でそれが完全に元画像に収まるもののうち、もっとも小さいものを虹彩輪郭と推定

パラメタは

cvAdaptiveThreshold(eye1, eye2, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 9, 15)
cvHoughCircles(eye2, storage, CV_HOUGH_GRADIENT, 1, 20, 20, 10, 4, 40)

でまあそこそこ上手く行っている。もちろん本当は顔のサイズから虹彩のあり得るサイズを推定して円のmax, minに入れるべきですが。

しかしこの程度の計算でCPUを60%くらい食う。実用的なアプリケーションは難しそうです。

久々のDLL

2007/12/6 木曜日
カテゴリー: プログラミング, 雑記 — toto @ 3:02:52

久しぶりにWindowsのDLLを書いていて、エクスポートした関数は呼べるのに初期化に失敗する…と思ったらDllMainが呼ばれていませんでした。
extern “C”のつけ忘れのようで、なくてもgccだかldが余計な世話を焼いて作ってくれるので気づくのが遅れました。

MinGWでDLLの共有メモリを使う方法を調べたのでメモ。

static HHOOK hHook __attribute__((section("shared"), shared)) = 0;

LoadLibraryとGetProcAddressは序数値抜きで指定する方法がよく分からなかったのであきらめて-L./ -lmydll。

動画専用ディスプレイ快適です