概述

本文描述一个基于人工智能2D图像识别算法实现的绘本阅读方案,应用于绘本阅读机器人和绘本阅读手机APP。主要内容包括:基础算法,方案架构及工程化,项目遇到的坑及解决方案。为了更容易理解,本文重点描述项目的工程化,对于算法也做一定程度的阐述、但不做深入,相关算法资料及论文在互联网可方便搜到。

演示视频

基础算法

算法方案选型:

本项目要解决的核心问题是:在低算力的硬件上通过普通摄像头(2D)采集图像快速(<1s)定位到时哪一本绘本的哪一页,即需要通过计算机视觉算法来评估当前摄像头图像帧是否存在一个预置的特有FLAG。项目技术方案评估过方法主要有:

1) 基于目标分类算法,可以看作是一种图像分类的问题。先对绘本封面图像进行分类定位,找到对应绘本后,再对绘本内页图像分类定位。这个方法理论是可行的,但分布封面的分类过多(可能有超过两万本绘本),而且算法复杂度高,实际并不可行。

2)另外还有目标检测的算法,但对于绘本图像来说,并没有相对固定的特征(例如人,动植物等),所以这个方法也不可行。

3)基于图像特征匹配的图像识别,即对两个图像的特征进行匹配来预测是否为相同图像,这个算法复杂度较低,算法鲁棒性强,且绘本图像天然有较多的图像特征,这个方法与项目需求是非常匹配的,其实在技术选型时,就很快确定了这个算法基础。、

基础算法描述

图像特征匹配中算法基础是特征因子算法,如SIFT, SURF, FAST, ORB等,综合算法的鲁棒性和复杂度,项目主要采用的是SURF和SIFT算法因子。以下是基于SURF算法因子匹配对两个图像进行匹配的代码片段,可以大概感受下:

  ...img1 = cv2.imread(imgname1)img1 = cv2.resize(img1, (600, 400))kp1, des1 = surf.detectAndCompute(img1,None) #des是特向量img2 = cv2.imread(imgname2)img2 = cv2.resize(img2, (600, 400))kp2, des2 = surf.detectAndCompute(img2,None)matches = flann.knnMatch(des1,des2,k=2)...

算法层面上,实现了图像特征匹配还是不够,因为还有解决一个问题:在大数量的图像中(如10000+的绘本封面图像)快速定位到目标图像,如果程序是一张一张图像的比较匹配,时效是非常低,完全达不到秒识别的要求。这时需要引用图像检索的算法,项目实现两种图像检索算法,建立图像索引,大概如下:

1)KD-tree, 基于树型布局的索引分为向量空间和度量空间。向量空间使用欧式距离来比较特征相似度,度量空间不使用欧式距离来比较特征相似度,KD-Tree是典型的基于二叉树的索引结构。

2)K-means,其首先通过聚类方法构建聚类中心,将图像特征库分成许多簇(类)。检索时,查询图像的特征向量先和聚类中心向量比较,计算向量间的距离,然后只需在距离较近的簇中进行检索。

总的来说,绘本图像的识别与查字典类似:先通过图像检索定位到少量的目标图像,然后再通过特征匹配预测出目标图像。

工程化

确定了算法基础,接下来就是充满荆棘的项目开发和落地的过程。

摄像头方案

首先是摄像头方案选定。摄像头是产品的“眼睛”,摄像头方案对于识别的效果是有关键作用的,主要目的是保证摄像头有效成像区域覆盖绝大部分尺寸绘本翻开后的尺寸,而有效成像区域是摄像头采集到的、可用于视觉分析的图像,边角图像畸变大、失真属于无效成像区域。摄像的方案主要考虑以下因素:

1)因为摄像头是固定安装的且与采集图像的距离是相对固定,因此摄像头需要时定焦的,避免对焦过程,图像不清晰影响到识别效果。

2)FOV(摄像头视场角度),FOV越大,成像区域越广,但也会带来畸变,FOV的选定要结合产品结构。本项目摄像头的FOV是110°

3)摄像头的高度(H)和倾斜角(α)直接影响到有效成像区域,在符合“有效成像区域覆盖绝大部分尺寸绘本翻开后的尺寸”的产品需求下,根据结构综合决定。本项目中,H是13cm,α是40°

软件架构

整体软件架构是经过不断设计,验证和优化得出的。

软件主要分三部分:

1、绘本SDK,包括Android 和 Linux SDK,核心算法部分是C++写的,在Android中通过NDK融合到SDK中。SDK包含本地识别和云识别模块。本地识别主要包括:检索和识别算法,不同系统的交互逻辑;云识别模块:云服务器交互的客户端部分功能(如各种HTTP Client)。

