Как я могу обнаружить Faces в Amazon Rekognition AWS с Android Studio?
Я пробовал так много, но не могу добиться успеха. Я не нашел никаких примеров исходного кода для Android(о повторном распознавании)
в Руководстве для разработчиков есть исходный код на JAVA, но я не могу реализовать это, хотя я пробовал TT
Я пытаюсь распознать лица, отправив файл изображения из внешнего хранилища (из эмулятора). Я не знаю, что я сделал неправильно (я плохо умею кодировать). Вот мой код
AmazonRekognitionClient amazonRekognitionClient;
Image getAmazonRekognitionImage;
DetectFacesRequest detectFaceRequest;
DetectFacesResult detectFaceResult;
File file = new File(Environment.getExternalStorageDirectory(),"sungyeol.jpg.jpg");
public void test_00(View view) {
ByteBuffer imageBytes;
try{
InputStream inputStream = new FileInputStream(file.getAbsolutePath().toString());
imageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream));
Log.e("InputStream: ",""+inputStream);
Log.e("imageBytes: ","");
getAmazonRekognitionImage.withBytes(imageBytes);
// Initialize the Amazon Cognito credentials provider
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"us-east-2:.......", // Identity Pool ID
Regions.US_EAST_2 // Region
);
//I want "ALL" attributes
amazonRekognitionClient = new AmazonRekognitionClient(credentialsProvider);
detectFaceRequest = new DetectFacesRequest()
.withAttributes(Attribute.ALL.toString())
.withImage(getAmazonRekognitionImage);
detectFaceResult = amazonRekognitionClient.detectFaces(detectFaceRequest);
detectFaceResult.getFaceDetails();
}
catch(Exception ex){
Log.e("Error on something:","Message:"+ex.getMessage());
}
и вот мои ошибки
02-04 09:30:07.268 29405-29405/? E/InputStream:: java.io.FileInputStream@a9b23e7
02-04 09:30:07.271 29405-29405/? E/Error on something:: Message:Attempt to invoke virtual method 'com.amazonaws.services.rekognition.model.Image com.amazonaws.services.rekognition.model.Image.withBytes(java.nio.ByteBuffer)' on a null object reference
что такое нулевая ссылка на объект? я пытаюсь изменить путь к файлу, но он сказал, что нет такого файла... и когда я перехожу на этот путь, есть ошибки выше. кстати я уже спрашивал у пользователя разрешение на доступ к папке из эмулятора в Android
пожалуйста, помогите мне PS. Извините за мой плохой английский
Заранее спасибо.
1 ответ
Теперь я в порядке с проблемами, которые я прошел через много вещей<3 <3 <3 Спасибо
Я тайский, и мне пришлось больше постараться, чтобы найти решения, потому что не хватает информации на конкретном языке, но вот мои решения.
Мои решения:
0. Есть конечная точка для настройки для Rekognition -> http://docs.aws.amazon.com/general/latest/gr/rande.html
1.В связи с "проблемой ссылки на нулевой объект" я обнаружил, что сначала мне нужно создать новый объект, например "Image image = new Image ();" <- "новая" команда создает экземпляр объекта в этом классе
2.После вышеуказанной ошибки появляются другие ошибки (ошибки в NetworkOnMainThreadException), поэтому я пробовал все, пока не нашел эту страницу -> https://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html на странице сказано, что...
следовательно, я искал дополнительную информацию об AsyncTask, и после этого я создал класс AsyncTask, а затем переместил весь свой код об инициализации, запросе, ответе на класс AsyncTask. Code รันตอนท้ายๆน้ำตาจิไหล мой код сработал... TT и, по заключению, файл sungyeol.jpg.jpg сработал
например
private void testTask(){
.... all code in the main thread particularly on the requests and responses
from the services
//print the response or the result
//Log.e() makes the message in the android monitor red like an error
Log.e("Response:", [responseparameter.toString()]);
}
//create the inherited class from the AsyncTask Class
//(you can create within your activity class)
class AsyncTaskRunner extends AsyncTask<String,String,String>{
@Override
public String doInBackground(String ... input){
testTask(); // call the testTask() method that i have created
return null; // this override method must return String
}
}
//I've created a button for running the task
public void buttonTask(View view){
AsyncTaskRunner runner = new AsyncTaskRunner();
runner.execute();
}
Для получения дополнительной информации об AsyncTask:
https://developer.android.com/training/basics/network-ops/connecting.html
http://www.compiletimeerror.com/2013/01/why-and-how-to-use-asynctask.html
Я надеюсь, что это поможет:)