2013年1月30日水曜日

OpenCVで検出結果を楕円にあわせる


FloodFillなどの処理により、マスク画像を取得した後に、大まかな領域情報を得る手法の一つとして、検出領域を四角形で囲い込む内容を前に投稿した

今度は、検出結果を、四角ではなく、cv::fitEllipseを使用して楕円にあわせる

前回同様に、cv::RotatedRecが戻り値であるが、楕円の場合は、cv::ellipseで表示できる

cv::RotatedRect rRect =  cv::fitEllipse(polygon);
cv::ellipse(image, rRect, cv::Scalar(0,255,0));

cv::RotatedRectには、中心と、サイズと、傾きが格納されているため、楕円を描画することはできるが、RotatedRectという名称にはしっくりこない

OpenCVで傾いた矩形を描画する


FloodFillなどの処理により、マスク画像を取得した後に、大まかな領域情報を得る手法の一つとして、cv::findContoursで輪郭線を検出し、さらにcv::minAreaRectで全体を囲んだ四角形(傾きあり)を使用することがある。

ただし、cv::minAreaRectの戻り値が、cv::RotatedRectであるため、cv::rectangleでは、描画できない。

そのため、cv::RotatedRectから、4点を取り出し、自分で4つの線を描画する必要がある

cv::RotatedRect rRect =  cv::minAreaRect(polygon);

cv::Point2f vertices[4];
rRect.points(vertices);
for (int i = 0; i < 4; i++)
line(image, vertices[i], vertices[(i+1)%4], cv::Scalar(0,255,0));

説明はここ

OpenCV for Androidのtutorial 3を試してみた


OpenCVに慣れてきたのでPCだけでなく、Android版を試してみた。

今回は、tutorialの3で、NDKROOTの設定ができており、eclipseの起動のみ注意すれば、eclipseにsampleをimportするだけで良い。

tutorialの3では、AndroidのJNIの仕組みを利用して、Native側で特徴点の検出と描画を行う

JAVA側
データの入力は、前回と同じ、public Mat onCameraFrame(Mat inputFrame) {
の部分で受け取り、入力画像を一旦コピーし、白黒に変換

その後、自分で定義した
public native void FindFeatures(long matAddrGr, long matAddrRgba);
に、白黒画像のMatと、結果を受け取るMatの内部データのポインタを引き渡す

Matからポインタを取得するには、.getNativeObjAddr()を使用する

Native側
プロジェクトのJNIフォルダーのjni_part.cppにあたる

JAVA側とのインタフェースを宣言し
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3Native_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);

関数の中では、JAVA側から渡されたMatのポインタをMatにCastして受け取っている
Mat& mGr  = *(Mat*)addrGray;

その後は、通常のC++のコードで検出した特徴点のキーポイントのベクターからキーポイントを取り出し、円を描画している

このサンプルをまねすれば、簡単にC++で自作の処理を行わすことができそうだ

2013年1月29日火曜日

OpenCVによる画像の膨張と縮小


FloodFillなどの処理により、マスク画像を取得した後、ノイズ除去や欠落部分の補完に、モルフォロジー演算を行う

よく使用するのは、
画像のノイズやひげを除去する 
cv::erode(from, to, cv::Mat(), cv::Point(-1,-1), 1);

画像の欠損部を補完する
cv::dilate(from, to, cv::Mat(), cv::Point(-1,-1), 1);
がある。

cv::Mat()を指定するとデフォルトのサイズ3x3が選択される

それ以外のサイズを用いる場合には
cv::Mat element(5,5,CV_8U, cv::Scalar(1))などで、エレメントを指定する

サイズは正方形ではなく、長方形にすれば、縦方向のエッジのみ接続するなどできる

この手法は、Mastering OpenCV with Practical Computer Vision Project chap. 5でナンバープレート検出に使用されている

それぞれ、最後のパラメータは適用する回数であり、複数化適用することによりセグメントの分離や結合することができる

ただし、それぞれ1回演算を行うと、サイズが縮小、あるいは拡大するので、サイズを維持する場合には、反対の処理を行う必要がある


OpenCVでは、利便性を考え、複数を処理を行う morphologyEx 関数も準備されいる。

cv::morphologyEx(from, to, op, cv::Mat(), cv::Point(-1,-1), 1)

3番目のパラメータは、処理であり、
MORPH_OPEN オープニング
MORPH_CLOSE クロージング
など指定する


