1.4_海康SDK
文章目錄
- 1.4_海康SDK
-
-
- 0、海康攝像頭SDK配置
- 1、得到海康對應參數
- 2. rtsp協定
- 3、mac下Python調用海康SDK實時顯示網絡攝像頭(swig)
-
- Error: 'Python.h' file not found
- Error: 'boost/preprocessor/repetition/repeat_from_to.hpp' file not found
- Error: linux和mac的庫不通用(我可能是個傻子,是以mac上根本不能實作……)
- 4、windows下Python調用海康SDK實時顯示網絡攝像頭(swig)
-
- Error:IplImage* 不能轉化為 Mat
-
0、海康攝像頭SDK配置
1、捕獲海康威視IPCamera圖像,轉成OpenCV可以處理的圖像(二)
http://blog.csdn.net/wanghuiqi2008/article/details/31410509
2、opencv讀取海康威視攝像頭(可用)ipcamera
http://blog.csdn.net/shakevincent/article/details/51490197
3、SDK庫檔案和頭檔案配置
- 解壓SDK可以得到頭檔案和庫檔案
- 在VC++目錄中添加opencv的頭檔案包含路徑和SDK中的頭檔案(修改“頭檔案”為“include”)
- 添加庫檔案:既要添加庫檔案lib也要把lib下的HCNetSDKCom檔案包含進去
- 再連結器——輸入——添加依賴項,把opencv的lib和SDK中的lib添加進去(包含HCNetSDKCom的lib)
- Q1: HCNetSDK.h 中有個地方要加個空格
- 修改plaympeg4.h檔案。在
的extern "C" __declspec(dllexport)
和"C"
之間需要增加空格,否則會導緻編譯報錯。__
- Q2: HCNetSDK/lib 包括 HCNetSDKCom 中的dll 複制到windows/system32
4、調用dll:
.h, .lib, .dll 的路徑分别放在包含目錄,庫目錄(以及連結器-輸入),windows/system32
VS 2015 DLL的建立、靜态調用和動态調用
VS 2013環境生成和調用DLL動态連結庫
1、得到海康對應參數
DWORD getFocusPos(NET_DVR_PREVIEWINFO struInfo) {
NET_DVR_FOCUSMODE_CFG *focusModeCfg = new NET_DVR_FOCUSMODE_CFG();//初始化PTZ基本參數結構體
LPVOID *ptr = new LPVOID();//接收資料的緩沖指針
//LPVOID ptr;
DWORD size = sizeof(focusModeCfg);//擷取結構體空間大小
LPDWORD BytesReturned;// 實際收到的資料長度指針,不能為NULL
NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_FOCUSMODECFG, struInfo.lChannel, ptr, size, BytesReturned);//擷取配置參數指針
focusModeCfg = (NET_DVR_FOCUSMODE_CFG *)ptr;
std::cout << "dwFocusPos:" << focusModeCfg->dwFocusPos << std::endl;
return focusModeCfg->dwFocusPos;
}
LPVOID *ptr = new LPVOID();
在堆上存儲資料,适用于大容量的資料
LPVOID ptr;
在記憶體中開辟空間
2. rtsp協定
存在一個很大的缺陷,即通過流媒體協定獲得的碼流沒有辦法滿足實時要求,傳回圖像存在 3-5 秒延時,在實際項目中并不可行。另一方面,僅僅取得碼流對于實際項目也并不足夠,還需要想方設法對雲台進行控制。
// 說明:
// username:使用者名,例如admin
// passwd:密碼,例如12345
// ip:裝置的ip位址,例如192.0.0.64
// port:端口号預設554,若為預設可以不寫
// codec:有h264、MPEG-4、mpeg4這幾種
// channel:通道号,起始為1
// subtype:碼流類型,主碼流為main,子碼流為sub
rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
cam = cv2.VideoCapture(“rtsp://admin:[email protected]:554/h264/ch1/sub/av_stream”)
3、mac下Python調用海康SDK實時顯示網絡攝像頭(swig)
linux下Python調用海康SDK實時顯示網絡攝像頭
Error: ‘Python.h’ file not found
-
解決方法:
https://developer.apple.com/library/archive/technotes/tn2328/_index.html
點選項目-targets-build settings
python3.7-config --cflags
# 輸出結果:将-I後的路徑添加到 Header Search Paths setting
-I/Users/wumanjia/anaconda3/include/python3.7m -I/Users/wumanjia/anaconda3/include/python3.7m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/wumanjia/anaconda3/include -arch x86_64 -I/Users/wumanjia/anaconda3/include -arch x86_64
python3.7-config --ldflags
# 輸出結果:将-L後的路徑打開,拖動檔案libpython3.7.dylib至項目中
-L/Users/wumanjia/anaconda3/lib/python3.7/config-3.7m-darwin -lpython3.7m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation
Error: ‘boost/preprocessor/repetition/repeat_from_to.hpp’ file not found
-
解決方法:安裝boost brew install boost
macOS 中Boost的安裝和使用
macOS 中Boost的安裝和使用
Mac OS下安裝Boost庫并在Xcode下測試運作
(1)頭檔案目錄:/usr/local/Cellar/boost/1.69.0/include
Add /usr/local/boost_1_60_0/include/ to the Header Search Paths
(2)lib目錄:/usr/local/Cellar/boost/1.69.0/lib
Add /usr/local/boost_1_60_0/lib/ to the Library Search Paths
Error: linux和mac的庫不通用(我可能是個傻子,是以mac上根本不能實作……)
linux下編譯的庫可以拿到mac下來用嗎
4、windows下Python調用海康SDK實時顯示網絡攝像頭(swig)
HikVision SDK: C++ 至 Python
- 安裝swig。并添加相應環境變量
- 下載下傳opencv-swig。
- 将上述接口檔案中
檔案夾的所有檔案拷貝到項目所在目錄,并與三個源檔案放置在一起。(注:源檔案包括lib
、HKIPcamera.cpp
和HKIPcamera.h
)HKIPcamera.i
- 通過指令行使用
生成swig
檔案。cd到HKIPcamera.i源檔案檔案夾下,并修改HKIPcamera_wrap.cxx
路徑OpenCV
swig -I"D:\Program Files\opencv3\opencv\build\include" -python -c++ HKIPCamera.i
- 下載下傳 boost 庫。boost 庫提供了一系列擴充的 C++ 方法,并将其頭檔案和庫檔案添加到項目中。
// 頭檔案目錄
D:\Boost\boost_1_68_0
// 庫檔案目錄
D:\Boost\boost_1_68_0\libs
- 編譯動态連結庫.dll。需要另外建立一個新的「Win32 Console Application」工程,且反選「生命周期(SDL)檢查」,否則會導緻編譯失敗。
- 在「屬性管理器」添加 Python 頭檔案目錄和庫目錄。再将
檔案添加到頭檔案、HKIPcamera.h
和HKIPcamera_wrap.cxx
添加到源檔案、HKIPcamera.cpp
添加到工程目錄下,進行編譯。HKIPcamera.i
- 将生成的
檔案改名為.dll
,并與_HKIPcamera.pyd
放置在同一檔案目錄下,即可在HKIPcamera.py
中引用。Python
Error:IplImage* 不能轉化為 Mat
Mat pImg(pFrameInfo->nHeight, pFrameInfo->nWidth, CV_8UC3);
Mat src(pFrameInfo->nHeight + pFrameInfo->nHeight / 2, pFrameInfo->nWidth, CV_8UC1, pBuf);
cv::cvtColor(src, pImg, CV_YUV2BGR_YV12);
//static Mat* pImgYCrCb = cvCreateImage(cvSize(pFrameInfo->nWidth, pFrameInfo->nHeight), 8, 3);//得到圖像的Y分量
//yv12toYUV(pImgYCrCb->imageData, pBuf, pFrameInfo->nWidth, pFrameInfo->nHeight, pImgYCrCb->widthStep);//得到全部RGB圖像
//static IplImage* pImg = cvCreateImage(cvSize(pFrameInfo->nWidth, pFrameInfo->nHeight), 8, 3);
//cvCvtColor(pImgYCrCb, pImg, CV_YCrCb2RGB);
-
測試 test.py
linux下Python調用海康SDK實時顯示網絡攝像頭
-
生成的dll其實可以通用
Error: 在另外電腦上運作,報錯dll load faild
- 解決:将相關dll放在目前檔案夾中(包括opencv+HIKdll)可以通過dependecy walker檢視
- 使用:必須使用python3.6