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的功能很是的強大,充分考慮了各類應用場景,提供不一樣的功能組合。