用Google API 提取名片信息

介绍

我们每个人或多或少都会使用到名片。但是如果名片数量一大,管理它们就显得非常麻烦。因此我产生用这篇文章的案例来管理他们。

这里,我先用手机对每张名片拍照,并按以下流程进行处理:

把获得的名片图像交给我们的应用程序,抽取人名,公司名称,地址等信息。这里我使用了Google Vision API 和 自然语言(Natural Language )API,因为这两个API简单易用,并且性能也很不错。

我使用Python来编写我的这个应用程序,来调用 Google Vision API 和 Natural Language API。

创建步骤

第 0 步: 准备

第 1 步: 用Google Vision API识别文本

第 2 步: 用Natural Language API抽取人名,公司名称及地址信息

第 3 步: 整合第1和第2步

第0步 准备

在开始应用程序编写之前,我们要安装必要的类库,下载配置以及设置API的键值。从这个链接你能设置 Google API key 。

安装类库

执行一下命令行来安装类库。

$ pip install requests
$ pip install pyyaml

下载资源库

这里我已经事先准备好了资源库。也可以从下面的链接下载。

设置API Key

把Google API key 写进配置文件 (plugins/config/google.yaml).
首先,打开 google.yaml 把你的API key替换掉 xxx。

token: xxx

第1步 用Google Vision API识别文本

Vision API 简介

依靠强大的机器学习模型,谷歌 Vision API 能让你编写自己的图像识别应用程序。Vision API 有以下的功能:

  • 图像分类 (例如 “快艇” “狮子” “埃菲尔铁塔” 等等)
  • 脸部识别
  • 文本识别
  • 标志识别
  • 地标识别
  • 安全搜索识别

Vision API 每月有1000个免费请求。

编写脚本

这里我们编写Python脚本来使用 Vision API。把以下代码保存为plugins/apis/vision.py。 这里我们要使用UTF-8编码。

# -*- coding: utf-8 -*-
import base64
import requests

def detect_text(image_file, access_token=None):

    with open(image_file, 'rb') as image:
        base64_image = base64.b64encode(image.read()).decode()

    url = 'https://vision.googleapis.com/v1/images:annotate?key={}'.format(access_token)
    header = {'Content-Type': 'application/json'}
    body = {
        'requests': [{
            'image': {
                'content': base64_image,
            },
            'features': [{
                'type': 'TEXT_DETECTION',
                'maxResults': 1,
            }]

        }]
    }
    response = requests.post(url, headers=header, json=body).json()
    text = response['responses'][0]['textAnnotations'][0]['description'] if len(response['responses'][0]) > 0 else ''
    return text

输入图像文件路径和API key到detect_text 函数, 我们就能得到图像文件中的文本信息

运行脚本

首先,把脚本文件移入 plugins/tests 文件夹。其中已经有一个test_vision.py 文件。在test_vision.py中, 编写调用detect_text 函数的测试用例。如果运行正常,我们就能获取图像中的文本信息了。

用下面 example_en.png这张名片作为输入,运行脚本。

$ python test_vision.py data/example_en.png

输出结果

John Smith.
Capsule Corporation
217-767-8187
1332 Spring Street Elwin Illinois

第 2 步用Natural Language API抽取人名,公司名称及地址信息

Natural Language API简介

Natural Language API 提供了强大的机器学习模型,以REST API 的形式识别文本结构和其中的含义。Natural Language API 有一下功能:

  • 实体识别 (如,个人姓名,机构名称,事件信息等)
  • 语意分析 (产品评论中的情感,客户意见等)
  • 语法分析

Vision API 每月有5000个免费请求。

运行脚本

同样我们编写Python脚本来调用Natural Language API. 保存脚本为plugins/apis/language.py。注意使用UTF-8编码。

# -*- coding: utf-8 -*-
import requests

def extract_entities(text, access_token=None):

    url = 'https://language.googleapis.com/v1beta1/documents:analyzeEntities?key={}'.format(access_token)
    header = {'Content-Type': 'application/json'}
    body = {
        "document": {
            "type": "PLAIN_TEXT",
            "language": "EN",
            "content": text
        },
        "encodingType": "UTF8"
    }
    response = requests.post(url, headers=header, json=body).json()
    return response

def extract_required_entities(text, access_token=None):
    entities = extract_entities(text, access_token)
    required_entities = {'ORGANIZATION': '', 'PERSON': '', 'LOCATION': ''}
    for entity in entities['entities']:
        t = entity['type']
        if t in required_entities:
            required_entities[t] += entity['name']

    return required_entities

把文本数据和API key 以参数形式传入 extract_entities 函数, 不同的实体信息就能被提取出来。而我们只需要 公司名称个人姓名, 地点信息 。extract_required_entities 函数就是用来筛选出这些需要的内容。

运行脚本

同样,把脚本文件移入plugins/tests 文件夹。我们会看到一个test_language.py 文件。在test_language.py中,编写调用 extract_required_entities 函数的测试用例。

这里我用准备好的 example_en.txt文本文件作为输入运行脚本。在example_en.txt 文本文件中包含了上一步的输出结果。

$ python test_language.py data/example.txt

输出结果

{'LOCATION': 'Spring Street Elwin Illinois', 'PERSON': 'John Smith', 'ORGANIZATION': 'Capsule Corporation'}

Step 3 整合第1和第2步I

最后,我们再编写另一个脚本整合 Vision API 和 Natural Language API。

编写脚本

