问题描述

为了给半夜实验室的老鼠拍照,想给台式机按一个usb摄像头,并实现对该摄像头的实时远程访问,即将台式机(windows 10)的usb摄像头变成一个网络摄像头。

解决方法

使用已有的软件

本以为这个问题是一个很成熟的问题,windows端合适的软件应该有很多,但没想到找了一个小时只找到了收费软件,免费的也有几个

如:

Win IP Camera

IP摄像头

但不知道为什么都不能用,而且更多的app的目的并不是将windows端的usb摄像头变为局域网内网络摄像头,而是使局域网内的网络摄像头能够被windwos电脑直接访问。

代码

没能找到现成的软件,便想使用Python和Opencv完成读取视频流、并将其共享到端口,从而实现对该摄像头的实时远程访问。

(暂时只能实现局域网内的访问)

事实上,此类任务显然是有人做过的,可以通过搜索关键字"camera-live-streaming"获得更多资料。

本文参考的下面的github库:

https://github.com/akmamun/camera-live-streaming

但该代码只能本机访问,原因是因为flask在debug模式下默认只能本机访问,因此要更改app.run()中的内容才能实现局域网内其他设备的访问。

更改后的代码如下:

app.py

from camera import VideoCamera
from flask import Flask, render_template, Response
import timeapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def gen(camera):while True:try:frame = camera.get_frame()except Exception:print("Video is finished or empty")#return Noneframe = camera.get_heartbeat()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(host = '0.0.0.0')

camera.py

import cv2class VideoCamera(object):def __init__(self):# Using OpenCV to capture from device 0. If you have trouble capturing# from a webcam, comment the line below out and use a video file# instead.#self.video = cv2.VideoCapture(0)# If you decide to use video.mp4, you must have this file in the folder# as the main.py.# self.video = cv2.VideoCapture('suits_hd.mp4') self.video = cv2.VideoCapture(0)def __del__(self):self.video.release()def get_frame(self):success, image = self.video.read()# We are using Motion JPEG, but OpenCV defaults to capture raw images,# so we must encode it into JPEG in order to correctly display the# video stream.ret, jpeg = cv2.imencode('.jpg', image)return jpeg.tobytes()def get_heartbeat(self):# jpeg = cv2.imread('noise-black.jpg')image = cv2.imread('noise-green.jpg')ret, jpeg = cv2.imencode('.jpg', image)return jpeg.tobytes()

网页端

index.html

<!doctype html>
<html lang="en">
<head><!-- Required meta tags --><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- Bootstrap CSS --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"><title>Live Streaming Demonstration</title>
</head>
<body>
<div class="container"><div class="row"><div class="col-lg-8  offset-lg-2"><h3 class="mt-5">Live Streaming</h3><img src="{{ url_for('video_feed') }}" width="100%"></div></div>
</div>
</body>
</html>

但目前仍存在两个问题:

1. 每个时刻只允许一台设备访问,不允许多台设备同时访问;

2. 只能在局域网内部访问。

问题1 只允许一台设备访问

通过设置多线程app.run(host = '0.0.0.0', threaded=True)即可解决,即将app.py改为:

from camera import VideoCamera
from flask import Flask, render_template, Response
import timeapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def gen(camera):while True:try:frame = camera.get_frame()except Exception:print("Video is finished or empty")#return Noneframe = camera.get_heartbeat()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(host = '0.0.0.0', threaded=True)

问题2 只能在局域网内部访问

本来想做内网渗透,但意外发现实验室电脑虽然没有公网的IPv4地址,但是有公网的Ipv6地址,而flask是支持ipv6的,于是将app.py改为如下代码即可:

from camera import VideoCamera
from flask import Flask, render_template, Response
import timeapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def gen(camera):while True:try:frame = camera.get_frame()except Exception:print("Video is finished or empty")#return Noneframe = camera.get_heartbeat()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(host = '::', threaded=True) # ipv6