参考
詳解 OpenCVの 5.3の画像のモルフォロジー P119
OpenCV 2 Computer Vision Application Programming Cookbook Chap.5 P117

2013年1月28日月曜日

OpenCV for AndroidのAPIリファレンスに関して

The OpenCV Manager Manualは、OpenCV for AndroidのSDKの中に、pdfファイルとして含まれており、最初の数ページに、基本的な使用方法が記載されている

しかし、APIのリファレンスは、pdfに記載されていなく、pdfのリンクからWebページにアクセスすることになる

Androidの開発経験があれば、問題ないかと思われる。

OpenCVでVideoCaptureに関して


OpenCVの画像の入出力は、ffmegを使用しており、OpenCVでは、ffmpeg用のパラメータの設定と、cv::Matとのフォーマット変換を行っているようである。

前述のDIBの問題を調べるために、ソースを少し覗いてみた。
関連部分のソースは、modules\highgui\srcのcap_ffmpeg_impl.hppにあたる

補足
以前 VideoCaptureの対応フォーマットに関してメモを書いたが、対応しているフォーマットは、上記ソースを見るとFOURCCと対応して、const AVCodecTag codec_bmp_tags[]に列挙されている

この部分は、ffmpeg/libavformatのriff.cから移したとのこと

OpenCVでDIBフォーマットの白黒動画像が読み込めない


DIBの白黒形式で動画を保存したファイルを、別のプログラムで読み込むとすべての値が0になるという現象に遭遇した。

画像処理の中間段階の画像を無圧縮のDIBフォーマットでファイルに保存しているのは、別のプログラムでその後の処理方式を比較するためである。

読み込まれたmatのchannelプロパティを調べると3になっており、ファイルが白黒1chと認識されていないことがわかった。

中間段階の白黒画像を、DIBのカラー形式で保存すれば、問題ないことを確認したが、サイズが3倍になってしまう。

VideoCaptureのマニュアルを見てみたが、openする場合のフォーマット指定ができないようなので、素直にカラー形式で保存することにする

OpenCVをnode.jsから使用するnode-opencvに関して


たまたま紹介している渡邉研究室のページを見つけました。

本家のほうは、7ヶ月も前に公開されています。

本家のほうは、2.3.1ベースですが、渡邉研究室のほうは、2.4.3を使用しています。

これを利用すれば、サーバにデータを送って処理結果を受け取るシステムを簡単の作れるようになりそうですが、javascriptとnativeの役割分担をどうするか考えないといけないですね

2013年1月25日金曜日

OpenCV for AndoidのプロジェクトをUbuntuでビルドする

昨日からandroidのNDK部分がビルド出来なく試行錯誤をしていた。
eclipseのインストールも何度か繰り返し、ようやく原因がわかった。

ここに書いてあるように.bashrcに設定を加えているが、NDKROOTをeclipseが認識していない

最初UbuntuソフトウェアでEclipseをインストールし、Launcherから起動していた
次に、ダウンロードしたEclipseを展開して、フォルダーからクリックして起動していた

上記のような場合、Homeの.bashrcが参照されないことにようやく気づき、terminalからeclipseを起動することでようやく解決することができた。

以上

OpenCVのCannyエッジ検出を試してみた


エッジ検出の手法の1つであるが、エッジの接続性を加味した2値画像が出力されるらしい。

パラメータの3,4に二つの閾値を設定するが、公式の説明では、閾値1と閾値2の小さいほうを接続に用い、大きいほうを強いエッジの初期セグメントの検出に用いるとのこと

詳しい説明は、Wikiにリンクが張ってある。

大きくしすぎると重要な情報を失うとのこと、反対に小さくしすぎると、ノイズを拾うとのこと。閾値は、すべての画像に適応できる値はないので試行錯誤が必要


日本語の説明は、オライリーの詳細OpenCVのP154に説明が、記載されている。ここでのポイントは、上限と下限の比は2:1と3:1の間を推奨している。

2013年1月24日木曜日

OpenCV for Androidのtutorial 3がビルドできない

tutorial 3では、AndroidのNDKを使用することになるが、いくつかのWebページに記載されている手順に従ってもプロジェクがビルドできない

デフォルトのままでは、
Cannot run program "/ndk-build.cmd": Unknown reason
Program "/ndk-build.cmd" is not found in PATH
とエラーメッセージが表示される。

