python識(shí)別圖像并提取文字的實(shí)現(xiàn)方法
前言
python圖像識(shí)別一般基礎(chǔ)到的就是tesseract了,在爬蟲(chóng)中處理驗(yàn)證碼廣泛使用。
安裝
安裝教程網(wǎng)上大都差不多,Windows下確實(shí)比較麻煩,涉及到各種路徑、環(huán)境變量甚至與linux不同的路徑分隔符,所以這里的安裝是基于Centos7。
1. 依賴安裝
yum install -y automake autoconf libtool gcc gcc-c++
2. 安裝leptonica
Leptonica主要用于圖像處理和圖像分析
原則上所有的庫(kù)文件都是可以直接用yum安裝的,如果想要具體的某個(gè)版本,可以前往官方源下載對(duì)應(yīng)版本然后按照對(duì)應(yīng)方式編譯
wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz tar -zxvf leptonica-1.74.4.tar.gz cd leptonica-1.74.4/ ./configure make && make install
3. 安裝tesseract
其他各版本可以在這里下載并自行編譯,也提供直接使用的文件。
yum install tesseract
4. 驗(yàn)證安裝
tesseract --version
5. 語(yǔ)言包下載
前往tesseract-ocr/tessdata下載相應(yīng)的語(yǔ)言包,然后將之移動(dòng)到tessdata目錄下,可以用whereis tesseract查看一下具體的目錄,我的是/usr/share/tesseract/tessdata/mv *.traineddata /usr/local/share/tessdata/
6. 查看目前已下載的語(yǔ)言
tesseract --list-langs
使用
# tesseract Usage: tesseract --help | --help-psm | --help-oem | --version tesseract --list-langs [--tessdata-dir PATH] tesseract --print-parameters [options...] [configfile...] tesseract imagename|stdin outputbase|stdout [options...] [configfile...] OCR options: --tessdata-dir PATH Specify the location of tessdata path. --user-words PATH Specify the location of user words file. --user-patterns PATH Specify the location of user patterns file. -l LANG[+LANG] Specify language(s) used for OCR. -c VAR=VALUE Set value for config variables. Multiple -c arguments are allowed. --psm NUM Specify page segmentation mode. --oem NUM Specify OCR Engine mode. NOTE: These options must occur before any configfile.
語(yǔ)法
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
- imagename:圖片名字
- outputbase:指定輸出,如果希望直接輸出而不是保存到文件,那么就使用 stdout,否則這個(gè)參數(shù)將會(huì)作為保存結(jié)果的文件的前綴
- -l指定語(yǔ)言文件,默認(rèn)使用英文
- tesseract --print-parameters:查看更多參數(shù)信息
- 使用-c指定單項(xiàng)參數(shù)的值或者將配置寫(xiě)入配置文件放在命令最后(支持多個(gè)配置文件)
- psm 識(shí)別圖像的方式
0:定向腳本監(jiān)測(cè)(OSD)
1: 使用OSD自動(dòng)分頁(yè)
2 :自動(dòng)分頁(yè),但是不使用OSD或OCR(Optical Character Recognition,光學(xué)字符識(shí)別)
3 :全自動(dòng)分頁(yè),但是沒(méi)有使用OSD(默認(rèn))
4 :假設(shè)可變大小的一個(gè)文本列。
5 :假設(shè)垂直對(duì)齊文本的單個(gè)統(tǒng)一塊。
6 :假設(shè)一個(gè)統(tǒng)一的文本塊。
7 :將圖像視為單個(gè)文本行。
8 :將圖像視為單個(gè)詞。
9 :將圖像視為圓中的單個(gè)詞。
10 :將圖像視為單個(gè)字符。
python中使用
Tesseract安裝完成后可以很方便的被Python調(diào)用,但是需要pillow和pytesseract的支持。
python中轉(zhuǎn)換
image_to_data(image, lang=None, config='', nice=0, output_type=Output.STRING)
- image Object,由Tesseract處理的圖像的PIL Image/NumPy數(shù)組
- lang String,Tesseract語(yǔ)言代碼字符串
- config String,任何其他配置字符串,例如:config='--psm 6'
- 語(yǔ)言文件可以疊加,用“+”隔開(kāi)
- 我們也可以在這里進(jìn)行tessdata路徑的設(shè)置,跟在config里面即可
- 更多配置包括config和psm都和tesseract類似
實(shí)例:
流程: 打開(kāi)圖片,配置,轉(zhuǎn)換,可以通過(guò)Image的open或者cv2的imread打開(kāi)圖片,之后對(duì)圖片進(jìn)行對(duì)比度增強(qiáng),降噪等處理,效果會(huì)好一些。
from PIL import Image import pytesseract class Languages: CHS = 'chi_sim' ENG = 'eng' def img_to_str(image_path, lang=Languages.ENG): return pytesseract.image_to_string(Image.open(image_path), lang) print(img_to_str('pic/numu.png', lang=Languages.ENG)) print(img_to_str('pic/pro.png', lang=Languages.ENG))
總結(jié)
簡(jiǎn)單的文本識(shí)別效果還是不錯(cuò)的,但是設(shè)計(jì)到多空行、符號(hào)等,識(shí)別效果就不是太好了,準(zhǔn)確度方面可以通過(guò)對(duì)字庫(kù)的訓(xùn)練達(dá)到想要的效果,之后對(duì)獲取到的文本利用諸如re等各種庫(kù)進(jìn)行操作,其實(shí)應(yīng)用還蠻廣泛的。2. 但是它在驗(yàn)證碼方面的話效果還是不錯(cuò)的,驗(yàn)證碼的話tesserocr也是比較方面的.
識(shí)別中文可能會(huì)出現(xiàn)編碼錯(cuò)誤,這也是識(shí)別上的漏洞之一了,網(wǎng)上大佬們所說(shuō)的改變文本的編碼似乎并不能解決問(wèn)題,所以對(duì)長(zhǎng)文本圖片處理還是不太建議直接轉(zhuǎn)換。
圖文處理也可以借鑒一些各平臺(tái)的API,百度、騰訊、美團(tuán)都有支持.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 識(shí)別圖片中的文字信息方法
- Python圖像處理之識(shí)別圖像中的文字(實(shí)例講解)
- python實(shí)現(xiàn)簡(jiǎn)單的文字識(shí)別
- 如何使用Python進(jìn)行OCR識(shí)別圖片中的文字
- python批量識(shí)別圖片指定區(qū)域文字內(nèi)容
- 如何利用Python識(shí)別圖片中的文字
- Python 實(shí)現(xiàn)任意區(qū)域文字識(shí)別(OCR)操作
- 如何利用Python識(shí)別圖片中的文字詳解
- Python 圖片文字識(shí)別的實(shí)現(xiàn)之PaddleOCR
- Python圖片文字識(shí)別與提取實(shí)戰(zhàn)記錄
相關(guān)文章
django 擴(kuò)展user用戶字段inlines方式
這篇文章主要介紹了django 擴(kuò)展user用戶字段inlines方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python多進(jìn)程協(xié)作模擬實(shí)現(xiàn)流程
當(dāng)多個(gè)進(jìn)程使用同一份數(shù)據(jù)資源的時(shí)候,因?yàn)檫M(jìn)程的運(yùn)行沒(méi)有順序,運(yùn)行起來(lái)也無(wú)法控制,如果不加以干預(yù),往往會(huì)引發(fā)數(shù)據(jù)安全或順序混亂的問(wèn)題,所以要在多個(gè)進(jìn)程讀寫(xiě)共享數(shù)據(jù)資源的時(shí)候加以適當(dāng)?shù)牟呗裕瑏?lái)保證數(shù)據(jù)的一致性問(wèn)題2023-01-01Python Flask 請(qǐng)求數(shù)據(jù)獲取響應(yīng)詳解
這篇文章主要介紹了Python Flask請(qǐng)求數(shù)據(jù)獲取響應(yīng)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-10-10Python實(shí)現(xiàn)的排列組合計(jì)算操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的排列組合計(jì)算操作,涉及Python數(shù)學(xué)運(yùn)算的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2017-10-10python三種數(shù)據(jù)標(biāo)準(zhǔn)化方式
這篇文章主要介紹了python三種數(shù)據(jù)標(biāo)準(zhǔn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07淺談python中的__init__、__new__和__call__方法
這篇文章主要給大家介紹了關(guān)于python中__init__、__new__和__call__方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考學(xué)習(xí),下面來(lái)跟著小編一起看看吧。2017-07-07docker django無(wú)法訪問(wèn)redis容器的解決方法
今天小編就為大家分享一篇docker django無(wú)法訪問(wèn)redis容器的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08django ManyToManyField多對(duì)多關(guān)系的實(shí)例詳解
今天小編就為大家分享一篇django ManyToManyField多對(duì)多關(guān)系的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08