谷歌的应用引擎:Streamlight WebRTC的播放器采用sendrecv模式,一次只提供一个请求

2024-06-03 01:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Streamlit构建的网站,托管在谷歌的应用程序引擎上。使用streamlit_webRTC,我实现了一个拖缆,可以从访客的相机读取图像,将其输入到我的算法(人脸检测、遮罩开/关分类),并将处理后的图像返回给播放器

WEBRTC_CLIENT_SETTINGS = ClientSettings(
    rtc_configuration={"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]},
    media_stream_constraints={"video": True, "audio": False},
)
def app_mask_detection():

    class OpenCVVideoTransformer(VideoTransformerBase):
        def __init__(self) -> None:
            self.assembly = ModelAssembly()    

        def transform(self, frame: av.VideoFrame) -> av.VideoFrame:
            img = frame.to_ndarray(format="bgr24")
           
            return self.assembly.forwardFrame(img)

    webrtc_ctx = webrtc_streamer(
        key="opencv-filter",
        mode=WebRtcMode.SENDRECV,
        client_settings=WEBRTC_CLIENT_SETTINGS,
        video_transformer_factory=OpenCVVideoTransformer,
        async_transform=True,
    )

问题是一次只能有一名访客使用拖缆。 在我看来,活动实例正在被阻塞,直到访问者关闭拖缆。我看到两种可能的解决方案:

a)修改应用程序引擎设置,为每个访问者创建单独的实例

b)在代码中修改某种拖缆的设置

即使这些解决方案是有效的,我也完全不知道该去哪里寻找方法,这就是我写这篇文章的原因。任何提示都将受到高度赞赏


Tags: 图像引擎selfclienttrue应用程序settingsdef