前言

最近在做采集软件的开发,由于我自己使用过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. Windows 进程的一些学习笔记

    进程的内存映像是指内核在内存中如何存放可执行程序文件. 在将程序转化为进程的过程中,操作系统将可执行程序由硬盘复制到内存. 可执行程序和内存映像的区别 可执行程序位于磁盘中而内存映像位于内存中: 可执 ...

  2. 【Android逆向】反调试绕过

    1. 拿到52pojie的反调试挑战apk 链接: https://www.52pojie.cn/thread-742686-1-1.html 的附件中 2. 项目进行安装,点开app,同时挑战成功, ...

  3. pinia

    Pinia学习 Vue3中 使用 官网:https://pinia.web3doc.top/introduction.html 安装 yarn add pinia # 或者使用 npm npm ins ...

  4. SpringBoot使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流

    令牌桶 在高并发的情况下,限流是后端常用的手段之一,可以对系统限流.接口限流.用户限流等,本文就使用令牌桶算法+拦截器+自定义注解+自定义异常实现限流的demo. 令牌桶思想 大小固定的令牌桶可自行以 ...

  5. 本机复制的内容粘贴不到VMware虚拟机里面的解决办法

    分析 VMware正确安装完linux虚拟机之后,这里以Ubuntu为例,如果你使用的默认配置,正常情况下就可以复制.粘贴和拖拽内容的,双方向都是支持的.如果不能复制和拖拽一般是vmware tool ...

  6. 【八股cover#1】MySQL Q&A与知识点

    MySQL Q&A与知识点 1.基础知识 什么是主键? 它用来唯一标识一条记录(一个字段).每个表都必须有且只能有一个主键,主键的取值不允许为空,而且在表中必须是唯一的(当然还可以有复合主键) ...

  7. 【LeetCode链表#12】链表相交

    链表相交 同:160.链表相交 力扣题目链接(opens new window) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返 ...

  8. 游戏H5引擎Canvas屏幕自适应CSS代码

    canvas.style = `touch-action: none; width:${ width }px; height:${ height }px; cursor: inherit;`;

  9. 【Azure 事件中心】通过 az rest --method get 如何获得Event Hub Entity 级的统计指标

    问题描述 通过 az rest --method get  如何获得Event Hub Entity 级的统计指标? 问题解答 查阅文档  https://learn.microsoft.com/en ...

  10. 【Azure 云服务】Azure Cloud Service 关于虚拟机资源,杀毒软件配置,补丁机制的问答

    一:云服务后端是2台虚拟机,Work Role,Web Role,可以RDP进去,但是为什么在虚拟机列表里看不到呢? 因为云服务(经典)是PaaS服务,有别于传统的IaaS服务,其提供的WebRole ...