From c61bc8addafac8f0fcb00292c55400064de1e7bf Mon Sep 17 00:00:00 2001 From: Naveed Jooma <naveed@viam.com> Date: Tue, 29 Oct 2024 12:34:31 -0400 Subject: [PATCH] Add get properties --- lib/src/services/vision.dart | 19 +++++++++++++++++++ test/unit_test/services/vision_test.dart | 7 +++++++ 2 files changed, 26 insertions(+) diff --git a/lib/src/services/vision.dart b/lib/src/services/vision.dart index 35bce85abf9..099bc086e0a 100644 --- a/lib/src/services/vision.dart +++ b/lib/src/services/vision.dart @@ -8,6 +8,10 @@ import '../resource/base.dart'; import '../robot/client.dart'; import '../utils.dart'; +/// {@category Viam SDK} +/// The vision service's supported features and settings +typedef VisionProperties = GetPropertiesResponse; + /// {@category Services} class VisionClient extends Resource implements ResourceRPCClient { static const Subtype subtype = Subtype(resourceNamespaceRDK, resourceTypeService, 'vision'); @@ -100,6 +104,21 @@ class VisionClient extends Resource implements ResourceRPCClient { return response.objects; } + /// Get info about what vision methods the vision service provides. + /// Currently returns boolean values that state whether the service implements the + /// classification, detection, and/or 3D object segmentation methods. + /// + /// ``` + /// // Example: + /// var properties = await myVisionService.properties(); + /// properties.detections_supported // returns true + /// properties.classifications_supported // returns false + /// ``` + Future<VisionProperties> properties({Map<String, dynamic>? extra}) async { + final request = GetPropertiesRequest(name: name, extra: extra?.toStruct()); + return await client.getProperties(request); + } + @override Future<Map<String, dynamic>> doCommand(Map<String, dynamic> command) async { final request = DoCommandRequest() diff --git a/test/unit_test/services/vision_test.dart b/test/unit_test/services/vision_test.dart index da8fb451764..f7288da064c 100644 --- a/test/unit_test/services/vision_test.dart +++ b/test/unit_test/services/vision_test.dart @@ -59,6 +59,13 @@ void main() { expect(response, equals(expected)); }); + test('properties', () async { + final expected = GetPropertiesResponse(classificationsSupported: true); + when(serviceClient.getProperties(any)).thenAnswer((_) => MockResponseFuture.value(expected)); + final response = await client.properties(); + expect(response, equals(expected)); + }); + test('getObjectPointClouds', () async { final expected = [ PointCloudObject(