手机作为IP摄像头¶
概要¶
本节课阿凯给大家讲解了如何使用IP摄像头APP,将你的手机变成IP摄像头,同时介绍了如何使用OpenCV读取IP摄像头的视频流。
keywords IP 手机 IP-Camera 网络视频流
目录¶
1-下载IP摄像头APP¶
在你手机的应用市场里面搜索这款名字叫做IP摄像头的APP, 图标就是下面这样的:
2-局域网¶
需要确定你的手机与电脑处在同一个局域网下,即他们连接同一个WIFI。
3-运行APP¶
点击运行IP摄像头APP , 点击下方的打开IP摄像头服务器 的选项。
是否继续,点击确定
服务器开启之后,会提示你这个视频流服务器在局域网中的IP还有端口号。
在当下的url是
http://192.168.43.1:8081
在没有客户端连接的时候,你可以点击右上角设置画面的分辨率。
可以点击切换 选择使用前置摄像头还是后置摄像头。
4-在网页中预览视频流¶
在浏览器中输入地址
http://192.168.43.1:8081
接下来就需要填入用户名跟密码,默认为:
用户名: admin 密码: admin
下方有很多工具栏, 你可以设定图像的分辨率,快照等一系列操作。
5-OpenCV读取视频流¶
如果我们像进行图像处理,就必须读取到IP摄像头提供的视频流,通信协议为http。
核心代码就两行
# 制定URL http://用户名:密码@IP地址:端口号/ ip_camera_url = 'http://admin:admin@192.168.43.1:8081/' # 创建一个VideoCapture cap = cv2.VideoCapture(ip_camera_url)
TODO ? Windows下要怎么做
IP需要自己修改, 端口号默认为8081
完整代码如下:
ipcam-cap.py
# -*- coding: utf-8 -*- ''' 读取手机摄像头的视频流 1. 手机与电脑链接同一个WIFI热点 2. 需要sudo权限: sudo python ipcam-cap.py ''' import cv2 import time ip_camera_url = 'http://admin:admin@192.168.2.237:8081/' # 创建一个窗口 cv2.namedWindow('ip_camera', flags=cv2.WINDOW_NORMAL | cv2.WINDOW_FREERATIO) cap = cv2.VideoCapture(ip_camera_url) if not cap.isOpened(): print('请检查IP地址还有端口号,或者查看IP摄像头是否开启,另外记得使用sudo权限运行脚本') while cap.isOpened(): ret, frame = cap.read() cv2.imshow('ip_camera', frame) if cv2.waitKey(1) == ord('q'): # 退出程序 break cv2.destroyWindow('ip_camera') cap.release()
代码必须使用管理员权限运行
sudo python ipcam-cap.py
运行代码,初始化需要一段时间。
不出意外的话, 你可以看到下面的这个窗口。
6-设置VideoCapture的缓存区大小¶
有时候,如果你在OpenCV中做图像处理的时候,如果图像处理比较耗时,就导致存在VideoCapture缓存区的图像队列越积越多。 你就会发现延时好高啊,过了半天画面才更新,实际的画面与VideoCapture的实际画面时差越拉越大。
这个问题,可以通过缩小缓冲区尺寸来解决。
cap.set
设定VideoCapture的各种属性,这里指定缓冲区的尺寸为1:
cap.set(cv2.CAP_PROP_BUFFERSIZE,1)
完整一些的代码片段:
# 摄像头的IP地址 # http://用户名:密码@IP地址:端口/ ip_camera_url = 'http://admin:admin@192.168.2.237:8081/' # 创建一个VideoCapture cap = cv2.VideoCapture(ip_camera_url) # 设置缓存区的大小 !!! cap.set(cv2.CAP_PROP_BUFFERSIZE,1)