1. 引言
功能电路由电子元器件连接形成,具有元器件种类多,连接形式多样,结构复杂,难以进行连接错误检查等特点。面包板作为功能电路的重要载体形式,由于其具有固定的辅助连通方式,可以在设计电路之初,为电路的设计和测试提供方便。然而,目前面包板功能电路的识别,主要依靠有经验的工程人员,凭借元器件的外观特征以及电路的实际连线进行功能电路连接判定 [1] 。
随着手机性能的提高,以及图像识别技术的发展,数字图像识别技术已经广泛应用于各个领域,为人们平时的生产生活带来了极大的便利。如应用于银行卡信息的提取 [2] ,动态手势的识别 [3] 等。将图像处理识别技术与手机app相结合,以实现在手机软件上对一些图片进行自动识别的想法也得到了广泛的实现。
黄先学 [4] 等以对元器件进行形态学操作再与模板图片进行匹配的形式对半导体元器件进行检测,具有良好的识别效果,但不适用与对广泛非极性元器件的识别。王至诚 [5] 等采用HSV (Hue, Saturation, Value)色彩模型和Otsu (大津算法)算法实现了对元器件的识别分类,但该方法在有光线影响时不能达到良好的效果,另外该方法也只能用于简单的器件识别分类不能用于电路图片的处理。
为了提高面包板功能电路的识别效率,做到识别现场不依赖于有经验的专家进行人工识别,本文开发了利用图像信息的自动识别算法,结合图像滤波预处理技术、元器件特征提取技术进行面包板上元器件的种类识别,利用面包板连线连接拓扑识别技术进行功能电路连接自动辅助识别系统开发。考虑到用户的使用方便,且由于安卓平台具有开源,使用频率高等优势 [6] ,以及安卓领域图像识别的先例 [7] ,选择安卓作为平台来运行算法,实现自动识别人机交互系统开发。OpenCV (open source computer vision library)已被证实安卓平台具有良好的适配性 [8] ,故而可以将自动识别算法通过OpenCV在android中开发实现人工交互软件,供用户使用,提供面包板功能电路图像中元器件识别、电路连接识别、电路连接错误提示等功能。
2. 电子元器件分类识别
2.1. 元件识别算法功能概述
进行元件识别算法开发,主要目的为在存在背景的情况下,在图片中准确找到该元器件,并删除图片中的其余部分,仅保留该元器件主体。以图片信息为基础,研究元器件图像特点,提取基于颜色、形状等视觉特征,并利用特征提取结果,完成电子元器件的图像检测及分割算法。并将识别结果以图片和识别结果标志位的形式进行输出。
2.2. 特征提取样本库的建立
建立元器件特征样本库,以支持面包板上元器件的定位和识别。取各个元器件的关键特征点像素集,建立样本库,以电解电容、瓷片电容、发光二极管为例,其特征像素集如图1所示:

Figure 1. Electronic components feature extraction sample database
图1. 电子元器件特征提取样本库
2.3. 元器件主体提取识别算法
该算法主要过程包括图片导入、颜色空间转换、颜色关键值获取、样本关键色块导入、颜色距离求取等过程。首先以图片方式,获取待检测元器件信息。该待识别图片需要包括主体待检测元器件,背景颜色不限,图片数据将以像素点二维数组的形式导入,这个二维数组存储着一张图片各个像素点的颜色索引值。在图片像素点的基础上,对该待识别图片进行颜色空间转换,为了增加颜色区分度,将基于RGB的颜色空间,投影至Lab颜色空间。其中,L分量为该点像素的亮度信息,a分量为该点像素从红色到绿色的范围信息,取值范围为[−128, 127];b分量为该点像素从黄色到蓝色的范围信息,取值范围为[−128, 127]。进而,引入关键像素集作为参考中心,引入包含面积、边界曲率、颜色等信息的特征矩阵,获得多维特征矩阵。依据图片中每个像素点到特征参考中心的距离,识别得出最接近元器件特征样本库的像素点,在图片中标出,进而完成元器件的自动识别。
3. 面包板连接关系自动获得算法
为了自动识别元器件在面包板中搭建的电路信息,需要获得面包板连接关系。以面包板图片为信息源,通过将待识别图片二值化,并求取图像上的极小值区域,获得可供元器件插入的孔洞位置信息。为了降低噪声干扰,考虑到所有孔洞都是规则的与其他孔洞横向排列并连接,因此通过多边形的特征识别,仅保留方形孔洞的区域识别结果,并将每个孔和方形区域建立数据关联,获得面包板中的孔洞连接关系,进而得到电路中的等电位点连通区域。识别结果如图2所示:
图2中左图为带有无关背景信息的面包板照片,右图为得到的孔洞相连识别结果,等电位点由彩色横线标出。

