Skip to content

Commit 4a11d37

Browse files
committed
add in update classifier tests for vr, make messagerequest context dynamic
1 parent 1db6522 commit 4a11d37

File tree

4 files changed

+16
-171
lines changed

4 files changed

+16
-171
lines changed

src/IBM.WatsonDeveloperCloud.Conversation.v1/Model/MessageRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class MessageRequest
4242
/// </summary>
4343
/// <value>State information for the conversation. Continue a conversation by including the context object from the previous response.</value>
4444
[JsonProperty("context", NullValueHandling = NullValueHandling.Ignore)]
45-
public Context Context { get; set; }
45+
public dynamic Context { get; set; }
4646
/// <summary>
4747
/// Include the entities from the previous response when they do not need to change and to prevent Watson from trying to identify them.
4848
/// </summary>

src/IBM.WatsonDeveloperCloud.VisualRecognition.v3/IVisualRecognitionService.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,11 @@ public partial interface IVisualRecognitionService
2424
{
2525
ClassifiedImages Classify(System.IO.Stream imagesFile = null, string acceptLanguage = null, string url = null, float? threshold = null, List<string> owners = null, List<string> classifierIds = null, string imagesFileContentType = null);
2626
DetectedFaces DetectFaces(System.IO.Stream imagesFile = null, string url = null, string imagesFileContentType = null);
27-
Classifier CreateClassifier(string name, System.IO.Stream classnamePositiveExamples, System.IO.Stream negativeExamples = null);
2827

2928
object DeleteClassifier(string classifierId);
3029

3130
Classifier GetClassifier(string classifierId);
3231

3332
Classifiers ListClassifiers(bool? verbose = null);
34-
35-
Classifier UpdateClassifier(string classifierId, System.IO.Stream classnamePositiveExamples = null, System.IO.Stream negativeExamples = null);
3633
}
3734
}

src/IBM.WatsonDeveloperCloud.VisualRecognition.v3/VisualRecognitionService.cs

Lines changed: 1 addition & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -185,68 +185,7 @@ public DetectedFaces DetectFaces(System.IO.Stream imagesFile = null, string url
185185

186186
return result;
187187
}
188-
/// <summary>
189-
/// Create a classifier. Train a new multi-faceted classifier on the uploaded image data. Create your custom classifier with positive or negative examples. Include at least two sets of examples, either two positive example files or one positive and one negative file. You can upload a maximum of 256 MB per call. Encode all names in UTF-8 if they contain non-ASCII characters (.zip and image file names, and classifier and class names). The service assumes UTF-8 encoding if it encounters non-ASCII characters.
190-
/// </summary>
191-
/// <param name="name">The name of the new classifier. Encode special characters in UTF-8.</param>
192-
/// <param name="classnamePositiveExamples">A .zip file of images that depict the visual subject of a class in the new classifier. You can include more than one positive example file in a call. Append `_positive_examples` to the form name. The prefix is used as the class name. For example, `goldenretriever_positive_examples` creates the class **goldenretriever**. Include at least 10 images in .jpg or .png format. The minimum recommended image resolution is 32X32 pixels. The maximum number of images is 10,000 images or 100 MB per .zip file. Encode special characters in the file name in UTF-8. The API explorer limits you to training only one class. To train more classes, use the API functionality.</param>
193-
/// <param name="negativeExamples">A compressed (.zip) file of images that do not depict the visual subject of any of the classes of the new classifier. Must contain a minimum of 10 images. Encode special characters in the file name in UTF-8. (optional)</param>
194-
/// <returns><see cref="Classifier" />Classifier</returns>
195-
public Classifier CreateClassifier(string name, System.IO.Stream classnamePositiveExamples, System.IO.Stream negativeExamples = null)
196-
{
197-
if (string.IsNullOrEmpty(name))
198-
throw new ArgumentNullException(nameof(name));
199-
if (classnamePositiveExamples == null)
200-
throw new ArgumentNullException(nameof(classnamePositiveExamples));
201-
202-
if(string.IsNullOrEmpty(VersionDate))
203-
throw new ArgumentNullException("versionDate cannot be null.");
204-
205-
Classifier result = null;
206-
207-
try
208-
{
209-
var formData = new MultipartFormDataContent();
210-
211-
if (name != null)
212-
{
213-
var nameContent = new StringContent(name, Encoding.UTF8, HttpMediaType.TEXT_PLAIN);
214-
nameContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
215-
formData.Add(nameContent, "name");
216-
}
217-
218-
if (classnamePositiveExamples != null)
219-
{
220-
var classnamePositiveExamplesContent = new ByteArrayContent((classnamePositiveExamples as Stream).ReadAllBytes());
221-
System.Net.Http.Headers.MediaTypeHeaderValue contentType;
222-
System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/octet-stream", out contentType);
223-
classnamePositiveExamplesContent.Headers.ContentType = contentType;
224-
formData.Add(classnamePositiveExamplesContent, "classname_positive_examples", "filename");
225-
}
226-
227-
if (negativeExamples != null)
228-
{
229-
var negativeExamplesContent = new ByteArrayContent((negativeExamples as Stream).ReadAllBytes());
230-
System.Net.Http.Headers.MediaTypeHeaderValue contentType;
231-
System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/octet-stream", out contentType);
232-
negativeExamplesContent.Headers.ContentType = contentType;
233-
formData.Add(negativeExamplesContent, "negative_examples", "filename");
234-
}
235-
236-
var request = this.Client.PostAsync($"{this.Endpoint}/v3/classifiers");
237-
request.WithArgument("api_key", ApiKey);
238-
request.WithArgument("version", VersionDate);
239-
request.WithBodyContent(formData);
240-
result = request.As<Classifier>().Result;
241-
}
242-
catch(AggregateException ae)
243-
{
244-
throw ae.Flatten();
245-
}
246-
247-
return result;
248-
}
249-
188+
250189
/// <summary>
251190
/// Delete a classifier.
252191
/// </summary>
@@ -336,58 +275,5 @@ public Classifiers ListClassifiers(bool? verbose = null)
336275

