Linux上位机开发实践(超越MPP去开发产品)

news2025/4/3 4:52:26

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        对于芯片厂商来说,肯定希望客户的应用和自己的芯片绑定地越紧密越好。最好就是,他们自己成为客户的独家供应商。但是对于嵌入式开发的厂家来说,通常都会希望自己至少有两家以上的soc供应商可以选择,这样才不会被某一家捆绑住。毕竟,一旦自己的供应商是可以替换和选择的话,那么在后续的议价环节,会占据很大的优势。IPCam Soc竞争非常充分,非常适合用来做嵌入式产品。因此,那么从嵌入式Linux上位机开发的而角度来说,怎么做才能实现自由选择soc的目的呢?

1、提炼通用API接口

        对于IPCam soc来说,一般都会提供MPP开发平台。对于那些不提供MPP平台的soc,也会提供类似的API给客户。所以,对于上层开发的同学来说,一定要构建一个抽象的通用API。比如说,common_vi,common_vo,common_isp,common_venc,common_vdec,common_ai,common_ao,common_aenc,common_adec,common_npu等等。在某一个结构里面,再去进行设计,比如common_vi,

typedef struct _Common_Vi
{
    U8 devName[32];
    U8 devId;
    U8 devType[32];
    U32 width;
    U32 height;
    U32 frameRate;
    U32 dataType;
    U32 isColor;
    U8* pData;
    U32 dataLength;
    VOID* pVoid;
}Common_Vi;

        这里的属性都比较好理解,从上到下依次是设备名称、设备编号、设备类型、宽度、高度、帧率、数据类型、是否为彩色、图像指针、数据长度。最后一个是pVoid,这个变量就比较有意思,它就是所有soc vi属性的基类。我们需要准备这样的一个基类,每个soc来实现基类的接口即可。这样就可以达到抽象接口的目的。通用api尽量是c语言,但是里面的VOID*可以是c++实现。

2、移植FFmpeg

        soc里面的编解码,一般都是针对于h264、h265文件。这些文件又包含在mp4里面。因此,如果需要保存为mp4文件,或者从mp4文件提取h264文件,通常都要移植一下ffmpeg。虽然ffmpeg内部也有h264的编解码功能,但还是赶不上硬解码的性能,所以从实用的角度出发,一般都要替换成硬解码。嵌入式芯片的cpu和pc相比较,如果不替换成硬件加速模块,单靠cpu本身,效果一般都不好。

        有了通用接口之后,ffmpeg做加速的时候,只需要调用通用接口即可。这样就可以实现ffmpeg和具体soc的解耦,后续即使替换了soc,也问题不大。

3、Qt & Boost

        对于嵌入式Linux来说,用Qt做图形界面基本上是标配。不管是工业领域,还是医疗领域,用Qt做界面都很方便。本身Qt开发在windows上就非常方便,所以如果使用Qt+boost库进行功能开发,本身不需要做多大的修改,就可以port到嵌入式芯片上面。

4、使用OpenCV

        在图像领域,OpenCV是标配,很多的算法,并不需要我们进行二次开发。所以,如果是用到一些简单的功能,直接移植OpenCV到嵌入式系统上即可。对于那些有性能要求的api,一般还是需要进行二次优化处理的,比如汇编加速,这样效果会好一点。

5、AI module

        现在很多嵌入式soc都带有npu。如果我们不想依赖于任何一家的soc,那么就需要自己把module翻译成各个soc厂家可以识别的文件形式,再通过API把模型加载到npu上。常见的网络有Resnet、MobileNet、Yolo,它们都可以这么来处理。

6、RTSP等网络协议

        网络协议这部分,都是软件来实现的,很少做成硬件加速。所以不管是哪一个soc,都需要自己移植开源代码来完成。比如利用live555实现rtsp协议等等。其他类似的协议还有RTP、RTMP、ONVIF等等。

7、业务代码

        业务代码部分,就和具体的产品相关。这里面不光有硬件,还有软件。比如说使用到的按钮、对外接口、是否需要屏幕、u盘保存等等。软件部分的话,就涉及到产品所属行业、业务流程、操作人员的习惯、界面的布局、通讯协议等等。这方面不同的产品又不同的需求,具体情况具体分析即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer

前面介绍了获取容器可以让spring bean实现ApplicationContextAware,实际也是初始化执行了setApplicationContext接口, 初始化接口还可以借助一些注解或者spring bean的初始化方法,那么他们的执行顺序是什么样的呢? 一、验证&…

【分享】内外网文件摆渡系统:让数据传输更安全更可靠

【分享】Ftrans内外网文件摆渡系统:让数据传输更安全更可靠! 随着大数据时代的到来,数据的重要性日渐得到重视,数据作为数字经济时代下的基础性资源和战略性资源,是决定国家经济发展水平和竞争力的核心驱动力。以行业…

2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题)

2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题) 背景描述:任务A:离线数据处理(35分)子任务一:数据抽取子任务三:指标计算 任务B&…

手机显示5GA图标的条件

最近有星友问在什么情况下才能显示5G-A?虽然这个我也不知道,但是我有几个运营商的5G终端白皮书,从上面就可以找到答案。 如上是几个运营商显示5G-A的条件,基本上考虑的都是3CC的情况,联通还有考虑200M CA 2CC的场景&am…

Spring Boot 实现文件秒传功能

前言 在开发Web应用时,文件上传是一个常见需求。然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余。此时可以使用文件秒传技术通过识别重复文件,实现瞬间完成上传的效果,大大提升了用户体验…

使用AOP技术实现Java通用接口验签工具

