0

顔検出で顔が検出され、3秒後に円が消えます。一部の電話機でのみ発生するので、私はなぜそれが起こっているのか分かりません。私のコードはかなり定型です:Googleモバイルビジョン:顔検出が3秒後に終了する

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

    detector = new FaceDetector.Builder(getApplicationContext()) 
      .setTrackingEnabled(false) 
      .setProminentFaceOnly(true) 
      .setMode(FaceDetector.FAST_MODE) 
      .setMinFaceSize((float) 0.60) 
      .setLandmarkType(FaceDetector.ALL_CLASSIFICATIONS) 
      .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) 

      .build(); 


    initViews(); 

} 

private void initViews() { 
    imgTakePicture = (ImageView) findViewById(R.id.imgTakePic); 
    btnTakePicture = (Button) findViewById(R.id.btnTakePicture); 
    txtSampleDesc = (TextView) findViewById(R.id.txtSampleDescription); 
    txtTakenPicDesc = (TextView) findViewById(R.id.textView); 

    btnTakePicture.setOnClickListener(this); 
    imgTakePicture.setOnClickListener(this); 


} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult: this is resyult"); 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     launchMediaScanIntent(); 
     try { 
      processCameraPicture(); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Failed to load Image", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

private void launchMediaScanIntent() { 
    Log.d(TAG, "launchMediaScanIntent: "); 
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    mediaScanIntent.setData(imageUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

private void startCamera() { 
    Log.d(TAG, "startCamera: "); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    Log.d(TAG, "startCamera: 2"); 
    File photo = new File(Environment.getExternalStorageDirectory(), "/videoDIARY/ReferencePic/photo.jpg"); 

    imageUri = Uri.fromFile(photo); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 

    startActivityForResult(intent, CAMERA_REQUEST); 

} 

EDIT:これはすべて、デバイスの向きに関するものです。ポートレートモードの一部のデバイスでのみ、ランドスケープモードのすべてのデバイスで正常に動作します。まだ解決しようとしている、私は修正するときに更新されます!

+0

電話機の違いは何ですか? Perfomance、Androidのバージョンなど? –

+0

@ MaximTsybanov、それは私のMoto G5 Plus、andoridバージョン7.0で動作します。HTC 6.0では動作しますが、5.0,5.1,6.0、6.1の混在ではSamsungやLgでは動作しません。私はそれが彼らの携帯電話でレギュラーカメラアプリケーションで同じことを気づいたので、それは携帯電話の顔の検出やGoogle Playのビジョンに関連しているようです。 –

答えて

0

顔検出ではなく、AndroidがCamera Intent Imagesを保存する方法とは関係ありません。基本的には、向きが混乱するので、幅と高さを確認して正しいかどうかを確認し、そうでない場合は回転させる必要があります。ここに私がチェックした方法があります:

private Bitmap decodeBitmapUri(Context ctx, Uri uri) throws FileNotFoundException { 
    Log.d(TAG, "decodeBitmapUri: "); 
    //Toast.makeText(this, "1o" , Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "initViews1: face detector is ============================ " + detector.isOperational()); 
    int targetW = 300; 
    int targetH = 300; 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    bmOptions.inPreferredConfig=Bitmap.Config.RGB_565; 
    BitmapFactory.decodeStream(ctx.getContentResolver().openInputStream(uri), null, bmOptions); 
    android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_FRONT, info); 
    int rotation = this.getWindowManager().getDefaultDisplay().getRotation(); 
    int orientation = this.getResources().getConfiguration().orientation; 
    Log.d(TAG, "decodeBitmapUri: OREINTATION is ==================== " + orientation); 

    Log.d(TAG, "decodeBitmapUri: CAMERA ROTATION ========================= " + rotation); 
    //Camera.Size size = android.hardware.Camera.get 


    int photoW = bmOptions.outWidth; 
    Log.d(TAG, "decodeBitmapUri: width: " + photoW); 
    int photoH = bmOptions.outHeight; 
    Log.d(TAG, "decodeBitmapUri: height: " + photoH); 
    Log.d(TAG, "decodeBitmapUri: 4"); 
    //Toast.makeText(this, "11" , Toast.LENGTH_LONG).show(); 

    int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 

    /*this is because some phones default a camera Intent to landscape no matter how the phone is held 
    * so we check for camera orienatation, then check to see if width is greater than height 
    * */ 

    if(orientation == 1 && (photoW > photoH)){ 
     return rotate(BitmapFactory.decodeStream(ctx.getContentResolver() 
       .openInputStream(uri), null, bmOptions)); 
    } 


    return BitmapFactory.decodeStream(ctx.getContentResolver() 
      .openInputStream(uri), null, bmOptions); 
} 

public static Bitmap rotate(Bitmap bitmap){ 
    int w = bitmap.getWidth(); 
    int h = bitmap.getHeight(); 

    Matrix mtx = new Matrix(); 
    mtx.postRotate(270); 

    return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true); 
} 
関連する問題