使用一行Python代碼從圖像讀取文本

2020-12-03 人工智慧遇見磐創

處理圖像不是一項簡單的任務。對你來說,作為一個人,很容易看著某樣東西然後馬上知道你在看什麼。但電腦不是這樣工作的。

對你來說太難的任務,比如複雜的算術,或者一般意義上的數學,是計算機毫不費力就能完成的。但在這裡,情況正好相反——對你來說很瑣碎的任務,比如識別圖像中的貓或狗,對電腦來說真的很難。在某種程度上,我們是天造地設的一對。至少現在是這樣。

雖然圖像分類和涉及到一定程度計算機視覺的任務可能需要大量的代碼和紮實的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,並且可以應用於許多現實生活中的問題。

在今天的帖子中,我想證明這一點。雖然會安裝一些庫,但不會花很多時間。這些是你需要的庫:

OpenCVPyTesseractOpenCV

現在,這個庫將只用於加載圖像,實際上你不需要事先對它有太多了解(儘管它可能有幫助,你將看到為什麼)。

根據官方文件:

OpenCV(開源計算機視覺庫)是一個開源的計算機視覺和機器學習軟體庫。OpenCV的目的是為計算機視覺應用提供一個通用的基礎結構,並加速機器感知在商業產品中的使用。OpenCV是bsd許可的產品,OpenCV使企業可以輕鬆地使用和修改代碼

簡而言之,你可以使用OpenCV來做任何類型的圖像轉換,這是一個相當簡單的庫。

如果你還沒有安裝它,那麼它將只是終端中的一行:

pip install opencv-python差不多就是這樣。在此之前,一切都很簡單,但這種情況即將改變。

PyTesseract

這個庫到底是什麼東西?根據維基百科:

Tesseract是用於各種作業系統的光學字符識別引擎。它是免費軟體,根據Apache許可2.0版發布,自2006年以來由Google贊助開發。

我敢肯定,現在有更多複雜的庫可用,但是我發現這個庫運行良好。根據我自己的經驗,該庫應該能夠從任何圖像中讀取文本,但前提是該字體不會使你連連看都看不懂。

如果無法從你的圖像中讀取文字,花更多的時間使用OpenCV,應用各種過濾器使文本高亮。

現在安裝在底部有些麻煩。如果你使用的是Linux,則全部歸結為幾個sudo-apt get命令:

sudo apt-get updatesudo apt-get install tesseract-ocrsudo apt-get install libtesseract-dev我用的是Windows系統,所以這個過程有點乏味。

首先,打開這個URL:https://github.com/UB-Mannheim/tesseract/wiki下載32位或64位的安裝程序:

安裝本身很簡單,只需單擊幾次Next。是的,你還需要做一個pip安裝:

pip install pytesseract接下來要需要告訴Python Tesseract安裝在何處。在Linux機器上,我不需要這樣做,但在Windows上是必需的。默認情況下,它安裝Program Files

如果你做的一切正確,執行這些代碼應該不會產生任何錯誤:

獲取文本

讓我們從一個簡單的開始。我找到了一些免版稅的圖片,裡面有一些文字,第一個是這樣的:

它應該是簡單的一個,有可能Tesseract會讀那些藍色的「對象」作為括號。讓我們看看會發生什麼:

我的猜測是正確的。不過,這不是一個問題,你可以使用一些Python技巧輕鬆地解決這些問題。

下一個可能更棘手:

我希望它不會檢測到硬幣上的「B」:

看起來效果很好。

現在輪到你把它應用到你自己的問題上了。如果文本與背景混合,OpenCV技能在這裡可能是至關重要的。

在你離開之前

對計算機來說,從圖像中讀取文本是一項相當困難的任務。想想看,電腦不知道字母是什麼,它只對數字有效。在引擎蓋後面發生的事情一開始可能看起來像一個黑盒子,但我鼓勵你進一步研究,如果這是你感興趣的領域。

我並不是說PyTesseract每次都能很好地工作,但是我發現即使在一些比較複雜的圖像上它也足夠好。但不是所有情況都很好,有時候需要一些圖像處理需要使文本高亮讓其相對於背景更加突出。