2、云识别服务,核心算法部分是C++写的单独程序,在云上部署方式非常灵活,结合集群、均衡负载、缓存等可提升云服务性能和稳定性。前后端通过HTTP POST 图像数据为主要接口。

3、绘本训练管理系统,是C++写的程序,实现绘本数据自动批量上线:包括绘本资源数据上传到CDN存储服务器,绘本封面图典文件(图典下面详述)上传,每一本绘本图典文件上传,数据更新上线。

云服务器部署:

云识别服务器是单独高计算服务,对于服务器的高并发、高可用的追求,可用从集群、均衡负载、算法轻量化、图像信息压缩传输、热点数据缓存等方面考虑。以下是一个部署方案的参考:

图典

是实现是算法工程化的重要一步,解决的问题是将所有绘本的图像特征和图像索引按特定数据结构描述并存储,而且图典支持叠加更新。

主要数据结构

1、indexedDescriptors 特征向量描述列表,保存所有图像特征向量的列表,相似的特征向量会唯一元素存储。

2、wordToObject特征向量ID和图像ID的map,存储obj(即预存图像)与向量特征列表的ID的对应关系

3、scene是摄像头采集当前帧的图像特征向量列表,vocabulary是图典索引,数据结构跟图像检索算法有关:KD-Tree是二叉树;K-means是n叉树,具体树的结构暂不展开。下图描述scene的特征向量从vocabulary索引中检索到最有可能匹配的特征向量以及在indexedDescriptors中的id,检索出来后,根据wordToObject算出最有可能匹配的图像。

存储方式

1、本项目中,图典是保存成文件,所有绘本的封面图像保存成一个图典文件,每一本绘本的封面和所有内页图像保存为一个图典文件。对于此类部分结构化数据,可以保存数据库中(NoSQL)。存储为文件,主要考虑到开发和运维便利。

项目方案

实施方案

结合产品需求,实施方案有以下两种:

1、离在线结合方案:

1)封面在云服务识别,服务器性能和存储可根据性能要求伸缩,支持大数量图像准确检索(数万绘本封面);

2)识别到封面后,本地SDK下载并加载对应封面绘本的图典文件,本地实时识别当前翻到对应内页图像。

2、离线方案

1)封面和所有绘本图典文件预先下载到本地,本地进行绘本封面和绘本内页图像检索识别。这个方案在算力和存储较低的设备上,支持绘本的数量有限。

绘本训练上线

绘本训练上线是通过绘本训练管理系统完成的,工作原理和流程是:

1、制作绘本数据:包括绘本封面和内页图像 以及 封面和每一内页对应的音频

2、将绘本数据图片和音频按特定目录文件命名存放,如下图是my dad绘本的命名例子,图片和音频命名一一对应,如图片没有对应音频,则空缺。

3、绘本训练管理系统根据命名读取图像生成所有绘本封面图典和每一绘本的图典文件,同时将图典文件、绘本图片和音频上传到CDN静态存储服务器,将静态文件URL以及绘本信息(ID,书名,ISBN号等)上线到数据库。

工作流程

以下以离在线结合方案描述绘本阅读程序一个正常基本的流程,通过云服务识别绘本封面,识别到封面定位到绘本后,加载对应绘本的图典,绘本SDK本地识别绘本内页图像,识别到一页播放对应页的音频,实现 放置哪一步绘本,读那一本绘本;翻哪一页,读那一页内容。

项目经验分享

绘本训练

绘本训练的方案确定、开发、实施经历一些曲折,这里也分享下。

1、虽然SIFT等特征因子算法具备方向、尺度等不变性,考虑识别效果,最初绘本训练的方案是通过绘本机器人摄像头来采集绘本图像进行训练,保持训练图像和实际使用采集图像的角度一直性。但这个方案需要绘本书本,且需要人力一本一本地训练,不具备大批量操作的可行性。

2、绘本训练方案必须自动化、大批量进行,所以把出版社的绘本高清扫描图作为训练数据似乎是唯一的方案,但这个方案还需解决图像视角不一致的问题以提高识别率,如下图,一张是绘本机器人摄像头采集的图像(灰度化),另一张是出版社绘本扫描图,两者视角有差异。解决训练图像与采集图像的视角差异的方法是:将采集图像通过透视变换将视角转换与训练图像一致后,再做特征提取。

   

图像处理优化

每一帧采集图像的处理(特征提取和检索)都需要一定算力,提高计算资源效率一个方法是图像采集后预测图像是否包含绘本图像,预测到有绘本图像才进行特征提取和检索。通过图像熵值可以比较有效预测当前图像是否有绘本图像(具体方法参考代码)。

图像前后端传输

前端摄像头采集的图像可以直接将图像信息完整发送到后端进行识别,比较好的方法是将图像灰度化,去除无效数据后、再压缩传输。

云服务数据存储

