1. 安装 opencv3.4.0

opencv3.4.0安装主要

1.1安装依赖项:

sudo apt-get install build-essential
 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

1.2 编译安装

# 编译安装。
mkdir build
cd build
 
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_world=True -D CMAKE_INSTALL_PREFIX=/usr/local ..
然后使用cmake-gui参考上述博客搜索CUDA python2 opencv_world

make -j8
sudo make install

1.3 所遇问题

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照


问题出在了ffmpeg上,下图为正确的,应该为–enable

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_02


1.4 环境变量配置

# 新建配置文件
	sudo gedit /etc/ld.so.conf.d/opencv.conf  
	# 输入下文保存
	/usr/local/lib   
	# 使配置生效
	sudo ldconfig
	
	# 继续配置bash
	sudo gedit /etc/bash.bashrc  
	# 输入下文保存
	PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
	export PKG_CONFIG_PATH
	#更新系统库缓存
	source /etc/bash.bashrc 
	#更新数据库索引
	sudo updatedb

1.5 测试是否安装成功

1. Display.cpp

// Display.cpp
#include <stdio.h>  
#include <opencv2/opencv.hpp>  
#include <iostream>  
using namespace cv;  
  
int main()  
{  
    Mat image = imread("timg_1.jpg", 1);  
    if (image.empty())  
    {  
        std::cout << "Image file is empty." << std::endl;  
        return -1;  
    }  
  
    namedWindow("Test");  
    imshow("Test", image);  
  
    waitKey(0);  
  
    return 0;  
}

2. CMakeLists.txt

cmake_minimum_required(VERSION 2.8)  
project( Display )  
find_package( OpenCV REQUIRED )  
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( Display Display.cpp )  
target_link_libraries( Display ${OpenCV_LIBS} )
cmake .  //注意cmake后面是一个空格加一个黑点,这其实是cmake CMakeLists.txt的省略写法  
make  
./Display lena.jpg  //任意图片,命名lena.jpg

2. 安装swig、boost、CodeBlocks

sudo apt install swig
sudo apt-get install libboost-dev
sudo apt install codeblocks

3. 使用swig生成接口文件

3.1 下载opencv-swig接口文件

3.2 将接口文件lib文件夹下的文件与下面三个源文件放到一起(具体文件内容见参考博客)

HKIPcamera.cpp

HKIPcamera.h

HKIPcamera.i

3.3 生成HKIPcamera_wrap.cxx 、HKIPcamera.py文件

cd进入此lib文件夹 注意opencv改为自己的路径

swig -I/home/its/HK/opencv-3.4.0/modules/core/include/ -python -c++ HKIPcamera.i

此时就会看到如下几个文件

python连接海康摄像头拍照 python调用海康sdk_python_03

4. 下载海康SDK开发包

设备网络SDK_V6.1.6.4(for Linux64)播放库SDK V7.3.3.30(for Linux64)(注意往下拉选择Linux64位,应该用不到)

5. 编译动态链接库

5.1 新建project: hktest ,参照博客选择的Console application和release,添加HKIPcameracpp, HKIPcamera.h, HKIPcamera_wrap.cxx

python连接海康摄像头拍照 python调用海康sdk_sdk_04


python连接海康摄像头拍照 python调用海康sdk_linux_05


python连接海康摄像头拍照 python调用海康sdk_linux_06

5.2 工程右键—Build options—Linker settings—linker libraries

1) opencv的所有so文件(自己电脑上有很多.so,服务器上只有libopencv_world.so.3.4.0,不确定是不是opencv装的有问题)

2) 海康SDK中lib下所有的so文件(包括HCNetSDKCom中的)

python连接海康摄像头拍照 python调用海康sdk_ubuntu_07

5.3 project – build options – search directories – Compiler中添加头文件

1)opencv头文件

2) 海康头文件,按原博客报错如下,解决:找到LinuxPlayM4.h所在文件夹,添加进来

python连接海康摄像头拍照 python调用海康sdk_ubuntu_08

3) python头文件(按原博客操作,会出现找不到python.h的错误)解决方案:按原博客导入的文件夹中可能没有python.h,添加anaconda虚拟环境中的python3.6m也可以

4)添加boost

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_09

5.4 project – build option – search directories – Linker中添加 /usr/local/lib路径

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_10

5.5 project – build option – Compiler settings – Other compiler options 添加 -fPIC

python连接海康摄像头拍照 python调用海康sdk_ubuntu_11

5.6 主界面 – Settings – Compiler settings – linker settings – linker libraries 添加

/usr/lib/x86_64-linux-gnu/libpthread.a 右边 other linker options 添加 -lpthread

