百度AI攻略:识别火车票的多种方案

1. 简介python

百度OCR提供多种场景下精准的图像文字识别技术服务,让您的应用看图识字,提高输入效率,优化用户体验。如今百度OCR的全系列39款产品,开放使用!但愿你们能一块儿来测试,使用。本篇评测介绍了经过百度ORC识别火车票的多中方法。json

2.功能描述:app

火车票识别: 支持对红、蓝火车票的8个关键字段进行结构化识别,包括车票号码、始发站、目的站、车次、日期、票价、席别、姓名学习

iOCR财会版: 针对财会报销场景提出的专项解决方案,可对各种财务票据、报销单、银行回单、对帐单进行自动分类及结构化识别,并支持用户为固定版式的新票据/单据自定义结构化识别模板及分类器测试

iOCR通用版: 基于业界领先的图像处理和文字识别技术,针对固定版式的卡证票据可由用户自助建立识别模板和分类器,实现图片自动分类并结构化输出识别结果优化

通用文字识别: 百度通用文字识别基于业界领先的深度学习技术,提供多场景、多语种、高精度的整图文字检测和识别服务,印刷体文字识别准确率高达99%,多项ICDAR指标居世界第一。编码

2.调用攻略(Python3)url

3.1首先认证受权:rest

在开始调用任何API以前须要先进行认证受权,具体的说明请参考:code

http://ai.baidu.com/docs#/Auth/top

具体Python3代码以下:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import base64

import json

#client_id 为官网获取的AK, client_secret 为官网获取的SK

client_id =【百度云应用的AK】

client_secret =【百度云应用的SK】

#获取token

def get_token():

    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret

    request = urllib.request.Request(host)

    request.add_header('Content-Type', 'application/json; charset=UTF-8')

    response = urllib.request.urlopen(request)

    token_content = response.read()

    #print (token_content)

    if token_content:

        token_info = json.loads(token_content)

        token_key = token_info['access_token']

    return token_key

3.2 火车票识别:

详细说明请参考: https://ai.baidu.com/docs#/OCR-API-TrainTicket/top

说明的比较清晰,这里就不重复了。

你们须要注意的是:

API访问URL:https://aip.baidubce.com/rest/2.0/ocr/v1/train_ticket

图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式

返回示例:

{

{

"errno":"0",

"logid":"55481588484",

"date":"2017年12月11日",

"destination_station":"嘉善南站",

"name":"刘虎",

"seat_category":"二等座",

"starting_station":"上海虹桥站",

"ticket_num":"Z13N025800",

"ticket_rates":"¥24.0元",

"train_num":"D3125"

}

}

Python3调用代码以下:

#火车票

#filename:图片名(本地存储包括路径)

def train_ticket(filename):

    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/train_ticket"

 

    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())

 

    params = dict()

    params['image'] = img

    params['show'] = 'true'

    params = urllib.parse.urlencode(params).encode("utf-8")

    #params = json.dumps(params).encode('utf-8')

 

    access_token = get_token()

 

    begin = time.perf_counter()

 

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

 

    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')

 

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        words_result=data['words_result']

        print ('车票号:',words_result['ticket_num'])

        print ('始发站:',words_result['starting_station'])

        print ('车次号:',words_result['train_num'])

        print ('到达站:',words_result['destination_station'])

        print ('出发日期:',words_result['date'])

        print ('车票金额:',words_result['ticket_rates'])

        print ('席别:',words_result['seat_category'])

        print ('乘客姓名:',words_result['name'])

3.3 iOCR财会版接口调用:

详细说明请参考: https://ai.baidu.com/docs#/iOCR-Finance-API/top

说明的比较清晰,这里就不重复了。

你们须要注意的是:

API访问URL:https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise/finance

图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式

Python3调用代码以下:

def finance(filename):

    request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise/finance"

 

    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())

 

    params = dict()

    params['image'] = img

    params['detectorId'] = 0

    params = urllib.parse.urlencode(params).encode("utf-8")

 

    access_token = get_token()

 

    begin = time.perf_counter()

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')

 

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data) 

        result=data['data']['ret']

        i=1

        print ("共有发票:"+str(len(result))+"张")

        for ret in result:

            print ("发票No."+str(i))

            print ("模板:",ret["templateSign"])

            print ("置信度:",ret["scores"])

            for detail in ret['ret']:

                print(detail['word_name'],":",detail['word'])

            print ("\n")

            i=i+1

3.4 iOCR自定义模板:

3.4.1 模板定义

详细说明请参考:

模板定义:https://ai.baidu.com/docs#/iOCR-General-Step/top

首先须要定义自定义模板,

具体能够参考个人另外一篇文章:https://ai.baidu.com/forum/topic/show/956078

