私の質問が適切に表現されていない場合は申し訳ありませんが、ここにはあまり投稿しません。
Android アプリケーションでアマゾン ウェブ サービスを使用して、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 オブジェクトを渡すことができるようにしています。別の ByteBuffer に対しても同じことを行いましたが、代わりに BitMap を ByteBuffer に変換しました (これはコードには示されていません)。デバッグを通じてログに記録したところ、両方の ByteBuffers が空ではなく、完全に機能していることがわかりました。withSource および withTarget イメージ メソッドを使用する代わりに、CompareFacesRequest コンストラクターでイメージを渡すことも既に試みました。また、両方の Image オブジェクトで getBytes を呼び出して、ByteBuffers が実際に通過したかどうかを確認してみました。
このエラーは、リクエストで 2 つの空の Image オブジェクトを渡していることを示唆しているため、Image オブジェクトに渡すには 1 つ以上のバイトが必要であると示されています。しかし、これが事実であるかどうかはわかりません。なぜこれが起こっているのか、私の人生では理解できません。他の場所でも機能するようです。誰かが私を助けて答えを決めることができれば本当に感謝しています??
どうもありがとう、Dhruv