From 3a68723f0e4e4d9a7af33991d6509ea5c2407099 Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Thu, 20 Nov 2025 15:40:38 -0500 Subject: [PATCH 1/6] update get_images and validate_config --- build.sh | 0 src/torchvision_module.py | 22 +++++++++++++--------- tests/test_torchvision.py | 8 ++++---- 3 files changed, 17 insertions(+), 13 deletions(-) mode change 100644 => 100755 build.sh diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/src/torchvision_module.py b/src/torchvision_module.py index 9a2f5b7..d0e0d2e 100644 --- a/src/torchvision_module.py +++ b/src/torchvision_module.py @@ -1,6 +1,6 @@ """Module that defines the Vision Service that wraps torchvision functionality""" -from typing import ClassVar, List, Mapping, Sequence, Any, Dict, Optional, Union +from typing import ClassVar, List, Mapping, Sequence, Any, Dict, Optional, Union, Tuple from typing_extensions import Self from viam.components.camera import Camera from viam.media.video import ViamImage, CameraMimeType @@ -47,7 +47,7 @@ def new_service( return service @classmethod - def validate_config(cls, config: ServiceConfig) -> Sequence[str]: + def validate_config(cls, config: ServiceConfig) -> Tuple[Sequence[str], Sequence[str]]: """Validates JSON Configuration""" model_name = config.attributes.fields["model_name"].string_value camera_name = config.attributes.fields["camera_name"].string_value @@ -60,7 +60,7 @@ def validate_config(cls, config: ServiceConfig) -> Sequence[str]: raise Exception( "A camera name is required for this vision service module." ) - return [camera_name] + return [camera_name], [] def reconfigure( self, config: ServiceConfig, dependencies: Mapping[ResourceName, ResourceBase] @@ -197,19 +197,21 @@ async def capture_all_from_camera( "is not the configured 'camera_name'", self.camera_name, ) - image = await self.camera.get_image(mime_type=CameraMimeType.JPEG) + images = await self.camera.get_images() + if len(images) == 0 and (return_image or return_classifications or return_detections): + raise ValueError("No images returned by get_images") if return_image: - result.image = image + result.image = images[0] if return_classifications: try: - classifications = await self.get_classifications(image, 1) + classifications = await self.get_classifications(images[0], 1) result.classifications = classifications # pylint: disable=broad-exception-caught except Exception as e: LOGGER.info(f"getClassifications failed: {e}") if return_detections: try: - detections = await self.get_detections(image, timeout=timeout, extra=None) + detections = await self.get_detections(images[0], timeout=timeout, extra=None) result.detections = detections # pylint: disable=broad-exception-caught except Exception as e: @@ -362,8 +364,10 @@ def filter_output( async def get_image_from_dependency(self, camera_name: str): # cam = self.dependencies[Camera.get_resource_name("")] - im = await self.camera.get_image(mime_type=CameraMimeType.JPEG) - return decode_image(im) + imgs = await self.camera.get_images() + if len(imgs) == 0: + raise ValueError("No images returned by get_images") + return decode_image(imgs[0]) def wrap_detections(self, prediction: dict, image_shape: Sequence[int]): """_summary_ diff --git a/tests/test_torchvision.py b/tests/test_torchvision.py index 2218ee0..53949cd 100644 --- a/tests/test_torchvision.py +++ b/tests/test_torchvision.py @@ -65,8 +65,8 @@ class TestVision: @pytest.mark.asyncio async def test_validate(self): with pytest.raises(Exception): - response = TorchVisionService.validate_config(config=config) - response = TorchVisionService.validate_config(config=config2) + response, _ = TorchVisionService.validate_config(config=config) + response, _ = TorchVisionService.validate_config(config=config2) @pytest.mark.asyncio @patch('viam.components.camera.Camera.get_resource_name', return_value="fake_cam") @@ -90,7 +90,7 @@ def test_capture_all_from_camera(self, fake_cam): camera.camera_name = "fake_cam" camera.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - camera.camera.get_image = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) + camera.camera.get_images = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) # without point clouds = True result = asyncio.run(camera.capture_all_from_camera( @@ -126,7 +126,7 @@ def test_default_camera_behavior(self, fake_cam): ) vs.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - vs.camera.get_image = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) + vs.camera.get_images = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) result = vs.get_classifications_from_camera( "", From 002b5f85f77bf62a248ad504d977acb8c9feffac Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Thu, 20 Nov 2025 16:32:20 -0500 Subject: [PATCH 2/6] fix tests --- tests/test_torchvision.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_torchvision.py b/tests/test_torchvision.py index 53949cd..2bd6455 100644 --- a/tests/test_torchvision.py +++ b/tests/test_torchvision.py @@ -90,7 +90,7 @@ def test_capture_all_from_camera(self, fake_cam): camera.camera_name = "fake_cam" camera.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - camera.camera.get_images = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) + camera.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) # without point clouds = True result = asyncio.run(camera.capture_all_from_camera( @@ -126,7 +126,7 @@ def test_default_camera_behavior(self, fake_cam): ) vs.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - vs.camera.get_images = AsyncMock(return_value=pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)) + vs.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) result = vs.get_classifications_from_camera( "", From 1e1ffba54a52f57574377a8aa5321217b6193c89 Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Thu, 20 Nov 2025 16:51:45 -0500 Subject: [PATCH 3/6] remove unnecessary import --- src/torchvision_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/torchvision_module.py b/src/torchvision_module.py index d0e0d2e..c76d10c 100644 --- a/src/torchvision_module.py +++ b/src/torchvision_module.py @@ -3,7 +3,7 @@ from typing import ClassVar, List, Mapping, Sequence, Any, Dict, Optional, Union, Tuple from typing_extensions import Self from viam.components.camera import Camera -from viam.media.video import ViamImage, CameraMimeType +from viam.media.video import ViamImage from viam.proto.service.vision import Classification, Detection from viam.services.vision import Vision, CaptureAllResult from viam.module.types import Reconfigurable From 434021cc33849a271972782d2782501467bb0998 Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Tue, 2 Dec 2025 12:17:03 -0500 Subject: [PATCH 4/6] take into account metadata --- src/torchvision_module.py | 8 ++++---- tests/test_torchvision.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/torchvision_module.py b/src/torchvision_module.py index c76d10c..cec69d7 100644 --- a/src/torchvision_module.py +++ b/src/torchvision_module.py @@ -197,8 +197,8 @@ async def capture_all_from_camera( "is not the configured 'camera_name'", self.camera_name, ) - images = await self.camera.get_images() - if len(images) == 0 and (return_image or return_classifications or return_detections): + images, _ = await self.camera.get_images() + if images is None or len(images) == 0 and (return_image or return_classifications or return_detections): raise ValueError("No images returned by get_images") if return_image: result.image = images[0] @@ -364,8 +364,8 @@ def filter_output( async def get_image_from_dependency(self, camera_name: str): # cam = self.dependencies[Camera.get_resource_name("")] - imgs = await self.camera.get_images() - if len(imgs) == 0: + imgs, _ = await self.camera.get_images() + if imgs is None or len(imgs) == 0: raise ValueError("No images returned by get_images") return decode_image(imgs[0]) diff --git a/tests/test_torchvision.py b/tests/test_torchvision.py index 2bd6455..746da08 100644 --- a/tests/test_torchvision.py +++ b/tests/test_torchvision.py @@ -90,7 +90,7 @@ def test_capture_all_from_camera(self, fake_cam): camera.camera_name = "fake_cam" camera.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - camera.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + camera.camera.get_images, _ = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) # without point clouds = True result = asyncio.run(camera.capture_all_from_camera( @@ -126,7 +126,7 @@ def test_default_camera_behavior(self, fake_cam): ) vs.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - vs.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + vs.camera.get_images, _ = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) result = vs.get_classifications_from_camera( "", From 556f0a2a4cb791e3f883b4c6c0f6b421799e65fe Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Thu, 4 Dec 2025 13:47:01 -0500 Subject: [PATCH 5/6] remove testing error --- .../test_local.cpython-314-pytest-9.0.1.pyc | Bin 0 -> 2087 bytes ...est_torchvision.cpython-314-pytest-9.0.1.pyc | Bin 0 -> 21862 bytes tests/test_torchvision.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 __pycache__/test_local.cpython-314-pytest-9.0.1.pyc create mode 100644 tests/__pycache__/test_torchvision.cpython-314-pytest-9.0.1.pyc diff --git a/__pycache__/test_local.cpython-314-pytest-9.0.1.pyc b/__pycache__/test_local.cpython-314-pytest-9.0.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb168275172bdb3955d28780c472b9c72d069e5b GIT binary patch literal 2087 zcma)7&uIsX0~j#<6Gk2aKT98iLBD2YNCMQq@~$)?T})Kh%+S=goVw^L=mT zo43<)L;|!Gmr}+}5dfVHye4#w-S4Q;0GEKmr* zn=klQ_jq6Q`vR|olyGmBKxf7JQO_!HO6U@}Bq@>kZZ2nm61vO-aE)v5=R^tE!dk+c zt;hu-43s^yJuWHmFTA5lEDN%}9_M&3)Bn$R(8KNb9llCpo-$Q>#HD)vOY%s;(VG&@myNJ3<0ip;1}K4vFO7Ieqrb`7;-0 zR@A}_3F-73q;;nAbU=hHSTxc;B54>Sqgcn#AyNt2&@4HsWuB)YzwU~kggb6%>IQVu z0uc>%6^ID0VWg1&HfqqSV6Gcpvh$$V>;sr{< zhKY&HVts_PND{V&*V*+qOq#pe*`Uy02RzSOsz$YHXl7>p zs%BOWS750Go$Q98)v{#^U2$HL3_UNbRxMqtX6#KO)HK6H2kDBe*f{&>#eYW2Ol$Q0 zrZBt{Pkwdq=D}~~zFqu!u{m}8!Pw%1_=(2Kj@)RKbvt*bbVGd*Inh{pni%>i zap->HP)i=!PTv0T2Va{9$?09-OZtBYKH1+`df^A6)C^DGUb?+-XSON5@lcqjzR)Wj z4`-5Y)AhHx+)?f>&*iehUE%Z)9o!q`ax=ocu|a0furLX# zD%)IDO(#jPSU0NJFdY&;WpApz(THkqvIEIbtwY3QmqG9a5EeG9dKres23S9vc$z7q2jjGepaX@o6 z>0PymXx3}?CK{u;y4qm5u!5ngghzGrd$3C*0KHCMB=}}$&9~4Z9kL&XbCSN=JjZcA z1Mo5U5oCS=gHOQR6EOK0$d5t%H~%Cz(_ZC(5WcbXkRNFYp-)z>uY4hV>3<{)Kj(ok JijLDY{sfU66|VpQ literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_torchvision.cpython-314-pytest-9.0.1.pyc b/tests/__pycache__/test_torchvision.cpython-314-pytest-9.0.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e9528459f7de44129356518080c2e6f33d1d509 GIT binary patch literal 21862 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 literal 0 HcmV?d00001 diff --git a/tests/test_torchvision.py b/tests/test_torchvision.py index 746da08..2bd6455 100644 --- a/tests/test_torchvision.py +++ b/tests/test_torchvision.py @@ -90,7 +90,7 @@ def test_capture_all_from_camera(self, fake_cam): camera.camera_name = "fake_cam" camera.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - camera.camera.get_images, _ = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + camera.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) # without point clouds = True result = asyncio.run(camera.capture_all_from_camera( @@ -126,7 +126,7 @@ def test_default_camera_behavior(self, fake_cam): ) vs.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - vs.camera.get_images, _ = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + vs.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) result = vs.get_classifications_from_camera( "", From 2a6cec7177db0d1abb774eab26975fca15c3e779 Mon Sep 17 00:00:00 2001 From: Lillian Hwang-Geddes Date: Thu, 4 Dec 2025 13:59:37 -0500 Subject: [PATCH 6/6] modify tests --- tests/test_torchvision.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_torchvision.py b/tests/test_torchvision.py index 2bd6455..465867b 100644 --- a/tests/test_torchvision.py +++ b/tests/test_torchvision.py @@ -90,7 +90,7 @@ def test_capture_all_from_camera(self, fake_cam): camera.camera_name = "fake_cam" camera.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - camera.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + camera.camera.get_images = AsyncMock(return_value=[[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)], None]) # without point clouds = True result = asyncio.run(camera.capture_all_from_camera( @@ -126,7 +126,7 @@ def test_default_camera_behavior(self, fake_cam): ) vs.reconfigure(cfg, dependencies={"fake_cam": Mock()}) - vs.camera.get_images = AsyncMock(return_value=[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)]) + vs.camera.get_images = AsyncMock(return_value=[[pil_to_viam_image(image, mime_type=CameraMimeType.JPEG)], None]) result = vs.get_classifications_from_camera( "",