在绘本数量不大的情况下,服务器上的绘本数据可以都从Redis缓存获取,提高性能。

Todo List

1、绘本SDK支持iOS,核心算法是C++,这个开发工作不大。

2、支持手机APP(小程序)用户DIY拍录绘本。

3、对于纯文字的书本,目前算法是支持的,可以通过局部OCR的方法解决,核心解决问题是:通过计算机视觉算法来评估当前摄像头图像帧是否存在一个预置的特有FLAG。

联系我们,各类合作欢迎关注公众号“橙狮科技”

橙狮AI图像识别绘本阅读方案(含完整源代码和开发文档)相关推荐

  1. java英文开发文档阅读_API文档的阅读

    API --Application Programming Interface(应用程序编程接口) API是应用程序接口的意思,API是Java提供的基本编程接口,当使用Java语言进行编程时,不可能 ...

  2. 如何阅读苹果开发文档

    原文:How to read Apple's developer documentation 对于很多人来说,这篇文章听起来很奇怪,因为我们已经习惯了 Apple 的 API 文档的工作方式,因此我们 ...

  3. [译] 如何阅读苹果开发文档

    原文:How to read Apple's developer documentation 对于很多人来说,这篇文章听起来很奇怪,因为我们已经习惯了 Apple 的 API 文档的工作方式,因此我们 ...

  4. beego学习笔记(4):开发文档阅读(3)

    通过运行 bee new quickstart 来创建新的项目,其结构如下: quickstart |-- conf | `-- app.conf |-- controllers | `-- defa ...

  5. 关于百度AI 图像识别 人体识别 调用API的简单实践

    title: 关于百度AI 图像识别 人体识别 调用API的简单实践 author: HardyDragon tags: 图像识别 有关图像识别 来到控制台创建相关应用,有一些API每天有免费的调用次 ...

  6. 中国AI军团争霸机器阅读理解大赛,搜狗创下全球新纪录

    边策 发自 凹非寺  量子位 报道 | 公众号 QbitAI 全球AI竞技场,现在全方位成为中国公司实力展示台. 这不,2018年迭代上线的CoQA机器阅读理解大赛,一番你争我赶之后,最终还是形成了中 ...

  7. 橙狮Scratch编程

    1.项目介绍 橙狮编程是基于Scratch3.0开发的图形化.积木块编程项目,项目演示如下: http://demo.aistem360.com/coding 在少儿编程领域,大部分产品都是基于Scr ...

  8. v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...

    人工智能专题作品解析-- APPInventor安卓应用开发 <AI图像识别简单应用> 本程序使用APPInventor 2019桌面板. 一.思路 平时忙于工作和学习,很少涉猎其它领域的 ...

  9. 国美零售引入AI图像识别技术 线下自动识别用户数据

    https://www.toutiao.com/a6677155404637536781/ 4月3日消息,近日国美零售与云从科技签署战略合作协议,双方将共同开启人工智能技术在零售领域的深度应用,基于A ...

最新文章

  1. Storm和MR及Spark Streaming的区别
  2. 3.Excel数据透视表
  3. pid调节软件_非常实用的PID算法和PID控制原理
  4. ajax发送数据时的contentType
  5. vue横向树结构_vue树形结构的实现
  6. 记录下kaggle比赛经验
  7. 6-4 链表拼接 (20分)_数据结构之链表
  8. CODEBLOCKS 汉化配置
  9. elixer学习笔记
  10. html右侧文字左对齐,HTML文字怎么左对齐
  11. Appium常用操作之《元素定位、swipe滑屏操作》
  12. stata软件不出图_stata 如何导出绘制的图?
  13. leetcode 题解 904.水果成篮(Typescript)
  14. t-sql 中实现循环处理
  15. 苹果语音备忘录怎么改名字_苹果手机语音备忘录怎么恢复?教你在手机上直接操作...
  16. 云、CDN、IDC 三个概念的区别是什么
  17. picgo免费搭建个人图床
  18. hadoop之旅8-centerOS7 : Hive的基本操作
  19. 常用的git操作指令
  20. 大学毕业前最该做的20件事

热门文章

  1. 如何在IGV上使用BLAT搜索非模式物种(续)
  2. linux系统基础性能工具
  3. SCU - 4438(字符串hash)
  4. 力学科普之:场论基本框架概述
  5. Bilateral Upsample
  6. stm32单片机实现旋钮功能
  7. 四级真题图表作文计算机,图表作文:大学生使用电脑情况(02年四级真题)
  8. 无法web服务器上启动调试 未能启动asp.net,.net - 无法在Web服务器上启动调试。 无法启动ASP.NET调试VS 2010,II7,Win 7 x64...
  9. vulnhub-HOGWARTS: DOBBY
  10. 单片机中P1=0x01什么意思