微控制器上的数字识别

你好,Giktayms!

UPD:有一个视频演示

顾名思义,本文将重点介绍微控制器上的数字识别。我想马上保留一点,在本文中将不给出源代码,将考虑使用技术或识别算法,我只能说使用了系统方法的思想。其中一些在我们的文章中介绍(此处此处此处)。这是因为我们的方法具有独创性,但是需要澄清一些问题。有人可能会说:“另一篇有关微控制器编程的文章。”完全没有,对于此类项目的搜索没有任何可理解的结果,除了该视频在论坛上进行的讨论中,有一件事很清楚:获得这样一种设备(相机+微控制器=输出端的识别结果,而不仅仅是捕获的图片)的想法很多,但仍然没有实现。是的,要获得认可,就算是所有人,也需要大量的计算资源,而微控制器不适合于此,尤其是关于Arduino的说法,这根本是不可能的。如果变得有趣,我要猫。




没有明显的问题,我们将回答他们:

  • 不,这不是图像识别服务。
  • 不,这不是OpenCV
  • 不,这些不是神经网络。
  • 使用组成图形的对象的形态分析。
  • 是的,识别是由微控制器精确做出的!


主意


简而言之,这一切都始于渴望尝试并测试图像识别方面的想法。在讨论中,我们得出的结论是,我们可以用较小的计算能力来解决此问题。由于明显的原因,将不描述这些讨论的细节。

安装方式


因此,任务已设定,需要执行。在不背离既定原则的前提下,
我们采取了眼前的行动。那里有几个Arduino Uno,一个旧的光学鼠标和一个CD驱动器。顺便说一句,一篇文章提示我们使用光学鼠标传感器作为相机进行图像采集好久以前看过的书,实际上,其余的都是关于“鼠标”的材料。为了易于使用,我们唯一需要拆开传感器及其整个线束的焊锡,并在其上安装透镜,我们将其小心地从CD驱动器中“撕下”。为了增加从主体到相机的距离,这是必要的,否则我们尺寸的数字不合适,只能看到一小部分。顺便说一句,在CD驱动器镜头的前面,我们尝试连接网络摄像头的光学元件,但是由于某种原因并没有一起生长。



更多





然后出现了一个问题,如何将摄像机定位在拍摄对象上。在这里,一台破旧的旧显微镜被闲置了,这对我们很有帮助。关于这一点,他们删除了控制主题表的机制。这种机制使我们只能沿两个轴移动相机,然后想到使用CD驱动器中的激光头导轨。所有这些都是通过长期受灾的CD驱动器解决的。结果,我们得到了一个很酷的相机定位机制。



更多







总计:我们有一个所谓的相机,我们有一个定位机制,剩下的就是用数码相机放一张纸并从相机中获取图像。然后,“问题”开始了。由于“鼠标”光学传感器的特性非常不利于用作相机,因此它们开始使用背光照明。



更多







很明显,仅突出显示是行不通的,强度很重要,外部光线的方向也会进行调整。我必须在工作中加入另一个“ arduinka”来控制背光的强度(当然,可以用不同的方式来控制它,但是稍后不仅可以控制背光,还可以切换指示器上的数字)。结果,证明在光下拍摄要好得多。并且,例如,如果您使用发光的七段指示器作为目标,则传感器会完美地看到它。因此,现在我们有了一个指示器和一条带有黑色背景的白色数字条作为射击对象。



左侧是从指示器获得的灰度图像(我们从传感器获得了这种图像),右侧是经过二值化处理的图像。



更多





完整装配体的总体视图






早期安装









识别块




所谓的识别单元(在上图中)在我们的安装中起着重要作用。如您所见,它由Arduino Uno和著名的wifi发射器ESP8266组成我解释说,我们需要一个wifi发射器才能在平板电脑上看到识别结果。平板电脑上的应用程序发送一个请求“ arduinka”,接收一个请求,从鼠标传感器“获取”图像,然后将其二进制化。二值化后,会发生识别,完成后会形成响应。在答案中,为了清晰起见,我们发送识别结果和41个字节以在平板电脑屏幕上构建二进制图像。

如果您回头看,则在“ arduinka”上被分配了良好的功能:使用相机,识别和使用esp8266。不能不影响工作的是-我不得不面对记忆不足的问题。我从没想过要征服内存的每个字节。

识别过程




而不是结论


仅此而已。仍有很多工作要做。首要任务是:识别由“人类”相机(而不是“鼠标传感器”)记录的数字(一串数字),并将开发的技术转移到ESP8266,并减少存储器每个字节的争夺强度。

我们很高兴回答问题。

Source: https://habr.com/ru/post/zh-CN397193/


All Articles