基于OpenCV和Tesseract-OCR的英文字符算法研究郭室驿(大连外国语大学,辽宁大连116041)摘)、Tesseract-OCR(要院主要介绍了一种借助于OpenCV(开源计算机视觉库Google的开源光学字),以及用Python语言对Tesseract-OCR引擎的相关接口封装的Pytesseract模块,实现图像符识别引擎上的字符识别。使用OpenCV对图像进行一系列预处理,如读取、色彩空间转换、图像的降噪以及图像阈值化处理等操作后,使用Pytesseract模块将处理后的图像传入Tesseract-OCR中,实现了较准确的英文字符识别。关键词院字符识别算法;OpenCV开源计算机视觉库;GoogleTesseract-OCR技术1研究背景及意义名称为光学字符识别袁通常也被称为离线字符识别过指将手写字符或印刷文本的图像机械或电子翻译成没有任何变化的机器码遥OCR识别引擎作为计算机视觉领OCR是OpticalCharacterRecognition的缩写袁中文页面布局分析尧图像切分尧特征提取尧匹配及样本库训练和字符识别后校验处理遥OCR对于印刷体识别的主要步骤包括图像预处理尧程袁是指系统扫描和识别字符的静态图像的过程袁它是作为众多OCR产品之一袁Tesseract-OCR具备非常好的识别功能袁特别是针对英文字符的识别袁对于中小型项目来说是一个很好的选择遥因此袁实验使用Python语言袁通过OpenCV对要识别图像进行一系列的预处理操作袁使其传入Tesseract-OCR后以得到最精确的文字识别结果遥1.1研究理论基础1.1.1OpenCVOpenCV是由C++语言编写的由一系列C语言函数域的一个重要分支袁它主要利用了模式识别算法分析字符尧识别文字遥德国科学家Tausheck在1929年首次提出了OCR的概念袁然后美国科学家亨德尔提出了使用这种技术识别单词的想法遥Casey和Nagy于1966年发表了一篇关于模板匹配算法在印刷汉字识别中的应用的研究论文袁自此字符识别研究开始从西文向汉字迈进遥中国在OCR技术方面的研究工作起步较晚袁但是从上世纪七汉王集团开发的叫做尚书的OCR产品和清华大学电子工程系开发的TH-OCR产品等袁不仅能够处理各种复杂背景下的汉字识别袁而且准确率高达99.5豫以上袁它们代表着我国发展的最前沿的字符识别技术遥通过研究分析袁目前对于复杂场景渊相较于普通简单场景冤下的字符识别以及粘连的字符识别仍然是当前研究的热点[1]遥随着OCR技术的逐渐成熟袁人工键盘输入逐渐被十年代末开始至今已经取得可很多丰硕的成果遥例如袁和一些C++类构成的一个开源的尧可跨平台的计算机视觉库遥OpenCV使用灵活袁因其提供了大量的接口和各类图像处理和识别的函数袁并且支持Python尧Matlab尧Java等多种语言遥OpenCV应用领域非常广泛袁可以应用在图像处理尧字符识别尧人脸识别尧机器视觉等各种领域袁故而被大量使用遥1.1.2Tesseract-OCRTesseract是一个开源的OCR引擎袁由惠普布里斯托尔实验室从1985年到1995年开发袁从2006年开始袁Google改进了Tesseract-OCR尧消除了错误并且优化了相关工作遥到目前为止袁Tesseract已经被公认为是最优基金项目:大学生创新创业项目袁省级创新训练项袁项目编号院201810172213遥作者简介:郭室驿渊1998-冤袁本科遥收稿日期:2019-03-142019.06OCR技术所取代袁OCR技术使大量文本数据能够输入后续的处理袁为研究工作节约了大量的时间遥到计算机中存储袁以更快尧更方便尧更省时的方式进行在OCR技术的发展历史中袁印刷品的文本识别技术是最早的袁技术上是最成熟的遥45秀尧准确的开源OCR识别系统遥除了高精度外袁Tesseract源OCR引擎可以适应各种脚本和语言提供了高度的使用灵活性遥例如袁并且一直致力院Tesseract开于启用通用的多语言操作遥1.1.3为底层的PytesseractPytesseract尧使用是以光学字符识别引擎Python语言封装的模块遥TesseractPytesseractOCR模块非常灵活能够支持PIL库读取各种常规的图片文件袁例如院jpg尧jpeg尧gif尧png尧tiff等各种文件格式袁并且可以将其解码为可读的语言袁而Tesseract-ocr通常只能读取默认支持的tiff和bmp格式的文件遥与此同时袁Pytesseract得图像的处理和识别过程更加的灵活还支持OpenCV图像和Numpy数组对象袁使2研究过程设计遥2.1为了图片字符识别能够更精准OpenCV图像预处理袁首先要对一张图像进行若干的预处理以达到降低噪音尧清除图像无关信息尧增强有用信息等效果袁从而简化后续识别字符的步骤袁降低复杂度遥2.1.1在图像色彩空间转换OpenCV中有RGB尧HSV尧YCrCb等8中色彩空间袁其中BGR是OpenCV默认的颜色空间遥在本实验中要对图像进行灰度级转换遥在OpenCV中袁可以使用cv2.cvtColor()img=cv2.cutColor方法将渊RGBimg,cv2.COLOR_BGR2GRAY图像转换成灰色标度法冤遥渊1冤其中img表示图像袁cv2.COLOR_BGR2GRAY代表由BGRCV_RGB2GRAY尧格式图像向GRAY将RGB图像转化为灰度图像时用到了如下数学公CV_GRAY2RGB尧灰度图像转化CV_GRAY2BGR遥遥还可以取值为式渊小数值为近似值冤院Gray=Red伊0.3+Green伊0.59+Blue伊0.11渊2冤其中袁Gray表示灰度级图像的像素值袁Red渊红冤尧Green2.1.2渊绿冤尧Blue渊蓝图像的阈值化操作有使目标轮廓更加清晰图像的阈值化(二值化冤院是)RGB处理彩色图像的像素值遥尧简化后续处理操作尧减少图像中的数据量等作用遥它的基本思想是将图像中像素值大于或者等于阈值的像素点值设为255渊白色冤袁小于该阈值的像素点值设为0渊清晰黑色遥冤遥因此阈值化后的图片黑白效果明显尧目标轮廓462019.06在OpenCV中有常用的3种实现图像阈值化的函数袁即院全局阈值尧局部阈值渊又叫做自适应阈值冤和Otsu爷本实验采用全局阈值方法对图像进行阈值化操作s二值化3种遥遥全局阈值是为整幅图像规定一个固定的阈值袁让图像中的每一个像素点都和这个值作比较袁而自适应的阈值采用不同区域不同阈值的方法袁图像上的每一个小区域都对应一个阈值袁更适用于图像有不同的亮度区域时使用袁本实验仅针对普通图像进行研究袁因此采用全局阈值方法遥在OpenCV中使用ret,thresh1=cv2.threshold渊img,127,理遥以下是经过全局阈值处理后的测试图像255,cv2.THRESH_BINARY冤函数实现全局阈值处遥图1全局阈值测试图像2.1.3图像噪声是指图像数据中含有的不必要的或者冗余图像降噪处理的干扰信息遥生活中袁在收集尧传输和处理图像的过程中袁对图像产生的一些不可避免的噪声袁这会在一定程度上降低了图像质量袁使得机器和人眼对图像的细节部分敏感程度下降袁为后续的图像识别等处理造成一定困难遥图像的降噪处理就是对这些噪声进行一定程度上的消除处理遥图像降噪不仅能使图像更加美观清晰袁更能突出图像的ROI渊RegionOfInterest感兴趣区域冤袁是数字图像处理中各种字符识别与特征提取的前提袁有效地降噪处理能够使后续处理更简洁袁提高识别效率和识别准确率遥常见的噪声有椒盐噪声渊包括胡椒噪声和盐噪声两种冤尧泊松噪声和高斯噪声等袁本实验仅对普通图像进行椒盐噪声和高斯噪声的消除工作遥渊1冤椒盐噪声又叫做脉冲噪声椒盐噪声袁其形态呈现为一些随机且孤立的黑点或者白点遥例如在图像传输系统中解码误差就会产生这种噪声遥常使用中值滤波器对椒盐噪声进行去除遥中值滤波渊也可以称为中值平滑或中值模糊冤是一种非线性的平滑技术遥为了达到消除孤立的噪声点的目的袁它采用将数字序列或数字图像的某一点的值用该点的某一个邻域中各点值的中值来替代遥因此中值滤波对于胡椒噪声和盐噪声有非常显著的影响遥中值滤波的数学原理可以用以下公式表示院g渊x,y冤=Medianf渊x-m/2,y-n/2冤...f渊x+m/2,y+n/2冤渊3冤例如院这是一张人为添加了椒盐噪声的写有手写体数字5的测试图像遥图2带椒盐噪声的测试图像对这张图进行中值模糊操作cv2.medianBlur渊img,5冤后得到如下图像院图3中值模糊降噪后渊2冤高斯噪声是一种常见的噪声高斯噪声袁其概率密度函数服从高斯分布渊即正态分布冤在一维情况下概率密度函数为院渊4冤常常使用高斯滤波渊也叫高斯平滑冤对图像中的高斯噪声进行降噪处理遥高斯滤波是一种能够有效消除高斯噪声的线性平滑滤波遥其原理是对整个图像的每个像素进行加权平均的过程遥通过对其自身和邻域中的其他像素值进行加权平均来获得每个像素的值遥高斯滤波应用广泛袁因此大部分图像都要经过高斯滤波处理遥例如院这是一张人为添加了高斯噪声的写有手写体数字5的测试图像遥图4带高斯噪声的测试图像经过cv2.GaussianBlur渊img,(5,5),0冤的高斯滤波后得到图像为院图5高斯模糊降噪后可见袁高斯滤波有效地去除了一定的高斯噪声遥由图6袁图7可以看出经过图像预处理后有效去除了图像的噪声遥因此袁随后的研究可以基于图像的噪声污染程度执行不同的降噪操作遥图6两种噪声混合测试图图7降噪处理后2.2因Tesseract-OCRGoogleTesseract-OCR的字符识别是有局限性的袁其对文字背景以及像素有很高的要求袁比如院要求是普通背景下的少噪声图像尧相对于图像中的识别文字而言袁其余背2019.07景部分的杂音越少袁识别出来的字符效果越好遥因此当需要将Tesseract-OCR引擎应用于本实验的项目时袁理解如何通过Python语言访问Tesseract-OCR是很重要的袁因此需要使用一个Tesseract-OCR的API模块的包装类遥院Pytesseract遥下面来具体介绍Pytesseract2.2.1TesseractTesseract-OCR1995-OCR是实验室HPBristol从1985年到以来袁年期间开发的一种开源Google已经消除了错误OCR尧改进并优化了识别引擎遥自2006Tesser鄄年act-OCR遥开源OCR系统Tesseract-OCR遥GoogleTesseract-OCR是迄今为止最好除了具有高精度袁最准确的的特点以外袁其高度的灵活性也是重要特征之一袁例如院Tesseract开源OCR引擎可以适应各种脚本和语言袁并且GoogleTesseract-OCR识别引擎一直致力于启用通用的多语言操作遥Tesseract-OCR的架构如图8所示遥输入院二值化图像页面布局分析找到目标块区域定位文本行和单词并分割输出院图片第二次字符第一次字符文本模糊区域改进分析识别分析识别图8架构图过程分析院首先传入二值化后的图像进入OCR引擎进行页面布局分析后袁图像将以行为单位被切割开遥随后通过识别引擎分析得到含有目标块地图像区域遥采用自适应分类器进行文本行和单词的定位与分割遥进行两次字符分析识别过程后OCR引擎对图像上的模糊区域进行改进操作并校验字符识别是否正确后输出识别出的图像上的文本遥2.2.2符识别引擎PytesseractPython中的Pytesseract模块Tesseract-OCR是使用Python为底层接口的模块语言封装成的袁遥以光学字pytesser鄄act像文件模块应用非常灵活袁例如院Jpg袁袁Jpeg袁支持Gif袁PIL库读取各种传统的图Png袁Tiff等袁并可以将它们解码为可读语言袁而Tesseract-ocr默认只有tiff和支持bmp遥与此同时袁Pytesseract还支持OpenCV图像或者Numpy数组对象袁使得图像的处理和识别过程更加的灵活遥482019.06而使字符的识别更灵活Pytesseract中有很多连接遥OCR的API的方法袁从在Tesseract渊1冤image_to_string渊冤OCR识别出的的结果方遥以字符串的形式返回识别字符渊2冤遥image_to_boxes渊冤方可以返回框边界和已信任和其他信息的结果渊3冤image_to_data渊冤方法3试验结果分析遥院能够返回包含框边界尧试验过程中使用的Pytesseract模块下的image_to_string理后的图像作为参数传递给方法袁本实验将使用这个方法Tesseract-OCR袁将经过上述预处的API进行字符识别遥image_to_string方法调用如下院put_type=Output.STRINGimg_to_string渊image冤,lang=None,config\nice=0,out鄄渊5冤其中袁image是Object类型遥要由Tesseract处理的PIL识别的语言图像/Numpy遥例如数组院遥野eng冶院lang属于英文String尧野jpn冶院类型遥Tesseract日语等袁具体参考Tesseract-OCR源程序中的tessdata文件中的Traineddata是String类型类型文件遥附加的配置条件袁以选择需要识别的字符遥nice是Integer遥类型config遥output_type试验具体实验调用为默认为String类型的文本输出类型院遥result=pytesseract.image_to_string渊Image.open渊src冤,lang=\"eng\"冤渊6冤试验小组通过在网络上随机截取了一节英文短文图片并存储在硬盘中遥图片如图9所示遥图9经过项目的一系列操作后的到的文本如图10所示遥图10再换一组数据测试袁如图11所示遥本实验项目的研究对象仅仅针对普通场景下的简单图像袁仅实现低噪声尧高像素的图像中的英文字符的识图11试验的测试结果如图12所示遥别算法遥并未对复杂场景下的图像文字识别进行研究袁并且识别文字仅对英文字符进行了研究袁其他语种字符以及多语种字符混合的情况仍有待研究遥将着手继续进行以下工作院的扩充袁以达到提高识别准确率的效果遥写字符识别领域迈进遥渊1冤针对本实验已实现算法进行字符识别训练部分渊2冤尝试研究复杂场景下的字符识别袁并着手向手参考文献[1]郝辉,哈里木拉提窑买买提,乔萨础拉,等.字符识2018,41(22):1.别研究现状和发展趋势计量分析.现代电子技术,图12试验小组成员通过多组实验测试数据可以得出此方法的识别效率比较理想袁达到了小组成员的预期效果袁但准确度仍有待提高袁字符识别算法仍需要继续进行更深入的研究遥4结语基于GoogleTesseract-OCR引擎和OpenCV库进行字符识别研究袁利用Python语言初步研究了字符识别算法遥参考利用了前人已实现的较好的字符识别算法袁初步实现了对简单图像中的英文字符的识别功能袁本实验所采取的字符识别算法仍有诸多不足之处袁还有待之后的进一步优化遥(上接第29页)任务完成掉电前的数据保存遥为了确保IPE供电可靠性袁飞机主发和APU采用同一汇流条给IPE混合供电袁其间配合IPE电源智能管理可实现两种混合供电方式的无缝切换尧以及多种工作模式的动态转换遥流电源的供电开关未使能袁由H渊高电压冤供电曰H渊高电压冤供电故障时袁使能L渊低电压冤直流电源供电两者之间的无缝切换袁保证关键任务数据资源的掉电(上接第27页)mentRouting.July2018.[3]电输出袁实现H渊高电压冤和L渊低电压冤混合电压供H渊高电压冤供电正常时袁蓄电池L渊低电压冤直[2]GaryBradskiAdrianKaehler.学习OpenCV渊中文版冤.于仕琪,刘瑞祯,译.北京:清华大学出版社,2009.[3]杨明,李晶.一种新的椒盐噪声去除方法.科技视界,2014,25:082.保存遥4结语基于IPE关键任务执行的要求以及飞机供电系统的复杂性袁提出了多种供电方式混合供电的设计思路袁通过构造IPE动态工作模式袁以期IPE能实时根据飞机供电系统的变化动态调整工作模式袁满足飞机系统的供电要求和航电系统的关键任务执行适应性袁从而提高飞机航电系统的可靠性和安全性遥参考文献[1]严东超.飞机供电系统.国防工业出版社.[2]刘建英.飞机电源系统.兵器工业出版社.[5]沈少辉.基于SDN的分段路由技术研究[D].电子科技大学.2018.案.2018.[6]SDNLAB.腾讯DCI上线基于集中控制的SR-TE方[7]饶小兵.一种实现多跳BFD单臂回声功能的方法[8]NE40EV800R010C00特性描述.2018.2019.06Detection(BFD)forSegmentRoutingPoliciesforTrafficEngineering.March2018.K.Talaulikar,CiscoSystems.BidirectionalForwarding[4]B.Decraene,S.Litkowski,CiscoSystems.SegmentRoutingwithMPLSdataplane.June2019.[P].2018.49