含完整源代码和开发文档 人工智能图像识别绘本阅读方案( 二 )


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


推荐阅读