參考文獻

https://opencv.org/about/https://en.wikipedia.org/wiki/Tesseract_(software)

相關焦點

  • 使用文件對象讀取Python文件內容
    使用open函數可以打開文件並返回一個文件對象,返回的文件對象用來讀取和寫入文件內容。那麼,如何使用文件對象來讀取文件內容呢?如何讓讀取的文件內容初始化一個Python列表呢?文本文件和二進位文件使用文件對象讀取文件內容時,要根據文件的不同存儲類型選擇不同的讀取方式。一般來說,文件的存儲類型主要分為文本文件和二進位文件兩大類。
  • opencv-python獲取圖像:面向對象與面向過程
    下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""import cv2image=cv2.imread('lena.JPG') #讀取本地圖片,
  • Python數據分析:pandas讀取和寫入數據
    繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。平時工作中,我們會接觸到不同的數據文件,比如很常見的excel文件(後綴名為xls和xlsx),csv、txt等文本文件,json文件以及sql文件等等。
  • python編程從入門到實踐:讀取整個文件和創建包含文件各行的內容
    1.python學習筆記:在文件編輯器中新建一個文件,寫幾句話來總結一下你至此學到的Python知識,其中每一行都以「In python you can」打頭。將這個文件命名為learning_python.txt,並將其存儲到為完成本章練習而編寫的程序所在的目錄中。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • 這款Python 庫 4行代碼搞定!
    有一款軟體叫掃描全能王,想必一些小夥伴聽過,這是一個OCR集成軟體,可以將圖像內容掃描成文字。所以說,OCR作用是對文本資料的圖像文件進行分析識別處理,獲取文字及版面信息。OCR本質是圖像識別,其包含兩大關鍵技術:文本檢測和文字識別。先將圖像中的特徵的提取並檢測目標區域,之後對目標區域的的字符進行分割和分類。
  • Python讀取ini配置文件
    python看過我之前文章的同學可能知道,最近一直在做百度語音合成的功能,進一步的延伸功能,此次是批量生成文章的語音文件。目前是使用python來實現的,將代碼打包成了exe文件,方便客戶進行測試。格式如下:;注釋說明此文件應用場景[DATABASE]host = 127port = 3306[TYPE]cat = 0我們簡單的寫兩個配置參數信息,下面來看一下如何讀取信息。
  • python人工智慧-圖像識別
    PIL:(Python Imaging Library)是Python平臺上的圖像處理標準庫,功能非常強大。pytesseract:圖像識別庫。我這裡使用的是python3.6,PIL不支持python3所以使用如下命令pip install pytesseractpip install pillow如果是python2,則在命令行執行如下命令:pip install pytesseractpip install PIL這時候我們去運行上面的代碼會發現如下錯誤
  • 一行Python 代碼能實現什麼喪心病狂的功能?|CSDN博文精選
    這個數據結構,自然是 numpy 的 ndarray 對象,讀取圖像文件我習慣使用 PIL。(109)], axis=0)通常,上面這一行代碼應該寫成這樣:data = list()for i in range(109): img = Image.open('head%d.png'%i) img = np.array(img)data.append(img)data = np.stack(data, axis=0)我把這些代碼寫成一行,
  • 使用Python調整圖像大小
    本文旨在向你展示三件事:圖像的基本概念。用於操作圖像的Python庫。你可以在自己的項目中使用本文的代碼。我們要構建的命令行程序可以一次調整一個或多個圖像文件的大小。我們是站在巨人的肩膀上,可以用一行代碼來解決我們的問題。如果你有興趣了解更多有關處理圖像時幕後發生的事情,我鼓勵你更多地查看「機器視覺」主題!這絕對是一個蓬勃發展的領域。做得足夠好,就會有很多公司願意為你的計算機視覺專業知識付出最高的代價。
  • 用Python做特效,分分鐘碾壓五毛黨
    逐幀提取圖像:這就需要使用到我們的opencv了,具體代碼如下:def getFrame(video_name, save_path):""" 傳入視頻名稱,將圖像幀保存到save_path下 """合成圖像(影分身):這裡需要使用到我們的Pillow模塊,該模塊中提供了圖像粘貼的函數:def setImageBg(humanseg, bg_im):""" 將摳好的圖和背景圖片合併 :param
  • Python的一行代碼有何魅力?lambda匿名函數都自嘆不如
    其中,一行代碼編寫與lambda表達式是最具代表性的方法,下面分別來介紹一行代碼編寫和lambda表達式的代碼之美。一行代碼我們都知道,創建列表的方式有多種,比如直接定義、使用list()函數轉換、使用for循環迭代輸出等等。
  • python編程從入門到實踐:使用文件的內容
    1.C語言學習筆記:可使用方法replace()將字符串中的特定單詞都替換為另一個單詞。讀取你剛創建的文件learning_python.txt中的每一行,將其中的Python都替換為另一門語言的名稱,如C。將修改後的每行都列印到屏幕上。
  • 基於python+OpenCV模塊的人臉識別定位技術
    本文將基於OpenCV模塊,在windows作業系統上,利用python語言,進行人臉識別技術的研究。當然OpenCV的應用領域很廣,除了人臉識別之外,它還支持圖像分割、動作識別、視頻處理等技術。代碼的第3行(以上圖為準,空行也算一行),導入別人已經訓練好的臉部識別資料庫。這裡用到的數據是在github上開源的已經訓練好的分類器,如圖所示:需要將對應的數據文件(.xml文件)下載到指定目錄(代碼中的示例,展示的是與.py文件同一目錄下)。第4行的函數cv2.VideoCapture(0)表示調用相機。第6行是讀取攝像機中的影像。
  • 一行代碼的大用處!看到最後一個我終於忍不住了...
    傳智播客博學谷微信號:boxuegu-get最新最全的IT技能免費領取各種視頻資料俗話說得好:兩個黃鸝鳴翠柳,一行代碼上青天!就一行你想讓我幹啥?一行代碼畫個愛心print('\n'.join([''.join([('Love'[(x-y) %len('Love')]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3一行代碼輸出Mandelbrot圖像print('\n'.join([''.join
  • 使用模板匹配在Python上進行對象檢測!(附代碼)
    但是我們實際上可以在不使用機器學習或任何其他框架的情況下進行對象檢測。在本文中,我將向您展示如何僅使用Python進行操作。將從定義模板圖像(對象)開始,然後系統將在源圖像中找到與我們選擇的模板匹配的所有其他對象。因此,讓我解釋一下向您展示示例的含義。在下面有兩張圖片,左側是飛機的原圖像,右側是飛機作為對象的模板照片。
  • 實用Python文本預處理代碼
    刪除文本中出現的標點  以下示例代碼演示如何刪除文本中的標點符號,如 [!」#$%&』*+,-./:;<=>?@[]^_`{|}~] 等符號。這些詞語沒什麼特別或重要意義,通常可以從文本中刪除。一般使用 Natural Language Toolkit(NLTK) 來刪除這些終止詞,這是一套專門用於符號和自然語言處理統計的開源庫。
  • 20行Python代碼實現視頻字符化
    OpenCV的安裝及圖片讀取 在Python中我們只需要用pip安裝即可,我們在控制臺執行下列語句: pip install opencv-python 安裝完成就可以開始使用
  • 解決Python讀取文件時出現UnicodeDecodeError
    今天學習python時,讀取一個txt文檔,然後打開後輸出文件,提示UnicodeDecodeError: 'gbk' codec can't decode bytepython代碼def print_file(fname): f = open(fname,'r'
  • 常用的十大 python 圖像處理工具
    此代碼是由活躍的志願者社區編寫的,具有高質量和同行評審的性質。圖像本質上是包含數據點像素的標準Numpy數組。因此,我們可以通過使用基本的NumPy操作,例如切片、掩膜和花式索引,來修改圖像的像素值。可以使用skimage加載圖像並使用matplotlib顯示圖像。