Tesseract用OpenCV進行文本檢測

我沒有混日子,只是辛苦的時候沒人看到罷了

一、什么是Tesseract

  • Tesseract是一個開源的OCR(Optical Character Recognition)引擎,OCR是一種技術,它可以識別和解析圖像中的文本內容,使計算機能夠理解并處理這些文本。
  • Tesseract提供了豐富的配置選項和接口,使得開發者可以根據自己的需求和場景進行定制化和集成。
  • 通過使用Tesseract,你可以將一張包含文字的圖像(如掃描文檔、照片或截屏)輸入到引擎中,然后Tesseract會通過一系列的圖像處理和模式識別技術來提取出圖像中的文本信息。它將識別出的文本轉換為可以被計算機編輯和搜索的文本內容。

簡單來說,Tesseract是一個強大的OCR引擎,適用于將圖像中的文字提取出來,并將其轉換為計算機可處理的文本形式。它在許多領域和應用中被廣泛使用,如掃描和數字化文檔、自動化數據輸入、圖書館和檔案管理等。

傳送門

二、創建開發環境

使用conda創建一個名字為openCV的開發環境

conda create -n openCV

?引入openCV包

pip install opencv-python

?引入pytesseract包

三、代碼實戰

檢測圖片中的字符串并打印

先準備一張如下格式的圖片

編寫代碼解析

testDectection.py

import cv2
import pytesseractimg = cv2.imread('1.png')  # 使用opencv將圖片讀進來
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將圖片的顏色通道格式由BGR轉化成pytesseract能識別的RGB格式
print(pytesseract.image_to_string(img))  # 調用pytesseract引擎將圖片中的內容輸出出來
cv2.imshow('result', img)  # 顯示
cv2.waitKey(0)

?輸出

以上就是通過使用pytesseract簡單獲取圖像原始信息的方法。?

檢測圖中的字符并用紅框標注

代碼

import cv2
import pytesseractimg = cv2.imread('1.png')  # 使用opencv將圖片讀進來
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將圖片的顏色通道格式由BGR轉化成pytesseract能識別的RGB格式# Detecting Characters
hImg, wImg, _ = img.shape  # 找出圖片的寬度和高度
boxes = pytesseract.image_to_boxes(img)  # 使用pytesseract找出圖片中字符的坐標位置
for c in boxes.splitlines():c = c.split(' ')print(c)x, y, w, h = int(c[1]), int(c[2]), int(c[3]), int(c[4])cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3)    # 使用opencv畫框框,使用紅色,厚度為3cv2.imshow('result', img)  # 顯示
cv2.waitKey(0)

輸入兩張圖片

1.png

?2.png

輸出

每一個檢測出來字符串的坐標

圖像中添加識別的文本內容

import cv2
import pytesseractimg = cv2.imread('1.png')  # 使用opencv將圖片讀進來
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將圖片的顏色通道格式由BGR轉化成pytesseract能識別的RGB格式# Detecting Characters
hImg, wImg, _ = img.shape  # 找出圖片的寬度和高度
boxes = pytesseract.image_to_boxes(img)  # 使用pytesseract找出圖片中字符的坐標位置
for c in boxes.splitlines():c = c.split(' ')print(c)x, y, w, h = int(c[1]), int(c[2]), int(c[3]), int(c[4])cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3)  # 使用opencv畫框框,使用紅色,厚度為3cv2.putText(img, c[0], (x, hImg - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)   # 向圖像中添加文本cv2.imshow('result', img)  # 顯示
cv2.waitKey(0)

?關鍵

