【问题标题】:Opencv camera access issue when launching flask app on ubuntu20.04 server在 ubuntu20.04 服务器上启动烧瓶应用程序时的 Opencv 摄像头访问问题
【发布时间】:2022-01-23 23:38:23
【问题描述】:

我在 linode 上的云服务器上部署了一个烧瓶应用程序。我有 nginx 运行静态文件和 gunicorn 运行 python 脚本。我还设置了一个 ufw 部署时我单击开始打开 ​​cv 循环的链接,但它无法通过索引 0 访问相机。

[WARN:11] 全局 /tmp/pip-req-build-24v3eisa/opencv/modules/videoio/src/cap_v4l.cpp (890) 打开 VIDEOIO(V4L2:/dev/video0): 无法打开摄像头按索引

在本地运行时,脚本第一次运行良好,但我需要重新启动本地服务器并再次启动它才能工作。有没有一种方法可以在用户许可的情况下访问服务器上的用户摄像头?

【问题讨论】:

  • “我在 linode 上部署了一个烧瓶应用程序到我的云服务器。” -- 你希望它如何连接到你的本地网络摄像头?
  • 它可以通过 ip 域作为 Web 应用程序访问,因为 flask 是在 nginx 和 gunicorn 上运行的 Web 应用程序框架。如果我可以单击与我的 python 脚本交互的链接,我假设有一种方法可以与用户相机交互,这正是问题所在@berak
  • "它可以通过 ip 域访问" -- 但是您尝试通过 id 而不是 url 打开一个(本地)usb 网络摄像头。
  • 所以有一种方法可以通过 url 访问设备相机。有没有办法确定用户设备的 url 是什么? @berak
  • “有没有办法确定用户的设备 url”——如果它是一个实际的 IP 摄像头,用户(并且只有那个)会知道,但同样——普通的没有办法USB网络摄像头

标签: python opencv flask server


【解决方案1】:

我找到了一些关于从前端访问用户摄像头到服务器的原始问题的答案。我相信我的许多问过这个问题的 python 朋友会发现它很有用。

如果您想使用 Flask,您似乎需要使用 JS 的 getusermedia() 来访问用户相机,并将其流式传输回来,如这篇数字海洋文章中所示;

https://www.digitalocean.com/community/tutorials/front-and-rear-camera-access-with-javascripts-getusermedia

我还在 streamlit 文档上找到了另一种使用 webrtc 的方法,这似乎更容易。唯一的缺点是我将不得不重建应用程序以简化但它非常用户友好并且不会成为问题! :)

https://discuss.streamlit.io/t/new-component-streamlit-webrtc-a-new-way-to-deal-with-real-time-media-streams/8669/31

【讨论】:

  • 更新我终于在 Streamlit 上解决了它,它与通过网页访问的用户网络摄像头完全兼容 :) 本质上,您正在构建一个为您处理帧而不是运行的类它通过一个opencv while循环。一开始有点令人困惑,但他们在 streamlit 文档中有很多很好的例子。
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 2018-07-03
  • 2021-11-27
  • 1970-01-01
  • 2021-04-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多