簡體   English   中英

作為AWS Rekognize在Android上的一部分,CompareFacesRequest發生錯誤

[英]Error on CompareFacesRequest as part of AWS's Rekognize on Android

如果問題措辭不當,我深感抱歉,我不會經常在這里發帖。

我在使用Android應用程序上的Amazon Web Services發起匹配2張不同圖片中的2張面孔的請求時遇到了困難。 我的代碼如下:

    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(), // Context
                "xxxxxxx", // Identity Pool ID
                Regions.US_EAST_1 // Region
        );

    AmazonRekognitionClient client = new AmazonRekognitionClient(credentialsProvider);

    ByteBuffer buffer = ByteBuffer.allocate(croppedBitmap.getByteCount()); //Create a new buffer
        croppedBitmap.copyPixelsToBuffer(buffer); //Move the byte data to the buffer

try {
    //get first image from phone
    File dhruv = new File("/sdcard/temp/dhruv.jpg");
    InputStream inputStream = new 
    FileInputStream(dhruv.getAbsolutePath().toString());

    //convert to ByteBuffer
    ByteBuffer byteBuffer = 
    ByteBuffer.wrap(IOUtils.toByteArray(inputStream));
    Log.d("lol", Arrays.toString(byteBuffer.array()));

    Image image = new Image();
    Image image2 = new Image();
    image.withBytes(buffer);
    image2.withBytes(byteBuffer);

    CompareFacesRequest compare = new CompareFacesRequest();
    compare.withSourceImage(image);
    compare.withTargetImage(image2);

    CompareFacesResult result = client.compareFaces(compare);
    result.getFaceMatches();
} catch(...) {} // catched the error

我得到的錯誤是這樣的:

3247/com.busradeniz.detection D/lol: 1 validation error detected: Value 
'java.nio.HeapByteBuffer[pos=0 lim=0 cap=0]' at 'sourceImage.bytes' failed 
to satisfy constraint: Member must have length greater than or equal to 1 
(Service: AmazonRekognition; Status Code: 400; Error Code: 
ValidationException; Request ID: a0489079-2c17-11e8-b8b8-23c9eaea153d)

我的代碼中正在發生的事情是,我正在轉換從我在android上的文件路徑中拍攝的圖像(已確認是正確的)並將其轉換為ByteBuffer,這樣我就可以將其使用withBytes傳遞給AWS創建的Image對象。 除了將BitMap轉換為ByteBuffer外,我對另一個ByteBuffer進行了相同的操作(代碼中未顯示)。 通過調試,我記錄了下來,發現這兩個ByteBuffer都是非空的且功能齊全。 我也已經嘗試過在CompareFacesRequest構造函數中傳遞圖像,而不是使用withSource和withTarget圖像方法。 我也嘗試過在兩個Image對象上調用getBytes,以查看ByteBuffers是否確實通過了。

該錯誤提示我正在將2個空Image對象與請求一起傳遞,因此它表示必須在Image對象中傳遞一個或多個字節。 但我不確定情況是否如此。 我無法終生弄清楚為什么會發生這種情況,它似乎在其他地方都起作用。 如果有人可以幫助我並確定答案,我將非常感激?

非常感謝Dhruv

當您在帖子中提到將位圖轉換為字節緩沖區時,源圖像是否為“ .bmp”文件? 您是否也可以共享該代碼以幫助調試問題?

請注意,Rekognition僅支持PNG和JPEG文件格式(請參閱https://docs.aws.amazon.com/rekognition/latest/dg/limits.html )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM