嵌入式视觉浅谈(一)

       最近闲来无事,吃鸡之余折腾了几天树莓派,在跑过几次图像识别等Demo之后顿时对嵌入式机器视觉产生浓厚的兴趣。趁现在有时间调研了一下嵌入式视觉的发展历程,在这里简单记录一下自己这几天的探索。

        嵌入式处理器有很多种:MCU,DSP,FPGA,SoC,FPGA+SoC,DSP+SoC等。就嵌入式视觉而言,最好的硬件平台还是FPGA+SoC,比如Zynq系列的Z7000系列,Altera 的Cyclone V系列(好像用人的比较少)。既可以利用FPGA实现一些简单的预处理,还可以在SoC上运行Linux,利用很多现有的机器视觉库,比如OpenCV, Halcon等,嗯!站在巨人的肩膀上。而且有一款非常火的深度学习计算棒Movidius可以支持兼容Linux和x86平台,提供API加速图像识别过程。

        其实在这之前想有一个想法是,运行操作系统是不是会额外消耗CPU资源?所以能不能直接利用Opencv库设计程序在ARM核的处理器上裸机运行?其实也不是不可以,但是只能用OpenCV 1.0的库函数,因为OpenCV2.x及后续的版本逐渐取消了C接口,一些高级的图像处理函数基本都是基于C++或者Python实现的,而且基于ARM核的一些处理器的开发环境(KEIL,Atmel Studio,CCS等)基本都是以C语言为主的,编译起来都是个问题。

        当然,如果对于产品功能要求没那么高,比如只要实现一维或者二位编码读取的话,可以选择低端的ARM核架构处理器。有几个例子:一个是调用zbar库在STM32上实现条码读取,网上例子很多,比如二维码开源库ZBar STM32F429 移植。另一个是Atmel官方在SAM4S_WPIR_RD开发套件平台上使用OpenCV1.0实现条码读取。

        再来说说DSP架构特点。TI推出了与OpenCV兼容的ImgLib,而且函数接口也都保持一致,这一点上DSP还是费劲了心思,个人感觉用途不大。因为Opencv一直在集成最新的算法进去,而TI的ImgLib似乎更新比较慢。而且,TI的达芬奇处理器在火了一段时间之后终于还是沉默了,开发流程太繁琐。

       FPGA呢,其实进适合做一些简单的预处理,比如伽马校正等。如果在FPGA上搭建软核实现图像遍历算法的话流程比较长,在这一点上还不如FPGA加DSP或ARM。

       最后,简单介绍一下OpenMV。OpenMV是一个图像传感器与处理器集成在一起的开源智能硬件,可以集成在小型机器人项目中。该硬件的处理器采用ARM Cortex M7架构的STM32F765VI处理器,而且开发者基于microPython(http://docs.openmv.io/library/index.html)的硬件函数库以及常用的图像识别函数库,创客们可以像调用opencv一样使用该函数库实现图像识别。

    PS:第一次发博文,想到什么敲什么,回头有机会再整理整理。

    --------参考文献-----------

1. http://shervinemami.info/embeddedVision.html

2. Atmel AT01180: Barcode and QR code scanner User Guide

3. OpenCV on TI's DSP+ARM® Platforms: Mitigating the Challenges of Porting OpenCV to Embedded Platforms

        

    

你可能感兴趣的:(嵌入式视觉)