1 ndk-build.cmdになっているが、これはWindows用なのでndk-buildに直す
  ・プロジェクトのプロパティ
  ・C/C++ build
2 パスのNDKのパスの設定がうまく行っていないようなので、以下の設定が必要
  ・プロジェクトのプロパティ
  ・C/C++ build
  ・Environmentで環境変数を追加
   pathにNDKを設定したpathを追加

これにより改善されるが、
Error: Cannot run program "/ndk-build": Unknown reason
でプロジェクトがビルドできない

ubuntuではうまく行かないのか?

引き続き調査を行う

OpenCVで、移動体(前景)の検出を試みた


以前背景差分の記事を書いたが、移動物体の検出が必要となり、sampleをベースにプログラムを作成したところ、いくつか困った点が見つかった。

付属の歩行者のビデオ画像に対してためした画像を前の記事で掲載したが、移動体である歩行者のほかに、背景でのノイズや、影までも検出されており、所望の前景部のみを簡単には得られないことがわかった。

また、1枚目の画像に対象としたい前景が含まれていると、前景までも背景とみなされ、しばらくは所望の結果が得られないこともわかった。


BackgroundSubtractoは、基本のクラスであり、実際検出を行う場合には、
BackgroundSubtractorMOGかBackgroundSubtractorMOG2を用いることになる。

ドキュメントには、コンストラクターの引数や、背景を更新し、前景を得る関数の引数の簡単な説明があるが、それを変えることによる影響は、他のOpenCVの関数同様わからない。

(もとの論文が紹介されているので、読めばわかるかも知れないが、軟弱な開発者なのでパラメータを変え、いくつか試してみて、効果を推測している)

BackgroundSubtractorMOG2に関しては、OpenCV 2 Computer Vision Application Programming CookbookのP275にもっと簡単なサンプルが記載されている。

以上

2013年1月22日火曜日

OpenCVで画像を連結する

yahoo知恵袋にOpenCVでの画像の連結に関して質問があった。

cv::hconcatを使えばすむ話かと思い、本家のドキュメントを調べてみるとなぜか検索結果にでてこない

vconcatもみつからないので、サポート中止になったかと思い、ソースを調べてみるとチャンと存在している。
Matrix Operationsのコメントより下にある。

以前は、2枚の画像を接続するのに使用したが、配列やVectorに格納されたMatを格納された枚異数だけ結合する機能もあることがわかった。
2枚の場合、配列の変形版で実現されている。

以上

OpenCV for Androidのtutorial 2を試してみた

OpenCVに慣れてきたのでPCだけでなく、Android版を試してみた。
今回は、tutorialの2で、 eclipseにsampleをimportするだけで良い。


tutorialの2では、tutorial 1をベースにしており、入力された画像をモードに応じて加工している


・カメラ開始イベント処理 onCameraViewStarted で、白黒画像表示用と、エッジ検出格納用のMatを初期化

・カメラ終了イベント処理 onCameraViewStoppedで、確保したMatをリリース

・メニューボタンイベント処理 onOptionsItemSelected では、3つのモード

1 カラー画像表示
2 白黒表示
3 Cannyエッジ

に応じてカメラ画像からの取り込み方式を設定している。

