From 2e6672c815e39fd6af78353e66661100b9102cd4 Mon Sep 17 00:00:00 2001 From: Freddy Boulton Date: Fri, 2 Feb 2024 10:26:44 -0800 Subject: [PATCH] Allow start/pause of streaming image input. Only access the webcam while it's needed (#7228) --- .changeset/major-rats-like.md | 6 +++ gradio/interface.py | 3 ++ js/image/Image.stories.svelte | 3 +- js/image/shared/Webcam.svelte | 63 ++++++++++++++++++++---- js/image/shared/WebcamPermissions.svelte | 46 +++++++++++++++++ 5 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 .changeset/major-rats-like.md create mode 100644 js/image/shared/WebcamPermissions.svelte diff --git a/.changeset/major-rats-like.md b/.changeset/major-rats-like.md new file mode 100644 index 0000000000..ede8b0905a --- /dev/null +++ b/.changeset/major-rats-like.md @@ -0,0 +1,6 @@ +--- +"@gradio/image": minor +"gradio": minor +--- + +feat:Allow start/pause of streaming image input. Only access the webcam while it's needed diff --git a/gradio/interface.py b/gradio/interface.py index e29721e043..1c086ec4ba 100644 --- a/gradio/interface.py +++ b/gradio/interface.py @@ -649,9 +649,11 @@ class Interface(Blocks): ) else: events: list[Callable] = [] + streaming_event = False for component in self.input_components: if component.has_event("stream") and component.streaming: # type: ignore events.append(component.stream) # type: ignore + streaming_event = True elif component.has_event("change"): events.append(component.change) # type: ignore on( @@ -662,6 +664,7 @@ class Interface(Blocks): api_name=self.api_name, preprocess=not (self.api_mode), postprocess=not (self.api_mode), + show_progress="hidden" if streaming_event else "full", ) else: if _submit_btn is None: diff --git a/js/image/Image.stories.svelte b/js/image/Image.stories.svelte index 40ddada2a2..f0a6388412 100644 --- a/js/image/Image.stories.svelte +++ b/js/image/Image.stories.svelte @@ -72,8 +72,7 @@ const webcamButton = await canvas.findByLabelText("Capture from camera"); userEvent.click(webcamButton); - userEvent.click(await canvas.findByTitle("select video source")); - userEvent.click(await canvas.findByLabelText("select source")); + userEvent.click(await canvas.findByTitle("grant webcam access")); userEvent.click(await canvas.findByLabelText("Upload file")); userEvent.click(await canvas.findByLabelText("Paste from clipboard")); }} diff --git a/js/image/shared/Webcam.svelte b/js/image/shared/Webcam.svelte index 309edd70c7..1da82424cb 100644 --- a/js/image/shared/Webcam.svelte +++ b/js/image/shared/Webcam.svelte @@ -1,9 +1,17 @@ + + + +