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

编程入门 行业动态 更新时间:2024-10-12 01:31:44

Linux下Python调用海康SDK<a href=https://www.elefans.com/category/jswz/34/1771422.html style=实时读流(详细问题解决方案)"/>

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-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

1.2 编译安装

# 编译安装。
mkdir build
cd buildcmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_world=True -D CMAKE_INSTALL_PREFIX=/usr/local ..
然后使用cmake-gui参考上述博客搜索CUDA python2 opencv_worldmake -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# 继续配置bashsudo gedit /etc/bash.bashrc  # 输入下文保存PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfigexport 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 cv2ip = 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:breakHKIPcamera.release()

6.2 备注

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

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

更多推荐

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

本文发布于:2024-02-19 13:24:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764016.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实时   解决方案   详细   Linux   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!