报错如下:

python连接海康摄像头拍照 python调用海康sdk_python_12


解决方案:如下图Linker settings再添加

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_13

5.7 将HKIPcamera动态链接库地址添加进系统路径

在/etc/ld.so.conf文件结尾添加网络sdk库的路径,如/XXX和/XXX/HCNetSDKCom/,保存之后,然后执行ldconfig

sudo gedit /etc/ld.so.conf
# 末尾添加
/home/its/HK/HKSDK/lib
/home/its/HK/HKSDK/lib/HCNetSDKCom #根据自己的so保存路径改变
# 保存退出
sudo ldconfig

5.8 右键工程Build或者Rebuild

报错1如下: (经不同电脑验证,不管LT0 excepted多少版本,使用gcc4.8 g++4.8都可以解决)

python连接海康摄像头拍照 python调用海康sdk_linux_14


解决方案参考: fatal error: bytecode stream generated with LTO version x.0 instead of the expected x.x报错2如下: /usr/bin/ld: …/…/HKSDK/HKSDK/lib/libPlayCtrl.so||undefined reference to symbol ‘dlsym@@GLIBC_2.2.5’|

python连接海康摄像头拍照 python调用海康sdk_ubuntu_15


解决方案:在命令后面加上 -ldl

不熟悉Code Blocks如何操作,便在命令行中添加

后面又报了几个错误,但较好解决,都是在后面添加一些 -lutil

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_16


复制上面的命令

在终端界面粘贴命令后,加上 -lutil -lrt -shared -ldl

g++ -L../../../../usr/local/lib -o bin/Release/hkread obj/Release/opencv-swig-master/lib/HKIPcamera.o obj/Release/opencv-swig-master/lib/HKIPcamera_wrap.o  -s -lpthread  ../opencv-3.4.0/build/lib/libopencv_world.so ../HKSDK/lib/libAudioRender.so ../HKSDK/lib/libHCCore.so ../HKSDK/lib/libNPQos.so ../HKSDK/lib/libPlayCtrl.so ../HKSDK/lib/libSuperRender.so ../HKSDK/lib/libcrypto.so ../HKSDK/lib/libhcnetsdk.so ../HKSDK/lib/libhpr.so ../HKSDK/lib/libssl.so ../HKSDK/lib/libz.so ../HKSDK/lib/HCNetSDKCom/libAudioIntercom.so ../HKSDK/lib/HCNetSDKCom/libHCAlarm.so ../HKSDK/lib/HCNetSDKCom/libHCCoreDevCfg.so ../HKSDK/lib/HCNetSDKCom/libHCDisplay.so ../HKSDK/lib/HCNetSDKCom/libHCGeneralCfgMgr.so ../HKSDK/lib/HCNetSDKCom/libHCIndustry.so ../HKSDK/lib/HCNetSDKCom/libHCPlayBack.so ../HKSDK/lib/HCNetSDKCom/libHCPreview.so ../HKSDK/lib/HCNetSDKCom/libHCVoiceTalk.so ../HKSDK/lib/HCNetSDKCom/libStreamTransClient.so ../HKSDK/lib/HCNetSDKCom/libSystemTransform.so ../HKSDK/lib/HCNetSDKCom/libanalyzedata.so ../HKSDK/lib/HCNetSDKCom/libiconv2.so /usr/lib/x86_64-linux-gnu/libpthread.a /home/its/anaconda3/envs/tunnel/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.a -lutil -lrt -shared -ldl

python连接海康摄像头拍照 python调用海康sdk_sdk_17

至此,编译成功!!!,bin/Release里会出现编译好的文件

python连接海康摄像头拍照 python调用海康sdk_python连接海康摄像头拍照_18

6. Python读取摄像机测试

6.1 将hkread改名为_HKIPcamera.so,与步骤3.3生成的HKIPcamera.py文件一同放到camera文件夹,新建test.py文件,输入:

import HKIPcamera
import numpy as np
import cv2
 
ip = str('192.168.101.65')  # 摄像头IP地址,要和本机IP在同一局域网
name = str('admin')       # 管理员用户名
pw = str('admin')        # 管理员密码
 
HKIPcamera.init(ip, name, pw)
while True:
    fram = HKIPcamera.getframe()
    cv2.imshow('frame', np.array(fram))
    if cv2.waitKey(24) & 0xff == 27:
        break
 
HKIPcamera.release()

6.2 备注

1) 如果测试时提示如下错误,则说明5.7路径出错

python连接海康摄像头拍照 python调用海康sdk_sdk_19

2) HKSDK与camera文件夹放在同一级目录,可以移植到其他电脑!