机器学习一些算法的应用01

机器学习一些算法的应用01

机器学习算法应用——光学字符识别

1. 基本概念

​ OCR (Optical Character Recognition,光学字符识别):是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

2. 基本思想

一般OCR套路是这样的

  • 1.先检测和提取Text region.

  • 2.接着利用radon hough变换 等方法 进行文本校正。

  • 3.通过投影直方图分割出单行的文本的图片。

  • 4.单行的OCR

    对单行的OCR主要由两种思想:

    • 第一种是需要分割字符的。
      分割字符的方法也比较多,用的最多的是基于投影直方图极值点作为候选分割点并使用分类器+beam search 搜索最佳分割点。
      搜索到分割点之后对于单个字符,传统的就是特征工程+分类器。 一般流程是 灰度 - 二值化->矫正图像 -> 提取特征(方法多种多样例如pca lbp 等等) ->分类器(分类器大致有SVM ANN KNN等等 )。
      现在的 CNN(卷积神经网络)可以很大程度上免去特征工程。
    • 第二种是无需分割字符的,有一点就是端到端(end to end)的识别,但前提是你需要大量的标注好的数据集。 这种方法可以不分割图像直接以连续的输出字符序列。
      对于短长度的可以使用mutli-label classification 。比如像车牌,验证码,google做街景门牌号识别就是用的这种方法。
      如果字符序列长度较比如很长的手写体 而且不固定的话。可以使用类似于语音识别中采用的方法,让训练好的单个字符分类器在序列图像上滑动,输出概率图,接着用 lstm rnn 等序列模型+ ctc loss输出字符序列。 像现在的tesseract 4.0 已经使用lstm来进行ocr了。

3. 基本识别步骤

​ 首先OCR是模式识别的一个领域,所以整体过程也就是模式识别的过程。其过程整体来说可以分为以下几个步骤:

  • 1.预处理:对包含文字的图像进行处理以便后续进行特征提取、学习。这个过程的主要目的是减少图像中的无用信息,以便方便后面的处理。在这个步骤通常有:灰度化(如果是彩色图像)、降噪、二值化、字符切分以及归一化这些子步骤。经过二值化后,图像只剩下两种颜色,即黑和白,其中一个是图像背景,另一个颜色就是要识别的文字了。降噪在这个阶段非常重要,降噪算法的好坏对特征提取的影响很大。字符切分则是将图像中的文字分割成单个文字——识别的时候是一个字一个字识别的。如果文字行有倾斜的话往往还要进行倾斜校正。归一化则是将单个的文字图像规整到同样的尺寸,在同一个规格下,才能应用统一的算法。

  • 2.特征提取和降维:特征是用来识别文字的关键信息,每个不同的文字都能通过特征来和其他文字进行区分。对于数字和英文字母来说,这个特征提取是比较容易的,因为数字只有10个,英文字母只有52个,都是小字符集。对于汉字来说,特征提取比较困难,因为首先汉字是大字符集,国标中光是最常用的第一级汉字就有3755个;第二个汉字结构复杂,形近字多。在确定了使用何种特征后,视情况而定,还有可能要进行特征降维,这种情况就是如果特征的维数太高(特征一般用一个向量表示,维数即该向量的分量数),分类器的效率会受到很大的影响,为了提高识别速率,往往就要进行降维,这个过程也很重要,既要降低维数吧,又得使得减少维数后的特征向量还保留了足够的信息量(以区分不同的文字)。

  • 3.分类器设计、训练和实际识别:分类器是用来进行识别的,就是对于第二步,你对一个文字图像,提取出特征给,丢给分类器,分类器就对其进行分类,告诉你这个特征该识别成哪个文字。在进行实际识别前,往往还要对分类器进行训练,这是一个监督学习的案例。成熟的分类器也很多,什么svm,kn,神经网络etc。我当时不知天高地厚用经典bp神经网络去学习,结果……呵呵……

  • 4.后处理:后处理是用来对分类结果进行优化的,第一个,分类器的分类有时候不一定是完全正确的(实际上也做不到完全正确),比如对汉字的识别,由于汉字中形近字的存在,很容易将一个字识别成其形近字。后处理中可以去解决这个问题,比如通过语言模型来进行校正——如果分类器将“在哪里”识别成“存哪里”,通过语言模型会发现“存哪里”是错误的,然后进行校正。第二个,OCR的识别图像往往是有大量文字的,而且这些文字存在排版、字体大小等复杂情况,后处理中可以尝试去对识别结果进行格式化,比如按照图像中的排版排列什么的,举个栗子,一张图像,其左半部分的文字和右半部分的文字毫无关系,而在字符切分过程中,往往是按行切分的,那么识别结果中左半部分的第一行后面会跟着右半部分的第一行诸如此类。

