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
    评论
<h1>Video_Live_Stream</h1> 一个视频推流小工具 ---------- <h1>简介</h1> Video_Live_Stream是在Linux系统下基于python调用ffmpeg实现的简易推流工具,基本功能如下: * 读取播放列表,按列表顺序循环推流视频至rtmp服务器。 * 添加了`bilibili直播间弹幕模块`,可接收及发送弹幕。 * 可通过指令修改`视频播放模式`,结合弹幕模块可以直播间操作播放模式。 <h1>文件结构</h1> Video_Live_Stream * data * configure.json * <u>配置文件,存放推流参数</u> * filter_complex.txt * <u>存放滤镜参数</u> * loop_tag * <u>存放循环标识</u> * PID_keep_pipe * <u>存放keep_pipe的pid</u> * PID_push * <u>存放push进程中ffmpeg进程的pid</u> * PID_send * <u>存放send进程中ffmpeg进程的pid</u> * play_method * <u>存放播放模式</u> * play_skip * <u>存放指令</u> * font * msyh.ttc * <u>字体文件(修改后需要在data/filter_complex.txt中同步修改)</u> * log * log.log * <u>send进程输出日志,结合py/send_check.py使用</u> * pipe * keep1 * <u>管道文件,用于维持pipe/pipe_push开启</u> * keep2 * <u>管道文件,用于维持pipe/pipe_push开启</u> * pipe_push * <u>管道文件,用于推流</u> * playlist * playlist.txt * <u>当前播放列表</u> * playlist_memory.txt * <u>用于保存播放进度</u> * ... * <u>需自行创建的播放列表</u> * ... * py * bilibili_live * aiorequest.py * <u>网络请求模块</u> * live.py * <u>直播间连接模块</u> * utils * cmd_execute.py * <u>命令执行模块</u> * file_io.py * <u>文件读写模块</u> * LinkList.py * <u>链表模块</u> * play_enum.py * <u>自定义枚举模块</u> * change.py * <u>发送指令</u> * chat.py * <u>直播间连接,弹幕接收与发送</u> * keep_pipe.py * <u>维持管道</u> * stop_pipe.py * <u>取消维持管道</u> * push.py * <u>视频推流至管道</u> * send.py * <u>管道数据推流至rtmp服务器</u> * send_check.py * <u>检查send进程运作</u> * video * xxx文件夹 * 01.mp4 * <u>视频名称</u> * 02.mp4 * ... * ... * ... * ... ---------- <h1>准备工作</h1> 首先把压缩包下载到本地然后解压,做好以下准备。 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值