当前位置:   article > 正文

docker容器下GiE连接使用balser工业相机步骤,C++和opencv集成开发

docker容器下GiE连接使用balser工业相机步骤,C++和opencv集成开发

       有段时间没搞basler的相机了,最近突然有个项目需要用到工业相机,在使用时遇到了一些问题做一个记录,隐约觉得去年应该是也遇到这个问题了,没做记录,服务器上也没法用gui界面,basler提供的工具也无法使用,windows下相机是正常使用的,这周卡了两天,问了宝视纳的技术人员,也是没有解决,最后在basler的官网文档和GPT的帮助下,汇总了各类信息并做了大量尝试,总算是解决了,特此记录。

一、basler相机设置

相机的调试和设置如果有条件,最好在windows下面用basler提供的pylon Viewer和ipconfigurator配置和设置相机,避免ip不在同一个网段导致无法找到相机的问题。
(1)连接相机,使用网线可以直接连到电脑,也可以连接到交换机,在bin中打开ipconfigurator.exe
在这里插入图片描述

当状态显示为确定时,就可以了,IP地址和子网掩码都要设置成和宿主机或者交换机一样的网段,否则后续可以ping通网络,但是还是会找不到相机
在这里插入图片描述

二、opencv编译

opencv的编译上一篇文章已经详细写了,直接跳过去看就行了,linux下的opencv编译主要主要编译进去cuda和ffmpeg读取video,跳转地址:ubuntu下使用cmake编译opencv4.8.0+ffmpeg4.2.2+cuda11.1

我这里是在NX上和工程机上都测试过,本篇主要在工程机docker容器下使用,问题也主要集中在docker内使用

三、docker容器创建

docker容器的创建坑也比较多,主要的创建方式有一篇博客也详细的记录了过程,地址:linux下docker容器的使用
主要的问题如下:

3.1、docker创建前,在root权限下操作,防止后期权限不够导致出现问题

sudo su
  • 1

3.2、使用–network=host将去除网络隔离

这个也是很重要的一个步骤,正常情况下,在windows和linux宿主机下都可以正常使用,而进去docker后就一直提示找不到GiE相机设备:

 throw RUNTIME_EXCEPTION("No GigE cameras available.");
  • 1

结合3.1的命令,提供一个创建docker容器的命令:

docker run --name pylon7.3 --network host -dit  -w /cytech_ai/siping -v /cytech_ai:/cytech_ai  -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY  --env LANG=C.UTF-8 --gpus all --privileged  baslerenv:1.0.1 /bin/bash
  • 1

–name:pylon7.3:创建的容器名称
–network:host:去除网络隔离
-w:进入docker容器后自动进入的目录
-v:宿主机和docker的目录容器映射,方便文件操作
baslerenv:1.0.1:镜像名

四、docker下配置basler环境和测试相机

从官网下载对应版本的sdk,在bin中执行pylon-setup-env.sh ,我的路径是baslercode/thridparty/pylon7.3:

source baslercode/thridparty/pylon7.3/bin/pylon-setup-env.sh  baslercode/thridparty/pylon7.3
  • 1

进入示例文件测试docker容器内是否可以找到相机:

cd baslercode/thridparty/pylon7.3/share/pylon/Samples/C++/Grab/Grab
  • 1

使用cmake make一下:

make
  • 1

在这里插入图片描述
make后生成一个Grab可执行文件,执行该文件:

./Grab
  • 1

在这里插入图片描述
执行后正常打印,表示相机在docker内正常连接,可以结合opencv做二次开发了。
如果执行后为如下打印提示:
在这里插入图片描述
表示没找到相机,排查:
(1)需要检测相机IP是否和服务器IP在统一网段,子网掩码也必须一样才行。
(2)检查下载的basler sdk版本是否成功执行了安装,环境变量是否添加成功了。
(3)重新连接相机,使用sdk内提供的工具在windows上打开相机查看,相机能否正常打开。
(4)先在宿主机下使用上述步骤,不在docker内使用,查看是否相机可以正常获取图像,如果可以,问题还是集中在docker的创建和环境变量的设置上。
(5)优化网络带宽,在windows上使用pylon Viewer菜单栏工具中选择优化网络带宽
在这里插入图片描述

五、docker下使用cmakelists添加basler相机

提供一个可参考的cmakelists,txt文件:

# cmake_minimum_required(VERSION <specify CMake version here>)
cmake_minimum_required(VERSION 3.10)
# 声明一个 cmake 工程
set(PROJECT_NAME baslergrabsdk)
project(${PROJECT_NAME})

set(CMAKE_CXX_STANDARD 11)

