新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

新人をバイナリアンに育てる ~ その2 ~

サブタイトル:そら飛ぶ バイナリアン

このブログは 2011 年に新人教育をしたメールの断片から書きこおこしている。もう6年も前の話であることに注意。新人君(高橋くん - 仮名 - )は理工学系大卒のピカピカの新人。数学は得意で球の体積を積分で簡単に出せる。結構優秀。そして、学部では FORTRAN を学んでプログラミングもしたことがあるので、結構、できると信じて疑っていない。

そこで、GNU Development Tools という某所の自費出版本をよませて(それ以外の仕事はなし。勉強が仕事)自習させてみた。その記録である。

よくわからないけど、サブタイトルもつけてみた。どっかの出版社の人、本にしてください。:-)

新人くん日報:6/15 17:52

今日行ったこと
 移行作業を終了させる。
 GNU Development Tools第7章動的リンクを読み終える。
 内容については完全に把握していないので読み直しが必要。
今後やるべきこと
 GNU Development Tools を読み終える。
 FreeBSDを導入する。

コメント(現在の私の)

Ubuntu を導入した翌週に無謀にも FreeBSD をインストールさせている。これじゃ、なんの学習効果もないんじゃないかな。と今頃反省。

実務経験7~8年の人の日報

  • 画像認識

- 顔認識のサンプルプログラムの、API レベルでやってることを把握
OpenCV は haar 分類器というものを持っており、
xml で与えられるパターン情報を元に、画像のパターン認識を行うことが出来る
パターンにヒットした箇所は座標で得られ、
テストでは座標をもとに赤い丸を書いている
テストに用いた顔の認識パターンは、正面を向いたもの、である

- エッジ検出のテストの修正
エッジ検出のテストでは、matrix を使って rotate していたが、必要無いことが分かった。`
利用するカメラの性質により、画像の左上を座標の起点とするか、左下を起点とするか分かれる
どちらを起点にするかは、取得した画像データ IplImage の持つ origin メンバにより取得出来るで、
もし origin が IPL_ORIGIN_BL ( 左下起点 ) の場合、cvFlip() という API
上下の反転が可能であることがわかったため、テストを修正した

- OpenCV 2.2 と OpenCV 1.0 の違いをより明確に調査(特に、H/W アクセラレーションについて)
H/W アクセラレーション、正確には GPU の利用機能は、2.2 から導入された
対応する GPU は NDIVIA 製のもののみで、cuda ライブラリが必要となる
GPU を使うライブラリは、既存のソフトウェアで計算する API と別モノになっている
( DirectFB のように、API は一つで、API の中でソフトウェアを使うかハードウェアを使うか
処理が分岐するような設計にはなっていない)
GPU を使った HogDescriptor という画像検出器が、CPU による検出に比べ桁違いに高速らしい
リファレンスマニュアル:
http://opencv.jp/opencv-2svn/cpp/index.html
http://opencv.jp/opencv-2svn/cpp/gpu._gpu-based_functionality.html

ChangeLog:
http://opencv.jp/opencv2-x-tips/changelog_from_21

- IplImage 構造体の中身の調査
image_data, image_size をもとに、raw データをファイルに保存するテストを作った

コメント

さすがに実務経験のある人の日報はちゃんとしている。このあと、彼はちゃんと arm 上に OpenCV のクロスコンパイルを達成する。このころは、日報を書かせてたんだな。いまは週報になっている。グレードダウンだ。

社長から高橋君への指示 6/15(Wed) 22:50

次の事を達成してください。

72x34 の白黒画像イメージに四角を書く
PNG でセーブ

  • OpenCV で次のプログラムを作る

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
PNG でセーブ

  • OpenCV で次のプログラムを作る

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
白黒のraw データでセーブ(すでに実現しているのでそれをそのまま流用)

  • 普通のプログラムで

白黒の raw データを読み込む
白の数と黒の数を数えて表示する。

  • 普通のプログラムで

72x34 の白黒画像イメージに書いた四角を書く
raw データで書き出す

  • 普通のプログラムで

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
raw データで書き出す

今月中にすべてこれができたら大したもの。

コメント

かなり無茶ぶり。高橋くんピ~ンチ。ちゃんと OpenCV つくれるのか?FORTRAN しかしらないんだぞ。社長かなり無理なことを言っています。これに高橋君どうこたえる?しかも、OpenCV の次の作業が不明瞭だ。

新人:高橋くん日報:6/16(Thu) 18:16

今日行ったこと
 GNU Development Tools を読み終わる。
 ただし、理解がまだまだ浅いと思われるのでこのまま2周目に移行。
 VMware上でFreeBSDを導入した。
 ただし設定が終わり切っていないため明日以降も行う予定。
これから行うべきこと
 GNU Development Tools を読みつづける。
 FreeBSDの設定。
 OpenCVのインストール及びプログラム作成。

コメント

この日だけ 18:16 の報告になっている。実は 18:00 に帰るためには 17:30 には仕事を終了して、日報をかいて 17:50 に日報をメールして帰るように指示していた。ブラックでない会社。まぁ小さい会社、いいことばかりじゃないけどね。ここは私の方針で継続して働ける環境を作っている。(もちろんデスマーチもありました。それで会社がピンチになったことも)。この日はきっと本を読み切るためにちょっと遅くなったんだね。

GNU Development Tools 読み終わった!!1週間ちょっと?おー誰かが指示したのかな?このままで終わらせずに2周目に突入。まだ、よんだだけだからね。でも、新人だけに、出来る気になっている。

実務経験7~8年の人の日報

- 移植用 todo の更新
- qemu for ARM の環境をサーバ に作る
- arm 向け OpenCV 1.0.0 の build
- arm 向けに、グレースケール変換のテストをコンパイル
- qemu-arm 上でグレースケール変換のテスト
-> ok
- arm 向け OpenCV 2.2.0 の build
-> ok. 手順書を書いた
- arm 向けに、グレースケール変換のテストをコンパイル( 2.2.0 )
- qemu-arm 上でグレースケール変換のテスト( 2.2.0 )
-> ok
- qemu-arm 上でエッジ検出変換のテスト( 2.2.0 )
-> ok
- ARM のボードに、OpenCV 2.2.0 のライブラリをコピー
- ARM のボード上でエッジ検出変換のテスト
-> ok

高橋くんへ

マトリックスを使った回転をしているプログラムを添付します。

コメント

指示した OpenCV の構築が出来ている。さすが、実務経験7~8年。そして、その結果が高橋君にわたされる。どうする、いきなり OpenCV のソースを渡された新人。どーなるんだ。(おぼえてない)

新人:高橋くん日報:6/17(Fri) 18:12

今日行ったこと
 C言語プログラミングを3章 スタイルまで読み終える。
 opencvのインストールを済ませ、使える状態にした。 

 opencvについて
  72×34の画像出力には成功、この後は四角形領域の作成に入る。
これから行うべきこと
 opencvのプログラムを作成する。
 C言語プログラミング、linuxの使い方などに目を通しておく。

コメント

あれ?今日も 18:12 報告。ブラック企業になり始めている(苦笑)。C言語プログラミングを読ませている。今考えると順番が逆だ。なんで、先にGNU Development Tools 読ませているんだろう?わかるわけないじゃん。FORTRAN しかやったことないのに。スパルタ教育だな。

おーそれでも OpenCV でなんかプログラミングしている。ここまではお遊戯な感じだけど、新卒ならこんなもんじゃないのかな。上出来上出来。とこれが2周目。まだまだ続くよ。メールの残骸が残っている限り。
このペースだといつまでたってもブログが終わらない気がするけど。