单片机可以跑图像识别吗?
单片机可以跑图像识别吗? 试试恩智浦的imx rt1170吧,m7+m4核,主频1GHZ,带有mipi csi接口。单片机也在更新换代,速度很快的 这个问题不能笼统的作答,说单片机能不能识别图像。就像问小学生能不能解微分方程?如果我说能,万一你指的是很普通的小学生,他就没学过这个,肯定不能。如果我说不能,万一你指的是父母都是大学教授的那种神童,父母提前教过他这些。
具体要看单片机的算力,以及图像的规模,主要就这两方面。其次单片机有没有摄像头接口或者高速总线,能不能进行图像高速IO。
大部分单片机不能做图像处理,算力不够,也没有高速接口,它们设计出来的初衷就不是干这个的。如同让小学生写博士毕业论文。
但是近些年出来的少数单片机是可以的,arm cortex m4架构,自带DSP和FPU单元。主频300~500mhz,自带摄像头接口,支持外挂ram,简单处理小尺寸图像是可以的。比如30万像素图像,每秒5~10帧率的速度,超级简单的处理。这些堪称小学生里的神童。
图像一般是在PC级别处理器上处理的,比如x86或者amd64架构上,或者arm cortex A架构上,或者DSP或FPGA,在单片机MCU上处理毕竟是少数。 可以跑,有专门的图像识别的板子挺多的,树莓派都可以跑opencv 谢邀
为了防止某些汽车电子工程师玻璃心,所以先匿名了。以下的东西你不理解或者不认同都没关系,因为我在给国企的领导还有整车厂的一些领导在讲东西的时候,这些领导也摆出一副很可笑的表情(上帝没把这帮人饿死就是对地球人的犯罪)。
亲自实现一个实用的识别系统甚至仅仅是对实时性有要求的图像采集系统都不可能用MCU单片机这种东西。除非是买现成的板子或者模块,然后自己仅仅是接收别人处理好的“结果”
图像系统前端涉及到1个或者多个图像传感器甚至包括其他传感器(导航模块、测距等等),需要高并行度(而不是分时复用的“并发”)操作,有同时采集和控制能力的同时还要有图像预处理的能力,也就是要流水线操作,这时候前端的主控就是FPGA或者ISP+FPGA(一个单独的FPGA内部也可以启用NiosII或者Microblaze成为Soc)过去前端是单纯的ISP,但是ISP无法同时采集多路图像传感器也不能同时采集多种不同的其他外设,所以单纯的ISP已经不再实用。甚至因为目前cmos图像传感器的内部已经集成完善的ISP功能,而不需要额外在外面单独再加一个ISP,所以cmos图像传感器与fpga之间也基本看不到ISP芯片的影子。
后端的图像后处理方面:图像识别模板匹配还是有人用DSP的,机器学习以及深度学习神经网络加速器用的是FPGA+GPU、Zynq或者是GPU。
总的来说一个实用的、对实时性有要求的图像采集系统(相机系统、摄像头)用的是FPGA或者ZYNQ作为主控,也可以在这基础上增加接口芯片ASIC(但是ASIC不能做主控芯片);如果后面还要加上图像识别以及测距等等,包括前面的图像采集系统(相机系统、摄像头),那就需要ZYNQ或者FPGA+GPU或者DSP或者FPGA+DSP。如果还有人机交互,那在ZYNQ或者FPGA+GPU的基础上还可以再加一个ARM,ARM只是做个人机交互的界面而已,而不是用ARM做高实时计算或者数据处理。
———————分割线,新增加内容——————
这里面FPGA+GPU或者FPGA+DSP又或者ZYNQ当中,FPGA(PL)分担的任务有多路/多种传感器数据采集、重头戏是图像预处理和高速通信(在标准通信方式的基础上自定义通信协议,实现FPGA与GPU通信,GPU暂且近似地看做是上位机)。因为传统多核处理器内部使用类似于amba总线的方式交互数据,那么无法实现标准的流水线处理,所以随着图像处理步骤越多,GPU/多核DSP所能能承受的帧频就越低,那么FPGA担任的角色是同时采集多路数据、实现自定义通信协议、更要有通过流水线实现图像预处理的功能:这在服务器数据加速的场合也十分重要,因为标准的流水线处理,所以即使是图像/数据处理步骤增加了,但是图像/数据的帧频也不会降低,而且因为是直接运行底层时序,而不是先一层一层读取指令然后再执行,所以主频几百MHz(甚至是100多MHz)的FPGA就能完成这项任务(相对的是,尽管传统多核处理器主频达到几个GHz但是处理这种问题的时候却经常丢数据/丢帧),这也是为什么GPU主频达到几个GHz却需要FPGA做数据加速的原因。还有就是既要能实现标准通信协议,又要能在此基础上根据项目需要定义自己的通信协议,更要保证带宽利用率,所以这一点要用FPGA而不是ASIC。
自己好好看看AMBA总线这类总线、还有共享内存、以及先一层一层读取指令再进行指令执行,这3个“先天缺陷”导致多核处理器尽管有很高的主频(达到几个GHz),但是实时性并不好,如果带上操作系统那就更糟糕,这就是多核处理器的速度瓶颈。
但是模板匹配、运动估计这类算法确实是在DSP/GPU/ZYNQ上运行更合适。
——————————分割线结束————————
目前有8核DSP,但是DSP目前越来越少见是因为很多问题不是“多核”处理器能解决的,举例子:标准的流水线处理,多核处理器就无法实现这个功能,因为多核处理器内部采用总线方式传输数据,所以多核处理器内部的各个“核”无法在同一时刻同时交互数据(但是很多cmos图像传感器内部集成dsp用来实现ISP功能,这样就不用单独外置ISP,DSP也越来越少见)。对数据加速、算法加速熟悉的朋友都知道标准的合格的流水线处理有多么重要,传统的多核处理器因为共享内存的缺陷、因为先读取指令再进行指令执行最后运行底层时序这个缺点,导致GPU(DSP)还需要再加上FPGA进行预处理加速(当然FPGA还要再承担多个外设采集的任务)。
说点题外话,本科生大二的时候用一下MCU单片机也就到头了,底层都是单片机厂商已经做好的CAN控制器以及AD采集时序,所谓的单片机编程只是一个用户的角色。现在也就是小家电用单片机做个数码管显示,还有就是汽车电子用单片机通过CAN总线收发几条指令而已,还给MCU单片机起了个名字叫“控制器”(CAN这种落后的东西在其他行业也早就淘汰了),其他行业根本就看不到单片机的影子。Soc是个很广泛的概念,A11处理器可以称为Soc,一个单独的FPGA内部启用NiosII或者Microblaze可以称为Soc,但是有一点可以确定的是Soc不等于单片机。你也可以看到,汽车辅助驾驶就是前端FPGA配上后端GPU(或者后端是GPU+FPGA),又或者是ZYNQ;服务器数据加速(金融交易平台数据加速)以及通信行业是ZYNQ以及FPGA;伺服控制(电机控制)是DSP或者ZYNQ或者FPGA。以上领域根本就没有MCU单片机这种东西,编码器都开始上CPLD,你还守着MCU单片机有什么用呢?就算不看性能,就算你不要实时性,你也要考虑综合成本啊,单个MCU单片机可能比较便宜,但是一个产品就是采用多个单片机拼成的,那他的综合成本就是很高很不划算的。单片机是传统的一条一条读取指令再一条一条的指令执行,这种方式实时性太差,一个单片机的成本已经超过3美金,那么单片机的成本优势已经不存在了,CPLD完全可以取代MCU单片机,而且CPLD还有极好的并行处理能力以及可靠性。还是那句话,测井勘探用的编码器都开始上CPLD,你还守着单片机有什么用呢?人才市场以及产品市场说明一切问题。 当然可以,请参考OpenMV项目:
OpenMV他的相机模块上面就有一颗STM32, OpenMV Cam M7他的相机模块上面就有一颗STM32,实物如下:
图片来自:https://openmv.io/products/openmv-cam-m7
再附加两个用着相机模块做的自动驾驶小车的项目和障碍物检测的项目
https://github.com/openmv/openmv-projects随附小车的测试视频,我从项目代码仓库里下载下来的:
页:
[1]