# set(CMAKE_BUILD_TYPE Debug)#调试使用
set(CMAKE_BUILD_TYPE Release)
if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()
message(STATUS "!!!!! BUILD ${CMAKE_BUILD_TYPE} !!!!!")

#set(ALG_VERSIONS "NX")
#set(CMAKE_C_COMPILER "arm64")

set(ALG_VERSIONS "linuxserver")
set(CMAKE_C_COMPILER "x86")

set(CAMERA_TYPE "basler")

message(STATUS "ALG_VERSIONS info:",${ALG_VERSIONS})

if(${ALG_VERSIONS} STREQUAL  "linuxserver")
    #opencv
    set(OpenCV_INCLUDE_DIRS "/cytech_ai/siping/baslercode/thridparty/opencv480gpu/include")
    set(OpenCV_INCLUDE_SEC "/cytech_ai/siping/baslercode/thridparty/opencv480gpu/include/opencv4")
    set(OpenCV_LDFLAGS "/cytech_ai/siping/baslercode/thridparty/opencv480gpu/lib")

    if(${CAMERA_TYPE} STREQUAL "HK")
        #海康sdk
        set(HK_INCLUDE_DIRS "/data/siping/baslercode/thridparty/HCNetSDKV6.1.9.45__ArmLinux64_ZH/incCn")
        set(HK_LDFLAGS "/data/siping/baslercode/thridparty/HCNetSDKV6.1.9.45__ArmLinux64_ZH/MakeAll")
        set(HK_LDFLAGSCOM "/data/siping/baslercode/thridparty/HCNetSDKV6.1.9.45__ArmLinux64_ZH/MakeAll/HCNetSDKCom")

    elseif(${CAMERA_TYPE} STREQUAL "basler")
        set(BASLER_INCLUDE_DIRS "/cytech_ai/siping/baslercode/thridparty/pylon7.3/include")
        set(BASLER_LDFLAGS "/cytech_ai/siping/baslercode/thridparty/pylon7.3/lib")

    else()
        message(STATUS "CAMERA_TYPE info:",${CAMERA_TYPE},"no version info ,try again!")
    endif()


    #glog日志库
    set(GLOG_INCLUDE "/cytech_ai/siping/baslercode/thridparty/glog/include/")
    set(GLOG_LIB "/cytech_ai/siping/baslercode/thridparty/glog/lib")


elseif(${ALG_VERSIONS} STREQUAL "NX")
    #opencv
    set(OpenCV_INCLUDE_DIRS "/cytech_ai/sipingtest/baslerpro/thridparty/opencv480gpu/include")
    set(OpenCV_INCLUDE_SEC "/cytech_ai/sipingtest/baslerpro/thridparty/opencv480gpu/include/opencv4")
    set(OpenCV_LDFLAGS "/cytech_ai/sipingtest/baslerpro/thridparty/opencv480gpu/lib")

    if(${CAMERA_TYPE} STREQUAL "HK")
        #海康sdk
        set(HK_INCLUDE_DIRS "/cytech_ai/sipingtest/buildfinish/HCNetSDKV6.1.9.45__ArmLinux64_ZH/incCn")
        set(HK_LDFLAGS "/cytech_ai/sipingtest/buildfinish/HCNetSDKV6.1.9.45__ArmLinux64_ZH/MakeAll")
        set(HK_LDFLAGSCOM "/cytech_ai/sipingtest/buildfinish/HCNetSDKV6.1.9.45__ArmLinux64_ZH/MakeAll/HCNetSDKCom")

    elseif(${CAMERA_TYPE} STREQUAL "basler")
        set(BASLER_INCLUDE_DIRS "/cytech_ai/sipingtest/baslerpro/thridparty/pylon7.3/include")
        set(BASLER_LDFLAGS "/cytech_ai/sipingtest/baslerpro/thridparty/pylon7.3/lib")

    else()
        message(STATUS "CAMERA_TYPE info:",${CAMERA_TYPE},"no version info ,try again!")
    endif()


    #glog日志库
    set(GLOG_INCLUDE "/cytech_ai/sipingtest/buildfinish/glog/include/")
    set(GLOG_LIB "/cytech_ai/sipingtest/buildfinish/glog/lib")