那篇文章自定义的是机票行程单,照着哪一个例子定义火车票模板,便可。具体以下图所示:

先选择参照字段

而后选择识别字段

编辑完成后保存便可。

3.4.2 API调用

详细说明请参考:

API调用: https://ai.baidu.com/docs#/iOCR-General-API/top

你们须要注意的是:

API访问URL:https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise

请求参数

Python3调用代码以下:

#说明:filename图片名,template模板号

def recognise(filename,template):

    request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise"

    print(filename)

    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())

 

    params = dict()

    params['image'] = img

    params['templateSign'] = template

    params = urllib.parse.urlencode(params).encode("utf-8")

 

    access_token = get_token()

 

    begin = time.perf_counter()

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')

 

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        words_result=data['data']['ret']

        print ("识别结果")

        for item in words_result:

            print (item['word_name'],":",item['word']) 

 

3.5百度通用文字:

详细说明请参考:https://ai.baidu.com/docs#/OCR-API-GeneralBasic/db0895e7

说明的比较清晰,这里就不重复了。

你们须要注意的是:

API访问URL:https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic

图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式

返回示例:

{

"log_id": 2471272194,

"words_result_num": 2,

"words_result":

[

{"words": " TSINGTAO"},

{"words": "青島睥酒"}

]

}

Python3调用代码以下:

def general_basic(filename):

    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"

 

    # 二进制方式打开图片文件

    f = open(filename, 'rb')

    img = base64.b64encode(f.read())

 

    params = dict()

    params['image'] = img

    params = urllib.parse.urlencode(params).encode("utf-8")

 

    access_token = get_token()

 

    begin = time.perf_counter()

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')

 

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        words_result=data['words_result']

        print ("识别结果:")

        for item in words_result:

            print (item['words']) 

4.功能评测(全部图片均来自网上):

火车票识别:

处理时长:2.08秒

车票号: Z31G052971

始发站: 杭州东站

车次号: D3233

到达站: 宁波站

出发日期: 2017年06月24日

车票金额: ¥54.0元

席别: 二等座

乘客姓名: 林璐

iOCR财会版

处理时长:2.85秒

共有发票:1张

发票No.1

模板: train_ticket

置信度: 0.823882520198822

date : 2017年06月24日

seat_category : 二等座

starting_station : 杭州东站

ticket_num : Z31G052971

train_num : D3233

ticket_rates : ¥54.0元

name : 林璐

destination_station : 宁波站

seat_num : 04车12D号

iOCR自定义模板

处理时长:1.95秒

识别结果

level : 二等座

price : ¥54.0元

endstation : 宁波站

starttime : 2017年06月24日14:37开

startstation : 杭州东站

通用文字识别:

处理时长:3.57秒

识别结果:

231G052971

检票:5A

杭州东站D3233宁波站

Hangzhoudong

Ningbo

2017年06月24日14:37开04车12D号

¥54.0元

文折

二等座

限乘当日当次车

3302061987***4682林璐

回版回

威能

世热,制冷新风空净水处理系

9004130310625G052971杭州东售

5.测试结论

百度OCR的多种功能都能快速准确的识别火车票,这多种功能分别对应不一样的应用场景。

火车票识别,能够快速、准确的识别火车票的信息,主要用于针对性的场景。如日程记录,使用火车票识别技术,实现对车次、日期等信息的识别和录入,可应用于我的行程规划与记录类移动应用,高效准确的识别服务能够知足用户快速录入行程信息的需求,有效下降用户输入成本,提高用户使用体验。或者单一的报销场景等。

iOCR财会版,实现图片自动分类并结构化输出识别结果,能够针对混贴的各类票据进行识别,能够对各种发票、收据、银行对帐单、承兑汇票等经常使用财务票据进行模板制做,实现自动分类和结构化识别,并预置多种经常使用发票模板供直接使用,可应用于企业财务报销、核算、记录等场景,实现财税场景的自动化,有效下降企业人力成本,控制业务风险。

iOCR通用版,其实主要针对于没有预制模板的特殊的单据来进行处理的,提供了无限的扩展可能。其实现实应用中,对于火车票这种已经有现成识别功能和模板的票据是不须要使用定制模板的。

通用文字识别,使用通用文字识别技术,主要是对文字内容进行识别。在对火车票识别的过程当中,返回的就是不一样位置的文字内容,并不能如前面几种功能那样返回结构化的结果。它主要特色是“通用”,好比在不能肯定图片必定是火车票的状况下、或者除了火车票还有别的内容的时候,使用通用文字识别,方便用户进行文本的提取或录入数据,有效提高产品易用性和用户使用体验。

经过测试发现百度OCR的功能很是的强大,充分考虑了各类应用场景,提供不一样的功能组合。

相关文章
相关标签/搜索