Figure 2. Bread plate connections and identification results
图2. 面包板连线关系识别结果
4. 功能电路智能自动实时识别系统实现
该系统的用户使用界面设计以功能模块开发单位,具体功能由Java程序实现。界面结构图设计及实现如图3所示:

Figure 3. Interface structure diagram design and implementation
图3. 界面结构图设计及实现
图3中,左边为界面设计结构图,右边为面包板功能电路自动识别人机交互系统实现效果图。图中每部分的功能为:
1) 部分为标题栏,这里设计为将软件的名称展示出来。
2) 部分为功能选择部分,为用户提供识别选择。选择不同的器件或选择电路后执行相应的自动识别程序。系统提供了多个点击选项,以用来进行触发选择,并配有图文显示,以提示使用者进行需要的电子元器件识别,包括电子元器件的符号和名称。
3) 部分为图像信息展示部分。这部分的功能为实时展示使用者待识别的电路图像信息。可以让使用者能够核对自己上传的图片是否正确清楚以及是否上传错误等图片问题。
4) 部分为用户反馈部分,用于使用对图片是否识别成功进行反馈。为用户提供了选择触发,使用者能够在不同选项之间进行选择并触发,反馈给程序信息,以帮助进行程序进一步完善。
5) 部分为文本提示部分,这部分提示使用者电路图像的上传要求,确保对图片的准确识别。
6) 部分为导入图片部分,这部分提供使用者图像信息的导入途径,为了方便使用者在不同环境下使用该系统,系统支持存储设备中的图片读取和摄像设备的实时采集两种方式。
5. 系统功能测试
嵌入电子元器件分类识别算法和面包板连接关系自动获得算法后,软件将可以在安卓系统中运行,用户使用手机即可实时识别待识别的图片中,是否包含发光二极管、电解电容、瓷片电容等元器件,并给出待识别的电路图中元器件的连接关系,和错误预测。以发光二极管为例,进行元器件识别测试,如图4(a)所示。可见该系统可以自动识别采样图像中的发光二极管,标出具体位置,并以标准图片和文字说明为识别结果,提示给使用者。以瓷片电容、发光二极管和绿色导线连接而成的面包板功能电路为例,对系统进行电路功能自动识别测试,如图4(b)所示。可见,待检测图片中可以自动识别出每个元器件的种类和位置,并以彩色连线的方式标注出面包板的连通关系。进而进行电路拓扑图形化描述,最后给出电路中可能存在的问题预警提示。电路可能出现未连接端点,电路可能出现短路情况。
(a)
(b)
Figure 4. Examples of system usage effects; (a) examples of automatic component identification; (b) examples of automatic recognition of breadboard function circuit
图4. 系统使用效果示例,(a)元器件自动识别示例,(b)面包板功能电路自动识别示例
电路拓扑图中结点即电路中的元器件,使用两位大写字母表达不同的元器件含义,并使用两位数字表达该元器件的编号。即结点的表达方式为“XX00”,“XX”表示两位大写字母,表达不同的元器件。“00”表示同类元器件的不同数目编号,当有多个同类元器件是,起到区分作用。具体元器件标识依据应该表达简写而成,如表1所示:

Table 1. Components and parts identification
表1. 元器件标识表
6. 结论
本文为了解决面包板功能电路的自动识别问题,设计了一款基于OpenCV的人机交互自动识别软件系统。系统包括电子元器件自动识别功能,面包板连接情况识别功能,电路拓扑自动识别功能,电路连接错误预警功能。该系统适用于安卓平台。通过实际图片检验,可知该系统可以根据图像信息自动识别电路连接,为用户给出功能检测反馈。
基金项目
大学生创新创业训练项目资助,项目编号(201810066028)。