当前位置: 首页 > news >正文

Linux上位机开发实践(OpenCV算法硬件加速)

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

        图像处理里面,opencv基本是一个标准模块。但是由于图像处理的特点,如果所有的算法都是cpu来做的话,效率会很低。那么,为了提高效率,就会使用好一点的cpu。在嵌入式设备上,用好一点的soc,自然而然对应的成本就会上升。所以,这里面就需要有一个平衡,即提高算法的性能,也要降低硬件的成本。

1、opencv常用的加速方法

        目前来说,opencv加速主要有这么几个方向。第一,汇编优化。这种方法,就是把常用的算法,用汇编指令重新实现一下,一般难度较大。第二,用cuda代替。cuda是nvidia公司的gpu开发平台。所以如果使用cuda,要么安装nvidia的显卡,要么使用nvidia的嵌入式soc,两者都不便宜。第三,使用带有硬加速平台的soc,比如某思的ive模块。

2、哪些算法可以做成硬加速

        图像处理中,有一些固定模式的算法,可以做成硬件加速的形式。这里面包括文件格式的转换、增强、滤波、二值化、膨胀、腐蚀等等。工业图像上面,一般对物体的提取也就是这几个步骤。只有最后一步轮廓提提取的时候,才会用cpu去算。

3、硬件加速原理

        和cpu一个、一个去处理元素不同,硬件处理图像的时候一般是数据读取、处理、保存同时进行的。在过程当中,很多计算是同时进行的,假设有一个3x3的矩阵,硬件来处理的话,就会这么来做,

        第一步,同时计算矩阵的9个数据,每个计算就是mac处理,即3乘1加;

        第二步,将9个计算好的数据做一次加法运算;

        第三步,计算结果写入buffer,等待写入内存。

4、怎么使用加速模块

        使用方法基本和opencv是一样,直接调用soc厂家提供的api即可。一般来说,对于一个应用而言,前半部分,都是使用加速模块完成的;后面的部分还是由cpu完成的。后面的这一段算法,没有办法用硬件加速完成,类似于轮廓查找、阈值剔除、业务逻辑处理等等。

        很多加速api其实一眼就知道对应的功能是什么,比如ss_mpi_ive_dilate、ss_mpi_ive_erode、ss_mpi_ive_threshold等等。如果想更简单一点,可以把mode设置为阻塞的模式,这样硬件执行完毕了,才能进行后续的动作。不过为了提高效率,最好是把所有的command都提交上去,等待所有的command的结果一起下来就好了。

        当然,使用加速模块的前提,首先是保证对应的算法驱动加载好。这些驱动要么位于kernel中,要么位于ko文件中。

5、怎么调试

        调试的方法一般有两种,一种是直接看api的返回值,即通过打印的方法来进行调试;另外一种就是通过查看cat /pro/unmap/ive的办法来进行调试。这些都是通用的步骤。

6、其他加速模块

        除了常用的图像加速之外,另外一块就是AI加速。很多soc现在都配备了npu,所以现在需要做的就是把pc训练好的model,通过厂家的工具翻译成soc可以识别的model,通过npu来加载、运行,获得最终的结果。不同的厂家可能有不同的名字来做这一件事情,比如某思就叫nnie,但是实质是一个道理。

        本质上,不管是isp,还是编解码、ive、nnie、crc、aes、mpp,本质上都是把常用的、费时间的、逻辑固定的算法硬件化,这样就不需要很好的cpu,也能实现一样的图像处理性能。


http://www.mrgr.cn/news/98232.html

相关文章:

  • 【redis进阶三】分布式系统之主从复制结构(1)
  • 【复旦微FM33 MCU 底层开发指南】高级定时器ATIM
  • NoSQL入门指南:Redis与MongoDB的Java实战
  • 2025蓝桥杯python A组题解
  • 数据库事务管理:ACID特性与隔离级别的深度解读
  • QScrCpy源码解析(4)获取手机端数据知识补充
  • RVOS-4.实现上下文切换和协作式多任务
  • 大模型到底是怎么产生的?一文了解大模型诞生全过程
  • KTransformers安装笔记 利用docker安装KTransformers
  • 句句翻译。
  • mysql安装-MySQL MGR(Group Replication)+ ProxySQL 架构
  • 【初入职场】文件地狱大逃亡:运维侠Python自动化逆袭之路4整理术(日省3h摸鱼真经)
  • 探秘数据库连接池:HikariCP与Tomcat JDBC
  • 第16届蓝桥杯c++省赛c组个人题解
  • Rasa 模拟实现超简易医生助手(适合初学练手)
  • Google 官方提示工程 (Prompt Engineering)白皮书 总结
  • JavaWeb-04-Web后端基础(SpringBootWeb、HTTP协议、分层解耦、IOC和DI)
  • Agent革命:Google AI白皮书解密未来智能体的进化之路
  • 双指针、滑动窗口
  • FTXUI 笔记(五)——基本交互组件