Ask HN: How does MS-Teams, Meets and Zoom virtual background works?
All of these have pros and cons, and I am sure big companies already measured and optimized the hell out of the solution and this is why I am interested in the topic.
All of these have pros and cons, and I am sure big companies already measured and optimized the hell out of the solution and this is why I am interested in the topic.
They definitely do it client side.
I just wish there was something more easily deployable to desktops as a C/Rust solution.
A couple years ago when I worked at Meta, I built the server bits for a demo that was a hybrid solution. The client did the segmentation as usual but instead of sending the final composite, it sent the raw alpha channel (i.e. the transparency mask) in addition to the video stream. The composite was then rendered on a server. This added an interesting level of flexibility to the composition, as you could change the background independently and move/scale the participant's masked video to adapt the layout on the fly. But I don't suppose it ever went into production.
Without the alpha, you can either skip the participant, render them unmasked, do the expensive segmentation on the receiver side (where the rendering happens), or do some kind of fast approximation for a mask.
Personally I would probably try to implement this feature first without the alpha channels, maybe just using face detection to get a passable mask cheaply. In a layout with a grid of people and a fancy complex background design, the requirements for mask quality are not quite as strict. There are compositing tricks that could obfuscate the cheap masking.
And then one needs to think of other possibilities:)
for that you also do not need convolutional networks or object recognition or ML, nor pretrained models. Its pure "Do pixel x change within time t, set pixel y = 1. If no change in x, then y = y-z, with z as a factor. If y < threshold, apply blur"
I don't think doing it server side would be cost efficient.
I haven't used those tools in a couple years, but I doubt it's any different now. I know that Google Meet (the tool I use nowadays) still does it client side. Every now and then I break something when updating my Nvidia drivers on Linux and I can no longer blur my background.
Banuba is great if you're not trying to integrate any WebRTC stuff too.
You've suggested it for enhancing/image processing on the client-side and yet, a cursory look at the landing and docs and there's nothing I could see that would help me do this.
Are there any blog/howto guides that are better than your landing page?
Maybe if the device is not good enough then they push it to the server side?
https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_arti...