Python程序圖片和pdf上文字識別實例一二

2021-01-19 PythonABC
實例一:先減少背景雜音,再做圖片文字識別

為了提高識別率,先用opencv-python對掃描的圖片做預處理(減少背景雜音),然後調用pytesseract識別圖片上的文字。處理方式就是:

1、將圖片的顏色模式轉成灰度模式,再用OTSU做二值化處理

2、將處理結果保存成臨時圖片文件

3、調用pytesseract識別臨時圖片上的文字,識別完畢後刪掉臨時圖片

選擇要識別文字的圖片調用tkinter打開圖形化對話窗口,tkinter是python內置模塊,可直接引進不必安裝。對tkinter不做太多解釋,只是藉助它的功能函數打開對話窗口。引入內置os的功能函數刪除臨時文件。

from PIL import Image           # pytesseract識別圖片上的文字時要用import pytesseract        # 識別圖片上的文字import cv2 # 圖片預處理,減少背景雜音import os # 刪除臨時文件from tkinter import Tk        # 幫忙用圖形化界面找到要識別的圖片文件from tkinter.filedialog import askopenfilenameTk().withdraw()                 # 這裡不是要全部圖形化界面,所以就不顯示根窗口了imgName = askopenfilename() # 顯示「打開」窗口,返回選中的圖片文件的路徑+文件名字符串# 預處理圖片greyImg = cv2.imread(imgName, 0) # 預處理第一步,彩色模式轉成灰度模式:以灰度模式打開圖片,生成灰度圖片greyImg = cv2.threshold(greyImg, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]# 預處理第二步,OTSU二值法,返回的是列表,第二個元素(索引為1)指向被處理的圖片# 將預處理結果保存成臨時文件,文件名用它在系統的進程ID(os.getpid())filename = "{}.png".format(os.getpid())cv2.imwrite(filename, greyImg)# 調用pytesseract將圖片上的文字識別出來txt = pytesseract.image_to_string(Image.open(filename))os.remove(filename)        # 刪除臨時圖片文件with open("toFile.txt", 'w', encoding='utf-8') as fObject:    fObject.write(txt)        # 將識別出來的字符串保存到文本文件

提高圖片文字的識別率和正確率是個大話題,跟圖片上文字的背景有關係,跟圖片解析度有關係,跟識別用的字庫的識別能力也有關係(字庫可以訓練),牽扯的技術手段很多。除了減少背景雜音外,還有一些預處理工作我們也可以做,比如把圖片上有文字的部分截取下來識別(效果很明顯);把圖片上的文字分成一小段一小段識別,甚至分成一個一個字符來識別……有興趣的朋友可以自己研究。

實例二:識別pdf上的文字

識別pdf上的文字分幾步進行:

1、引入wand模塊,把pdf文件轉成圖片序列,通過序列的索引可以獲得pdf的每一頁。

2、遍歷這個圖片序列,把序列的每一頁變成wand圖片對象,轉成灰度模式(簡單預處理下,以提高識別度),接下來本應添加進圖像列表req_image中,但卻遇到一個問題:

PyOCR模塊做圖片文字識別的功能函數的形參只接收pillow的Image模塊打開的圖片PIL.Image.open(),不接受wand圖形對象,PIL.Image.open()也不接收wand圖片對象。當然可以wand圖像對象保存成圖片文件,然後PIL.Image.open()打開這個圖片文件。

有個更快的處理方法,不用硬碟(硬碟慢)做媒介用緩存(buffer):先用wand圖片對象的make_blob把圖片轉成二進位數據流,把二進位數據流放入列表req_image中。

3、遍歷列表req_image,ByteIO()讀取二進位數據流,返回值可以被PIL.Image.open()接受。接下去就可以調用PyOCR模塊的功能函數做圖片文字轉換了。

4、將識別結果放進列表final_text,用pprint模塊的pprint()顯示出來。pprint,pretty print顧名思義,輸出結果規整好看一些。