取り込み方式は、
mOpenCvCameraView.SetCaptureFormat(Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
mOpenCvCameraView.SetCaptureFormat(Highgui.CV_CAP_ANDROID_GREY_FRAME);
で指定できる。

・カメラ入力イベント処理 public Mat onCameraFrame では、モードにより入力画像に対し、異なる処理を行う。

1 オリジナルをコピーし、文字を描画
2 白黒画像をカラー画像フォーマットに変換
3 エッジ検出をおこない、結果をカラー画像フォーマットに変換



パフォーマンスを気にしなければ、これだけでもかなりのことができそうだ


追加 4/15
tutorial 2では、fpsを表示しないが、res/layoutのtutorial2_surface_view.xmlの、
LinearLayoutの属性に、xmlns:opencv="http://schemas.android.com/apk/res-auto" と JavaCameraViewの属性に、opencv:show_fps="true"を追加すれば表示されるようになる。

以上

2013年1月21日月曜日

実践OpenCV 2.4 映像処理&解析が発売されたようだ


現時点、Amazonでの在庫は8点、ほかの通販でも在庫ありのところもある。
内容に関しては、ここに紹介がある。

あまり関係ないが、なぜかAmazonの洋書でOpenCVを検索すると、これが候補にあがるが、関係ないと思われる

2013年1月20日日曜日

OpenCV4Androidを試してみた

失ったと思っていたら、Bloggerの下書きに残っていたのでそのまま利用

PCばかりではなく、そろそろスマフォでもOpenCVを試してみたくなったので、OpenCV-2.4.3.2-android-sdk.zipをダウンロードしてみた。
開発環境は、Androidの開発環境を構築しているUbutu 12.04 64bitを使用

Androidの開発環境、および、UbuntuのOpenCVの開発環境は、省略する。
(双方、頻繁に更新されるため、開発環境の構築だけでもそれなりに時間がかかる。以前のバージョンを削除する必要ある場合がある)

・準備
OpenCV-2.4.3.2-android-sdk.zipをここからダウンロードし、適当なフォルダーに展開する

・OpenCV共通ライブラリーの設定
最初に、Eclipseのimportで展開したフォルダーのSDKのJavaを選択しておく。
この時、AndroidSDKで選択したAPIのレベルと一致しない場合がある。もとの設定では、APIは、11となっているが、当方の環境の場合11のSDKがインストールされていなかったため、インストールされていた15(4.0.3)に、Eclipseが自動的に変更していた。

サンプルのビルドと実行
・Eclipseのimportで、展開したフォルダーのsamplesのtutorial-1を読み込む。
 同様にAPI11が、対応するAPI番号に自動で変更される
 
スマフォの準備
・Google PlayでOpenCVマネージャを事前にダンロードしておく
 スマフォによっては、プラグインが選択できる場合もある

・デバッグ
 ADBデバッグの設定済みのスマフォを接続するとEclipseが認識し、デバッグ用のデバイスとして認識する
 あとは、デバッグを走らせれば、運がよければ、アプリが起動しカメラ画像が表示される
 
補足
Androidのカメラ周りの問題かどうかわからないが、スマフォにより挙動が異なるので困ったものだ。(これは、OpenCV側ではなく、デバイス側が原因だろう)

 EVO 3D ISW12HT 4.0.3では、tutorial1を起動すると720x480の画像が約24fpsで表示される
 Nexus7では、tutorial1を起動すると1280x720の画像が約14fpsで表示される
 
 また、ISW12HTでは、Tutorial2は起動しなかったが、Nexus7では問題なかった
 Nexus7では、Tutorial3は、カメラプロファイルの取得でnull pointerとなり動作しなかった

 Tutorial4は、モジュールがロードできないため、動作していない。これは、NDKの環境が必要かもしれない
 
以上

OpenCV4Androidのtutorial 1を試してみた

OpenCVに慣れてきたのでPCだけでなく、Android版を試してみた。

設定用のメモも書いたが、マシンのフリーズでせっかく書いた文章を飛ばしてしまったので、設定はあとにして、tutorialの1から

OpenCVの初期化や、後始末は、Androidのフレームワークに準じて行われる。

・OnResumeで、OpenCV Managerを非同期で呼び出し、BaseLoaderCallbackで、呼び出し結果を調べている
・接続要求の結果が成功の場合、CameraBridgeViewBaseを有効にして取り込みを開始する。
・カメラから入力は、onCameraFrameで受け取れるようだが、サンプルでは、そのまま戻している
・onPauseでは、CameraBridgeViewBaseを無効とし、取り込みを停止する。

とういうシンプルな構成となっている。

一応、メニューからカメラモードの切り替えができるような印象を与えるが、実際ソースを見るとメニューからモードを切り替えても、レイアウトを切り替えているだけであり、かつ、レイアウトの中身を同じものを使用しているため変化はない

PCと異なるのは、レイアウトの属性に、 opencv:show_fpsがあり、これをtrueにすると自動で画面左上にfpsが表示される

以上

2013年1月18日金曜日

OpenCVのTemplate Matchingのチュートリアルをためしてみた


評価式や処理に関しては、英語だがここに詳しい説明がある。

ソースは、samples\cpp\tutorial_code\Histograms_MatchingのMatchTemplate_Demo.cppに含まれている。

cvsample用のテンプレートプロジェクトにそのままソースをコピーしてビルドを行った。
引数を与えるのがめんどくさいので、ソースのargv[1],argv[2]を画像ファイルへのパスに変更した。

対象の画像には、samplesにふくまれていたbaboon.jpg(argv[1])を使用し、WindowsのSnipping toolを使用して目の部分を切り出したものをテンプレートとしている(argv[2])。
マッチングのアルゴリズムは6種類準備されており、トラックバーを使用して方式を切り替えることができる。

0: SQDIFF
1: SQDIFF NORMED
2: TM CCORR
3: TM CCORR NORMED
4: TM COEFF
5: TM COEFF NORMED

matchTemplateの結果は、SQDIFF and SQDIFF_NORMEDの場合だけ、結果が小さいほうがより似ているものとなる。



自分の画像から切り出した画像をテンプレートに使用しているので、問題ないかと思ったが、2のTM CCORRは、まったく異なる場所がベストの結果となった。



古典的手法なのであまり使う機会がないと思われる。また、使用した環境では、トラックバーの文字が正しく表示されないことに気づいた。

2013年1月16日水曜日

OpenCVベースのライブラリが画像認識用DSPに提供された


先週のニュースであるが、OpenCVベースのライブラリが、CEVA-MM3101というDSP向けに提供されたとのこと

基本的な関数だけでなく、少し高度な関数を含んでおり、開発者は、DSPに関する知識がなくても開発できるのが特徴らしい

詳しくは、ここに書いてあるが、会員登録をする必要がある

ボードの価格が安ければ買ってみたい。

2013年1月11日金曜日

OpenCV 2.4.3のPDFのドキュメントが公開されていた



12/26付けでOpenCV ver 2.4.3にあわせた以下のドキュメントが、PDFで公開されていた。

The OpenCV Reference Manual 797 page

The OpenCV Tutorials 399 page

The OpenCV User Guide 19 page

ダウンロードしてiPadに入れておくと便利かもしれない

補足
OpenCV2.4.3をダウンロードするとDocフォルダーに上記のPDFが含まれているが、日付が11/2なので、Webに公開されているほうが新しい。こちらのtutorialは、403 page

(2.4.3をダウンロードした時期が昔なので、今は差し替えられているかもしれない)

2013年1月10日木曜日

OpenCV Tutorialsに関して

OpenCV.orgには、tutorialsのページが準備されており、いくつかの関数の原理と使用方法が記載されている

OpenCVのSDKには、このページに関連していると思われるソースがsamples\cpp\tutorial_codeに含まれている

ざっと眺めてみると、cppに含まれている関数のsampleと同じ関数のsampleも含まれているので、今後整理されるのを期待したい。
(samplesよりもtutorialのフォルダーが深い場所にあるので、sampleコードの方が優先されている気もする)

2.4.3で含まれているtutorial_codeを示す。




OpenCV.orgでの並びや名称と異なり、またそれぞれに含まれていない項目もあるため、このあたりの整理も期待したい

2013年1月8日火曜日

Mastering OpenCVの第8章の顔認識のメモ step3 後半


Mastering OpenCV with Practical Computer Vision Projectの第8章の顔認識は、4つのStepで構成されている。

今回は、Step3の収集した画像のトレーニングに関して。

顔認識に適した機械学習は、固有顔とニューラルネットワークがある。固有顔の方がよい結果である傾向があるし、他の新規のアルゴリズムと比較しても簡単であり、初心者向けである

この本のアルゴリズムを使用するために、原理を読む必要はないが、理解を深める意は下記を読んでおくとよい

・Eigenfaces (Principal Component Analisys)
・Fishersfaces (Linear Discriminant Analysis)
他の古典的アルゴリズム
最近の発表

OpenCV 2.4.1から汎用的なcv::Algorithm が提供されている。 実行時にアルゴリズムが選択できる
cv::Algorithm::getList()でサポートしているアルゴリズムを調べることができる

2.4.1では、Eigenfaces、Fishersfaces、LBPをサポートしている。

これらのアルゴリズムは、contribモジュールに含まれており、FaceRecognizerクラスを通じて使用できる。

contribモジュールをリンクする必要があるが、要求されるまでロードされない。
使用するためには、cv::initModule_contib()を呼ぶ必要がある。

cv::Algorithm::create<FaceRecognizer>()で、使用したアルゴリズム名を与えてオブジェクトを作成する必要がある。

モジュールがロードされたら、FaceRecognizer::train()を呼べばよい。

以上

次は、補足の平均顔の表示

2013年1月7日月曜日

cv::Matのすべての要素に特定の値に設定する


cv::Floodfillでmaskを使用する場合、注意点が2つある。

1つは、maskのサイズを縦横+2のサイズにしなければいけない。もうひとつは、0で初期化する必要がある

アプリで1回だけ試すのであれば、cv::Mat作成時に、cv::Mat::zeros(width+2, height+2, CV_8UC1)で初期化できるが、作成したmatを使いまわす場合、中身を0に設定する必要がある

これまで、ループをまわして各要素に0を代入していたが、mat = cv::Scalar::all(0); で各要素を0に設定できることがわかった。

2013年1月3日木曜日

OpenCVのFloodfillを試してみた。

Mastering OpenCV with Practical Computer Vision Projectの第5章のナンバープレート認識の処理の一部でcv::Floodfillが使用されている。この関数の使い方がいまひとつわからなかったので、APIの説明を読んでみた。

floodFillは、閾値の決め方と、結果の表示方法にバリエーションがある。
閾値の決め方は、flagを使用し、FLOODFILL_FIXED_RANGEをセットすると、指定した画素と比較対象の画素との差分を判別( fix mode)し、そうでなければ比較対処の近傍の画素と比較対象の画素との差分を判別(floating mode)する

結果に関しては、対象画素を指定の色で塗り替えるモードと、FLOODFILL_MASK_ONLYのflagをセットすることでmask画像を作成するモードがある。

FLOODFILL_MASK_ONLYは、第2の形態とあわせて使用する。

mask画像は、single-channel 8-bitであり、オリジナル画像のサイズより縦横2画素大きくする必要がある。


APIの説明では、詳しい使い方は、サンプルを見ろと書いてある。そこで、OpenCVのsampleコードにffilldemo.cppが含まれているので試してみた。

OpenCVの環境が整ったVS10で、新規プロジェクトを作成し、インクルードの宣言と、ライブラリのパスを頭に行い、後はデモプログラムをそのまま貼り付ける。

一箇所だけ、デフォルトで使用する画像のファイルfriut.jpgのパスがないので、保存されているフォルダーの絶対パスに書き換える。

ビルド後、実行し、マウスで画面内の任意の点をマウスでクリックすると、選択した点の画素に近い画素がランダムな色で塗りつぶされる。

 
選択できるモード
 
 
バナナの一部を指定

maskの使い方がいまひとつわからないので、いろいろ試してみる必要がある。

2013年1月1日火曜日

Mastering OpenCVの第8章の顔認識のメモ step3 前半

2013年明けましておめでとうございます。

Mastering OpenCV with Practical Computer Vision Projectの第8章の顔認識は、4つのStepで構成されている。

今回は、Step3のトレーニング画像の収集に関して。

 カメラ画像を前処理した画像を収集して、ラベルを付与してトレーニングを行う。
 トレーニング結果はファイル等に保存し、後で誰の顔かのテストを行うときに使用する。

 トレーニング用の画像は、トレーニングセット、テスト用の画像をテストセットとする。

 トレーニング用の画像は、さまざまな状態の画像にしたほうがよい。
 顔の角度、表情、照明状況などいろいろ変えてみる

 一般的に、一人につき100枚の画像が必要だが、ほとんど同じような画像であれば意味がない
 30fpsのカメラであれば、数秒で100間枚になるため、ほとんど同じイメージになる

 そこで明示的に遅延を入れ、1秒に付き1枚とする。また、イメージが似ているかどうか判断し
 似ていない場合のみ、その画像を使用する

 似ているかの判断は、2枚の画像を画素ごとに比較し、相対的なL2 erroeを求める。
 (2つの値の差の合計のルートをとった値である)

 どちらかの方向に動いた場合、L2 errorの値は大きくなる。
 ここでは、0.3を閾値とする。

 顔のバリエーションの作成には、いくつかの手法がある
 顔を反転させる ノイズを加える 数画素シフトさせる 数%拡大縮小させる 数度回転させる
 
 顔を採用した場合、白枠で囲む

 次回は、いよいよ本題の認識のトレーニングとなる


書いている間にいつの間にか年が明けていた。
本年、がんばっていくつかのアプリケーションを作りたい。

いずれここで報告したいという抱負を抱く。 2013 元日