use of com.amplifyframework.predictions.PredictionsException in project amplify-android by aws-amplify.
the class AWSRekognitionService method detectEntityMatches.
private List<EntityMatch> detectEntityMatches(ByteBuffer imageData, int maxEntities, String collectionId) throws PredictionsException {
SearchFacesByImageRequest request = new SearchFacesByImageRequest().withImage(new Image().withBytes(imageData)).withMaxFaces(maxEntities).withCollectionId(collectionId);
// Detect entities in the given image by matching against a collection of images
final SearchFacesByImageResult result;
try {
result = rekognition.searchFacesByImage(request);
} catch (AmazonClientException serviceException) {
throw new PredictionsException("Amazon Rekognition encountered an error while searching for known faces.", serviceException, "See attached service exception for more details.");
}
List<EntityMatch> matches = new ArrayList<>();
for (FaceMatch rekognitionMatch : result.getFaceMatches()) {
Face face = rekognitionMatch.getFace();
RectF box = RekognitionResultTransformers.fromBoundingBox(face.getBoundingBox());
EntityMatch amplifyMatch = EntityMatch.builder().externalImageId(face.getExternalImageId()).confidence(rekognitionMatch.getSimilarity()).box(box).build();
matches.add(amplifyMatch);
}
return matches;
}
use of com.amplifyframework.predictions.PredictionsException in project amplify-android by aws-amplify.
the class AWSRekognitionService method recognizeCelebrities.
void recognizeCelebrities(@NonNull ByteBuffer imageData, @NonNull Consumer<IdentifyResult> onSuccess, @NonNull Consumer<PredictionsException> onError) {
final IdentifyEntitiesConfiguration config;
try {
config = pluginConfiguration.getIdentifyEntitiesConfiguration();
if (config.isCelebrityDetectionEnabled()) {
List<CelebrityDetails> celebrities = detectCelebrities(imageData);
onSuccess.accept(IdentifyCelebritiesResult.fromCelebrities(celebrities));
} else {
onError.accept(new PredictionsException("Celebrity detection is disabled.", "Please enable celebrity detection via Amplify CLI. This feature " + "should be accessible by running `amplify update predictions` " + "in the console and updating entities detection resource with " + "advanced configuration setting."));
}
} catch (PredictionsException exception) {
onError.accept(exception);
}
}
use of com.amplifyframework.predictions.PredictionsException in project amplify-android by aws-amplify.
the class AWSRekognitionService method detectCelebrities.
private List<CelebrityDetails> detectCelebrities(ByteBuffer imageData) throws PredictionsException {
RecognizeCelebritiesRequest request = new RecognizeCelebritiesRequest().withImage(new Image().withBytes(imageData));
// Recognize celebrities in the given image via Amazon Rekognition
final RecognizeCelebritiesResult result;
try {
result = rekognition.recognizeCelebrities(request);
} catch (AmazonClientException serviceException) {
throw new PredictionsException("Amazon Rekognition encountered an error while recognizing celebrities.", serviceException, "See attached service exception for more details.");
}
List<CelebrityDetails> celebrities = new ArrayList<>();
for (com.amazonaws.services.rekognition.model.Celebrity rekognitionCelebrity : result.getCelebrityFaces()) {
Celebrity amplifyCelebrity = Celebrity.builder().id(rekognitionCelebrity.getId()).value(rekognitionCelebrity.getName()).confidence(rekognitionCelebrity.getMatchConfidence()).build();
// Get face-specific celebrity details from the result
ComparedFace face = rekognitionCelebrity.getFace();
RectF box = RekognitionResultTransformers.fromBoundingBox(face.getBoundingBox());
Pose pose = RekognitionResultTransformers.fromRekognitionPose(face.getPose());
List<Landmark> landmarks = RekognitionResultTransformers.fromLandmarks(face.getLandmarks());
// Get URL links that are relevant to celebrities
List<URL> urls = new ArrayList<>();
for (String url : rekognitionCelebrity.getUrls()) {
try {
urls.add(new URL(url));
} catch (MalformedURLException badUrl) {
// Ignore bad URL
}
}
CelebrityDetails details = CelebrityDetails.builder().celebrity(amplifyCelebrity).box(box).pose(pose).landmarks(landmarks).urls(urls).build();
celebrities.add(details);
}
return celebrities;
}
use of com.amplifyframework.predictions.PredictionsException in project amplify-android by aws-amplify.
the class AWSRekognitionService method detectEntities.
private List<EntityDetails> detectEntities(ByteBuffer imageData) throws PredictionsException {
DetectFacesRequest request = new DetectFacesRequest().withImage(new Image().withBytes(imageData)).withAttributes(Attribute.ALL.toString());
// Detect entities in the given image via Amazon Rekognition
final DetectFacesResult result;
try {
result = rekognition.detectFaces(request);
} catch (AmazonClientException serviceException) {
throw new PredictionsException("Amazon Rekognition encountered an error while detecting faces.", serviceException, "See attached service exception for more details.");
}
List<EntityDetails> entities = new ArrayList<>();
for (FaceDetail face : result.getFaceDetails()) {
// Extract details from face detection
RectF box = RekognitionResultTransformers.fromBoundingBox(face.getBoundingBox());
AgeRange ageRange = RekognitionResultTransformers.fromRekognitionAgeRange(face.getAgeRange());
Pose pose = RekognitionResultTransformers.fromRekognitionPose(face.getPose());
List<Landmark> landmarks = RekognitionResultTransformers.fromLandmarks(face.getLandmarks());
List<BinaryFeature> features = RekognitionResultTransformers.fromFaceDetail(face);
// Gender detection
com.amazonaws.services.rekognition.model.Gender rekognitionGender = face.getGender();
Gender amplifyGender = Gender.builder().value(GenderBinaryTypeAdapter.fromRekognition(rekognitionGender.getValue())).confidence(rekognitionGender.getConfidence()).build();
// Emotion detection
List<Emotion> emotions = new ArrayList<>();
for (com.amazonaws.services.rekognition.model.Emotion rekognitionEmotion : face.getEmotions()) {
EmotionType emotion = EmotionTypeAdapter.fromRekognition(rekognitionEmotion.getType());
Emotion amplifyEmotion = Emotion.builder().value(emotion).confidence(rekognitionEmotion.getConfidence()).build();
emotions.add(amplifyEmotion);
}
Collections.sort(emotions, Collections.reverseOrder());
EntityDetails entity = EntityDetails.builder().box(box).ageRange(ageRange).pose(pose).gender(amplifyGender).landmarks(landmarks).emotions(emotions).features(features).build();
entities.add(entity);
}
return entities;
}
use of com.amplifyframework.predictions.PredictionsException in project amplify-android by aws-amplify.
the class TextClassificationDictionary method loadDictionaryFile.
// This code comes from the official TensorFlow Lite sample app
// https://github.com/tensorflow/examples/tree/master/lite/examples/text_classification/android
private void loadDictionaryFile() throws PredictionsException {
try (InputStream inputStream = assets.open(DICTIONARY_PATH);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
// First column is a word, and the second is the index of this word.
while (reader.ready()) {
List<String> line = Arrays.asList(reader.readLine().split(" "));
if (line.size() < 2) {
continue;
}
dictionary.put(line.get(0), Integer.parseInt(line.get(1)));
}
} catch (IOException exception) {
throw new PredictionsException("Error encountered while loading dictionary.", exception, "Verify that " + DICTIONARY_PATH + " is present inside the assets directory.");
} catch (IllegalArgumentException exception) {
throw new PredictionsException("Loaded dictionary does not contain required keywords.", exception, "Verify the validity of the dictionary asset.");
}
// Make sure that the reserved words are there
final String message;
if (dictionary.get(PAD) == null) {
message = "Reserved word for padding \"<PAD>\" not found.";
} else if (dictionary.get(START) == null) {
message = "Reserved word for start indicator \"<START>\" not found.";
} else if (dictionary.get(UNKNOWN) == null) {
message = "Reserved word for unknown word \"<UNKNOWN>\" not found.";
} else {
return;
}
throw new PredictionsException(message, "Verify the validity of the dictionary asset.");
}
Aggregations