编写脚本整合 Vision API 和 Natural Language API. 保存为 plugins/apis/integration.py。这里我们要使用UTF-8编码。

# -*- coding: utf-8 -*-
from .language import extract_required_entities
from .vision import detect_text

def extract_entities_from_img(img_path, access_token):

    text = detect_text(img_path, access_token)
    entities = extract_required_entities(text, access_token)

    return entities

通过把图像文件路径和API key 作为参数输入 extract_entities_from_img ,就能从名片图像中提取出以上提到的信息数据了。

运行脚本

首先,把脚本文件移入plugins/tests 文件夹。其中已经存在一个test_integration.py文件。在test_integration.py中编写调用extract_entities_from_img 的测试用力。 

用图像文件 example_en.png作为输入数据运行脚本。

$ python test_integration.py data/example_en.png

输出结果

{'LOCATION': 'Spring Street Elwin Illinois', 'PERSON': 'John Smith', 'ORGANIZATION': 'Capsule Corporation'}

结论

以上我们用 Google Vision API 和 Natural Language API编写了一个简单的提取名片信息的应用程序。然而,这只是个简单的原型,之后我还会对它进行改进,让它更加完善。

以上为译文

文章原标题《Extracting Information from Business Card with Google API》,作者:HIRONSAN

文章为简译,更为详细的内容,请查看原文

时间: 2024-09-27 23:30:09

用Google API 提取名片信息的相关文章

android通过google api获取天气信息示例_Android

android通过google API获取天气信息 复制代码 代码如下: public class WeatherActivity extends Activity { private TextView txCity; private Button btnSearch; private Handler weatherhandler; private Dialog progressDialog; private Timer timer;    /** Called when the activit

利用google api生成二维码名片

 二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用"点"表示二进制"1",用"空"表示二进制"0","点"和"空"的排列组成代码. 堆叠式/行排式二维条码,如,Code 16K.Code 49.PDF417等. 矩阵式二维码,最流行莫过于QR CODE. 矩阵

利用google api生成二维码名片例子

二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用"点"表示二进制"1",用"空"表示二进制"0","点"和"空"的排列组成代码. 堆叠式/行排式二维条码,如,Code 16K.Code 49.PDF417等. 矩阵式二维码,最流行莫过于QR CODE. 矩阵式

利用Google+ API和PHP在Google+上检索帖子并查找用户

Google+ 是社交网络行业的新产品,是 Google 构建社交网络的最新尝试,可让用户轻松地与好友共享新闻和文件,并与他们进行互动.它似乎成功抓住了公众的想象力.据报道,截止 2011 年 12 月,每天都有 625,000 个新用户注册 Google+,用户总数已达到 6200 万. Web 开发人员有理由对 Google+ 感到兴奋.与其他许多 Google 服务一样,Google+ 随附提供了一个开发人员 API,允许您通过自己的自定义应用程序访问用户生成的内容.由于 API 以 JS

Google API提供的网页设计常用字体

我们在设计网页时会使用一些常用的字体,对于一些并不常用的字体则会通过图片来代替,通过Google API提供的字体我们可以不需要任何图片,而使用一些并不常用的字体,当用户打开网页时会通过Google服务器链接到这些字体,从而让网页显示出来,过程中用户不会感到任何不适. 对很多纠结于字体的 Web 设计与开发者而言,昨天有关 Google Font API 的新闻着实让他们高兴了一回,这个非常简单实用的 API 包含了一套字体库和预览工具,结合 Google 与 TypeKit 联合开发的开源 W

C# 网络编程之通过豆瓣API获取书籍信息

这篇文章主要是讲述如何通过豆瓣API获取书籍的信息,起初看到这个内容我最初的想法是在"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源码,再通过正则表达式分析获取结点标签得到信息.但后来发现可以通过豆瓣API提供的编程接口实现.该文章仅是基础性C#网络编程文章,尝试测试了下豆瓣API,并没什么高深的内容.但希望对大家有所帮助,仅供学习.(警告:文章仅供参考,提供一种想法,否则访问多次-10次被403 forbidden莫怪.建议认证使用豆瓣API) 一.豆

catia-CATIA二次开发提取材质信息

问题描述 CATIA二次开发提取材质信息 通过CATIA CAA二次开发如何提取当前数模的材质信息,包括贴图.光照.纹理.颜色等信息?在查阅CATIA二次开发的在线帮助文档时发现没有相关的实例,CATIA CAA二次开发提供了这方面的API了吗?有谁用过类CATGraphicMaterial?

android通过Location API显示地址信息的实现方法_Android

本文实例讲述了android通过Location API显示地址信息的实现方法.分享给大家供大家参考.具体如下: android的Locatin API,可以通过Geocoder类,显示具体经纬度的地址信息.如: 通过Geocoder的方法getFromLocation()可以得到Address对象的List.我只取一个Address结果,可以取多个,但是意义不大. StringBuilder builder = new StringBuilder(); builder.append("北纬:&

大神们!!百度地图api中标签信息的抓取啊。前js后C#。

问题描述 大神们!!百度地图api中标签信息的抓取啊.前js后C#. 是这样的,一个地图api的调用,我需要获取到百度地图api上的搜索出来的信息,可是获取不到啊啊啊... 解决方案 js版的百度地图还是其他版本的? js版本的,C#是运行于服务器端的,无法直接获取客户端的数据.js搜索后你自己即那个解码后的信息用ajax回发到服务器进行获取