在上一篇上实现了线索功能模块,在实际使用中除了线索数据除了输入的结构化数据,也有可能是来自非结构化数据,如名片、PDF文档、语音视频等。为方便线索录入,本篇中将以名片为例,实现利用OCR等技术将名片信息自动转成结构化数据自动填充到线索的对应字段中进行存储的功能。
1. OCR技术
OCR,全程Optical Character Recognition,翻译过来是光学字符识别的意思。它是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。简单来说就是将图像中的文字进行识别,并以文本的形式返回。
OCR处理过程可分为图像预处理、文本识别和后处理等步骤。
文字识别在传统技术上采用模板匹配的方式,但这种方式由于缺乏上下文信息识别正确率难以保证,现在多基于深度学习技术进行识别,比如RNN和LSTM等依赖于时序关系的神经网络是最理想的选择。
在本文中将使用pytesseract实现OCR功能。
2. pytesseract的安装使用
pytesseract是对Tesseract的Python封装,pytesseract的安装命令如下:
$ pip install pytesseract
Tesseract(/'tesərækt/) 这个词的意思是"超立方体",Tesseract 已经有 30 年历史,开始它是惠普实验室的一款专利软件,然后在 2005 年开源,自 2006 年后由 Google 赞助进行后续的开发和维护。在现在的免费 OCR 引擎中,其识别精度也仍然是出类拔萃的。
安装完成后就可以在项目中使用了。
3. 在Django中加入OCR功能
先在Django中新创建一个img2text的应用。命令如下:
$ python manage.py startapp img2text
执行完成后按照上一篇中的步骤将这个应用的结构重新整理下。
…进行下面的操作:
将目录移动到one_crm目录下面;
编辑leads下面的apps.py,将其中name改成one_crm.img2text;
将“one_crm.leads.apps.Img2TextConfig”添加到config/settings/base.py文件的LOCAL_APPS变量中,使这个模块生效。
接下来依次更新视图、模板和路由。
4. 添加视图
这里需要提交名片文件,所以选择一个表单视图来实现。先在forms.py文件中添加一个名为CardForm的表单类,内容如下:
class CardForm(forms.Form):
img = forms.FileField(label="请选择名片")
def parse_card(self):
pass
其中parse_card函数是用来解析名片的。解析过程是将名片用OCR将其中的文本解析出来,然后从解析的文本中抽取名字、电话和邮箱等信息,最后把这些信息保存到线索模型中。
抽取名字
这里抽取名字的方式比较简单,基本思路是将名片中提取的信息按行进行分割,然后每行文本就jieba进行分析判断词性,若词性是nr即为人名。实现如下:
def isname(single_word_string):
"""
判断是否是人名
"""
pair_word_list = pseg.lcut