我想用AWS Android SDK Reckognition 2.4.4做一個簡單的人臉檢測調用。有人能指出發生了什麼問題嗎?AWS Android SDK Rekognition 2.4.4 detectFaces失敗,空對象引用
我正在以下錯誤
致命異常:主 工藝:com.indus.myfirstapp,PID:8887 了java.lang.RuntimeException:失敗遞送結果ResultInfo {誰= NULL,請求= 1, result = -1,data = Intent {act = inline-data(has extras)}} to activity {com.indus.myfirstapp/com.indus.myfirstapp.MainActivity}:android.os.NetworkOnMainThreadException at android.app.ActivityThread .deliverResults(ActivityThread.java:3929) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3972) at android.app。在Android.app.ActivityThread中使用ActivityThread.-wrap16(ActivityThread.java) $ hHandleMessage(ActivityThread.java:1537) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper .loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5728) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os。 ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 引起:android.os.NetworkOnMainThreadException at android.os.StrictMode $ An droidBlockGuardPolicy.onNetwork(StrictMode.java:1288) at java.net.InetAddress.lookupHostByName(InetAddress.java:432) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:253) at java.net.InetAddress。 getAllByName(InetAddress.java:215) at com.android.okhttp.internal.Network $ 1.resolveInetAddresses(Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188 ) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) at com.android .okh ttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:368) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:351) at com.android.okhttp.internal.http。 HttpEngine.connect(HttpEngine.java:341) 在com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:259) 在com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl。的java:454) 在com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 在com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245) 在com.android.okhttp.internal.huc.Delega tingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) 在com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java) 在com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:162) 在com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:75) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:371) at com.amazonaws.http.AmazonHttpClient。執行(AmazonHttpClient.java:212) 在com.amazonaws.services.rekognition.AmazonRekognitionClient.invoke(AmazonRekognitionClient.java:1229) 在com.amazonaws.services.rekognition.AmazonRekognitionClient.detectFaces(AmazonRekognitionClient.java:628) 在com.indus.myfirstapp.MainActivity.onActivityResult(MainActivity.java:95) at android.app.Activity.dispatchActivityResult(Activity.java:6500) at android.app.ActivityThread.deliverResults(ActivityThread.java:3925) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3972) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread $ h.handleMessage(ActivityThread.java:1537) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5728) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789 ) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
下面是代碼
package com.indus.myfirstapp;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.rekognition.AmazonRekognition;
import com.amazonaws.services.rekognition.AmazonRekognitionClient;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.rekognition.model.Attribute;
import com.amazonaws.services.rekognition.model.DetectFacesRequest;
import com.amazonaws.services.rekognition.model.DetectFacesResult;
import com.amazonaws.services.rekognition.model.Image;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.ByteBuffer;
public class MainActivity extends AppCompatActivity {
//public static final String EXTRA_MESSAGE = "com.indus.myfirstapp.MESSAGE";
static final int REQUEST_IMAGE_CAPTURE = 1;
static AmazonRekognition client = null;
Image searchImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//call
new CredRetriever().execute();
}
class CredRetriever extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
AWSCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"us-west-2:xxxxx", // Identity pool ID
Regions.US_WEST_2 // Region
);
Log.i("TEST",credentialsProvider.getCredentials().toString());
client = new AmazonRekognitionClient(credentialsProvider);
return null;
}
}
public void startCamera(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
ByteBuffer imageBytes = ByteBuffer.wrap(stream.toByteArray());
searchImage = new Image();
searchImage.withBytes(imageBytes);
ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(imageBitmap);
DetectFacesRequest request = new DetectFacesRequest()
.withAttributes(Attribute.ALL.toString())
.withImage(searchImage);
DetectFacesResult result = client.detectFaces(request);
result.getFaceDetails();
}
}
}
謝謝。我能夠使用線程來運行這個。 – ez2k1