網(wǎng)站首頁 編程語言 正文
1.相關(guān)函數(shù)的講解
image_to_data()的輸出結(jié)果是表格形式,輸出變量的類型依舊是字符串。
你會得到一個這樣的列表['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'],我們逐個解釋下:
- level,當(dāng)前項的層級;
- page_num,當(dāng)前項所屬頁,一般情況下,單張圖片的內(nèi)容均會被分在同一個頁;
- block_num ,當(dāng)前項所屬塊,Tesseract會將圖像分割為多個不同的block,block會出現(xiàn)1,2,3……等等值; ??
- par_num,當(dāng)前圖像中文字的段落分類;
- line_num,當(dāng)前項所屬行;
- word_num,為同一行中當(dāng)前項所屬的單詞序號;
- left\ top\ width\ height,分別為當(dāng)前項所在矩形區(qū)域的左上角坐標(biāo)、寬度和高度;
- conf,當(dāng)前檢測字符的置信度,表示項無文字,值為-1,若Tesseract認(rèn)為當(dāng)前區(qū)域有文字,則其值得范圍為0~100;
- text,即為當(dāng)前項的文本,若無文字此項為空。
那么關(guān)于enumerate()函數(shù),大家可以看看此文。
詳解Python中enumerate函數(shù)的使用
2.代碼展示
Detecting Words
import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
pytesseract.pytesseract.tesseract_cmd = 'E:\pythonProject\Github\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
##############################################
##### Detecting Words ######
##############################################
#[ 0 1 2 3 4 5 6 7 8 9 10 11 ]
#['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text']
boxes = pytesseract.image_to_data(img)
for a,b in enumerate(boxes.splitlines()):
print(b)
if a!=0:
b = b.split()
if len(b)==12:
x,y,w,h = int(b[6]),int(b[7]),int(b[8]),int(b[9])
cv2.putText(img,b[11],(x,y-5),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
cv2.rectangle(img, (x,y), (x+w, y+h), (50, 50, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
Detecting ONLY Digits
import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
pytesseract.pytesseract.tesseract_cmd = 'E:\pythonProject\Github\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
##############################################
##### Detecting ONLY Digits ######
##############################################
hImg, wImg,_ = img.shape
conf = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_boxes(img,config=conf)
for b in boxes.splitlines():
print(b)
b = b.split(' ')
print(b)
x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 2)
cv2.putText(img,b[0],(x,hImg- y+25),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
cv2.imshow('img', img)
cv2.waitKey(0)
3.問題敘述
首先,我遇到的問題有
(1)無效的TeserAct版本:“TeserAct3.02”
?可能是此版本太低了,但我找了找新的版本,在此更新一下路徑:
點(diǎn)擊此網(wǎng)址??Home · UB-Mannheim/tesseract Wiki · GitHub
自行選擇合適的就可以了。
(2)識別效果差
可以看到,將本來不是數(shù)字的字母也強(qiáng)行識別出來了,這簡直說不過去了。
最后我們看看更改后的效果:
cool,非常的棒,快去試試吧!
對于數(shù)字又強(qiáng)差人意了,所以說它這個本身還是存在一點(diǎn)的問題。我覺得影響不大,你覺得不舒服,可以換張圖試試。
4.image_to_data()配置講解
oem講解
OEM _ TESSERACТ_ ONLY ? ? ?只以最快的速度運(yùn)行Tesseract
OEM _ CUBE _ ONLY ? ? ? ?僅運(yùn)行多維數(shù)據(jù)集-精度更高,但速度更慢
OEM _ TESSERACT _ CUBE _ cOMBINED ? ? ? ? 同時運(yùn)行并組合結(jié)果-最佳精度
OEM _ DEFAULT ? ? 在調(diào)用init_*0時指定此模式,以指示應(yīng)根據(jù)特定于語言的配置中的變量自動推斷上述任何模式。命令行配置,或者如果沒有在上面任何一項中指定,則應(yīng)設(shè)置為默認(rèn)的OEM_ TESSERACT_ ONLY。
psm講解
PSM _ OSD _ ONLY ? ? ? ? ?僅用于方向和腳本檢測。
PSM _ AUTO _ OSD ? ? ? ? ? ?帶有方向和腳本檢測的自動頁面分割。(OSD)
PSM _ AUTO _ ONLY ? ? ? ? ? ?自動頁面分割,但沒有OSD或OCR。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PSM _ AUTO ? ? ? ? ? ? ?完全自動頁面分割,但沒有OSD。
PSM _ SINGLE _ COLUMN ? ? ? ? ?假設(shè)一列大小可變的文本。
PSM _ SINGLE _ BLOCK _ VERT _ TEXT ? ? ? ? 假設(shè)一個統(tǒng)一的垂直對齊文本塊。
PSM _ SINGLE _ BLOCK ? ? ? ? ?假設(shè)一個統(tǒng)一的文本塊(默認(rèn)值)
PSM _ SINGLE _ LINE ? ? ? ? ?將圖像視為單個文本行。
PSM _ SINGLE _ WORD ? ? ? ? ?將圖像視為單個單詞。
PSM _ CIRCLE _ WORD ? ? ? ? 將圖像視為圓圈中的單個單詞。
PSM _ SINGLE _ CHAR ? ? ? ? 將圖像視為單個字符。
PSM _ SPARSE _ TEXT ? ? ? ?在沒有特定順序的情況下盡可能多地查找文本。
PSM _ SPARSE _ TEXT _ OSD ? ? ? ? 具有方向和腳本檢測的稀疏文本。
PSM _ RAW _ LINE ? ? ? ? ? 將圖像視為單個文本行,繞過特定于Tesseract的黑客攻擊。
5.項目拓展
import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
pytesseract.pytesseract.tesseract_cmd = 'E:\pythonProject\Github\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
def captureScreen(bbox=(300,300,1500,1000)):
capScr = np.array(ImageGrab.grab(bbox))
capScr = cv2.cvtColor(capScr, cv2.COLOR_RGB2BGR)
return capScr
while True:
timer = cv2.getTickCount()
_,img = cap.read()
#img = captureScreen()
#DETECTING CHARACTERES
hImg, wImg,_ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
#print(b)
b = b.split(' ')
#print(b)
x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 2)
cv2.putText(img,b[0],(x,hImg- y+25),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
#cv2.putText(img, str(int(fps)), (75, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (20,230,20), 2);
cv2.imshow("Result",img)
cv2.waitKey(1)
cv2.imshow('img', img)
cv2.waitKey(0)
進(jìn)行網(wǎng)絡(luò)攝像頭的實時文字測試。
6.總結(jié)與評價
我是首次使用Tesseract,體驗感很不好,這是我在b站的評論中看到的:
說實話,我還沒有學(xué)到用算法的地步,學(xué)學(xué)了解一下就好了,反正我是準(zhǔn)備項目實戰(zhàn)的中后期去學(xué)習(xí)深度學(xué)習(xí),以及其他的算法學(xué)習(xí),這方面我不好說,但它的精度的確是不達(dá)標(biāo),你們也看到了,居然把文字也識別成了數(shù)字。而且開啟攝像頭識別的也不是很好,識別不完全or識別錯誤。
原文鏈接:https://blog.csdn.net/m0_62919535/article/details/126589521
相關(guān)推薦
- 2022-11-07 PostgreSQL常用優(yōu)化技巧示例介紹_PostgreSQL
- 2022-12-01 .NET?Core部署為Windows服務(wù)的詳細(xì)步驟_實用技巧
- 2023-07-25 SpringBoot配置AOP
- 2022-10-31 一文搞懂Go語言操作Redis的方法_Golang
- 2023-01-08 利用Qt實現(xiàn)獲取計算機(jī)的硬件信息_C 語言
- 2022-03-17 c++智能指針unique_ptr的使用_C 語言
- 2022-08-16 Hive導(dǎo)入csv文件示例_數(shù)據(jù)庫其它
- 2022-01-17 報錯:是否需要更改目標(biāo)庫?請嘗試將lib編譯器選項更改為es2015或更高版本
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支