什么是人工智能、机器学习和深度学习?
相比传统的机器学习算法,深度学习做出了哪些改进呢?
为何神经网络到2010年后才焕发生机呢?
机器学习三步
OCR字符识别
OCR(Optical Character Recognition)
中文叫做光学字符识别。它是利用光学和计算机技术把手写或打印在纸上的文字读取出来,通过检测亮暗的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。实际应用:比如扫描身份证信息;车牌识别技术;APP搜题等。
OCR可以分为两类:手写体识别和印刷体识别。
印刷体识别较手写体识别要更简单,因为印刷体大多都是规则的字体,而人手写的字往往带有个人特色,每个人写字的风格基本不一样,虽然其他人可以读懂你写的文字,但是机器却很难。
我在初期选择时使用过谷歌开源OCR引擎Tesseract,但是最后放弃了,因为我发现在Tesseract汉字识别的精度上还是不够,可能是因为它是国外的公司。识别数字和英文字母比较简单,可能是因为字符类型比较少。但是到了中文识别,它这个引擎其实识别就没那么精确了,可能是因为汉字结构比较复杂,汉字字体也比较多,可能有几千个,所以我最终选择了百度智能云里的百度AI,其实我觉得在汉字的识别上,我们中国公司的技术还是挺厉害的,最起码在汉字识别的准确率上已经让人很满意了
OCR处理步骤
首先处理步骤一般可以分为三步,分别是图像处理,文字识别和后处理这三步。
图像处理
图像处理这个过程通常包含灰度化、二值化、降噪、文字切割等几个小的步骤。每一个步骤都涉及了不同的算法。首先是灰度化,灰度化说通俗一点就是把一张彩色图片变为黑白图片,灰度化的过程是将图片每个像素点的RGB值统一成一个值。灰度化之后图像就会由三通道变为单通道,这样数据处理起来就会简单许多,灰度化一般有最大值法、平均值法。
二值化的意思是因为一个图像里面即包括目标主体也包含背景还有噪点,所以要想从数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值,用这个阈值把图像的数据分成两部分:大于这个阈值的像素群和小于它的像素群,这就是图像的二值化(binaryzation)。
二值化里最重要的就是阈值的选取,一般分为固定阈值和自适应阈值。比较常用的二值化方法则有:双峰法、迭代法。
然后是降噪,图像在数字化和传输过程中常受到一些设备和外部环境的干扰,得到的图像中可能会有很多零星的小黑点,这就是噪点。图像降噪的方法一般有均值滤波、中值滤波器等等。均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,这个模板包括了它周围的临近像素,再用模板全体像素的平均值来代替原来像素值。说的简单一些就是把邻域内的平均值赋给中心元素。均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,存在着边缘模糊的问题,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
下来就是给图像倾斜矫正然后进行文字切割。
文字识别
文字识别里比较重要的就是特征提取和降维,特征是用来识别文字的关键信息,每个不同的文字都能通过特征来和其他文字进行区分。在确定了使用何种特征后,还有可能要进行特征降维,因为有的时候如果特征的维数太高,分类器的效率会受到很大的影响,为了提高识别速率,往往就要进行降维。
下来就是分类器设计和训练。对一个文字图像,提取出特征丢给分类器后,分类器就会对它进行分类,也就是告诉你这个特征该识别成哪个文字。我们的任务就是对分类器的设计。分类器的设计方法一般有:模板匹配法、判别函数法、神经网络分类法。在进行实际识别前,往往还要对分类器进行训练,这是一个监督学习的过程。成熟的分类器也有很多,有 SVM,CNN等。
后处理
其实就是对于分类器的分类结果进行优化,这一般就要涉及自然语言理解的范畴了。因为有时候模型识别结果并不准确,所以我们需要对识别的结果进行矫正和优化。比如我们可以设计一个语法检测器,去检测字符的组合逻辑是否合理。比如一个单词Because,我们设计的识别模型把最前面的字幕B识别成了8,那么我们就可以用语法检测器去纠正这种拼写错误完成识别的矫正。