網站首頁 編程語言 正文
1.相關函數的講解
image_to_data()的輸出結果是表格形式,輸出變量的類型依舊是字符串。
你會得到一個這樣的列表['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'],我們逐個解釋下:
- level,當前項的層級;
- page_num,當前項所屬頁,一般情況下,單張圖片的內容均會被分在同一個頁;
- block_num ,當前項所屬塊,Tesseract會將圖像分割為多個不同的block,block會出現1,2,3……等等值; ??
- par_num,當前圖像中文字的段落分類;
- line_num,當前項所屬行;
- word_num,為同一行中當前項所屬的單詞序號;
- left\ top\ width\ height,分別為當前項所在矩形區域的左上角坐標、寬度和高度;
- conf,當前檢測字符的置信度,表示項無文字,值為-1,若Tesseract認為當前區域有文字,則其值得范圍為0~100;
- text,即為當前項的文本,若無文字此項為空。
那么關于enumerate()函數,大家可以看看此文。
詳解Python中enumerate函數的使用
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”
?可能是此版本太低了,但我找了找新的版本,在此更新一下路徑:
點擊此網址??Home · UB-Mannheim/tesseract Wiki · GitHub
自行選擇合適的就可以了。
(2)識別效果差
可以看到,將本來不是數字的字母也強行識別出來了,這簡直說不過去了。
最后我們看看更改后的效果:
cool,非常的棒,快去試試吧!
對于數字又強差人意了,所以說它這個本身還是存在一點的問題。我覺得影響不大,你覺得不舒服,可以換張圖試試。
4.image_to_data()配置講解
oem講解
OEM _ TESSERACТ_ ONLY ? ? ?只以最快的速度運行Tesseract
OEM _ CUBE _ ONLY ? ? ? ?僅運行多維數據集-精度更高,但速度更慢
OEM _ TESSERACT _ CUBE _ cOMBINED ? ? ? ? 同時運行并組合結果-最佳精度
OEM _ DEFAULT ? ? 在調用init_*0時指定此模式,以指示應根據特定于語言的配置中的變量自動推斷上述任何模式。命令行配置,或者如果沒有在上面任何一項中指定,則應設置為默認的OEM_ TESSERACT_ ONLY。
psm講解
PSM _ OSD _ ONLY ? ? ? ? ?僅用于方向和腳本檢測。
PSM _ AUTO _ OSD ? ? ? ? ? ?帶有方向和腳本檢測的自動頁面分割。(OSD)
PSM _ AUTO _ ONLY ? ? ? ? ? ?自動頁面分割,但沒有OSD或OCR。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PSM _ AUTO ? ? ? ? ? ? ?完全自動頁面分割,但沒有OSD。
PSM _ SINGLE _ COLUMN ? ? ? ? ?假設一列大小可變的文本。
PSM _ SINGLE _ BLOCK _ VERT _ TEXT ? ? ? ? 假設一個統一的垂直對齊文本塊。
PSM _ SINGLE _ BLOCK ? ? ? ? ?假設一個統一的文本塊(默認值)
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)
進行網絡攝像頭的實時文字測試。
6.總結與評價
我是首次使用Tesseract,體驗感很不好,這是我在b站的評論中看到的:
說實話,我還沒有學到用算法的地步,學學了解一下就好了,反正我是準備項目實戰的中后期去學習深度學習,以及其他的算法學習,這方面我不好說,但它的精度的確是不達標,你們也看到了,居然把文字也識別成了數字。而且開啟攝像頭識別的也不是很好,識別不完全or識別錯誤。
原文鏈接:https://blog.csdn.net/m0_62919535/article/details/126589521
相關推薦
- 2022-01-31 pytorch:tensor與numpy轉換 & .cpu.numpy()和.numpy()
- 2022-03-16 Linux下安裝軟件包報依賴等相關問題的解決方法_Linux
- 2022-06-27 Golang編程并發工具庫MapReduce使用實踐_Golang
- 2022-11-20 解析在Tomcat中啟用虛擬線程特性_Tomcat
- 2022-10-14 TorchServe部署yolov5項目(Docker篇)
- 2022-10-31 Python實現將DNA序列存儲為tfr文件并讀取流程介紹_python
- 2022-05-15 C++11:搞清楚萬能引用和右值引用
- 2022-08-17 Win2008系統搭建DHCP服務器_win服務器
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支