◆史記征 崔 俊
(重慶安全技術(shù)職業(yè)學(xué)院 重慶 404020)
將圖片翻譯成文字一般被稱為光學(xué)字符識別,其英文拼寫為Optical Character Recognition,簡稱OCR。光學(xué)字符識別的處理對象是通過拍照或者掃描獲得的圖片文本資料,并對圖像文件進(jìn)行分析提取,從而獲得圖片上的文字信息的過程。OCR的應(yīng)用多在打印、平面廣告、印刷等行業(yè),用來快速將圖片或紙質(zhì)資料轉(zhuǎn)換為可供編輯的文本資料,技術(shù)性較強,對從業(yè)人員要求較高。在國內(nèi),對中文OCR研究水平較高的企業(yè)有漢王、清華文通、尚書,他們的產(chǎn)品各具特色,價格昂貴。國外對OCR的研究較早,IBM、惠普、微軟等一些大型智能產(chǎn)品公司,雖然沒有生產(chǎn)自己的OCR產(chǎn)品,但他們的技術(shù)人員早已掌握OCR核心原理,并在自己的軟件系統(tǒng)中嵌入了OCR功能。對于一般的程序設(shè)計者,并不需要完整的OCR功能,主要在開發(fā)中能夠集成基本的OCR功能就可以了。利用Python語言第三方庫,通過少量代碼,即可實現(xiàn)圖文識別,將給工作、生活、學(xué)習(xí)帶來極大便利。
吉多·范羅蘇姆( Guido Van Rossum)作為Python語言的設(shè)計發(fā)明者,于1990年發(fā)布了Python的第一個版本。作為一種計算機(jī)高級程序設(shè)計語言,Python具有如下特點:
(1)易于學(xué)習(xí)
Python的編程思維簡單,注重邏輯、輕于語法,庫資源豐富。Python的程序流程清晰、控制簡單,保留字較少、易于理解。
(2)易于閱讀
Python代碼定義得非常清晰,它沒有使用其他語言通常用來訪問變量、定義代碼塊和進(jìn)行模式匹配的命令式符號,而是采用強制縮進(jìn)的編碼方式,去除了“{}”等語法符號,從而看起來十分規(guī)范和優(yōu)雅,具有極佳的可讀性。
(3)免費、開源
Python是FLOSS (自由/開放源碼軟件)之一。使用Python是免費的,開發(fā)者可以自由地發(fā)布這個軟件的副本,閱讀源代碼,甚至對它做改動。
(4)高級語言
使用 Python語言編程時,無須考慮諸如管理程序內(nèi)存等底層的細(xì)節(jié),只需集中精力關(guān)注程序的主要邏輯即可。
(5)可移植性
由于Python語言具有開源的特點,Python代碼的移植非常方便,可以在各種不同的操作系統(tǒng)上運行,應(yīng)用十分廣泛。在計算機(jī)的各個領(lǐng)域,Python都取得了一席之地,成長持續(xù)迅速。因為Python是用C語言開發(fā)的,正是由于C語言具有極強的可移植性,使得在任何帶有 ANSI C編譯器的平臺上也可以運行Python代碼。
(6)面向?qū)ο?/p>
Python不但支持面向?qū)ο缶幊?,也支持面向過程編程。在“面向?qū)ο蟆钡木幊陶Z言中,程序代碼是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他的面向?qū)ο笳Z言不同,Python以極其簡單而又非常強大編碼風(fēng)格實現(xiàn)了面向?qū)ο缶幊獭T凇懊嫦蜻^程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。
(7)解釋性
Python作為一種解釋型編程語言,在開發(fā)過程中不存在編譯環(huán)節(jié)。通常情況下,由于程序運行不依賴于本地機(jī)器碼,純粹的解釋型語言通常比編譯型語言運行得慢。然而,與 Java語言類似,Python本質(zhì)上是字節(jié)編譯的,其結(jié)果就是可以生成一種近似于機(jī)器語言的中間形式。這不僅改善了Python的性能,同時使它保持了解釋型語言的優(yōu)點。
(8)可擴(kuò)展可嵌入性
在Python中,部分程序可以使用其他語言編寫,如C/C++。同時,Python還可以嵌入到C/C++程序中,為它們提供腳本功能。
Python發(fā)展至今,經(jīng)歷了多個版本的更迭,目前仍然保留的版本主要是基于Python2.X和Python3.X。Python3.X 是未來的趨勢,有許多重要的類庫都已經(jīng)停止對Python2.X的更新,只保留對Python3.X的更新。
Python進(jìn)行圖文識別主要使用 pytesseract庫和 pillow庫。PyTesser是 Python的光學(xué)字符識別模塊,它將圖像或圖像文件作為輸入并輸出一個字符串。PyTesser使用Tesseract OCR引擎,將圖像轉(zhuǎn)換為可接受的格式,并將 Tesseract可執(zhí)行文件作為外部腳本調(diào)用。PIL(Python Imaging Library)是Python平臺上的圖像處理標(biāo)準(zhǔn)庫,PIL功能非常強大,但其API卻非常簡單易用。由于PIL僅支持到Python 2.7,于是有編程愛好者在PIL的基礎(chǔ)上創(chuàng)建了兼容的版本,名字叫pillow,支持最新的Python 3.x。圖文識別需要安裝Tesseract OCR引擎,Tesseract的Windows安裝包下載地址為:http://digi.bib.uni-mannheim.de/tesseract/tesseractocr-setup-4.00.00dev.exe,下載后雙擊直接安裝即可。安裝完成后,需要將Tesseract添加到系統(tǒng)變量中。如識別中文漢字,需到https://github.com/tesseract-ocr/tessdata/find/master/chi_sim.traineddata下載chi_sim.traineddata文件,然后將chi_sim.traineddata文件放到Tesseract OCR引擎安裝目錄下的tessdata文件夾下。
Python第三方庫最常用的安裝方式是通過 pip命令。作為Python的內(nèi)置命令,pip需要通過命令行執(zhí)行。本文所需庫的安裝命令有兩條:pip install pillow、pip install pytesseract。
(1)在D盤根目錄下保存待識別的圖片文件,文件分別命名為“數(shù)字.png”、“英文.png”、“漢字.png”、“符號.png”,圖片文件內(nèi)容如圖1——圖4所示。
(2)編寫Python代碼
#文件名:ImageConvertText.py
# -*- coding: utf-8 -*-
from PIL import Image
import pytesseract
print("-------------------------------------")
text=pytesseract.image_to_string(Image.open('D:XX.png'),lang='chi_sim')
#XX代表D盤下待識別的圖片文件名
#chi_sim是一個解析中文簡體的數(shù)據(jù)包,需自己下載
print(text)
print("-------------------------------------")
圖1 數(shù)字
圖2 英文
圖3 符號
圖4 漢字
(3)圖文識別結(jié)果分析
圖5 數(shù)字識別結(jié)果
圖6 英文識別結(jié)果
圖7 符號識別結(jié)果
圖8 漢字識別結(jié)果
從識別結(jié)果可以看出:Python庫對數(shù)字、英文單詞、漢字的識別正確率極高,能達(dá)到99%;但對常見符號的識別正確率較低。這和圖片上文字所使用的字體、圖片清晰度、圖片是否有污點、圖片中的文字是否排列整齊有關(guān)??梢酝ㄟ^機(jī)器學(xué)習(xí),對常見符號進(jìn)行識別訓(xùn)練,以提高識別正確率。
由于Python語言擁有強大的第三方庫,利用Python庫進(jìn)行圖文識別,代碼量少、識別準(zhǔn)確率高,為圖片文字轉(zhuǎn)化為可編輯的文本提供了一種有效的途徑,將為人們獲取知識提供極大的便利。