2017-12-30 41 views
0

顔検出にgoogle cloud vision APIを使用しているAndroidアプリケーションを作成しようとしています。私はthisチュートリアルに従っています。仮想メソッド「com.google.api.servicesを呼び出すためにGoogle Cloud Vision APIにヌルオブジェクト参照が表示されます

試み:問題は、私は、私はボタンをクリックした後、画面上に表示されるようになっていたが、toast messagelogcatショーを生成することができません、ということです

MainActivity.java:nullのオブジェクト参照ここで

上.vision.v1.Vision $画像のcom.google.api.services.vision.v1.Vision.imagesは()」コードです

public class MainActivity extends AppCompatActivity { 

private Button upload_button; 
private ImageView image_capture; 
final int CAMERA_PIC_REQUEST = 100; 

private Vision vision; 

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

    upload_button = (Button) findViewById(R.id.uploadb); 
    image_capture=(ImageView)findViewById(R.id.capturedImage); 

    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{android.Manifest.permission.CAMERA}, 
        5); 
     } 
    } 

    Vision.Builder visionBuilder = new Vision.Builder(
      new NetHttpTransport(), 
      new AndroidJsonFactory(), 
      null); 

    visionBuilder.setVisionRequestInitializer(
      new VisionRequestInitializer("AIzaSyAueQjrrY_GiXh7kNGlbDLKWhYP-4q77vI")); 
    Vision vision = visionBuilder.build(); 

    upload_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      /*Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);*/ 
      imageDectection(); 
     } 
    }); 
} 

private void imageDectection() { 
    AsyncTask.execute(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       InputStream inputStream = getResources().openRawResource(R.raw.crewf); 
       byte[] photoData = IOUtils.toByteArray(inputStream); 

       Image inputImage = new Image(); 
       inputImage.encodeContent(photoData); 

       Feature desiredFeature = new Feature(); 
       desiredFeature.setType("FACE_DETECTION"); 

       AnnotateImageRequest request = new AnnotateImageRequest(); 
       request.setImage(inputImage); 
       request.setFeatures(Arrays.asList(desiredFeature)); 

       BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest(); 
       batchRequest.setRequests(Arrays.asList(request)); 

       BatchAnnotateImagesResponse batchResponse = 
         vision.images().annotate(batchRequest).execute(); 

       List<FaceAnnotation> faces = batchResponse.getResponses() 
         .get(0).getFaceAnnotations(); 

       int numberOfFaces = faces.size(); 

       String likelihoods = ""; 
       for(int i=0; i<numberOfFaces; i++) { 
        likelihoods += "\n It is " + 
          faces.get(i).getJoyLikelihood() + 
          " that face " + i + " is happy"; 
       } 

       final String message = 
         "This photo has " + numberOfFaces + " faces" + likelihoods; 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           message, Toast.LENGTH_LONG).show(); 
        } 
       }); 

      } catch(Exception e) { 
       Log.d("ERROR", e.getMessage()); 
      } 
     } 
    }); 
} 
} 

画像はの位置にcrewf.jpgとして格納されています。私はタイプをLABEL_DETECTION,TEXT_DETECTION,LANDMARK_DETECTIONと設定しようとしましたが、どれも動作しません。

誰もがこれで私を助けることができますか?

答えて

0

Visionオブジェクトを初期化していません。

次の2つのクラス変数を宣言する必要があります。その後

vision = visionBuilder.build(); 

を、あなたが移動する準備が整いました:オブジェクトを構築するのonCreateに続いて

​​

を。

問題がまだメールで届いている場合は、コードを確認する手助けをすることができます。

関連する問題