FC2カウンター FPGAの部屋 2014年11月28日
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

ZYBO用Ubuntu Linux のファイルマネージャー

ZYBO用のファイルマネージャーは、nautilus を使っている。

putty ターミナルから、(linaro ユーザーで) nautilus & をタイプして起動している。(フリーのWindows 用XサーバーのXming を起動してある)
ZYBO_Ubuntu_9_141128.png

起動した、nautilus ファイルマネージャー。
ZYBO_Ubuntu_10_141128.png

これで結構便利になる。
  1. 2014年11月28日 04:46 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZYBO用Ubuntu Linuxのファイルチェック

ZYBO用のUbuntu Linuxが起動の途中で止まってしまう。

 * Starting regular background program processing daemon                 [ OK ]
 * Stopping save kernel messages                                         [ OK ]


この後、止まってしまいプロンプトが出てこなくなってしまった。
リターンキーを押せばプロンプトが出るが、エコーが効いていないので、ローカルエコーに設定している。
(下の図は、上のメッセージ後にリターンキーを押してプロンプトを出して、ifconfig コマンドを実行したところ)
ZYBO_Ubuntu_1_141128.png

後で、下の図の様に adjtimex , ntpd などが実行されている。
ZYBO_Ubuntu_2_141128.png

いろいろと、apt-get 関係のコマンドを実行してやってみたが、どうもおかしくなってしまったので、ファイルチェックをすることにした。ファイルチェックのコマンドを検索すると、”Ubuntu 12.10でハードディスクのファイルシステムをチェックする”が検索できた。
それによると gparted がそのファイルシステムのチェックができるソフトウェアのようだ。
早速、linaro アカウントから sudo apt-get install gparted でインストールを行った。
次に起動は、やはりスーパーユーザの権限が必要で、sudo gparted で起動した。
フリーのWindows 用Xサーバーの Xming を起動してあるので、gparted が立ち上がって、ウインドウが出た。
ZYBO_Ubuntu_3_141128.png

/dev/mmcblk0p2 をクリックして右クリックメニューからCheck を選択した。
ZYBO_Ubuntu_4_141128.png

Apply ボタンをクリックした。
ZYBO_Ubuntu_5_141128.png

確認ダイアログが出た。
ZYBO_Ubuntu_6_141128.png

やはり、マウントされているので、チェックできなかった。
ZYBO_Ubuntu_7_141128.png

ログ。
ZYBO_Ubuntu_8_141128.png
  1. 2014年11月28日 04:38 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0