337276
return result;
338277
}
339-
340-
/// <summary>
341-
/// Update a classifier. Update a custom classifier by adding new positive or negative classes (examples) or by adding new images to existing classes. You must supply at least one set of positive or negative examples. For details, see [Updating custom classifiers](https://console.bluemix.net/docs/services/visual-recognition/customizing.html#updating-custom-classifiers). Encode all names in UTF-8 if they contain non-ASCII characters (.zip and image file names, and classifier and class names). The service assumes UTF-8 encoding if it encounters non-ASCII characters. **Important:** You can't update a custom classifier with an API key for a Lite plan. To update a custom classifer on a Lite plan, create another service instance on a Standard plan and re-create your custom classifier. **Tip:** Don't make retraining calls on a classifier until the status is ready. When you submit retraining requests in parallel, the last request overwrites the previous requests. The retrained property shows the last time the classifier retraining finished.
342-
/// </summary>
343-
/// <param name="classifierId">The ID of the classifier.</param>
344-
/// <param name="classnamePositiveExamples">A .zip file of images that depict the visual subject of a class in the classifier. The positive examples create or update classes in the classifier. You can include more than one positive example file in a call. Append `_positive_examples` to the form name. The prefix is used to name the class. For example, `goldenretriever_positive_examples` creates the class `goldenretriever`. Include at least 10 images in .jpg or .png format. The minimum recommended image resolution is 32X32 pixels. The maximum number of images is 10,000 images or 100 MB per .zip file. Encode special characters in the file name in UTF-8. (optional)</param>
345-
/// <param name="negativeExamples">A compressed (.zip) file of images that do not depict the visual subject of any of the classes of the new classifier. Must contain a minimum of 10 images. Encode special characters in the file name in UTF-8. (optional)</param>
346-
/// <returns><see cref="Classifier" />Classifier</returns>
347-
public Classifier UpdateClassifier(string classifierId, System.IO.Stream classnamePositiveExamples = null, System.IO.Stream negativeExamples = null)
348-
{
349-
if (string.IsNullOrEmpty(classifierId))
350-
throw new ArgumentNullException(nameof(classifierId));
351-
352-
if(string.IsNullOrEmpty(VersionDate))
353-
throw new ArgumentNullException("versionDate cannot be null.");
354-
355-
Classifier result = null;
356-
357-
try
358-
{
359-
var formData = new MultipartFormDataContent();
360-
361-
if (classnamePositiveExamples != null)
362-
{
363-
var classnamePositiveExamplesContent = new ByteArrayContent((classnamePositiveExamples as Stream).ReadAllBytes());
364-
System.Net.Http.Headers.MediaTypeHeaderValue contentType;
365-
System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/octet-stream", out contentType);
366-
classnamePositiveExamplesContent.Headers.ContentType = contentType;
367-
formData.Add(classnamePositiveExamplesContent, "classname_positive_examples", "filename");
368-
}
369-
370-
if (negativeExamples != null)
371-
{
372-
var negativeExamplesContent = new ByteArrayContent((negativeExamples as Stream).ReadAllBytes());
373-
System.Net.Http.Headers.MediaTypeHeaderValue contentType;
374-
System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/octet-stream", out contentType);
375-
negativeExamplesContent.Headers.ContentType = contentType;
376-
formData.Add(negativeExamplesContent, "negative_examples", "filename");
377-
}
378-
379-
var request = this.Client.PostAsync($"{this.Endpoint}/v3/classifiers/{classifierId}");
380-
request.WithArgument("api_key", ApiKey);
381-
request.WithArgument("version", VersionDate);
382-
request.WithBodyContent(formData);
383-
result = request.As<Classifier>().Result;
384-
}
385-
catch(AggregateException ae)
386-
{
387-
throw ae.Flatten();
388-
}
389-
390-
return result;
391-
}
392278
}
393279
}

test/IBM.WatsonDeveloperCloud.VisualRecognition.v3.IntegrationTests/VisualRecognitionServiceIntegrationTests.cs

