Skip to content

Commit b76653b

Browse files
committed
chore(Visual Recognition): Add generated updates
1 parent f4bf372 commit b76653b

File tree

5 files changed

+116
-148
lines changed

5 files changed

+116
-148
lines changed

visual-recognition/src/main/java/com/ibm/watson/developer_cloud/visual_recognition/v3/VisualRecognition.java

Lines changed: 17 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@
3232
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.GetCoreMlModelOptions;
3333
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.ListClassifiersOptions;
3434
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.UpdateClassifierOptions;
35+
import java.io.InputStream;
3536
import okhttp3.MultipartBody;
3637
import okhttp3.RequestBody;
3738

38-
import java.io.File;
39-
import java.io.InputStream;
40-
4139
/**
4240
* The IBM Watson™ Visual Recognition service uses deep learning algorithms to identify scenes, objects, and faces
4341
* in images you upload to the service. You can create and train a custom classifier to identify subjects that suit
@@ -139,13 +137,9 @@ public VisualRecognition(String versionDate, IamOptions iamOptions) {
139137
*/
140138
public ServiceCall<ClassifiedImages> classify(ClassifyOptions classifyOptions) {
141139
Validator.notNull(classifyOptions, "classifyOptions cannot be null");
142-
Validator.isTrue((classifyOptions.imagesFile() != null)
143-
|| (classifyOptions.url() != null)
144-
|| (classifyOptions.threshold() != null)
145-
|| (classifyOptions.owners() != null)
146-
|| (classifyOptions.classifierIds() != null)
147-
|| (classifyOptions.parameters() != null),
148-
"At least one of imagesFile, url, threshold, owners, classifierIds, or parameters must be supplied.");
140+
Validator.isTrue((classifyOptions.imagesFile() != null) || (classifyOptions.url() != null) || (classifyOptions
141+
.threshold() != null) || (classifyOptions.owners() != null) || (classifyOptions.classifierIds() != null),
142+
"At least one of imagesFile, url, threshold, owners, or classifierIds must be supplied.");
149143
String[] pathSegments = { "v3/classify" };
150144
RequestBuilder builder = RequestBuilder.post(RequestBuilder.constructHttpUrl(getEndPoint(), pathSegments));
151145
builder.query(VERSION, versionDate);
@@ -159,9 +153,6 @@ public ServiceCall<ClassifiedImages> classify(ClassifyOptions classifyOptions) {
159153
.imagesFileContentType());
160154
multipartBuilder.addFormDataPart("images_file", classifyOptions.imagesFilename(), imagesFileBody);
161155
}
162-
if (classifyOptions.parameters() != null) {
163-
multipartBuilder.addFormDataPart("parameters", classifyOptions.parameters());
164-
}
165156
if (classifyOptions.url() != null) {
166157
multipartBuilder.addFormDataPart("url", classifyOptions.url());
167158
}
@@ -209,10 +200,8 @@ public ServiceCall<ClassifiedImages> classify() {
209200
*/
210201
public ServiceCall<DetectedFaces> detectFaces(DetectFacesOptions detectFacesOptions) {
211202
Validator.notNull(detectFacesOptions, "detectFacesOptions cannot be null");
212-
Validator.isTrue((detectFacesOptions.imagesFile() != null)
213-
|| (detectFacesOptions.url() != null)
214-
|| (detectFacesOptions.parameters() != null),
215-
"At least one of imagesFile, url, or parameters must be supplied.");
203+
Validator.isTrue((detectFacesOptions.imagesFile() != null) || (detectFacesOptions.url() != null),
204+
"At least one of imagesFile or url must be supplied.");
216205
String[] pathSegments = { "v3/detect_faces" };
217206
RequestBuilder builder = RequestBuilder.post(RequestBuilder.constructHttpUrl(getEndPoint(), pathSegments));
218207
builder.query(VERSION, versionDate);
@@ -223,9 +212,6 @@ public ServiceCall<DetectedFaces> detectFaces(DetectFacesOptions detectFacesOpti
223212
.imagesFileContentType());
224213
multipartBuilder.addFormDataPart("images_file", detectFacesOptions.imagesFilename(), imagesFileBody);
225214
}
226-
if (detectFacesOptions.parameters() != null) {
227-
multipartBuilder.addFormDataPart("parameters", detectFacesOptions.parameters());
228-
}
229215
if (detectFacesOptions.url() != null) {
230216
multipartBuilder.addFormDataPart("url", detectFacesOptions.url());
231217
}
@@ -275,13 +261,10 @@ public ServiceCall<Classifier> createClassifier(CreateClassifierOptions createCl
275261
MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
276262
multipartBuilder.setType(MultipartBody.FORM);
277263
multipartBuilder.addFormDataPart("name", createClassifierOptions.name());
278-
// Classes
279-
for (String className : createClassifierOptions.classNames()) {
280-
String dataName = className + "_positive_examples";
281-
File positiveExamples = createClassifierOptions.positiveExamplesByClassName(className);
282-
RequestBody body = RequestUtils.fileBody(positiveExamples, "application/octet-stream");
283-
multipartBuilder.addFormDataPart(dataName, positiveExamples.getName(), body);
284-
}
264+
RequestBody classnamePositiveExamplesBody = RequestUtils.inputStreamBody(createClassifierOptions
265+
.classnamePositiveExamples(), "application/octet-stream");
266+
multipartBuilder.addFormDataPart("classname_positive_examples", createClassifierOptions
267+
.classnamePositiveExamplesFilename(), classnamePositiveExamplesBody);
285268
if (createClassifierOptions.negativeExamples() != null) {
286269
RequestBody negativeExamplesBody = RequestUtils.inputStreamBody(createClassifierOptions.negativeExamples(),
287270
"application/octet-stream");
@@ -359,8 +342,7 @@ public ServiceCall<Classifiers> listClassifiers() {
359342
* Update a custom classifier by adding new positive or negative classes (examples) or by adding new images to
360343
* existing classes. You must supply at least one set of positive or negative examples. For details, see [Updating
361344
* custom
362-
* classifiers]
363-
* (https://console.bluemix.net/docs/services/visual-recognition/customizing.html#updating-custom-classifiers).
345+
* classifiers](https://console.bluemix.net/docs/services/visual-recognition/customizing.html#updating-custom-classifiers).
364346
*
365347
* Encode all names in UTF-8 if they contain non-ASCII characters (.zip and image file names, and classifier and class
366348
* names). The service assumes UTF-8 encoding if it encounters non-ASCII characters.
@@ -374,7 +356,7 @@ public ServiceCall<Classifiers> listClassifiers() {
374356
*/
375357
public ServiceCall<Classifier> updateClassifier(UpdateClassifierOptions updateClassifierOptions) {
376358
Validator.notNull(updateClassifierOptions, "updateClassifierOptions cannot be null");
377-
Validator.isTrue((updateClassifierOptions.classNames().size() > 0) || (updateClassifierOptions
359+
Validator.isTrue((updateClassifierOptions.classnamePositiveExamples() != null) || (updateClassifierOptions
378360
.negativeExamples() != null),
379361
"At least one of classnamePositiveExamples or negativeExamples must be supplied.");
380362
String[] pathSegments = { "v3/classifiers" };
@@ -384,12 +366,11 @@ public ServiceCall<Classifier> updateClassifier(UpdateClassifierOptions updateCl
384366
builder.query(VERSION, versionDate);
385367
MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
386368
multipartBuilder.setType(MultipartBody.FORM);
387-
// Classes
388-
for (String className : updateClassifierOptions.classNames()) {
389-
String dataName = className + "_positive_examples";
390-
File positiveExamples = updateClassifierOptions.positiveExamplesByClassName(className);
391-
RequestBody body = RequestUtils.fileBody(positiveExamples, "application/octet-stream");
392-
multipartBuilder.addFormDataPart(dataName, positiveExamples.getName(), body);
369+
if (updateClassifierOptions.classnamePositiveExamples() != null) {
370+
RequestBody classnamePositiveExamplesBody = RequestUtils.inputStreamBody(updateClassifierOptions
371+
.classnamePositiveExamples(), "application/octet-stream");
372+
multipartBuilder.addFormDataPart("classname_positive_examples", updateClassifierOptions
373+
.classnamePositiveExamplesFilename(), classnamePositiveExamplesBody);
393374
}
394375
if (updateClassifierOptions.negativeExamples() != null) {
395376
RequestBody negativeExamplesBody = RequestUtils.inputStreamBody(updateClassifierOptions.negativeExamples(),

visual-recognition/src/main/java/com/ibm/watson/developer_cloud/visual_recognition/v3/model/ClassifyOptions.java

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ public interface AcceptLanguage {
6767
private List<String> owners;
6868
private List<String> classifierIds;
6969
private String imagesFileContentType;
70-
@Deprecated
71-
private String parameters;
7270

7371
/**
7472
* Builder.
@@ -82,8 +80,6 @@ public static class Builder {
8280
private List<String> owners;
8381
private List<String> classifierIds;
8482
private String imagesFileContentType;
85-
@Deprecated
86-
private String parameters;
8783

8884
private Builder(ClassifyOptions classifyOptions) {
8985
imagesFile = classifyOptions.imagesFile;
@@ -94,7 +90,6 @@ private Builder(ClassifyOptions classifyOptions) {
9490
owners = classifyOptions.owners;
9591
classifierIds = classifyOptions.classifierIds;
9692
imagesFileContentType = classifyOptions.imagesFileContentType;
97-
parameters = classifyOptions.parameters;
9893
}
9994

10095
/**
@@ -245,18 +240,6 @@ public Builder imagesFile(File imagesFile) throws FileNotFoundException {
245240
this.imagesFilename = imagesFile.getName();
246241
return this;
247242
}
248-
249-
/**
250-
* Set the parameters.
251-
*
252-
* @param parameters the parameters
253-
* @return the ClassifyOptions builder
254-
* @deprecated replaced by the top-level parameters url, threshold, owners, and classifierIds
255-
*/
256-
public Builder parameters(String parameters) {
257-
this.parameters = parameters;
258-
return this;
259-
}
260243
}
261244

262245
private ClassifyOptions(Builder builder) {
@@ -268,7 +251,6 @@ private ClassifyOptions(Builder builder) {
268251
owners = builder.owners;
269252
classifierIds = builder.classifierIds;
270253
imagesFileContentType = builder.imagesFileContentType;
271-
parameters = builder.parameters;
272254
}
273255

274256
/**
@@ -391,14 +373,4 @@ public List<String> classifierIds() {
391373
public String imagesFileContentType() {
392374
return imagesFileContentType;
393375
}
394-
395-
/**
396-
* Gets the parameters.
397-
*
398-
* @return the parameters
399-
* @deprecated replaced by the top-level parameters url, threshold, owners, and classifierIds
400-
*/
401-
public String parameters() {
402-
return parameters;
403-
}
404376
}

visual-recognition/src/main/java/com/ibm/watson/developer_cloud/visual_recognition/v3/model/CreateClassifierOptions.java

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
import java.io.FileInputStream;
1717
import java.io.FileNotFoundException;
1818
import java.io.InputStream;
19-
import java.util.HashMap;
20-
import java.util.Map;
21-
import java.util.Set;
2219

2320
import com.ibm.watson.developer_cloud.service.model.GenericModel;
2421
import com.ibm.watson.developer_cloud.util.Validator;
@@ -29,7 +26,8 @@
2926
public class CreateClassifierOptions extends GenericModel {
3027

3128
private String name;
32-
private Map<String, File> classnamePositiveExamples;
29+
private InputStream classnamePositiveExamples;
30+
private String classnamePositiveExamplesFilename;
3331
private InputStream negativeExamples;
3432
private String negativeExamplesFilename;
3533

@@ -38,13 +36,15 @@ public class CreateClassifierOptions extends GenericModel {
3836
*/
3937
public static class Builder {
4038
private String name;
41-
private Map<String, File> classnamePositiveExamples;
39+
private InputStream classnamePositiveExamples;
40+
private String classnamePositiveExamplesFilename;
4241
private InputStream negativeExamples;
4342
private String negativeExamplesFilename;
4443

4544
private Builder(CreateClassifierOptions createClassifierOptions) {
4645
name = createClassifierOptions.name;
47-
classnamePositiveExamples.putAll(createClassifierOptions.classnamePositiveExamples);
46+
classnamePositiveExamples = createClassifierOptions.classnamePositiveExamples;
47+
classnamePositiveExamplesFilename = createClassifierOptions.classnamePositiveExamplesFilename;
4848
negativeExamples = createClassifierOptions.negativeExamples;
4949
negativeExamplesFilename = createClassifierOptions.negativeExamplesFilename;
5050
}
@@ -53,17 +53,17 @@ private Builder(CreateClassifierOptions createClassifierOptions) {
5353
* Instantiates a new builder.
5454
*/
5555
public Builder() {
56-
classnamePositiveExamples = new HashMap<>();
5756
}
5857

5958
/**
6059
* Instantiates a new builder with required properties.
6160
*
6261
* @param name the name
62+
* @param classnamePositiveExamples the classnamePositiveExamples
6363
*/
64-
public Builder(String name) {
65-
this();
64+
public Builder(String name, InputStream classnamePositiveExamples) {
6665
this.name = name;
66+
this.classnamePositiveExamples = classnamePositiveExamples;
6767
}
6868

6969
/**
@@ -87,17 +87,24 @@ public Builder name(String name) {
8787
}
8888

8989
/**
90-
* Adds a classifier with a name and positive examples. If the classifier name is already contained, the old
91-
* positive examples are replaced by the specified value.
90+
* Set the classnamePositiveExamples.
9291
*
93-
* @param className the class name
94-
* @param positiveExamples the positive examples
95-
* @return the builder
92+
* @param classnamePositiveExamples the classnamePositiveExamples
93+
* @return the CreateClassifierOptions builder
9694
*/
97-
public Builder addClass(String className, File positiveExamples) {
98-
Validator.notNull(className, "className cannot be null");
99-
Validator.notNull(positiveExamples, "positiveExamples cannot be null");
100-
classnamePositiveExamples.put(className, positiveExamples);
95+
public Builder classnamePositiveExamples(InputStream classnamePositiveExamples) {
96+
this.classnamePositiveExamples = classnamePositiveExamples;
97+
return this;
98+
}
99+
100+
/**
101+
* Set the classnamePositiveExamplesFilename.
102+
*
103+
* @param classnamePositiveExamplesFilename the classnamePositiveExamplesFilename
104+
* @return the CreateClassifierOptions builder
105+
*/
106+
public Builder classnamePositiveExamplesFilename(String classnamePositiveExamplesFilename) {
107+
this.classnamePositiveExamplesFilename = classnamePositiveExamplesFilename;
101108
return this;
102109
}
103110

@@ -123,6 +130,20 @@ public Builder negativeExamplesFilename(String negativeExamplesFilename) {
123130
return this;
124131
}
125132

133+
/**
134+
* Set the classnamePositiveExamples.
135+
*
136+
* @param classnamePositiveExamples the classnamePositiveExamples
137+
* @return the CreateClassifierOptions builder
138+
*
139+
* @throws FileNotFoundException if the file could not be found
140+
*/
141+
public Builder classnamePositiveExamples(File classnamePositiveExamples) throws FileNotFoundException {
142+
this.classnamePositiveExamples = new FileInputStream(classnamePositiveExamples);
143+
this.classnamePositiveExamplesFilename = classnamePositiveExamples.getName();
144+
return this;
145+
}
146+
126147
/**
127148
* Set the negativeExamples.
128149
*
@@ -140,10 +161,12 @@ public Builder negativeExamples(File negativeExamples) throws FileNotFoundExcept
140161

141162
private CreateClassifierOptions(Builder builder) {
142163
Validator.notNull(builder.name, "name cannot be null");
143-
Validator.isTrue(!builder.classnamePositiveExamples.isEmpty(),
144-
"To create a classifier, you must supply at least one positive examples file.");
164+
Validator.notNull(builder.classnamePositiveExamples, "classnamePositiveExamples cannot be null");
165+
Validator.isTrue((builder.negativeExamples == null) || (builder.negativeExamplesFilename != null),
166+
"negativeExamplesFilename cannot be null if negativeExamples is not null.");
145167
name = builder.name;
146168
classnamePositiveExamples = builder.classnamePositiveExamples;
169+
classnamePositiveExamplesFilename = builder.classnamePositiveExamplesFilename;
147170
negativeExamples = builder.negativeExamples;
148171
negativeExamplesFilename = builder.negativeExamplesFilename;
149172
}
@@ -169,7 +192,7 @@ public String name() {
169192
}
170193

171194
/**
172-
* Gets the class names.
195+
* Gets the classnamePositiveExamples.
173196
*
174197
* A .zip file of images that depict the visual subject of a class in the new classifier. You can include more than
175198
* one positive example file in a call.
@@ -182,20 +205,21 @@ public String name() {
182205
*
183206
* Encode special characters in the file name in UTF-8.
184207
*
185-
* @return the classNames
208+
* @return the classnamePositiveExamples
186209
*/
187-
public Set<String> classNames() {
188-
return classnamePositiveExamples.keySet();
210+
public InputStream classnamePositiveExamples() {
211+
return classnamePositiveExamples;
189212
}
190213

191214
/**
192-
* Gets the positive examples by class name.
215+
* Gets the classnamePositiveExamplesFilename.
216+
*
217+
* The filename for classnamePositiveExamples.
193218
*
194-
* @param className the class name
195-
* @return the positiveExamples
219+
* @return the classnamePositiveExamplesFilename
196220
*/
197-
public File positiveExamplesByClassName(String className) {
198-
return classnamePositiveExamples.get(className);
221+
public String classnamePositiveExamplesFilename() {
222+
return classnamePositiveExamplesFilename;
199223
}
200224

201225
/**

0 commit comments

Comments
 (0)