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 所遇问题
问题出在了ffmpeg上,下图为正确的,应该为–enable
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
此时就会看到如下几个文件
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
5.2 工程右键—Build options—Linker settings—linker libraries
1) opencv的所有so文件(自己电脑上有很多.so,服务器上只有libopencv_world.so.3.4.0,不确定是不是opencv装的有问题)
2) 海康SDK中lib下所有的so文件(包括HCNetSDKCom中的)
5.3 project – build options – search directories – Compiler中添加头文件
1)opencv头文件
2) 海康头文件,按原博客报错如下,解决:找到LinuxPlayM4.h所在文件夹,添加进来
3) python头文件(按原博客操作,会出现找不到python.h的错误)解决方案:按原博客导入的文件夹中可能没有python.h,添加anaconda虚拟环境中的python3.6m也可以
4)添加boost
5.4 project – build option – search directories – Linker中添加 /usr/local/lib路径
5.5 project – build option – Compiler settings – Other compiler options 添加 -fPIC
5.6 主界面 – Settings – Compiler settings – linker settings – linker libraries 添加
/usr/lib/x86_64-linux-gnu/libpthread.a 右边 other linker options 添加 -lpthread
报错如下:
解决方案:如下图Linker settings再添加
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都可以解决)
解决方案参考: 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’|
解决方案:在命令后面加上 -ldl
不熟悉Code Blocks如何操作,便在命令行中添加
后面又报了几个错误,但较好解决,都是在后面添加一些 -lutil等
复制上面的命令
在终端界面粘贴命令后,加上 -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
至此,编译成功!!!,bin/Release里会出现编译好的文件
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路径出错
2) HKSDK与camera文件夹放在同一级目录,可以移植到其他电脑!