Lines changed: 14 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public class VisualRecognitionServiceIntegrationTests
4141
private string _localFaceFilePath = @"VisualRecognitionTestData/obama.jpg";
4242
private string _localGiraffePositiveExamplesFilePath = @"VisualRecognitionTestData/giraffe_positive_examples.zip";
4343
private string _giraffeClassname = "giraffe";
44-
//private string _localTurtlePositiveExamplesFilePath = @"VisualRecognitionTestData/turtle_positive_examples.zip";
45-
//private string _turtleClassname = "turtle";
44+
private string _localTurtlePositiveExamplesFilePath = @"VisualRecognitionTestData/turtle_positive_examples.zip";
45+
private string _turtleClassname = "turtle";
4646
private string _localNegativeExamplesFilePath = @"VisualRecognitionTestData/negative_examples.zip";
4747
private string _createdClassifierName = "dotnet-standard-test-integration-classifier";
4848
AutoResetEvent autoEvent = new AutoResetEvent(false);
@@ -158,20 +158,20 @@ public void TestClassifiers_Success()
158158
}
159159
autoEvent.WaitOne();
160160

161-
//Classifier updateClassifierResult = null;
162-
//using (FileStream positiveExamplesStream = File.OpenRead(_localTurtlePositiveExamplesFilePath))
163-
//{
164-
// Dictionary<string, Stream> positiveExamples = new Dictionary<string, Stream>();
165-
// positiveExamples.Add(_turtleClassname, positiveExamplesStream);
166-
// UpdateClassifier updateClassifier = new UpdateClassifier(createdClassifierId, positiveExamples);
167-
// updateClassifierResult = UpdateClassifier(updateClassifier);
168-
//}
161+
Classifier updateClassifierResult = null;
162+
using (FileStream positiveExamplesStream = File.OpenRead(_localTurtlePositiveExamplesFilePath))
163+
{
164+
Dictionary<string, Stream> positiveExamples = new Dictionary<string, Stream>();
165+
positiveExamples.Add(_turtleClassname, positiveExamplesStream);
166+
UpdateClassifier updateClassifier = new UpdateClassifier(createdClassifierId, positiveExamples);
167+
updateClassifierResult = _service.UpdateClassifier(updateClassifier);
168+
}
169169

170170
var deleteClassifierResult = DeleteClassifier(createdClassifierId);
171171

172172
Assert.IsNotNull(deleteClassifierResult);
173-
//Assert.IsNotNull(updateClassifierResult);
174-
//Assert.IsTrue(updateClassifierResult.ClassifierId == createdClassifierId);
173+
Assert.IsNotNull(updateClassifierResult);
174+
Assert.IsTrue(updateClassifierResult.ClassifierId == createdClassifierId);
175175
Assert.IsNotNull(getClassifierResult);
176176
Assert.IsTrue(getClassifierResult.ClassifierId == createdClassifierId);
177177
Assert.IsNotNull(createClassifierResult);
@@ -253,26 +253,7 @@ private DetectedFaces DetectFaces(System.IO.Stream imagesFile = null, string url
253253
return result;
254254
}
255255
#endregion
256-
257-
#region CreateClassifier
258-
private Classifier CreateClassifier(string name, System.IO.Stream classnamePositiveExamples, System.IO.Stream negativeExamples = null)
259-
{
260-
Console.WriteLine("\nAttempting to CreateClassifier()");
261-
var result = _service.CreateClassifier(name: name, classnamePositiveExamples: classnamePositiveExamples, negativeExamples: negativeExamples);
262-
263-
if (result != null)
264-
{
265-
Console.WriteLine("CreateClassifier() succeeded:\n{0}", JsonConvert.SerializeObject(result, Formatting.Indented));
266-
}
267-
else
268-
{
269-
Console.WriteLine("Failed to CreateClassifier()");
270-
}
271-
272-
return result;
273-
}
274-
#endregion
275-
256+
276257
#region DeleteClassifier
277258
private object DeleteClassifier(string classifierId)
278259
{
@@ -329,26 +310,7 @@ private Classifiers ListClassifiers(bool? verbose = null)
329310
return result;
330311
}
331312
#endregion
332-
333-
#region UpdateClassifier
334-
private Classifier UpdateClassifier(string classifierId, System.IO.Stream classnamePositiveExamples = null, System.IO.Stream negativeExamples = null)
335-
{
336-
Console.WriteLine("\nAttempting to UpdateClassifier()");
337-
var result = _service.UpdateClassifier(classifierId: classifierId, classnamePositiveExamples: classnamePositiveExamples, negativeExamples: negativeExamples);
338-
339-
if (result != null)
340-
{
341-
Console.WriteLine("UpdateClassifier() succeeded:\n{0}", JsonConvert.SerializeObject(result, Formatting.Indented));
342-
}
343-
else
344-
{
345-
Console.WriteLine("Failed to UpdateClassifier()");
346-
}
347-
348-
return result;
349-
}
350-
#endregion
351-
313+
352314
#endregion
353315
}
354316
}

0 commit comments

Comments
 (0)