from wand.image import Image as wandImage # pdf –> jpegfrom PIL import Image as pillowIMage # PyOCR需要import pyocr.builders # OCR識別import io # 將Wand處理結果傳給給Pillowimport pprint # 美美的列印出來# PyOCR初始化tool = pyocr.get_available_tools()[0] # 獲得OCR內核工具,這裡用的是Tesseractlang = tool.get_available_languages()[0]# 獲得識別用語言,這裡用的是簡體中文,參見20.2 PyOCR的初始化程序req_image = [] # 存放pdf轉換過來的圖片二進位數據流final_text = [] # 存放識別結果,每個元素是每一頁識別出來的文字ima_pdf = wandImage(filename='instance.pdf', resolution=300)# 打開pdf文件,生成wand圖片對象。解析度設為300,設高解析度有助於提高識別率image_jpeg = ima_pdf.convert('jpeg') # pdf文件轉成圖片,實際上是個圖片序列,序列的長度與pdf的頁數相同for img in image_jpeg.sequence: # 遍歷圖片序列的每頁圖片    img_page = wandImage(image=img) # 生成為wand圖片對象    img_page.type = 'grayscale' # 轉成灰度模式有助於OCR識別文字req_image.append(img_page.make_blob('jpeg')) # 轉成二進位數據流放進列表for img in req_image: # 一頁一頁OCR識別文字    text = tool.image_to_string(        pillowIMage.open(io.BytesIO(img)), # io.BytesIO()從內存中讀入二進位數據流        lang=lang, # 識別語言        builder=pyocr.builders.TextBuilder() # 識別器    )    final_text.append(text) # 識別出來的結果添進列表pprint.pprint(final_text) # 顯示識別結果


