手機作為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:[email protected]: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:[email protected]: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:[email protected]:8081/' # 創建一個VideoCapture cap = cv2.VideoCapture(ip_camera_url) # 設置緩存區的大小 !!! cap.set(cv2.CAP_PROP_BUFFERSIZE,1)