今天,為了滿足我女朋友作業的需求,我使用Python制作了一個圖片轉文字的小應用。
(當然,下面導入模塊的問題我就不多說了,是非常簡單的)

一. 申請百度通用文字識別接口。
1.先在百度AI開放平台注冊賬號(點擊這里進入百度智能雲)。一般使用百度賬號即可。
2.注冊成功后登錄,在右側菜單欄中尋找文字識別功能。
3.進入后創建一個新的應用,並按要求填寫好應用名稱等信息后,立即創建即可。

二. 到了這一步,我們真正的進入到程序中來。
1.baidu-aip模塊安裝
在Pycharm中新建Project,在工程文件夾中新建一個py文件,命名隨意。點擊File->Setting,進入Setting。剛開始沒有baidu-aip模塊,點擊右側加號搜索baidu-aip進行安裝。
2.因為我們這次只測試兩張圖片,所以我們在與py文件同級下新建一個目錄images,里存放我們需要識別的所有圖片(這些圖片最好按1,2……命名,在讀入時會按數字順序一張一張掃描)。
------1.jpg
-----2.jpg
3.首先我們先找到這些圖片所在文件夾的路徑
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))#獲取項目根目錄
path = os.path.join(PROJECT_ROOT,"images") #文件路徑
- 1
- 2
4.將百度AppID, API Key, Secret Key這些關鍵信息寫入調用百度ORC接口。這里要導入我們安裝好的baidu-aip模塊了。
"""你的百度AppID, API Key, Secret Key"""
APP_ID = '16545975'
API_KEY = 'qbK2kKKtrXTo0rE1rg4M6Tl6'
SECRET_KEY = 'xxxxxxxxxxxx'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
- 1
- 2
- 3
- 4
- 5
- 6
5.定義打開圖片的函數
"""打開文件,讀取圖片"""
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
- 1
- 2
- 3
- 4
6.循環讀入目錄中的每一張圖片
for r, ds, fs in os.walk(path):
for fn in fs:
fname = os.path.join(r, fn)
image = get_file_content(fname)
ret = client.basicGeneral(image)
#print(ret)
#print(ret['words_result'])
for item in ret['words_result']:
print(item['words'])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
5.接下來我們一步一步的分析結果,首先我們調用通用文字識別,打印結果看看是什么吧!(我們只截前面一部分)
# 調用通用文字識別,圖片參數為本地圖片
ret = client.basicGeneral(image)
print(ret)
- 1
- 2
- 3
可以看到,結果是一個字典,我們需要的圖片內容都在關鍵字為words_result中,又可以發現,這個關鍵字的值是一個列表。我們先把這個字典中的words_result關鍵字的值取出來並打印。
print(ret['words_result'])
- 1
這樣我們就取出了這個列表,圖片中文字的內容是分段顯示的,每一段又是一個字典(在圖片中每一次換行都會形成一個字典),這就很簡單了,我們只需要把每個字典中的關鍵字word的值取出來拼接上不就是我們圖片中想要的內容了嗎?這就要借助我們的循環。
for item in ret['words_result']:
print(item['words'])
- 1
- 2
可以看到,輸出的格式和圖片中的格式是完全一樣的。兩張圖片的內容已經被我們全部掃描出來了。
到這里這個小應用就全部結束了,大家可以根據需要繼續完善,例如將輸出結果保存到文本文件中等等。表情包中的文字也是可以識別的哦!
今天拿着QQ文字掃描發現QQ識別率還是很高的,但是一張一張太麻煩了,我想還是讓他們自己來識別更方便。
完整代碼:
from aip import AipOcr
import os
"""你的百度AppID, API Key, Secret Key"""
APP_ID = '16545975'
API_KEY = 'qbK2kKKtrXTo0rE1rg4M6Tl6'
SECRET_KEY = 'xxxxxxxxxxx'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
"""打開文件,讀取圖片"""
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))#獲取項目根目錄
path = os.path.join(PROJECT_ROOT,"images") #文件路徑
for r, ds, fs in os.walk(path):
for fn in fs:
fname = os.path.join(r, fn)
image = get_file_content(fname)
ret = client.basicGeneral(image)
for item in ret['words_result']:
print(item['words'])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26