elseif(${ALG_VERSIONS} STREQUAL "RK3588")
    #瑞芯微
    set(OpenCV_DIR "/home/siping/thirdparty/opencv480/")
    set(OpenCV_INCLUDE_DIRS "/home/siping/thirdparty/opencv480/include/opencv4")
    set(OpenCV_LDFLAGS "/home/siping/thirdparty/opencv480/lib")

    #海康sdk
    set(HK_INCLUDE_DIRS "/home/siping/thirdparty/HCNetSDK_ArmLinux64_ZH/incCn")
    set(HK_LDFLAGS "/home/siping/thirdparty/HCNetSDK_ArmLinux64_ZH/MakeAll")
    set(HK_LDFLAGSCOM "/home/siping/thirdparty/HCNetSDK_ArmLinux64_ZH/MakeAll/HCNetSDKCom")

    #瑞芯微 glog日志库
    set(GLOG_INCLUDE "/home/siping/thirdparty/glog_arm64/include/")
    set(GLOG_LIB "/home/siping/thirdparty/glog_arm64/lib")

else()
    message(STATUS "ALG_VERSIONS info:",${ALG_VERSIONS},"no version info ,try again!")

endif()


include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_SEC})
link_directories(${OpenCV_LDFLAGS})

message(STATUS "OpenCV library status:")
message(STATUS "    path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_SEC}")
message(STATUS "    libraries: ${OpenCV_LDFLAGS}")

if(${CAMERA_TYPE} STREQUAL "HK")
    include_directories(${HK_INCLUDE_DIRS})
    link_directories(${HK_LDFLAGS})
    link_directories(${HK_LDFLAGSCOM})

    message(STATUS "HKSDK library status:")
    message(STATUS "    include path: ${HK_INCLUDE_DIRS}")
    message(STATUS "    libraries: ${HK_LDFLAGS}")
    message(STATUS "    libraries: ${HK_LDFLAGSCOM}")
elseif(${CAMERA_TYPE} STREQUAL "basler")
    include_directories(${BASLER_INCLUDE_DIRS})
    link_directories(${BASLER_LDFLAGS})

    message(STATUS "BASLER library status:")
    message(STATUS "    include path: ${BASLER_INCLUDE_DIRS}")
    message(STATUS "    libraries: ${BASLER_LDFLAGS}")
endif()


include_directories(${GLOG_INCLUDE})
link_directories(${GLOG_LIB})

message(STATUS "GLOG library status:")
message(STATUS "    include path: ${GLOG_INCLUDE}")
message(STATUS "    libraries: ${GLOG_LIB}")


#添加自己写的其他函数文件,注意这个名字不能和工程名冲突
aux_source_directory(include DIR_HEADER)
include_directories(${DIR_HEADER})	#添加头文件

aux_source_directory(src DIR_CPP)
#-----------------------------------------------------------------------------------
##set install path
set(CMAKE_BUILD_RPATH "${OpenCV_LDFLAGS}")

if(${ALG_VERSIONS} STREQUAL "NX")
    set(CMAKE_INSTALL_PREFIX /cytech_ai/sipingtest/baslerpro/Basleralglib)

elseif(${ALG_VERSIONS} STREQUAL "linuxserver")
    set(CMAKE_INSTALL_PREFIX /cytech_ai/siping/baslercode/Basleralglib)

endif()

message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")

## set runtime path
set(CMAKE_INSTALL_RPATH ".")

# 如果想生成动态库,SHARE .so
add_library(${PROJECT_NAME} SHARED  ${DIR_CPP} ${DIR_HEADER})
set(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
#add_executable(${PROJECT_NAME} ${DIR_CPP} main.cpp )

#链接库
target_link_libraries(${PROJECT_NAME}

        ${OpenCV_LDFLAGS}
        -lopencv_world
        -lopencv_img_hash

        ${GLOG_LIB}
        -lglog

        ${BASLER_LDFLAGS}
        -lFirmwareUpdate_gcc_v3_1_Basler_pylon
        -lGCBase_gcc_v3_1_Basler_pylon
        -lGenApi_gcc_v3_1_Basler_pylon
        -lgxapi
        -lpylonutility
        -lpylonbase
        -lXmlParser_gcc_v3_1_Basler_pylon
        -lpylonc
        -lpylon_TL_gige

        )

install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})

file(GLOB GLOG_LIB "${GLOG_LIB}/lib*.so*")
file(GLOB OpenCV_LDFLAGS "${OpenCV_LDFLAGS}/lib*.so*")
file(GLOB BASLER_LDFLAGS "${BASLER_LDFLAGS}/*.so*")


install(PROGRAMS
        ${OpenCV_LDFLAGS}
        ${BASLER_LDFLAGS}

        ${GLOG_LIB}
        DESTINATION ${CMAKE_INSTALL_PREFIX})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196

其余的测试代码可以参考代码:机器视觉之Basler工业相机使用和配置方法(C++)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/942666
推荐阅读
相关标签
  

闽ICP备14008679号