/** * This is just a convenience function. * It's equivalent to {@code ClarifaiInput.forInputValue(ClarifaiImage.of(imageBytes))}. * @param imageBytes the image to represent * @return a {@link ClarifaiInput} that represents the given image */ @NotNull public static ClarifaiInput forImage(@NotNull byte[] imageBytes) { return ClarifaiInput.forInputValue(ClarifaiImage.of(imageBytes)); }
@NotNull abstract public ImageOuterClass.Image serialize(boolean allowDuplicateUrl);
public static ClarifaiInput deserialize(InputOuterClass.Input input) { final DataOuterClass.Data data = input.getData(); final List<Concept> concepts = new ArrayList<>(); for (ConceptOuterClass.Concept concept: data.getConceptsList()) { concepts.add(Concept.deserialize(concept)); } JsonObject metadata = MetadataConverter.structToJsonObject(data.getMetadata()); PointF geoPoint = null; if (data.hasGeo()) { GeoOuterClass.GeoPoint gp = data.getGeo().getGeoPoint(); geoPoint = PointF.at(gp.getLatitude(), gp.getLongitude()); } final List<Region> regions = new ArrayList<>(); for (DataOuterClass.Region region : data.getRegionsList()) { regions.add(Region.deserialize(region)); } return new AutoValue_ClarifaiInput( input.getId(), DateTimeConverter.timestampToDate(input.getCreatedAt()), data.hasVideo() ? ClarifaiVideo.deserialize(data.getVideo()) : ClarifaiImage.deserialize(data.getImage()), metadata, concepts, geoPoint, regions ); }
/** * This is just a convenience function. * It's equivalent to {@code ClarifaiInput.forInputValue(ClarifaiImage.of(imageURL))}. * @param imageURL the image to represent * @return a {@link ClarifaiInput} that represents the given image */ @NotNull public static ClarifaiInput forImage(@NotNull String imageURL) { return ClarifaiInput.forInputValue(ClarifaiImage.of(imageURL)); }
@NotNull @Override public Search.And serialize() { return Search.And.newBuilder().setInput( InputOuterClass.Input.newBuilder().setData(DataOuterClass.Data.newBuilder().setImage(this.image.serialize())) ).build(); }
/** * This is just a convenience function. * It's equivalent to {@code ClarifaiInput.forInputValue(ClarifaiImage.of(imageFile))}. * @param imageFile the image to represent * @return a {@link ClarifaiInput} that represents the given image */ @NotNull public static ClarifaiInput forImage(@NotNull File imageFile) { return ClarifaiInput.forInputValue(ClarifaiImage.of(imageFile)); }
@NotNull @Override public Search.And serialize() { return Search.And.newBuilder().setOutput( OutputOuterClass.Output.newBuilder().setInput( InputOuterClass.Input.newBuilder().setData(DataOuterClass.Data.newBuilder().setImage(image.serialize())) ) ).build(); }
/** * This is just a convenience function. * It's equivalent to {@code ClarifaiInput.forInputValue(ClarifaiImage.of(imageURL))}. * @param imageURL the image to represent * @return a {@link ClarifaiInput} that represents the given image */ @NotNull public static ClarifaiInput forImage(@NotNull URL imageURL) { return ClarifaiInput.forInputValue(ClarifaiImage.of(imageURL)); }
} else { ClarifaiImage image = (ClarifaiImage) inputValue(); dataBuilder.setImage(image.serialize(allowDuplicateURLs));
@NotNull public static ClarifaiURLImage of(@NotNull String imageURL) { final URL result; try { result = new URL(imageURL); } catch (MalformedURLException e) { throw new ClarifaiException("Could not parse URL " + imageURL, e); } return of(result); }
@NotNull public static ClarifaiFileImage of(@NotNull File imageFile) { return of(InternalUtil.read(imageFile)); }
@Nullable @Override public ClarifaiURLImage deserialize( @NotNull JsonElement json, @NotNull TypeToken<ClarifaiURLImage> type, @NotNull Gson gson) { final JsonObject root = InternalUtil.assertJsonIs(json, JsonObject.class); return ClarifaiImage.of(root.get("url").getAsString()) .withCrop(gson.fromJson(root.get("crop"), Crop.class)); } };
@Nullable @Override public ClarifaiFileImage deserialize( @NotNull JsonElement json, @NotNull TypeToken<ClarifaiFileImage> type, @NotNull Gson gson) { final JsonObject root = InternalUtil.assertJsonIs(json, JsonObject.class); String base64 = root.get("base64").getAsString(); byte[] bytes = ByteString.decodeBase64(base64).toByteArray(); return ClarifaiImage.of(bytes) .withCrop(gson.fromJson(root.get("crop"), Crop.class)); } };
public static ClarifaiFileImage deserializeInner(ImageOuterClass.Image imageResponse) { ClarifaiFileImage image = ClarifaiImage.of(imageResponse.getBase64().toByteArray()); if (!imageResponse.getCropList().isEmpty()) { image.withCrop(Crop.deserialize(imageResponse.getCropList())); } return image; }
@Override protected ClarifaiResponse<List<ClarifaiOutput<Concept>>> doInBackground(Void... params) { // The default Clarifai model that identifies concepts in images final ConceptModel generalModel = App.get().clarifaiClient().getDefaultModels().generalModel(); // Use this model to predict, with the image that the user just selected as the input return generalModel.predict() .withInputs(ClarifaiInput.forImage(ClarifaiImage.of(imageBytes))) .executeSync(); }
@Test public void searchByReverseImage() { // Search by image (image URL represented by: String or java.net.URL) client.searchInputs(SearchClause.matchImageVisually(ClarifaiImage.of("@@sampleTrain"))) .getPage(1) .executeSync(); // Search by image (image represented by: java.io.File or byte[]) client.searchInputs(SearchClause.matchImageVisually(ClarifaiImage.of(new File("image.png")))) .getPage(1) .executeSync(); }
@Retry @Test public void t17a_searchInputsWithModel() { assertSuccess(client.searchInputs( SearchClause.matchImageURL(ClarifaiImage.of(METRO_NORTH_IMAGE_URL)) )); }
@Test public void quickStartSearch() { final ClarifaiResponse<SearchInputsResult> trainImages = client.searchInputs( // Finds images that match this picture of a train OR images that match the "train" concept tag SearchClause.matchImageVisually(ClarifaiImage.of("@@sampleTrain")) ) .getPage(1) .executeSync(); }
@Test public void reverseImageSearch() { client.searchInputs(SearchClause.matchImageVisually(ClarifaiImage.of("http://i.imgur.com/HEoT5xR.png"))) .getPage(1) .executeSync(); }
@NotNull private PredictRequest<Prediction> makePredictRequest() { return client.predict(client.getDefaultModels().travelModel().id()) .withInputs( ClarifaiInput.forInputValue( ClarifaiImage.of(FAMILY_IMAGE_URL) .withAllowDuplicateUrl(false))); } }