2013-11-05 6 views
6

デバイスカメラで撮影した写真の顔の数を検出できるアプリを作成しようとしています。これまでのコードを以下に示します。ここでの質問を調べることで、私はFaceDetectorにとって絵の解像度があまりにも劣っている問題があるかもしれないと思うが、そうであれば、その問題をどう解決するかはわからない。そうでない場合、私は何が間違っているのか迷っています。どんな助けでも大歓迎です!Android FaceDetectorは顔を見つけられません...毎回0を返します。

public class CrowdDetection extends Activity { 

ImageView display; 
ImageView pic; 
Bitmap image; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_crowd_detection); 

    display = (ImageView) findViewById(R.id.imageView2); 

    Button takePicture = (Button) findViewById(R.id.button1); 
    takePicture.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, 0); 

     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 

    super.onActivityResult(requestCode, resultCode, data); 

    setContentView(R.layout.detect_faces); 

    pic = (ImageView) findViewById(R.id.imageView1); 

    image = (Bitmap) data.getExtras().get("data"); 
    image = BitmapFactory.decodeFile(data.getData().getPath()); 
    pic.setImageBitmap(image); 

    Button detect = (Button) findViewById(R.id.button2); 
    detect.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      detectFaces(); 
     } 
    });  
} 

private void detectFaces() { 

    setContentView(R.layout.display_crowd); 

    int h = image.getHeight(); 
    int w = image.getWidth(); 
    int max = 10; 

    FaceDetector detector = new FaceDetector(w, h, max); 
    Face[] faces = new Face[max]; 

    ImageView pic2 = (ImageView) findViewById(R.id.imageView3); 
    pic2.setImageBitmap(image); 

    int facesFound = detector.findFaces(image, faces); 

    TextView result = (TextView) findViewById(R.id.textView3); 

    if(facesFound>5){ 
     result.setText("There are " + facesFound + " faces in this picture, therefore you have a crowd!"); 
    } 
    else{ 
     result.setText("There are only " + facesFound + " faces in this picture, therefore you do not have a crowd!"); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.crowd_detection, menu); 
    return true; 
} 

} 

事前にお手数ですが、あなたはどんな顔を検出することはできません

答えて

14

理由は、あなたは、RGB 565

にあなたのビットマップを変換する必要がありますされてRGB 565

BitmapFactory.Options bitmapFatoryOptions=new BitmapFactory.Options(); 
bitmapFatoryOptions.inPreferredConfig=Bitmap.Config.RGB_565; 
image=BitmapFactory.decodeResource(getResources(),  R.drawable.image,bitmapFatoryOptions); 
+1

にあなたのビットマップを変換するために、これを使用して非常に技術的な答えであること。ありがとう –

+0

まだ動作していません – busuu