FC2カウンター FPGAの部屋 ZYBO用カメラ画像をOpenCVで顔認証した
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ZYBO用カメラ画像をOpenCVで顔認証した

ZYBOのUbuntu上でカメラ画像をBMPファイルに変換できた”でカメラ画像をBMPファイルに変換できた。

今回は、BMPファイルを gimp でJPEGファイルに変換して、OpenCV で顔認証を試みた。

./disp2bmp でカメラ画像がらBMPファイルを生成した。

・gimp でBMPファイルをJPEGファイルに変換した。

./nautilus ファイルマネージャーを立ちあげて、OpenCV のサンプルフォルダ (samples/c) にコピーした。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" ????.jpg コマンドで、顔認証を行ったところ、認識された。
ZYBO_OpenCV_52_141127.jpg

なおカメラ画像は、自分ではうまく取れないので、息子のを使用した。

顔認証は成功したが、よく見てみると、何かおかしい。拡大してみるとおかしい様子がわかるはずだ。
ZYBO_OpenCV_54_141128.jpg

よく見るとザラザラになっている。この特徴は横の1ピクセル分が入れ替わっている時の特徴だ。
ハードウェアでは、ビッグエンディアンでアラインされている(”ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する10(デバック2)”の mt9d111_cam_cont.v 参照)が、Zynq のARMプロセッサはリトルエンディアンだった(”Zynq-7000 All Programmable SoC テクニカル リファレンス マニュアル UG585 (v1.7) 2014 年 2 月 11 日”63ページ、一番下の注記から引用、

注記 : アプ リ ケーシ ョ ン プロセッシング ユニッ ト (APU) および PS 全体は、命令 とデータのどち らについて も リ ト ルエンディ アン アーキテ クチャ しかサポー ト していません。

)。
ZynqのARMプロセッサの内部バスは64ビットだったと思われるため、int でデータを取り扱った場合、異なるエンディアンの影響を受けてしまう。これはハードウェア、ソフトウェアどちらかで対応が可能だが、修正が簡単なソフトウェアで修正を行うことにした。

現在の disp2bmp.c の bmp_data の書き込みの C ソースを下に示す。

    // bmp_dataの書き込み
    for (i=0; i<VERTICAL_LINES; i++) {
        for (j=0; j<HORIZONTAL_PIXEL; j++) {
            fputc((int)bmp_data[i][j].blue, fbmp);
            fputc((int)bmp_data[i][j].green, fbmp);
            fputc((int)bmp_data[i][j].red, fbmp);
        }
    }

これを次のように修正する

    // bmp_dataの書き込み
    for (i=0; i<VERTICAL_LINES; i++) {
        for (j=0; j<HORIZONTAL_PIXEL; j++) {
            fputc((int)bmp_data[i][j^1].blue, fbmp);
            fputc((int)bmp_data[i][j^1].green, fbmp);
            fputc((int)bmp_data[i][j^1].red, fbmp);
        }
    }

つまり、1との排他的論理和演算をすることで、LSBを反転させた。これはint 単位(32ビット単位)でアドレスを1つひっくり返すことになる。

これでもう一度、顔認証を行った写真を下に示す。
ZYBO_OpenCV_55_141129.jpg

拡大してみた。
ZYBO_OpenCV_56_141129.jpg

結構スムーズになっていると思う。これで問題無さそうだ。
ZYBOのUbuntu上でカメラ画像をBMPファイルに変換できた”の disp2bmp.c は修正した。
  1. 2014年11月28日 05:23 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/2992-23c3063e
この記事にトラックバックする(FC2ブログユーザー)