Linux下Python调用海康SDK实时读流(详细问题解决方案)

主要参考:Linux下Python调用海康SDK实时视频流获取linux下Python调用海康SDK实时显示网络摄像头

1. 安装 opencv3.4.0

opencv3.4.0安装主要 参考Linux下Python调用海康SDK实时视频流获取

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
在这里插入图片描述
解决方法写在了搭建Nginx-Rtmp流媒体服务器及FFmpeg推流

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文件夹放在同一级目录,可以移植到其他电脑!

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值