一、背景 在给第三方提供接口时,我们需要对接口进行验签。具体来说,当外部系统调用我们的接口时,请求中需要携带一个签名,我们接收到请求后,会解析数据并校验签名是否正确,以确保请求的合法性和安全性。 为了在不同项目中方便地使用这一功能,我们将签名校验规则封装成一…

aarch64-none-elf-gcc与aarch64-linux-gnu-gcc

1. 场景描述 在Ubuntu 24.04.1 LTS x86_64架构下交叉编译能跑在aarch64架构下裸机程序,遇到缺aarch64-none-elf-gcc的情况,做此记录。 2. aarch64-none-elf-gcc与aarch64-linux-gnu-gcc 运行环境 aarch64-none-elf-gcc 生成的代码是 裸机程序&#xf…

【清华大学】DeepSeek政务应用场景与解决方案

目录 一、政务数字化转型三阶段演进二、人工智能政务应用场景四大方向 三、技术方案核心技术 四、解决方案案例1. 公文写作2. 合同协议智能审查3. 行政执法4. 就业指导 五、风险及对策六、落地大四步法七、未来发展展望AI职业替代逻辑空间智能与具身智能人机共生 一、政务数字化…

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

论文阅读笔记:Denoising Diffusion Implicit Models (3)

0、快速访问 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;1&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;2&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08…

Git(八)如何在同一台电脑登录两个Git

目录 一、理解 SSH 密钥机制二、具体实现步骤1.删除GIT全局配置2.生成多个 SSH 密钥3.添加公钥到 Git 账户4.配置 SSH config 文件5.测试SSH key是否生效6.下载代码 三、Git仓库级别配置四、HTTPS方式的多账号管理 引言&#xff1a; 在日常开发中&#xff0c;我们经常会遇到需要…

如何改电脑网络ip地址:一步步指导

有时我们需要更改电脑的网络IP地址以满足特定的网络需求。本文将为您提供一份详细的步骤指南&#xff0c;帮助您轻松完成电脑网络IP地址的更改。以下是更改计算机IP地址的分步指南&#xff0c;适用于常见的操作系统&#xff1a; 一、更换内网ip Windows 系统&#xff08;Win10…

PyTorch 分布式训练(Distributed Data Parallel, DDP)简介

PyTorch 分布式训练&#xff08;Distributed Data Parallel, DDP&#xff09; 一、DDP 核心概念 torch.nn.parallel.DistributedDataParallel 1. DDP 是什么&#xff1f; Distributed Data Parallel (DDP) 是 PyTorch 提供的分布式训练接口&#xff0c;DistributedDataPara…

【Unity】记录TMPro使用过程踩的一些坑

1、打包到webgl无法输入中文&#xff0c;编辑器模式可以&#xff0c;但是webgl不行&#xff0c;试过网上的脚本&#xff0c;还是不行 解决方法&#xff1a;暂时没找到 2、针对字体asset是中文时&#xff0c;overflow的效果模式处理奇怪&#xff0c;它会出现除了overflow模式以…

计算机视觉初步(环境搭建)

1.anaconda 建议安装在D盘&#xff0c;官网正常安装即可&#xff0c;一般可以安装windows版本 安装成功后&#xff0c;可以在电脑应用里找到&#xff1a; 2.创建虚拟环境 打开anaconda prompt&#xff0c; 可以用conda env list 查看现有的环境&#xff0c;一般打开默认bas…

基于聚类与引力斥力优化的选址算法

在众多实际场景中&#xff0c;诸如消防设施选址、基站布局规划以及充电桩站点部署等&#xff0c;都面临着如何利用最少的资源&#xff0c;实现对所有目标对象全面覆盖的难题。为有效解决这类问题&#xff0c;本文提出一种全新的组合算法模型 —— 基于聚类与引力斥力优化的选址…

Mac 电脑移动硬盘无法识别的解决方法

在使用 Mac 电脑的过程中&#xff0c;不少用户都遇到过移动硬盘没有正常推出&#xff0c;导致无法识别的问题。这不仅影响了数据的传输&#xff0c;还可能让人担心硬盘内数据的安全。今天&#xff0c;我们就来详细探讨一下针对这一问题的解决方法。 当发现移动硬盘无法识别时&…

LeetCode Hot100 刷题笔记(4)—— 二叉树、图论

目录 一、二叉树 1. 二叉树的深度遍历&#xff08;DFS&#xff1a;前序、中序、后序遍历&#xff09; 2. 二叉树的最大深度 3. 翻转二叉树 4. 对称二叉树 5. 二叉树的直径 6. 二叉树的层序遍历 7. 将有序数组转换为二叉搜索树 8. 验证二叉搜索树 9. 二叉搜索树中第 K 小的元素 …

【计算机视觉】YOLO语义分割

一、语义分割简介 1. 定义 语义分割&#xff08;Semantic Segmentation&#xff09;是计算机视觉中的一项任务&#xff0c;其目标是对图像中的每一个像素赋予一个类别标签。与目标检测只给出目标的边界框不同&#xff0c;语义分割能够在像素级别上区分不同类别&#xff0c;从…

【SpringBoot + MyBatis + MySQL + Thymeleaf 的使用】

目录&#xff1a; 一&#xff1a;创建项目二&#xff1a;修改目录三&#xff1a;添加配置四&#xff1a;创建数据表五&#xff1a;创建实体类六&#xff1a;创建数据接口七&#xff1a;编写xml文件八&#xff1a;单元测试九&#xff1a;编写服务层十&#xff1a;编写控制层十一…