pytesseract提取识别图片中的文字
目錄
1、獲取tesseract版本號
2、獲取語言包列表
3、識別圖片中的文字
4、獲取圖片中文字的詳細信息
5、識別圖片中的文字和位置
6、識別osd信息
7、識別并生成xml文件
避坑指南:
?pytesseract是對Tesseract-OCR命令行的封裝,實際上底層調用的還是tesseract可執行文件,所以在使用pytesseract前需要完成Tesseract-OCR軟件安裝和語言包安裝,詳細方法可以參考?Tesseract-OCR5.0軟件安裝和語言包安裝(Windows系統)。
pytesseract可以通過pip安裝,當前(2021.11)最新版本為0.3.8:
pip install pytesseract1、獲取tesseract版本號
get_tesseract_version()獲取tesseract的版本號,注意并不是pytesseract的版本號:
#juzicode.com / VX公眾號:桔子code import pytesseract as ts version = ts.get_tesseract_version() print('version:',version)運行結果:
version: 5.0.0-rc1.20211030結果和在命令行執行”tesseract –version”看到的版本號是一樣的:
E:\juzicode\tess>tesseract --version tesseract v5.0.0-rc1.202110302、獲取語言包列表
通過get_languages()獲取安裝的語言包列表:
#juzicode.com / VX公眾號:桔子code import pytesseract as ts langs = ts.get_languages() print('langs:',langs)運行結果:
langs: ['chi_sim', 'eng', 'osd']和在命令行用“tesseract –list-langs”檢查語言包得到的結果是一樣的:
E:\juzicode\tess>tesseract --list-langs List of available languages (3): chi_sim eng osd3、識別圖片中的文字
image_to_string()用來識別圖片中的文字,最簡單的用法傳入2個入參,一個是圖片的文件名稱,一個是識別所用的語言包類型,比如要識別下圖中的文字,這是一段從pdf文件中截屏的片段,文件名為bookseg.png,語言包選擇chi_sim:
img_fn = 'bookseg.png' lang = 'chi_sim' text = ts.image_to_string(img_fn,lang) print(text)運行結果:
引 言數 字 圖 像 處 理 方 法 的 重 要 性 源 于 兩 個 主 要 應 用 領 域 : 改 善 圖 示 信 息 以 便 人 們 解 釋 ; 為 存 儲 、 傳 輸 和 表 示 而 對 圖 像 數 據 進 行 處 理 , 以 便 于 機 器 自 動 理 解 。 本 章 有 幾 個 主 要 目 的 : (1) 定 義 我 們 稱 之 為 圖 像 處 理 領 域 的 范 圍 ; (2) 從 歷 史 觀 點 回 顧 圖 像 處 理 的 起 源 ; (3) 通 過 考 察 一 些 主 要 的 應 用 領 域 , 給 出圖 像 處 理 技 術 狀 況 的 概 念 ; (4) 筒 要 討 論 數 字 圖 像 處 理 中 所 用 的 主 要 方 法 ; (5) 概 述 通 用 目 的 的 典 型 圖 像 處 理 系 統 的 組 成 ; (6) 列 出 公 開 發 表 的 數 字 圖 像 處 理 領 域 的 一 些 圖 書 和 文 獻 。從這個例子可以看到識別清晰度較高的圖片效果還是非常好的。
除了前面介紹的傳入圖片文件名稱的方法,還可以傳入圖像的numpy數組,這樣就可以和pillow、opencv等模塊配合使用,在某些場合下就可以先用pillow或opencv等做一些預處理再傳入到image_to_string()中識別。
img_fn = 'bookseg.png' lang = 'chi_sim' img = cv2.imread(img_fn,0) cv2.imwrite('gray-bin.jpg',img) text = ts.image_to_string(img,lang) #第1個參數傳入numpy類型 print(text)image_to_string()還可以用config參數配置tesseract的命令選項,所有的可選參數組成一個字符串傳給config入參,使用方法為:
text = ts.image_to_string(img,lang,config='--psm 6 --oem 1 --loglevel ALL')詳細的參數選項有如下幾種,可以通過tesseract的help命令查詢到:
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.--dpi VALUE Specify DPI for input image.--loglevel LEVEL Specify logging level. LEVEL can beALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL or OFF.-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.4、獲取圖片中文字的詳細信息
image_to_data()用來獲取識別出來的文字的詳細信息,包含識別到的文本內容,可信度,位置等:
img_fn = 'bookseg.png' lang = 'chi_sim' data = ts.image_to_data(img_fn,lang) print(data)運行結果:
最后一列是識別出來的文本內容,往前一列是識別出來的可信度,再往前4列是在圖片中的位置,包含left,top,width,height等4個要素。
注意image_to_data()返回的是str類型的數據,如果要使用其中的conf可信度,left,top等位置信息,還需要經過提取、轉換才能得到。
5、識別圖片中的文字和位置
image_to_boxes()用來獲取識別出來的文字和位置信息:
img_fn = 'bookseg.png' lang = 'chi_sim' boxes = ts.image_to_boxes(img_fn,lang) print(boxes)運行結果:
這種方法得到的位置信息和image_to_data()中得到的left,top,width,height位置信息是一樣的。同樣image_to_data()返回的結果也是一個字符串,如果要使用其中的單個字符和位置信息,也需要進行提取和轉換。
6、識別osd信息
image_to_osd()返回識別到的osd信息:
img_fn = 'bookseg.png' lang = 'chi_sim' osd = ts.image_to_osd(img_fn,lang) print(osd) print(type(osd))運行結果:
Page number: 0 Orientation in degrees: 0 Rotate: 0 Orientation confidence: 37.74 Script: Han Script confidence: 1.43<class 'str'>7、識別并生成xml文件
image_to_pdf_or_hocr()可以將識別的文字信息轉為xml格式字節流,從而可以寫入到xml文件中,其中入參extension設置為’hocr’:
img_fn = 'bookseg.png' lang = 'chi_sim' hocr = ts.image_to_pdf_or_hocr(img_fn, lang, extension='hocr') with open('test.xml', 'w+b') as f:f.write(hocr) print(type(hocr))調用image_to_pdf_or_hocr()返回的數據類型為bytes類型,這點和前面幾種方法的返回結果是有差異的,bytes類型可以用wb方式寫入到文件,寫入完成后打開文件可以看該文件包含了識別文字、可信度、位置信息等內容:
原文鏈接:http://www.juzicode.com/image-ocr-pytesseract
避坑指南:
1、提示tesseract未安裝錯誤:
import pytesseract as ts version = ts.get_tesseract_version() print('version:',version)======運行結果 FileNotFoundError: [WinError 2] 系統找不到指定的文件。 ...... pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.原因:一個是沒有安裝tesseract命令行工具,一個是安裝完后沒有把安裝路徑添加到PATH系統變量中。
2、獲取不到支持的語言包:
img_fn = 'bookseg.png' lang = 'chi_sim' text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:\\dev\\Tesseract-OCR5.0.0\\tessdata') print(text)======運行結果 pytesseract.pytesseract.TesseractError: (1, 'Error opening data file d:devTesseract-OCR5.0.0tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'chi_sim\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')使用config參數指定語言包路徑時,不能使用右斜杠,只能使用左斜杠。
#text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:\\dev\\Tesseract-OCR5.0.0\\tessdata') text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:/dev/Tesseract-OCR5.0.0/tessdata')3、使用–oem 0選項時提示不支持老版本的ocr引擎,需要切換為–oem 1或者不指明oem默認使用新的ocr引擎:
img_fn = 'bookseg.png' lang = 'eng' text = ts.image_to_string(img_fn,lang,config='--oem 0')======運行結果 pytesseract.pytesseract.TesseractError: (1, "Error: Tesseract (legacy) engine requested, but components are not present in d:\\dev\\Tesseract-OCR5.0.0/tessdata/eng.traineddata!! Failed loading language 'eng' Tesseract couldn't load any languages! Could not initialize tesseract.")推薦閱讀:
有了這個方法群聊斗圖你就不會輸了
只需幾行代碼生成22種風格各異的彩色圖
你別耍我,0.1+0.2居然不等于0.3?
如何實現一個“萬能”的調試打印函數
有了這款神器,什么吃灰文件都統統現形
一行代碼深度定制你的專屬二維碼(amzqr)
桔子菌和超市老板田大爺的一次角色互換經歷
改造getpass,強迫癥患者再也不用擔心少輸字符了
來看看怎么用OpenCV解構Twitter大牛的視覺錯覺圖
總結
以上是生活随笔為你收集整理的pytesseract提取识别图片中的文字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XP 开发模式
- 下一篇: Sigrity PowerSI 特征阻抗