使用 Tensorflow 实现口算检查器(一):模型选择

栏目: 数据库 · 发布时间: 6年前

内容简介:周末在家帮娃检查口算作业,发现一个非常有意思的应用:拿手机对着作业拍照,立马就能知道有没有做错的题目。如果做错了,还会标记出来,并给出正确答案。出于一名软件工程师的职业病,看了这个应用,忍不住琢磨其实现,初步判断这是一款采用了人工智能的应用。想着自己也在学习人工智能技术,就拿这个练练手,算是对这段时间学习到的深度学习知识的一个总结。具体形式上,准备做成微信小程序,业务逻辑在服务器端完成。

周末在家帮娃检查口算作业,发现一个非常有意思的应用:拿手机对着作业拍照,立马就能知道有没有做错的题目。如果做错了,还会标记出来,并给出正确答案。

使用 Tensorflow 实现口算检查器(一):模型选择

出于一名软件工程师的职业病,看了这个应用,忍不住琢磨其实现,初步判断这是一款采用了人工智能的应用。想着自己也在学习人工智能技术,就拿这个练练手,算是对这段时间学习到的深度学习知识的一个总结。具体形式上,准备做成微信小程序,业务逻辑在服务器端完成。

按照惯例,我还是会将实现过程详细的记录下来,并将源码放在github上,敬请关注。原计划写一写生成对抗网络(GAN)的,因为有了这样一个小目标,只能先暂时放一放。

定下这个小目标之后,这周都在收集相关的资料。

OCR

首先来说一说OCR(Optical Character Recognition,光学字符识别)。OCR是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。

OCR技术在印刷、打印行业应用广泛,可以快速的将纸质资料转换为电子资料。OCR能识别文字字符,当然识别数字也不在话下,而且OCR技术已经得到多年的发展,非常成熟。在项目开发中,也有成熟的开源方案可供选择,这其中的佼佼者是Tesseract。

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。Tesseract目前已作为开源项目发布在Google Project。

Tesseract在使用上也非常简单,借助于pytesseract python包,在 python 中使用如下寥寥几行代码就可以实现一个图片中字符的识别。

import pytesseractfrom PIL import Image

image = Image.open('./test_images/image3.jpg')
text = pytesseract.image_to_string(image)
print(text)

对如下图片进行识别:

使用 Tensorflow 实现口算检查器(一):模型选择

结果如下:

WHWM$Efifi%



35—5: 28-6= 38-8:
27-4: 25—4: 29—2:
25—3: 24—4: 49—4=
22—1: 47—5: 26-6=



42—1: 41—1: 44—3:



38-5= 46-6= 49-6=
34-3= 48-5= 28-4=
36-4= 39-4= 27-2=
48-6= 28-2= 46-5=
35-4= 26-5= 48-3=
27-3: 47-6: 38-4:
39-3= 33-2= 36-4=

mmz¥sm “mm" ‘x
31

上述结果是没有做任何配置和调教的情况下作出的,所以没有识别出中文,另外也存在一定的错误,这都可以通过代码进行矫正。

看起来似乎问题可以很快得到解决,将识别出的文本进行分割,然后转化为算式进行运算就可以求值。但这种方案的最大问题在于,我们没有得到算式的坐标。这样如果检查出错误后,无法明确标识错误的位置,无法满足需求。

目标检测(Object detection)

因为之前也稍微了解过深度学习中的目标检测,所以自然就想到借助目标检测技术来实现。目标检测(Object Detection)是人工智能最基础的应用,不论是我们常见的人脸识别,还是高大上的自动驾驶,都离不开目标检测。要从一幅复杂的画面中识别出物体或人物,需要复杂的算法,想想就觉得深奥,不过好在有TensorFlow这样的框架,具有强大的目标检测API,让没有机器学习背景的人也可以快速构建和部署功能强大的图像识别软件。

使用 Tensorflow 实现口算检查器(一):模型选择

我在前面写过关于目标检测的系列文章《使用TensorFlow一步步进行目标检测》,详细的过程这里就不重复,简单总结一下,大体的过程如下:

  1. 选择模型

    github上有TensorFlow模型集合,可以通过简单的命令获得这些预训练的模型:

    git clone https://github.com/tensorflow/models.git

    在research目录,里面有一个object_detection子目录,这里面有我们所需的目标检测模型。object_detections目录下的内容相当多,有数据集、模型文件、测试代码、示例等等,模型文件位于models子目录下:

    使用 Tensorflow 实现口算检查器(一):模型选择

    因为在本项目中,需要识别的场景比较单一,需要识别的目标也不复杂,所以我就选择了在移动终端上能很好工作的ssd_mobilenet_v1_coco模型。

  2. 准备数据

    训练需要标注的图片数据,标注不仅包含类别,还需要包含目标在图像中的坐标。图片标注之后,还需要转换为TensorFlow所能接受的TFRecord格式。通常我们借助脚本来实现,在后续的文章中会详细说明,这里先不展开。

  3. 训练

    有了自己的数据,就可以利用迁移学习原理,在现有的ssd_mobilenet_v1_coco模型上训练出我们自己的模型。

  4. 识别数字和运算符号

    使用训练出的模型,进行数字和运算符号识别,识别结果包括类别以及在图像中的坐标。

有了识别出的数字和运算符号以及其坐标,我们就可以进行一系列的判断,确定运算式及其位置,这部分的逻辑也有一定的复杂度,但是相比之前的目标检测,还是简单不少。

在搜索资料的过程中,我在github上发现一个开源项目:https://github.com/stevenobadja/math_object_detection 。该项目也是识别图像中的运算式,并计算出结果,有很多可以借鉴的地方,我会在项目中尽可能多的复用该项目的数据集、脚本。

在下一篇文章中,我将聊一聊如何使用目标检测来识别手写数字。

参考

  1. 使用TensorFlow一步步进行目标检测(1)

  2. 使用TensorFlow一步步进行目标检测(2)

  3. 使用TensorFlow一步步进行目标检测(3)

  4. 使用TensorFlow一步步进行目标检测(4)

  5. 使用TensorFlow一步步进行目标检测(5)

  6. https://github.com/stevenobadja/math_object_detection

使用 Tensorflow 实现口算检查器(一):模型选择


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆品战略

爆品战略

金错刀 / 北京联合出版公司 / 2016-7-1 / 56.00

◆ 划时代的商业著作!传统企业转型、互联网创业的实战指南! ◆ 爆品是一种极端的意志力,是一种信仰,是整个企业运转的灵魂! ◆ 小米创始人雷军亲自作序推荐!小米联合创始人黎万强、分众传媒创始人江南春、美的董事长方洪波、九阳董事长王旭宁等众多一线品牌创始人联袂推荐! ◆ 创图书类众筹新纪录!众筹上线2小时,金额达到10万元;上线1星期,金额突破100万元! ◆ 未售......一起来看看 《爆品战略》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码