얼굴을 감지하기 위해 google cloud vision API
을 사용하고있는 Android 애플리케이션을 구축하려고합니다. 자습서는 this입니다. 가상 방법 'com.google.api.services를 호출 할Google Cloud Vision API에 null 객체 참조가 표시됨
시도 : 문제는 내가 버튼을 클릭 한 후 화면에 표시하기로했다
toast message
하지만logcat
쇼를 생성 할 수없는 나는,이다MainActivity.java : 널 객체 참조 여기
에 .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());
}
}
});
}
}
그림은 /res/raw
위치에 crewf.jpg
으로 저장됩니다. 유형을 LABEL_DETECTION
, TEXT_DETECTION
, LANDMARK_DETECTION
으로 설정하려고 시도했지만 아무 것도 작동하지 않습니다.
누구든지 나를 도와 줄 수 있습니까?