之前這篇文章講了如何通過網絡攝像頭(web camera)獲取實時視頻流,但是這種方法的缺陷就是攝像頭和主機必須連在一起,那這種在室外部署的時候就會非常麻煩並且不安全,所以后來找了下用海康威視或者大華的監控攝像頭,然后通過IP地址可以無線獲取視頻流,這樣就實現了主機和攝像頭分開,方便部署。
1.設備
這里用的是海康的魚眼攝像頭,型號是DS-2CD3955FWD-IWS,其實基本上能支持sdk二次開發的IP攝像頭都可以(參考這里)。魚眼攝像頭相比普通的攝像頭經過扭曲,因此在應用的時候一般需要進行反扭曲,這一步會造成比較大的延遲,因此沒有不是特定需求的話盡量使用普通的就可以。
注:海康的螢石系列貌似並不能通過RTSP地址獲取,而這里的方法需要用RTSP進行視頻流獲取,所以無法螢石系列就不在此列。
2.通過RTSP地址獲取視頻流
首先需要知道海康設備的RTSP地址,可以通過這里進行查看。
import cv2
source = ""rtsp://admin:12345@192.168.1.64/Streaming/Channels/1"
注: admin和12345分別是ip camera的用戶名和密碼,在瀏覽器上第一次登錄攝像頭的時候會進行設置;
192.168.1.64是攝像頭的默認IP,在瀏覽器中輸入即可進入登錄頁面(如下);
Channels/1和Channels/2分別對應主碼流和子碼流地址,兩者的分辨率不同。IP攝像頭無法通過opencv調節分辨率,只能在海康的監控界面的配置進行設置(如下)。
3. 攝像頭校准(calibration)(optional)
這個配置有很多,而且官方提供的校准文檔很詳細(戳這里),就不具體細講了。需要python版本的代碼的話可以直接fork這里;如果是c++版本的話可以參考這里
參考
http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#calibratecamera
https://stackoverflow.com/questions/35489873/i-need-hikvision-camera-which-has-ip-20-0-0-14-and-user-name-password-is-admin-1
https://github.com/XinningShen/Fisheye_Camera_Calibration/blob/master/GetCameraCalibrationCoefficient.py
https://github.com/smidm/opencv-python-fisheye-example/blob/master/fisheye_example.py
https://www.ispyconnect.com/man.aspx?n=Hikvision