机器学习算法应用—–人脸识别

人脸识别:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别、面部识别。

人脸识别系统主要包括四个组成部分,分别为:人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及匹配与识别。

1. 人脸识别基本分类

  • 1:1 人脸识别算法主要使用场景
    身份验证:支付宝,Ipone, 远程的互联网客户认证
  • 1:N人脸识别算法主要用于人脸检索
    排查犯罪嫌疑人、失踪人口的全库搜寻、一人多证的重复排查,身份识别
  • 拍照和直播APP的人脸图像叠加
  • 未来最大的使用端是机器人视觉交互

2. 人脸识别基本流程及方法

  • 人脸识别的基本算法:
    主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法、基于模板的方法和基于模型的方法。
  1. 基于几何特征的方法是最早、最传统的方法,通常需要和其他算法结合才能有比较好的效果;
  2. 基于模板的方法可以分为基于相关匹配的方法、特征脸方法、线性判别分析方法、奇异值分解方法、神经网络方法、动态连接匹配方法等。
  3. 基于模型的方法则有基于隐马尔柯夫模型,主动形状模型和主动外观模型的方法等。
  • 基于PCA的人脸识别算法:
    PCA(主成分分析),在此我们介绍通过PCA进行人脸识别的步骤。
    1. 读取训练集图像数据
      读取测试集目录下指定个数的图像,然后将其保存在一个二维数组中。如果图像个数为m,图像长宽为i、j,则我们创建一个二维数组A[m][i*j=n]用来保存图像数据。数组的每一行表示一个图像的所有像素信息,每一列表示一个随机变量,也即不同图像同一位置的像素信息,降维也即用更少的列来代表图像。
    2. 每列减去均值
      将步骤一的每列减去该列的均值,这样每列的数据均值为0。在利用matlab的函数princomp执行PCA的过程中,princomp会首先将每一列减去该列均值,不用我们自己执行。
    3. 计算协方差矩阵
      协方差矩阵表示不同随机变量之间的相互关系,图像中也即求任意两个像素之间的关系。如果两个随机变量的协方差为正或为负,表明两个变量之间具有相关性,如果为零表示两个变量不相关。通过计算协方差矩阵 1 n X X T \frac{1}{n}XX^T n1XXT,我们就可以获得不同像素之间的关系。针对人脸识别,计算的协方差矩阵大小为nn,其中n表示图像的像素点个数。
    4. 计算协方差矩阵 1 n X X T \frac{1}{n}XX^T n1XXT的特征值和特征向量
      由于协方差矩阵是实对称阵,所以可以求得其所有的特征值和特征向量,其共有n个特征值和特征向量。
    5. 选择主成分
      所谓主成分即是具有最大特征值的特征向量,所以我们需要将特征向量按照特征值由大到小排序,然后根据精度要求选择不同数量的特征向量,例如我们选择了前p个特征向量,通常p远小于n(在我们的人脸识别实验中,为了达到95%的精度,p只有72,而n为120140=17040)。
    6. 将训练集进行降维
      此步骤将原始的训练集进行降维变换,原始的图像数据是mn的矩阵,只包含主成分的特征向量构成一个np的矩阵(每一列都是一个特征向量)。将两个矩阵相乘,我们即可获得降维之后的图像矩阵mp,这个矩阵远小于原始的图像数据。
    7. 将测试集进行降维
      同步骤6相似,读取所有的测试集图像,然后对其也进行降维操作。如果测试集有M幅图像,则降维后的矩阵为M*p。
    8. 人脸识别
      该步骤为人脸识别的最后一步,用来对测试集进行识别,并计算识别准确率。该步骤有一个限制,测试集中的头像必须包含在训练集中,否则得出的结果将没有意义(这也就是代码一开始要求训练集大于测试集的目的)。识别的方法和最初的图像匹配方法类似:将测试集中的每一幅降维图像与降维的训练集进行匹配,然后将其分类到距离最小的训练集头像中,如果两个头像表示一个人,表示识别成功,否则表示识别失败。与原始的匹配相比+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值