private void processTask(Message message) { String path = message.getBody(); PathSplit pathComp = new PathSplit(path); String bucket = pathComp.bucket; String key = pathComp.key; Logger.Info("Processing %s %s", bucket, key); // Rekognition: Detect Labels from S3 object DetectLabelsRequest req = new DetectLabelsRequest() .withImage(new Image().withS3Object(new S3Object().withBucket(bucket).withName(key))) .withMinConfidence(minConfidence); DetectLabelsResult result; result = rek.detectLabels(req); List<Label> labels = result.getLabels(); Logger.Debug("In %s, found: %s", key, labels); // Process downstream actions: for (LabelProcessor processor : processors) { processor.process(labels, path); } }
@Override public Parameters handleRequest(Parameters parameters, Context context) { context.getLogger().log("Input Function [" + context.getFunctionName() + "], Parameters [" + parameters + "]"); // Create Rekognition client using the parameters available form the runtime context AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); // Create a Rekognition request DetectLabelsRequest request = new DetectLabelsRequest().withImage(new Image() .withS3Object(new S3Object().withName(parameters.getS3key()) .withBucket(parameters.getS3Bucket()))); // Call the Rekognition Service DetectLabelsResult result = rekognitionClient.detectLabels(request); // Transfer labels and confidence scores over to Parameter POJO for (Label label : result.getLabels()) { parameters.getRekognitionLabels().put(label.getName(), label.getConfidence()); } context.getLogger().log("Output Function [" + context.getFunctionName() + "], Parameters [" + parameters + "]"); // Return the result (will be serialised to JSON) return parameters; }
@Override public void process(List<Label> labels, String path) { LabelInsertDoc doc = new LabelInsertDoc(labels, path); Logger.Debug("Json to push: \n%s", doc.asJson()); byte[] jsonBytes = doc.asJsonBytes(); UploadDocumentsRequest pushDoc = getUploadReq(jsonBytes); UploadDocumentsResult upRes = searchClient.uploadDocuments(pushDoc); Logger.Debug("Indexed %s, %s", path, upRes.getStatus()); }
public LabelContent(List<Label> rekLabels, String imgPath) { path = imgPath; labels = new ArrayList<>(rekLabels.size()); confidence = new ArrayList<>(rekLabels.size()); for (Label label : rekLabels) { labels.add(label.getName()); confidence.add(label.getConfidence().intValue()); // decimal precision not required } }
@Override public void process(List<Label> labels, String imgPath) { String id = idHash.hashString(imgPath, charset).toString(); Item item = new Item() .withPrimaryKey("id", id) .withString("path", imgPath) .withList("labels", labels.stream().map(DynamoWriter::labelToFields).collect(Collectors.toList())); table.putItem(item); }
@Override public void process(List<Label> labels, String path) { Processor.PathSplit components = new Processor.PathSplit(path); String bucket = components.bucket; String key = components.key; // fetch the current set GetObjectTaggingResult tagging = s3.getObjectTagging(new GetObjectTaggingRequest(bucket, key)); List<Tag> origTags = tagging.getTagSet(); List<Tag> updateTags = new ArrayList<>(); // copy the existing tags, but drop the ones matched by prefix (∴ leaves non-Rekognition label tags alone) for (Tag tag : origTags) { if (!tag.getKey().startsWith(tagPrefix)) updateTags.add(tag); } // add the new ones for (Label label : labels) { if (updateTags.size() < maxTags) updateTags.add(new Tag(tagPrefix + label.getName(), label.getConfidence().toString())); else break; } // save it back s3.setObjectTagging(new SetObjectTaggingRequest(bucket, key, new ObjectTagging(updateTags))); }
/** * returns label from file * * @param filename * @return * @throws FileNotFoundException * @throws IOException * @throws URISyntaxException */ public List<Label> getLabels(String path) throws FileNotFoundException, IOException, URISyntaxException { if (path == null) { return getLabels(); } InputStream inputStream = null; if (path.contains("://")) { inputStream = new URL(path).openStream(); } else { inputStream = new FileInputStream(path); } return getLabels(inputStream); }
/** * Hopefully, Label is serializable, otherwise it needs to return a list of * POJOs. * * @return */ public List<Label> getLabels(ByteBuffer imageBytes) { AmazonRekognition client = getClient(); DetectLabelsRequest request = new DetectLabelsRequest().withImage(new Image().withBytes(imageBytes)).withMaxLabels(maxLabels).withMinConfidence(minConfidence); DetectLabelsResult result = client.detectLabels(request); List<Label> labels = result.getLabels(); lastImage = imageBytes; lastLabels = labels; return labels; }
public static void main(String[] args) throws Exception { Rekognition recog = (Rekognition) Runtime.start("recog", "Rekognition"); /* * OpenCV opencv = (OpenCV) Runtime.start("opencv", "OpenCV"); * opencv.capture(); * * sleep(1000); String photo = opencv.recordSingleFrame(); * * * System.out.println("Detected labels for " + photo); */ // set your credentials once - then comment out this line and remove the // sensitive info // the credentials will be saved to .myrobotlab/store // recog.setCredentials("XXXXXXXXXXXXXXXX", // "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); recog.loadCredentials(); List<Label> labels = null; // labels = recog.getLabels("opencv.input.48.jpg"); labels = recog.getLabels("http://animals.sandiegozoo.org/sites/default/files/2016-08/hero_zebra_animals.jpg"); for (Label label : labels) { System.out.println(label.getName() + ": " + label.getConfidence().toString()); } }
public LabelInsertDoc(List<Label> labels, String imgPath) { id = idHash.hashString(imgPath, charset).toString(); fields = new LabelContent(labels, imgPath); }
private static Map<String, Object> labelToFields(Label label) { HashMap<String, Object> map = new HashMap<>(); map.put("name", label.getName()); map.put("confidence", label.getConfidence()); return map; }
public List<Label> getLabels() { return getLabels(lastImage); }
/** * * @param file * - image file * @throws IOException * @throws FileNotFoundException */ public List<Label> getLabels(InputStream inputStream) throws FileNotFoundException, IOException { ByteBuffer imageBytes; imageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream)); return getLabels(imageBytes); }
public void process(List<Label>labels, String path);