注:访问ipv6时要加[],如:

http://[xxxx:xxx:xxxx:xxx::x:xxxx]:5000/

======================================================================================================

原载于 我的博客

如有错误,请联系 rxnlos@126.com

======================================================================================================

使用Python+Opencv+Flask将windows端的摄像头变为网络摄像头的方法相关推荐

  1. Python + opencv对拍照得到的图片进行背景去除的实现方法

    这篇文章主要介绍了Python + opencv对拍照得到的图片进行背景去除的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 有时候我们 ...

  2. python读取网络摄像头的帧_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  3. python抓取网络摄像头_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  4. python编写的网络摄像头_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  5. 使用Python+OpenCV+Flask来处理浏览器中的视频

    现在我们常常在家里.办公室或其它地方安装网络摄像头或监控摄像头来进行视频监控. 大多数人使用IP摄像机(互联网协议摄像机)而不是闭路电视(闭路电视),这是因为它们具有更高的分辨率和更低的布线成本.你可 ...

  6. 上海师范大学Windows端VPN使用教程及课表查询方法

    1.首先强调:学生电子邮件和 VPN 服务须在修改初始密码之后才能登录使用. 2.其次: 学校已为每位新生开通了统一身份认证账号( CUID )(如:1000101010, 详见录取 通知书上的 CU ...

  7. 3h精通OpenCV(一)- 读取图像视频与网络摄像头

    0.准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库. 1.读取图像 调用imread()方法获取我们资源文件夹中的图片 使用 ...

  8. linux打开网络摄像头失败,Opencv没有检测到linux上的firewire网络摄像头

    我通过firewire连接了一个凸轮,并尝试使用opencv访问它 . 相机在香菜中被检测到并且能够获得视频流 . 以下是我使用的代码 #include "/home/iiith/openc ...

  9. python+opencv用电脑调用手机摄像头或其他网路摄像头

    python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...

最新文章

  1. HTML的标签描述5
  2. 【记录】台式机的组装
  3. python strip() 函数探究
  4. 在阿里云服务器上安装docker
  5. 的内怎么放_汽车后备箱的“四不放”原则,你知道吗?网友:怎么不早说
  6. 前端学习(1677):前端系列实战课程之游戏初始化
  7. 解决问题:HTTP 错误 401.1 - 未授权:登录失败【转】
  8. python开发技术详解代码_python开发技术详解(四)
  9. QPainter的使用
  10. c 和java用cfb_一文彻底搞懂Java中的环境变量
  11. 视频教程-excel VBA编程番外篇(字典+正则表达式+FSO)-Office/WPS
  12. 制定自己的SMART目标
  13. 产业分析:阿里巴巴碳中和行动报告
  14. C/C++ Npcap包实现ARP欺骗
  15. 【报告分享】笔记本行业营销洞察白皮-腾讯x京东(附下载)
  16. 机器学习理论知识的自学整理(持续更新,建议收藏)
  17. 编译 发布 release的apk
  18. 小程序获取用户头像、昵称
  19. office邮箱不能预览附件问题
  20. CSharp中的集合与字典:不同数据量的内存占用情况

热门文章

  1. 一篇文章读懂SDP、RTMP、HLS、SIP、MMS
  2. 【简七理财笔记】第七课:巧用信用卡,该薅的羊毛就要薅
  3. Web课程设计之学生成绩管理系统
  4. vue——axios请求成功却进入catch的原因
  5. ASO优化:如何提高App Store应用商店中排名?
  6. 树莓派浏览网页,显示无法打开此网址
  7. MSP430 F5529 硬件SPI OLED 单片机 0.96英寸7针OLED SPI 6针OLED
  8. 新一代打包神器Walle(瓦力)使用小结
  9. window10/11 更改AHCI模式启动蓝屏解决办法
  10. 参考文献格式字号字体_实用文档其他之参考文献的正确格式要求参考文献字体格式要求...