Python 谷歌';s应用程序引擎:Streamlight WebRTC';具有sendrecv模式的s播放器一次只提供一个请求
我有一个用Streamlit构建的网站,托管在谷歌的应用程序引擎上。使用streamlit_webRTC,我实现了一个拖缆,可以从访客的相机读取图像,将其输入到我的算法(人脸检测、遮罩开/关分类),并将处理后的图像返回给播放器Python 谷歌';s应用程序引擎:Streamlight WebRTC';具有sendrecv模式的s播放器一次只提供一个请求,python,google-app-engine,google-cloud-platform,webrtc,streamlit,Python,Google App Engine,Google Cloud Platform,Webrtc,Streamlit,我有一个用Streamlit构建的网站,托管在谷歌的应用程序引擎上。使用streamlit_webRTC,我实现了一个拖缆,可以从访客的相机读取图像,将其输入到我的算法(人脸检测、遮罩开/关分类),并将处理后的图像返回给播放器 WEBRTC_CLIENT_SETTINGS = ClientSettings( rtc_configuration={"iceServers": [{"urls": ["stun:stun.l.google.co
WEBRTC_CLIENT_SETTINGS = ClientSettings(
rtc_configuration={"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]},
media_stream_constraints={"video": True, "audio": False},
)
问题是一次只能有一名访客使用拖缆。
在我看来,活动实例正在被阻塞,直到访问者关闭拖缆。我看到两种可能的解决方案:
a) 修改应用程序引擎设置,为每个访问者创建单独的实例
b) 在代码中修改某种拖缆的设置
即使这些解决方案是有效的,我也完全不知道该去哪里寻找方法,这就是我写这篇文章的原因。非常感谢您的指点。根据OP的意见,我们找到了解决方案: 0.9.0版本的
streamlit_webrtc
修复了该问题
如果您有类似的问题,请考虑升级到0.9.0或更高版本。
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,
)