cv2.putText(img, c[0], (x, hImg - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)

這行代碼使用OpenCV庫中的putText函數向圖像中添加文本。

解釋如下:

  • img:表示要添加文本的圖像。
  • c[0]:表示要添加的文本內容,c[0]可能是一個字符串變量,用于指定要添加的文本。
  • (x, hImg - y + 25):表示文本的起始位置,該位置是一個元組(x, y),其中x表示文本的橫坐標,hImg - y + 25表示文本的縱坐標。hImg可能是整個圖像的高度,y是用于定位白色文本的輪廓的頂端位置的變量。通過hImg - y + 25可以使文本出現在輪廓下方一些距離的位置。
  • cv2.FONT_HERSHEY_COMPLEX:表示所使用的字體類型,這里使用的是復雜的字體類型。
  • 1:表示文本的字體縮放因子,1表示原始大小。
  • (50, 50, 255):表示文本的顏色,該顏色為一個元組(B, G, R),其中BGR分別表示藍色、綠色、紅色通道的值。在這個例子中,文本顏色是一種深紅色。
  • 2:表示文本的線寬,即文本邊框的寬度。這里設置為2,使得文本邊框較粗。

輸出

檢測連續的字符串

實際中一般不關注一個字符,更多是關注連起來的字符串

import cv2
import pytesseractimg = cv2.imread('1.png')  # 使用opencv將圖片讀進來
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將圖片的顏色通道格式由BGR轉化成pytesseract能識別的RGB格式# Detecting Characters
hImg, wImg, _ = img.shape  # 找出圖片的寬度和高度
boxes = pytesseract.image_to_data(img)  # 使用pytesseract找出圖片中字符的坐標位置
for x, c in enumerate(boxes.splitlines()):if x != 0:c = c.split()print(c)if len(c) == 12:x, y, w, h = int(c[6]), int(c[7]), int(c[8]), int(c[9])cv2.rectangle(img, (x, y), (x + w, h + y), (0, 0, 255), 3)  # 使用opencv畫框框,使用紅色,厚度為3cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)  # 向圖像中添加文本cv2.imshow('result', img)  # 顯示
cv2.waitKey(0)

?輸出

每個字段的含義:

  • level:代表文本在頁面中的級別。這里的級別是從1開始的,表示文本的嵌套層級。
  • page_num:代表文本所在的頁碼。在多頁文檔中,每一頁都有一個唯一的頁碼。
  • block_num:代表文本所在的文本塊的編號。文本塊是文檔中的一個矩形區域,包含多個段落或行。
  • par_num:代表文本所在的段落的編號。段落是文檔中的一個文本段落,通常由一組相關的句子組成。
  • line_num:代表文本所在行的編號。行通常是段落中的一個文本行。
  • word_num:代表文本所在單詞的編號。單詞是文本的最小單位,通常由一個或多個字符組成。
  • left:代表文本區域的左邊界相對于頁面的位置。
  • top:代表文本區域的上邊界相對于頁面的位置。
  • width:代表文本區域的寬度。
  • height:代表文本區域的高度。
  • conf:代表文本的置信度,通常在0到100之間。置信度表示OCR算法對所識別文本的可信程度。
  • text:代表識別出的文本內容。

只識別圖片中的數字

import cv2
import pytesseractimg = cv2.imread('1.png')  # 使用opencv將圖片讀進來
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將圖片的顏色通道格式由BGR轉化成pytesseract能識別的RGB格式# Detecting Characters
hImg, wImg, _ = img.shape  # 找出圖片的寬度和高度
cong = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_data(img, config=cong)  # 使用pytesseract找出圖片中字符的坐標位置
for x, c in enumerate(boxes.splitlines()):if x != 0:c = c.split()print(c)if len(c) == 12:x, y, w, h = int(c[6]), int(c[7]), int(c[8]), int(c[9])cv2.rectangle(img, (x, y), (x + w, h + y), (0, 0, 255), 3)  # 使用opencv畫框框,使用紅色,厚度為3cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)  # 向圖像中添加文本cv2.imshow('result', img)  # 顯示
cv2.waitKey(0)

?重點

cong = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_data(img, config=cong)

參數解釋:

  • oem是一個參數,用于指定OCR引擎的OCR引擎模式(OCR Engine Mode)。OCR引擎模式控制Tesseract在文本識別過程中的行為和算法。
  • psm是一種頁分割模式(Page Segmentation Mode),用于指定OCR引擎在識別文本時如何處理頁面布局和分割問題。psm參數控制Tesseract在識別文本時如何將圖像分割為單個字符、單詞、行和文本塊。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40548.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Maven之mirrorof范圍

mirrorOf 是 central 還是 * 的問題 在配置阿里對官方中央倉庫的鏡像服務器時&#xff0c;我們使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共倉庫</name><url>…

vmalert集成釘釘告警

vmalert通過在alert.rules中配置告警規則實現告警&#xff0c;告警規則語法與Prometheus兼容&#xff0c;依賴Alertmanager與prometheus-webhook-dingtalk實現釘釘告警&#xff0c;以下步驟&#xff1a; 1、構建vmalert 從源代碼構建vmalert&#xff1a; git clone https://…

vue computed和watch的區別

conputed 原理 computed計算屬性,依賴一個值的變化而變化且具有緩存作用,computed在vue內部維護了一個dirty屬性,默認為true當取值的時候dirty為true,執行用戶的方法,且將值緩存起來吧dirty設為false再次取值的時候判斷dirty,dirty為false的時候直接從緩存里面取當依賴的數據…

在docker下進行mysql的主從復制

搭建步驟 1、拉取鏡像 docker pull mysql:latest2、查看鏡像 docker images3、創建啟動容器 Master docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:latestSlave docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWO…

企業權限管理(十)-用戶詳情

用戶詳情 UserController findById方法 Controller RequestMapping("/user") public class UserController {Autowiredprivate IUserService userService;//查詢指定id的用戶RequestMapping("/findById.do")public ModelAndView findById(String id) thro…

Sublime Text 4 Build 4151 4152 發布及注冊方法

Sublime Text 是一個商業代碼編輯器。它原生支持許多編程語言和標記語言&#xff0c;用戶可以通過插件來擴展它的功能&#xff0c;這些插件通常是由社區建立的&#xff0c;并以自由軟件許可證的形式維護。為了方便插件&#xff0c;Sublime Text 有一個 Python API。 Sublime T…

【劍指Offer 57】和為s的連續正數序列,Java解密。

LeetCode 劍指Offer 75道練習題 文章目錄 劍指Offer:和為s的連續正數序列示例:限制:解題思路:劍指Offer:和為s的連續正數序列 【題目描述】 輸入一個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。 序列內的數字由小到大排列,不同序列按照首…

糖尿病視網膜病變,黃斑病變,年齡相關檢測研究(Matlab代碼)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

VMware虛擬安裝Ubuntu,然后切換Ubuntu內核版本

無論你選擇哪種方法&#xff0c;一旦進入 GRUB 引導菜單&#xff0c;你應該能夠選擇需要的內核版本并啟動系統。 打開終端&#xff1a;你可以通過按下 Ctrl Alt T 快捷鍵來打開終端。 使用 sudo&#xff1a;切換內核需要管理員權限&#xff0c;因此你需要使用 sudo 命令。首…

分類預測 | MATLAB實現CNN-BiGRU-Attention多輸入分類預測

分類預測 | MATLAB實現CNN-BiGRU-Attention多輸入單輸出分類預測 目錄 分類預測 | MATLAB實現CNN-BiGRU-Attention多輸入單輸出分類預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 Matlab實現CNN-BiGRU-Attention多特征分類預測&#xff0c;卷積雙向門控循環…

解決“先commit再pull”造成的git沖突

一、問題場景 在分支上修改了代碼然后commit&#xff08;沒有push&#xff09;&#xff0c;此時再git pull&#xff0c;拉下了別人的修改&#xff0c;但是報錯無法merge 二、解決步驟 1.在idea下方工具欄選擇git -> log&#xff0c;可以看到版本變化鏈表&#xff0c;右鍵…

【文件上傳】大文件分片上傳、斷點續傳、秒傳前后端實現

1、大文件上傳面臨的問題&#xff1a; 在傳統的文件上傳中&#xff0c;由于文件過大&#xff0c;導致網絡傳輸時間長&#xff0c;這過程中會遇到網絡不穩定或者不小心關閉的瀏覽器&#xff08;電腦&#xff09;的情況&#xff0c;從而導致文件上傳中斷。中斷之后&#xff0c;又…

題解:ABC277C - Ladder Takahashi

題解&#xff1a;ABC277C - Ladder Takahashi 題目 鏈接&#xff1a;Atcoder。 鏈接&#xff1a;洛谷。 難度 算法難度&#xff1a;普及。 思維難度&#xff1a;入門。 調碼難度&#xff1a;入門。 綜合評價&#xff1a;簡單。 算法 深度優先搜索簡單圖論 思路 把每…

【Apollo】賦能移動性:阿波羅自動駕駛系統的影響

前言 Apollo (阿波羅)是一個開放的、完整的、安全的平臺&#xff0c;將幫助汽車行業及自動駕駛領域的合作伙伴結合車輛和硬件系統&#xff0c;快速搭建一套屬于自己的自動駕駛系統。 開放能力、共享資源、加速創新、持續共贏是 Apollo 開放平臺的口號。百度把自己所擁有的強大、…

動態內存分配及管理——C語言

目錄 一、為什么存在動態內存分配 二、動態內存函數介紹 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、常見的動態內存錯誤 3.1 對NULL指針的解引用操作 3.2 對動態開辟空間的越界訪問 3.3 對非動態開辟內存使用free釋放 3.4 使用free釋放一塊動態開辟內存的一部…

搭建Web服務器并用cpolar發布至公網訪問

本地電腦搭建Web服務器并用cpolar發布至公網訪問 文章目錄 本地電腦搭建Web服務器并用cpolar發布至公網訪問前言1. 首先在電腦安裝PHPStudy、WordPress、cpolar2. 安裝cpolar&#xff0c;進入Web-UI界面3. 安裝wordpress4. 進入wordpress網頁安裝程序5. 利用cpolar建立的內網穿…

TensorFlow2.1 模型訓練使用

文章目錄 1、環境安裝搭建2、神經網絡2.1、解決線性問題2.2、FAshion MNIST數據集使用 3、卷積神經網絡3.1、卷積神經網絡使用3.2、ImageDataGenerator使用3.3、貓狗識別案例3.4、參數優化 1、環境安裝搭建 鏈接: Windows 安裝Tensorflow2.1、Pycharm開發環境 2、神經網絡 1…

【數據結構】堆(Heap)

一、堆的概念及結構 1、概念 堆(Heap)是計算機科學中一類特殊的數據結構的統稱。堆通常是一個可以被看做一棵 完全二叉樹的 數組對象。 堆是非線性數據結構&#xff0c;相當于一維數組&#xff0c;有兩個直接后繼。 如果有一個關鍵碼的集合K { k?&#xff0c;k?&#xff0c…

“深入解析JVM:探索Java虛擬機的內部工作原理“

標題&#xff1a;深入解析JVM&#xff1a;探索Java虛擬機的內部工作原理 摘要&#xff1a;本文將深入解析Java虛擬機&#xff08;JVM&#xff09;的內部工作原理&#xff0c;包括類加載、內存管理、垃圾回收、即時編譯等關鍵概念。通過對這些概念的詳細講解和示例代碼的演示&a…

關于openfeign調用時content-type的問題

問題1描述&#xff1a; 今天在A服務使用openfeign調用B服務的時候&#xff0c;發現經常會偶發性報錯。錯誤如下&#xff1a; 情況為偶發&#xff0c;很讓人頭疼。 兩個接口如下&#xff1a; A服務接口&#xff1a; delayReasonApi.test(student);就是使用openfeign調用B服務的…