文章目录
1.前言
今天在查找资料时,在github上发现了一个开源库:【Aravis: A vision library for genicam based cameras 】
好像是支持所有的gige以及usb3的工业相机?测试一下先。
2.在linux下安装
2.1.安装meson
Aravis是使用meson来进行管理编译的,因此需要先安装meson;安装的方式可以从下面二选一
2.1.1.利用pip进行安装
注意要用下面的语句来安装meson,而不要用"apt install meson",因为用"apt install meson"安装的版本比较旧。
pip3 install meson
2.1.2.直接下载meson源码
假如用“pip3 install meson”还是安装不了的话,其实可以直接到官网下载
【meson release】
下载,解压后就可以直接用了。
比如我这里解压在/root/Desktop/aravis/meson-1.4.0/里面,然后我在/root/Desktop/aravis/aravis-0.8.31/里面使用的话,只需要
../meson-1.4.0/meson.py setup build
2.2.安装必要的库
sudo apt install libxml2-dev libglib2.0-dev cmake libusb-1.0-0-dev gobject-introspection \
libgtk-3-dev gtk-doc-tools xsltproc libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev \
libgirepository1.0-dev gettext
还有解码库,各种都给它弄满
# 这两个和下面的有什么区别
sudo apt install gstreamer1.0-plugins-bad
sudo apt install gstreamer1.0-plugins-ugly
sudo apt install libgstreamer-plugins-base1.0-dev
sudo apt install libgstreamer-plugins-good1.0-dev
sudo apt install libgstreamer-plugins-bad1.0-dev
2.3.编译Aravis源码
官方提供的安装文档在这里【Aravis-0.8 Installation and Debug】,主要是这几个指令
meson setup build # 假如你使用的是源码安装的meson,那么就需要把meson.py的位置明确地写完,才能调用,比如我上面的../meson-1.4.0/meson.py
cd build
ninja
ninja install
3.在Windows下安装
其实主要参考官方提供的【aravis-msvc.yml】文档来进行。里面都是一些指令,按步骤执行即可。
结合官方的文档,以及参考论坛这里的讨论:【MSVC Conan Install】,我们可以知道在Windows下编译Aravis的步骤为:
(根据他们的讨论,貌似可以顺利编译出函数库,但是编译不了Viewer。不过也没关系,有库就够了,可视化的东西可以自己用Qt实现。)
3.1.安装conan
直接pip安装conan。这里必须要指定版本,不然会自动给你安装最新版(2.x),而1.x和2.x版本的使用方式差异巨大。
pip install "conan<2.0.0"
3.2.配置conanfile.txt
新建一个文件夹,然后在这个文件夹下新建一个conanfile.txt文件。比如我是新建了这个【C:\Users\Administrator\Desktop\Aravis】文件夹。
conanfile.txt里面的内容为:
[requires]
libiconv/1.17
#gobject-introspection/1.69.0
gstreamer/1.22.3
#gst-plugins-base/1.22.3 Disable gstreamer for now, latest gst-plugins-base is 1.19.2
#gtk/4.4.0
libxml2/2.10.3
zlib/1.2.13
libusb/1.0.26
[build_requires]
meson/0.59.2
pkgconf/1.9.3
[generators]
pkg_config
virtualenv
virtualbuildenv
virtualrunenv
[options]
glib:shared=True
gstreamer:shared=True
gst-plugins-base:shared=True
3.3.下载源码并解压
到【Aravis: A vision library for genicam based cameras 】下载源码,并解压到和conanfile.txt同一个目录下
3.4.执行conan install
打开cmd,然后cd到conanfile.txt所在目录
然后执行下面的语句:
(我用的vs2019,因此版本是16;版本号与vs的年份的对应关系可以看这个【最全Visual Studio版本号对应表VisualStudioVersion】;注意把下面的最后那个点也要拷贝上。)
conan install -s os="Windows" -s compiler="Visual Studio" -s compiler.version="16" -s arch="x86_64" -s build_type="Release" -b pcre -b missing -b cascade -if build .
正常来说,应该不会报什么错。
3.5.执行meson相关操作
还是在当前目录下,依次执行下面这三个语句。作用应该是设置好临时环境
build\activate.bat
build\activate_build.bat
build\activate_run.bat
接着cd到aravis的源码目录
接着执行下面的语句:
meson --prefix C:\Users\Administrator\Desktop\Aravis\install --buildtype release --pkg-config-path C:\Users\Administrator\Desktop\Aravis\build -Ddocumentation=disabled -Dgst-plugin=disabled -Dintrospection=disabled -Dusb=enabled -Dviewer=disabled -Dgv-n-buffers=1 -Dgentl-producer=true . .\build
上面这个语句里面的两个路径(–prefix、–pkg-config-path)一定要设置好。第一个是指编译出来的东西(.exe,.lib,.dll,.h)将会安装到哪里;第二个路径是我们在3.4小节执行conan install时生成的文件夹,里面都是一些依赖库、环境相关的东西,很重要,一定要指定正确。假如没有指定正确的话,大概率会报下面的错:
Run-time dependency glib-2.0 found: NO (tried pkgconfig and cmake)
meson.build:59:0: ERROR: Dependency "glib-2.0" not found, tried pkgconfig and cmake
正常的话,你会看到以下画面:
然后执行编译:
meson compile -C .\build -v
执行安装:
meson install -C .\build
然后,你就可以在前面指定的install目录下看到编译出来的东西了。
最后,你就可以为所欲为了。
4.在Windows下使用。
假如直接使用,貌似对于Gige相机没问题,但是对于usb相机,可能会有这个问题:
[11:42:28.503] 馃唵 interface> Failed to open USB device: LIBUSB_ERROR_NOT_SUPPORTED
[11:42:28.505] 馃吀 interface> Found 0 USB3Vision device (among 7 USB devices)
找了一下官方的讨论,发现别人也遇到这个问题【 USB3Vision device in Mingw64 Win10 #431 】
他们好像是说相机自动安装的驱动其实是不支持libusb的,因此需要换一下相机的驱动。办法是用【Zadig】,把对应设备的驱动更新替换一下。注意,要选择你相机的Composite Parent.
要选择这个Composite Parent,必须要先允许List All Devices,然后取消Ignore Hubs or Composite Parents。
将其驱动更新为libusb-win32或者libusbK (不要选WinUSB,否则相机厂家的自己的SDK、软件就识别不到他们自己的相机了)(这里究竟选哪个比较复杂,请看本文的第5小节) 。
然后aravis就可以识别到了:
假如想恢复原来的驱动,只需要在设备管理器中右键你的设备–》更新驱动程序–》浏览我的电脑以查找驱动程序®–》让我从计算机上的可用驱动列表中选取(L)–》选择下面图片显示的“USB Composite Device”–》下一步。
然后就会用回原来的驱动了
5.在Windows下使用存在的一些问题
当按照第4小节介绍的那样,使用Zadig对相机安装了各个驱动时,还是会存在一些问题。
5.1.同时打开同一个相机
当我们用两个程序,先后打开同一个相机时,不同的驱动有不同的反应:
- 使用【libusbK (v3.1.0.0)】时,两个程序都可以检测到相机,但是当第二个程序试图采集图像时,系统会蓝屏崩溃。原生软件也可检测到相机。
- 使用【libusb-win32 (v1.2.7.3)】时,两个程序都可以检测到相机,当第二个程序执行图像采集函数时,第一个、第二个程序的图像采集都会出问题。但是系统不会蓝屏崩溃。原生软件也可检测到相机。
- 使用【WinUSB (v6.1.7600.16385)】时,第一个程序会检测到相机并成功采集图像,第二个程序无法检测到相机。原生软件检测不到相机。
- 使用【USB Serial (CDC)】时,aravis、原生软件都无法检测到相机。
6.测试
执行完上面的指令,假如运行arv-viewer-0.8时出现下面的问题:
root@loongson-pc:~/Desktop/aravis/aravis-0.8.31/build# arv-viewer-0.8
arv-viewer-0.8: error while loading shared libraries: libaravis-0.8.so.0: cannot open shared object file: No such file or directory
那么还需要先执行这一句
sudo ldconfig
编译好之后,期待的arv-viewer-0.8.出现了。
7.在Qt中使用
把Aravis的头文件、库文件的路径加进来:
INCLUDEPATH += /usr/local/include/aravis-0.8
LIBS += -laravis-0.8
INCLUDEPATH += /usr/include/glib-2.0 \
/usr/lib/x86_64-linux-gnu/glib-2.0/include
在使用时,由于Aravis的代码或者它用到的第三方库有定义与Qt冲突,因此需要做一些隔离操作:
#undef slot
#undef slots
#undef signal
#undef signals
#undef emit
#include <aravis-0.8/arv.h>
#define slot Q_SLOT
#define slots Q_SLOTS
#define signal Q_SIGNAL
#define signals Q_SIGNALS
#define emit Q_EMIT
关于这个隔离的问题,可以看看我之前的另外一篇文章【Qt关键字(signal、slot等)与第三方库中的函数、变量冲突的解决办法】
参考:
【用开源Aravis访问工业相机】
【Aravis-0.8 Installation and Debug】
【获取Meson】