顔検出にgoogle cloud vision API
を使用しているAndroidアプリケーションを作成しようとしています。私はthisチュートリアルに従っています。仮想メソッド「com.google.api.servicesを呼び出すためにGoogle Cloud Vision APIにヌルオブジェクト参照が表示されます
試み:問題は、私は、私はボタンをクリックした後、画面上に表示されるようになっていたが、
toast message
logcat
ショーを生成することができません、ということです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
と設定しようとしましたが、どれも動作しません。
誰もがこれで私を助けることができますか?