3232import com .ibm .watson .developer_cloud .visual_recognition .v3 .model .GetCoreMlModelOptions ;
3333import com .ibm .watson .developer_cloud .visual_recognition .v3 .model .ListClassifiersOptions ;
3434import com .ibm .watson .developer_cloud .visual_recognition .v3 .model .UpdateClassifierOptions ;
35+ import java .io .InputStream ;
3536import okhttp3 .MultipartBody ;
3637import 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 (),
0 commit comments