相關焦點

  • 使用Python製作一個簡易的OCR圖片文字識別工具
    今天帶領大家使用Python製作一個簡易的OCR圖片文字識別工具,來解決這類問題。,英文全稱是Optical Character Recognition,說白了就是從電子設備中顯示的圖片上面查找我們需要的字符,通過檢測、識別將字符翻譯成計算機文字的過程。
  • 在線文字圖片識別工具
    騰訊優圖,提供圖片整體文字的檢測和識別服務,返回文字框位置與文字內容。支持多場景、任意版面下整圖文字的識別,以及中英文、字母、數字、常見字符的識別。百度文字識別,支持多場景下的文字檢測識別。OCRMaker,提供在線文字識別,文字提取等服務。
  • 怎樣識別圖片中的文字,提取並變成可編輯狀態
    大家好,我是小編顏如玉,最近發現一款實用的免費小工具,能識別圖片中的文字並自動生成可編輯狀態的文字,推薦給大家,以下是實測使用步驟。感覺有用的話,關注支持一下,謝謝。第一步,打開微信發現頁面,點擊小程序。
  • 利用Python來識別並提取圖片中文字
    文字識別是利用計算機自動識別字符的技術,是模式識別應用的一個重要領域。文字識別一般包括文字信息的採集、信息的分析與處理、信息的分類判別等幾個部分。文字識別可應用於許多領域,如閱讀、翻譯、文獻資料的檢索、信件和包裹的分揀、稿件的編輯和校對、大量統計報表和卡片的匯總與分析、銀行支票的處理、商品發票的統計匯總、商品編碼的識別、商品倉庫的管理,以及水、電、煤氣、房租、人身保險等費用的徵收業務中的大量信用卡片的自動處理和辦公室打字員工作的局部自動化等。以及文檔檢索,各類證件識別,方便用戶快速錄入信息,提高各行各業的工作效率。
  • 手機怎樣識別圖片上的文字?文字如何翻譯成英文
    在工作中我們會遇到各種各樣格式的文件,其中圖片格式文件最多,如果我們想要將圖片中的文字提取出來怎麼操作?圖片中文字較少手寫敲打還行,但是文字過多進行打字就太費神費力了,怎樣可以識別圖片上的文字呢?識別文字如何翻譯成英文?遇到這種問題,其實利用手機上一些小工具就可以輕鬆解決!
  • Python技術:截圖文字識別工具
    #01 截圖文字識別工具有時候在海報上面,圖片上面,或者PDF文檔中,經常出現一些唯美的文字。這個時候想要複製下來才發現不能複製。因為有的是圖片,有的是PDF。可以使用Python製作一個小工具,來識別圖片上的文字。但是保存圖片等又太麻煩,如果能截圖一鍵識別就好了。我們用Python來實現。
  • 在手機上怎麼將圖片生成PDF?超實用的文字識別軟體!
    在手機上怎麼將圖片生成PDF?在電腦上我們可以通過PDF相關的一些軟體將圖片轉換成PDF文檔,但是在手機中要想將圖片生成PDF文檔就難得多了。今天小編就給大家帶來能夠將圖片迅速生成PDF的一款APP:「迅捷文字識別。」
  • Python調用百度AI製作簡易OCR圖片文字識別工具(完結篇)
    前兩篇,我們使用百度AI調用製作了一個OCR圖片文字識別工具。今天,我們對這個工具進行進一步完善。通過tkinter相關技術實現窗口拆分,在此基礎上增加圖片大小調整的功能,並對前兩篇進行梳理,提供程序的全部原始碼,方便大家使用。
  • Python圖像處理之圖片文字識別(OCR)
    OCR與Tesseract介紹   將圖片翻譯成文字一般被稱為光學文字識別(Optical Character Recognition,
  • 用python識別驗證碼
    今天,我們就簡單的說下,怎麼用python來處理驗證碼。(注意:我所有的python相關的文章用的都是python3。)準備工作1、tesseract-ocr軟體Tesseract的OCR引擎最先由HP實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract也從此塵封。
  • 使用Python+百度OCR文字識別提取圖片內容
    百度文字識別 工作中,我們常常會將圖片中的文字整理成word文檔,過去主要依靠人工識別,費時費力,隨著人工智慧技術的發展,OCR文字識別的準確度越來越高,此項工作完全可以交給系統來完成了,下面是一段Python版的文字識別代碼,使用了百度的「百度文字識別接口」。
  • 小程序丨提取圖片裡文字的神器
    生活中常常遇到一張圖片,裡面有大量的文字,我們想要提取的話,我們可能會採用直接輸入或者需要付費才能享受到這種服務。
  • 怎麼用工具識別圖片文字?超實用的圖片文字識別方法
    怎麼用工具識別圖片文字?有關圖片識別文字的問題相信很多小夥伴都遇到過,例如當我們看上網頁上的文本內容不能直接提取時,就可以將其製作成圖片的形式然後再用工具識別其中的文字信息達到提取效果。接下來分享一個超實用的圖片文字識別方法,有需要的小夥伴可以學習一下喲!
  • 圖片生成pdf用哪個app軟體比較好?
    圖片生成pdf用哪個app軟體比較好?很多時候,為了方便學習、工作,我們常常需要把不同格式文件進行格式轉變,例如圖片轉變成pdf。相對電腦來說,在手機上把圖片生成pdf的難度會高很多,除非藉助一些專業軟體。
  • 使用Python和Tesseract來識別圖形驗證碼
    在這種情況下,tesseract就能幫上大忙了。Tesseract的OCR引擎最早是HP實驗室開發的,曾經是 OCR業內最準確的三款識別引擎之一。2005年該引擎交給了Google,作為開源項目發布在Google Project上了。Tesseract提供獨立程序和API兩種形式供用戶使用。
  • Python驗證碼識別:利用pytesser識別簡單圖形驗證碼
    三、一般思路驗證碼識別的一般思路為:1、圖片降噪2、圖片切割3、圖像文本輸出3.1 圖片降噪所謂降噪就是把不需要的信息通通去除,比如背景,幹擾線,幹擾像素等等,只剩下需要識別的文字,讓圖片變成2進位點陣最好。
  • Python中判斷數字是否為質數的實例講解
    在本篇文章裡小編給大家分享了關於python中判斷數字是否為質數的實例講解內容,有興趣的朋友們可以學習下。
  • 用手機微信,在線就能將圖片中的文字提取出來
    而像某些圖片中的文字內容,也不用像以前一樣以純手打的方式來予以完成。這一類提供圖片轉文字服務的軟體,被稱為ocr文字識別軟體。而隨著智慧型手機的推動,它也不僅僅可以依靠電腦來完成——手機同樣能夠出色地完成圖片轉文字。
  • 如何識別圖片中的文字?華為5大免費識別文字翻譯技巧
    如何識別圖片中的文字?華為5大免費識別文字翻譯技巧 2019年05月16日 15:05作者:黃頁編輯:黃頁 當我們遇到不認識的英文
  • 如何 提取圖片中的文字?這款Python 庫 4行代碼搞定!
    OCR本質是圖像識別,其包含兩大關鍵技術:文本檢測和文字識別。先將圖像中的特徵的提取並檢測目標區域,之後對目標區域的的字符進行分割和分類。它可以在python中調用,用來識別圖像中的文字,並輸出為文本。❝https://github.com/JaidedAI/EasyOCR❞