私はリアルタイムで画像処理タスクを必要とするAndroidアプリケーションを開発しています。カメラのセットアップにOpenCVチュートリアル0を使用しており、リアルタイム画像を受信するまでコーディングを行った同じクラスを使用しています。今、ロゴを検出し、最も笑顔を検出したい私がインターネットで行った検索のうち、OpenCVに基づいているか、アプリケーションを非常に重くするようなライブラリを使用したり、統合が非常に難しいとわかったNDKを使用したりしています。他の多くのタスクを同時に実行する必要があるため、非常に少ないリソースしか必要としない機能を検出するための単純な Java 実装が必要です。書籍、Web サイト、その他のリンク、または画像マッチングと笑顔検出技術のコードを参照してください。私は本当に立ち往生しています私は次のコードを試しましたが、ピクセルからピクセルへのマッチングであるためあまり役に立ちません
private boolean bit_match(Bitmap bmp1, Bitmap bmp2)
{
boolean first_x = false;
int x1 = -2, x2 = -2,y1,y2;
int minx1=-1,maxx2=-1,miny1=-1,maxy2=-1;
int w = bmp1.getWidth();
int h = bmp1.getHeight();
int[] pixels1 = new int[w * h];
int[] pixels2 = new int[w * h];
total_rounds=0;
match_count=0;
//long start = new Date().getTime();
bmp1.getPixels( pixels1, 0,w, 0, 0, w, h );
bmp2.getPixels( pixels2, 0,w, 0, 0, w, h );
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++)
{
if (pixels2[i + j * w] != pixels1[i + j * w])
{
if(!first_x){ minx1=i; miny1=j; maxx2=i; maxy2=j; first_x = true; }
if(minx1>i) minx1 = i;
if(miny1>j) miny1 = j;
if(maxx2<i) maxx2 = i;
if(maxy2<j) maxy2 = j;
// System.out.println(i +"x"+ j);
}else{ match_count++;}
total_rounds++;
}
}
if(minx1==maxx2 && maxy2==miny1)
{
//System.out.println("Un singur pixel modificat");
//Toast.makeText(this,"Un Modified", Toast.LENGTH_LONG).show();
return true;
}
else{
// System.out.println("Modified part (rectangle): "+minx1+","+miny1+"<->"+maxx2+","+maxy2);
//Toast.makeText(this,"Modified part (rectangle): "+minx1+","+miny1+"<->"+maxx2+","+maxy2, Toast.LENGTH_LONG).show();
return false;
}
}
精度はそれほど重要ではありません。アイデアが必要なだけなので、今のところ精度で妥協できます