我們每個人都會在某種程度上使用名片。但如果名片數量多,管理起來就很麻煩。所以我想出了這篇文章的案例來管理它們。
這裏我先用手機拍下每張名片的照片,按照以下流程處理:
將獲得的名片圖像提供給我們的應用程序,並提取姓名、公司名稱和地址等信息。這裏我用的是Google Vision API和自然語言)API,因為這兩個API很好用,性能也不錯。
我用Python寫我的應用程序調用Google Vision API和自然語言API。
創建步驟
第0步:準備
第壹個?步驟1:用谷歌視覺API識別文本
第壹個?第二步:使用自然語言API提取姓名、公司名稱和地址信息。
第壹個?第三步:整合第1步和第二步。
準備
在開始編寫應用程序之前,我們需要安裝必要的類庫,下載配置並設置API的鍵值。從這個鏈接,妳可以設置谷歌API鍵。
安裝類庫
執行命令行來安裝類庫。
$ pip安裝請求
$ pip安裝pyyaml
下載存儲庫
我提前在這裏準備了資源庫。妳也可以從下面的鏈接下載。
下載
設置API密鑰
將Google API密鑰寫入配置文件(plugins/config/google.yaml)。
首先打開google.yaml,用妳的API鍵替換xxx。
令牌:xxx
步驟1用谷歌視覺API識別文本。
Vision API簡介
依靠強大的機器學習模型,谷歌?視覺API?允許您編寫自己的圖像識別應用程序。視覺API具有以下功能:
形象分類(如快艇、獅子、埃菲爾鐵塔等。)
人臉識別
文本識別
符號識別
地標識別
安全搜索識別
Vision API每月有1000個免費請求。
寫劇本
這裏我們編寫Python腳本來使用Vision API。將以下代碼另存為plugins/API/vision . py?這裏我們將使用UTF 8編碼。
# -*-編碼:utf-8 -*-
導入base64
導入請求
def detect_text(image_file,access_token=None):
使用open(image_file,' rb ')作為圖像:
base64 _ image = base64 . b 64 encode(image . read())。解碼()
URL = ' hogleapis . com/v 1/images:annotate?key={} '。格式(訪問令牌)
header = { ' Content-Type ':' application/JSON ' }
body = {
請求':[{
圖像':{
' content': base64_image,
},
功能':[{
鍵入':' TEXT_DETECTION ',
' maxResults': 1,
}]
}]
}
response = requests.post(url,headers=header,json=body)。json()
text = response[' responses '][0][' text annotations '][0][' description ']if len(response[' responses '][0])& gt;0否則''
返回文本
輸入圖像文件路徑和API密鑰detect_text?函數,我們可以得到圖像文件中的文本信息。
運行腳本
首先,將腳本文件移入?插件/測試?文件夾中已經有壹個test_vision.py?文件。在test_vision.py中,寫壹個調用detect_text?功能的測試用例。如果運行正常,我們可以得到圖像中的文本信息。
以下面的名片example_en.png作為輸入運行腳本。
$ python test _ vision . py data/example _ en . png
輸出結果
約翰·史密斯。
膠囊公司
217-767-8187
伊利諾伊州埃爾文春天街1332號
第二步:使用自然語言API提取姓名、公司名稱和地址信息。
自然語言API簡介
自然語言API?以REST API的形式提供了強大的機器學習模型來識別文本結構及其含義。自然語言API具有以下功能:
實體標識(如個人姓名、組織名稱、事件信息等。)
語義分析(產品評論、客戶意見等中的情感。)
語法分析
Vision API每月有5000個免費請求。
運行腳本
類似地,我們編寫壹個Python腳本來調用自然語言API。將腳本保存為plugins/API/language . py,註意UTF-8編碼。
# -*-編碼:utf-8 -*-
導入請求
def extract_entities(text,access _ token =無):
URL = ' htoogleapis . com/v 1 beta 1/documents:analyze entities?key={} '。格式(訪問令牌)
header = { ' Content-Type ':' application/JSON ' }
body = {
"文檔":{
" type ":"純文本",
《語》:“恩”,
【內容】:文字
},
" encodingType": "UTF8 "
}
response = requests.post(url,headers=header,json=body)。json()
返回響應
def extract _ required _ entities(text,access _ token =無):
entities = extract_entities(文本,訪問令牌)
required _ entities = { ' ORGANIZATION ':' ',' PERSON ':' ',' LOCATION': ''}
對於實體['實體']中的實體:
t =實體['類型']
如果t在required_entities中:
required_entities[t] +=實體['name']
返回必填_實體
將文本數據和API鍵作為參數傳入?提取_實體?功能,可以提取不同的實體信息。我們需要的是。公司名稱,?個人姓名,?位置信息?。提取_必需_實體?函數用來過濾掉這些需要的內容。
運行腳本
同樣,把腳本文件移到插件/測試中?文件夾我們會看到壹個test_language.py?文件。在test_language.py中,寫壹個調用?提取_必需_實體?功能的測試用例。
這裏我使用準備好的example_en.txt文本文件作為輸入來運行腳本。文本文件example_en.txt包含上壹步的輸出結果。
$ python test _ language . py data/example . txt
輸出結果
{ ' LOCATION ':' Spring Street Elwin Illinois ',' PERSON': 'John Smith ',' ORGANIZATION ':' Capsule Corporation ' }
步驟3整合步驟1和步驟2 i
最後,我們將編寫另壹個腳本來集成Vision API和自然語言API。
寫劇本
寫壹個腳本,集成Vision API和自然語言API。另存為?插件/API/integration . py .這裏我們將使用UTF 8編碼。
# -*-編碼:utf-8 -*-
從。語言導入提取_必需_實體
從。視覺導入檢測_text
def extract _ entities _ from _ img(img _ path,access_token):
text = detect_text(img_path,access_token)
entities = extract _ required _ entities(文本,訪問令牌)
返回實體
通過輸入圖像文件路徑和API密鑰作為參數?extract_entities_from_img?,可以從名片圖像中提取上述信息數據。
運行腳本
首先,將腳本文件移動到插件/測試中?文件夾中已經有壹個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和自然語言API編寫了壹個簡單的應用程序來提取名片信息。但是,這只是壹個簡單的原型,我會在後面進行改進,使其更加完善。