在文章《3步开发一个开源的树莓派边缘计算OCR系统》里,我们介绍了基于OpenNCC边缘AI智能摄像头的OCR光学字符识别系统开发过程。今天这篇文章将介绍用基于树莓派4B的OpenNCC IP4边缘AI摄像机,通过使用paddle的算法模型,开发并部署OCR护照识别摄像头系统的整体流程。
背景简介
边防检查站、海关、机场、出入境管理、境外旅游产品预订、酒店入住登记等场景中均需要进行护照识别。由于护照上的信息量非常大,如果手动去输入,速度会非常慢,且用户体验非常差,效率非常低。尽管很多场景中已经部署了数字化护照录入系统,但是目前基于特别技术实现护照识别的系统价格昂贵,设备部署环境要求高,速度慢,相比之下,基于OCR(光学字符识别)技术的纯光学护照识别摄像头系统更具商业化优势:速度更快,成本更低,效率更高,体验更佳,部署更方便。
基于Intel Movidius VPU的OpenNCC开放式边缘AI摄像头可在摄像头本地进行算法推理,开放的SDK支持用户快速在摄像头本地部署自定义的算法模型,可以以更少时间更低成本快速高效实现OCR护照摄像头系统。
硬件选型
本次硬件选择基于树莓派4B开发的OpenNCC IP4网络摄像机,主要考虑树莓派有成熟的开发生态和丰富的数据接口。具体产品型号可以参看OpenNCC IP4产品主页。
模型选择
长字符串识别是文字识别应用的难点。本次应用开发使用paddle2.0的English Recognition Model,其动态图框架对比paddle1.0的静态图框架或者其他深度学习框架下TensorFlow,OpenVINO,Caffe的OCR模型,优势在于模型的独特结构不会对被识别文本的长度产生限制,换言之,paddler2.0动态图模型可以准确识别一长串字符,这符合我们这次的目标,即由46个字符构成的护照号码。
模型训练和转换
将通用框架下的模型部署到硬件设备,通常需要经过模型迁移学习训练和转换两个步骤。套用到护照识别这个具体应用,迁移学习后的paddle OCR模型通过转换步骤后最终变成.blob格式,然后进行部署环节。具体我们将通过后续文章再详细展开。
模型部署
OpenNCC是一个支持设备端更换AI算法模型的边缘AI智能摄像头容器,所以只要算法模型最终顺利转换成了blob格式,将其部署到OpenNCC摄像头本地将非常简单,具体部署可以参看OpenNCC在Gitee上的work with paddle案例。
数据后处理
未经数据后处理的模型所输出的结果是所有识别到的字符,如下图所示。
(为了更直观,这里将输出的所有识别结果都覆盖到了它们原本所在位置)
尽管我们拿到了护照上每个“结果块”的内容、大小和位置,但是在真正的商业应用中并不是所有字符信息都有用,需要通过上位机程序根据应用需求做一定的数据后处理算法,以提取有用信息。以下是可能用到的一些后处理应用:
1. 字串匹配
实际上,当跑完OCR模型时,当前的识别程序并不知道自己在做什么,所以我们需要让它寻找一些识别结果中的关键词,比方说,“PASSPORT”。
2. 感兴趣区域
如果我们有把握目标始终保持的画面的中央或是一角,那我们完全可以通过框定感兴趣区域筛选出区域内的结果,也就是有效结果。当然,我们也可以搭配一个目标检测模型,把护照部分先从画面中“扣出来”。
3. 形态检测
在很多识别结果模块中,如果它们有明显的形态区别,那么就可以用形态检测这一方式来做目标信息提取。在本案例中就可以通过寻找长度或是长宽比最大的那个结果来找到护照号码。
总体来看,具体的后处理方法可以相当灵活,从技术角度讲甚至可以考虑用bp神经网络把所有文本内容进行归类,把姓名、出生日期等每一条讯息都利用起来。
如果对本应用感兴趣,推荐采购OpenNCC IP4。