vision: add product search helper

Change-Id: I7b6bb4141cf3b9d74e078cd9416c13375a06bbc2
Reviewed-on: https://code-review.googlesource.com/c/35390
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Eno Compton <enocom@google.com>
diff --git a/vision/apiv1/client.go b/vision/apiv1/client.go
index ca86e32..178a089 100644
--- a/vision/apiv1/client.go
+++ b/vision/apiv1/client.go
@@ -159,3 +159,12 @@
 	}
 	return res.LocalizedObjectAnnotations, nil
 }
+
+// ProductSearch searches the image for products.
+func (c *ImageAnnotatorClient) ProductSearch(ctx context.Context, img *pb.Image, ictx *pb.ImageContext, opts ...gax.CallOption) ([]*pb.LocalizedObjectAnnotation, error) {
+	res, err := c.annotateOne(ctx, img, ictx, pb.Feature_PRODUCT_SEARCH, 0, opts)
+	if err != nil {
+		return nil, err
+	}
+	return res.LocalizedObjectAnnotations, nil
+}
diff --git a/vision/apiv1/client_test.go b/vision/apiv1/client_test.go
index 1c8306f..61d6f31 100644
--- a/vision/apiv1/client_test.go
+++ b/vision/apiv1/client_test.go
@@ -129,6 +129,11 @@
 			[]*pb.Feature{{Type: pb.Feature_OBJECT_LOCALIZATION, MaxResults: 0}},
 			batchResponse.Responses[0].LocalizedObjectAnnotations,
 		},
+		{
+			func() (interface{}, error) { return c.ProductSearch(ctx, img, ictx) },
+			[]*pb.Feature{{Type: pb.Feature_PRODUCT_SEARCH, MaxResults: 0}},
+			batchResponse.Responses[0].LocalizedObjectAnnotations,
+		},
 	} {
 		mockImageAnnotator.reqs = nil
 		res, err := test.call()