前言

最近在做采集软件的开发,由于我自己使用过Huaray和Basler两个品牌的相机,所以在设计软件时尝试设计统一的接口去控制不同品牌和型号相机的相同或类似的行为。当然,我的设计思路都是建立在调用各品牌SDK的基础上。

后来我去外网搜索,发现了一个开源项目Aravis,它通过提供一个通用的API,让我们能够不受相机的品牌或型号限制,自由地进行图像采集和相机控制,支持从简单的图像捕获到复杂的相机设置调整的一系列操作。

项目地址:https://github.com/AravisProject/aravis

Aravis简介

Aravis是一个基于glib/gobject的库,允许开发者对遵循GenICam标准的网络相机进行通信和控制。它目前实现了工业相机使用的GigE和USB3协议。它还提供了一个简单的以太网相机模拟器和视频查看器。

依赖关系说明

  • Aravis库依赖于zlib、libxml2和glib2,若选择使用USB支持则需要依赖libusb1。
  • GStreamer插件除了需要Aravis库的依赖外,还依赖于GStreamer1。
  • 视频查看器依赖于GStreamer1、Gtk+3以及Aravis库的依赖。
  • 所需的版本在Aravis源码中的meson.build文件里有指定。
  • 可以只构建库本身,以此将依赖减少到最少。

安装过程

meson安装

由于Aravis是使用meson进行项目构建的,所以我们先安装meson:

apt install meson

安装完毕后验证是否安装成功

meson --version

aravis源文件下载

作者对aravis使用者的建议是最好使用发行版本而不是直接git checkout

在github上找到所需的aravis的发行版本,并下载:https://github.com/AravisProject/aravis/releases

我选择的是0.8.31版本:

下载压缩包后解压即可

tar -xvf aravis-0.8.31.tar.xz

构建和安装aravis

进入工作目录,然后执行以下命令:

meson setup build
cd build
ninja
ninja install

在执行meson setup build可能会有安装失败的项点,错误解决方法可以参考文末的《安装过程中遇到的问题》

至此安装已完成

视频查看器

找到Aravis双击打开,即可查看已连接的相机设备

安装过程中遇到的问题

meson版本过低

我安装的aravis版本是0.8.31,这个版本aravis的编译依赖0.57.0及以上版本的meson,而我通过apt包管理器下载的meson版本为0.53.2,不满足需求。因此要对meson进行升级操作:

①首先安装或升级pip

apt install python3-pip

pip3 install --upgrade pip

②然后移除旧版本meson避免版本冲突

apt remove meson

③使用pip安装最新版本的meson

推荐使用--user选项,这样可以将Meson安装在用户目录下,避免对系统全局Python环境造成潜在的干扰

pip3 install --upgrade --user meson

④更新环境变量

~/.bashrc文件中添加

export PATH="$HOME/.local/bin:$PATH"

然后重启系统生效

⑤验证meson版本

安装或升级完成后,通过以下命令检查Meson的版本,以确保安装或升级成功

meson --version

我的安装结果:

CMake版本过低

在构建项目的时候,提示了以下错误信息:

说明我系统中的CMake版本过低,需要升级。

注意:apt包管理器中的CMake版本不是最新的,所以我们不使用apt install更新CMake

我们采用从源码编译的方法更新:

①移除旧cmake防止版本冲突

apt remove cmake

②下载源码

进入CMake官网下载所需版本的源码,我下载的是3.29.0发布版本

③解压下载的源码包

tar -zxvf cmake-3.29.0.tar.gz

④编译和安装CMake

cd ./cmake-*
./bootstrap
make
make install

⑤添加环境变量

~/.bashrc中添加

export PATH=/path/to/cmake/bin:$PATH

/path/to/cmake是解压出来的源码的路径

⑥验证CMake

cmake --version

缺少GStreamer组件

直接使用包管理器安装即可

apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

参考文章

1.Installation and Debug

开源相机管理库Aravis学习(一)——安装的更多相关文章

  1. Git---初入开源代码管理库的学习过程003

    Git常用命令总结 上接<Git 初入开源代码管理库的学习过程>学了一周Git,基本有了个认识.每一位比我厉害的,都是大牛,网上找了几篇博客和教材(感谢你们),边学习边实践用了四天,写笔记 ...

  2. C++的开源跨平台日志库glog学习研究(三)--杂项

    在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...

  3. C++的开源跨平台日志库glog学习研究(二)--宏的使用

    上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...

  4. C++的开源跨平台日志库glog学习研究(一)

    作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...

  5. 网页前端状态管理库Redux学习笔记(一)

    最近在博客园上看到关于redux的博文,于是去了解了一下. 这个Js库的思路还是很好的,禁止随意修改状态,只能通过触发事件来修改.中文文档在这里. 前面都很顺利,但是看到异步章节,感觉关于异步说得很乱 ...

  6. Android Fresco (Facebook开源的图片加载管理库)

    Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...

  7. 值得学习的C语言开源项目和库

    收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具. ...

  8. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  9. iOS、mac开源项目及库汇总

    原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499    iOS每日一记------------之 中级完美大整理 iOS.m ...

  10. Android开源项目及库搜集

    TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...

随机推荐

  1. MySQL案例-并行复制乱序提交引起的同步异常

    现象描述 Slave在开启并行复制后, 默认会乱序提交事务, 可能会引起同步中断; Slave端表现为同步的SQL线程抛出异常, 为主键重复, 修改的数据行不存在等; GTID信息类似于: 9a2a5 ...

  2. Jsp+Servlet实现文件上传下载(二)--文件列表展示

    接着上一篇讲: Jsp+Servlet实现文件上传下载(一)--文件上传 点击打开链接 本章来实现一下上传文件列表展示,同时优化了一下第一章中的代码. 废话少说,上代码 --------------- ...

  3. Java I/O 教程(十) ObjectOutputStream和ObjectInputStream

    ObjectOutputStream ObjectOutputStream用于往输出流中写入原始类型和Java对象. 类定义 public class ObjectOutputStream exten ...

  4. python课本学习第六章

    一.字典的概念 #示例代码 student = {'name':'xx','name':'yy','grade1':98.1,'grade':99.2} print(student) #output: ...

  5. golang读取用户名和密码文件并生成笛卡尔积

    密码爆破时需要读取用户名字典和密码字典来生成笛卡尔积派发爆破任务:直接读取全部字典内容到内存时成本较高: package main import ( "bufio" "f ...

  6. 使用 CMake 编写 Windows 静态库

    最近有一个多个 .h .cc .cpp 编译成静态库的需求,故记录下过程 静态库不同于动态库,它不需要 main 入口,只要各个源文件与头文件能对应,也就是源文件和头文件引用的头文件能够找到函数的符号 ...

  7. 项目实战:Qt+OpenCV激光射击游(识别激光、识别圆)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. go语言range语句中的值的坑

    在range语句中生成的数据的值是真实集合元素的副本,它们不是原有元素的引用.这意味着更新这些值将不会 修改原来的数据,同时也意味着使用这些值的地址将不会得到原有数据的指针. package main ...

  9. 【LeetCode二叉树#16】二叉(搜索)树的最近公共祖先(递归后序遍历,巩固回溯机制)

    二叉树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 ...

  10. 【LeetCode二叉树#03】翻转二叉树的几种方法

    翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树. 这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树 ...