尝试在android java中获取aws比较人脸时出现未知错误

问题描述

我正在尝试使用 AWS Rekognition 比较两个图像,但我不断收到此未知错误。我在这里阅读了很多文档和问题,但没有能够解决问题。 我的代码

Float similarityThreshold = 70F;

        AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY,SECRET_KEY);
        AmazonRekognition rekognitionClient = new AmazonRekognitionClient(credentials);
        rekognitionClient.setRegion(Region.getRegion(Regions.US_EAST_2));

        CompareFacesRequest compareFacesRequest = new CompareFacesRequest()
                .withSourceImage(new Image().withS3Object(new S3Object().withName("image2.jpg").withBucket("***")))
                .withTargetimage(new Image().withS3Object(new S3Object().withName("image1.jpg").withBucket("***")));

        CompareFacesResult compareFacesResult = rekognitionClient.compareFaces(compareFacesRequest);

        List <CompareFacesMatch> faceDetails =
                compareFacesResult.getFaceMatches();
        for (CompareFacesMatch match: faceDetails){
            ComparedFace face= match.getFace();
            BoundingBox position = face.getBoundingBox();
            Log.i("compare","Face at " + position.getLeft().toString()
                    + " " + position.getTop()
                    + " matches with " + match.getSimilarity().toString()
                    + "% confidence.");
        }
        List<ComparedFace> uncompared = compareFacesResult.getUnmatchedFaces();
        Log.i("compare","There was " + uncompared.size()
                + " face(s) that did not match");

这是我的日志 记录点以比较人脸代码行 CompareFacesResult compareFacesResult = rekognitionClient.compareFaces(compareFacesRequest);

2021-07-18 01:39:33.988 16963-16963/... E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.*****e,PID: 16963
android.os.networkonmainthreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
    at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)
    at java.net.InetAddress.getAllByName(InetAddress.java:1154)
    at com.android.okhttp.Dns$1.lookup(Dns.java:39)
    at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
    at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
    at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getoutputStream(HttpURLConnectionImpl.java:258)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getoutputStream(DelegatingHttpsURLConnection.java:218)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getoutputStream(HttpsURLConnectionImpl.java:26)
    at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:162)
    at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:75)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:386)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:229)
    at com.amazonaws.services.rekognition.AmazonRekognitionClient.invoke(AmazonRekognitionClient.java:4521)
    at com.amazonaws.services.rekognition.AmazonRekognitionClient.compareFaces(AmazonRekognitionClient.java:487)
    at com.****.registration_screens.SubmitPhoto.lambda$onCreate$0(SubmitPhoto.java:103)
    at com.***.registration_screens.-$$Lambda$SubmitPhoto$lt0KUIz3Dr33aAQ8zZJQHwtPE-w.onClick(UnkNown Source:0)
    at android.view.View.performClick(View.java:6608)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
    at android.view.View.performClickInternal(View.java:6585)
    at android.view.View.access$3100(View.java:785)
    at android.view.View$PerformClick.run(View.java:25921)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6864)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

解决方法

这似乎是与 Android 相关的错误(与 Rekognition 无关)。 Android 要求用户在主线程之外执行网络操作(在本例中,调用 Rekognition API),如下所述:

How to fix 'android.os.NetworkOnMainThreadException'?