我有我想要檢測文本的影像,我正在使用 easyocr 來檢測文本。OCR 給出輸出邊界框值和概率,如輸出影像所示。我想洗掉檢測到的任何文本的小于 0.4 的概率 我該如何更改?
圖片1

圖 2

結果元素給出了第一個文本和第二個文本'AA'的輸出概率,如圖所示。我想洗掉檢測到的最低概率文本。
image1 的輸出

image2 的輸出

要求
pip 安裝 pytesseract
pip安裝easyocr
使用 python main.py -i image1.jpg 運行代碼
# import the necessary packages
from pytesseract import Output
import pytesseract
import argparse
import cv2
from matplotlib import pyplot as plt
import numpy as np
import os
import easyocr
from PIL import ImageDraw, Image
def remove_lines(image):
result = image.copy()
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV cv2.THRESH_OTSU)[1]
# Remove horizontal lines
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40,1))
remove_horizontal = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
cnts = cv2.findContours(remove_horizontal, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(result, [c], -1, (255,255,255), 5)
# Remove vertical lines
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,40))
remove_vertical = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, vertical_kernel, iterations=2)
cnts = cv2.findContours(remove_vertical, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(result, [c], -1, (255,255,255), 5)
plt.imshow(result)
plt.show()
return result
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
help="path to input image to be OCR'd")
ap.add_argument("-c", "--min-conf", type=int, default=0,
help="mininum confidence value to filter weak text detection")
args = vars(ap.parse_args())
reader = easyocr.Reader(['ch_sim','en']) # need to run only once to load model into memory
# load the input image, convert it from BGR to RGB channel ordering,
# and use Tesseract to localize each area of text in the input image
image = cv2.imread(args["image"])
# image = remove_lines(image)
results = reader.readtext(image)
print(results)
uj5u.com熱心網友回復:
results=[([[5, 0],[233, 0],[233, 15],[5, 15]],' ? ]TC T III3 U?CU 3', 0.011015821004953916),
([[241, 0], [390, 0], [390, 15], [241, 15] ] , '?A[ [ C 0l?', 0.0023567583563770737),
([[2, 16], [46, 16], [46, 42], [2, 42]], 'MM', 0.9965182566504686),
([[98, 16], [140, 16], [140, 46], [98, 46]], 'D', 0.9973547096148511),
([[182, 16], [220, 16],[220, 44], [182, 44]], 'Y', 0.9971791823074896),
([[24, 46], [62, 46], [62, 74], [24, 74]], '62', 0.9999828941291119),
([[94, 46], [130, 46], [130, 74], [94, 74]], '26', 0.9997197349619524),
([[180, 46], [242, 46], [242, 74], [180, 74]],'1970', 0.999931275844574)]
low_precision = []
for text in results:
if text[2]<0.5: # precision here
low_precision.append(text)
for i in low_precision:
results.remove(i) # remove low precision
print(results)
結果:
[([[2, 16], [46, 16], [46, 42], [2, 42]], 'MM', 0.9965182566504686),
([[98, 16], [140, 16], [140, 46], [98, 46]], 'D', 0.9973547096148511),
([[182, 16], [220, 16], [220, 44], [182, 44]], 'Y', 0.9971791823074896),
([[24, 46], [62, 46], [62, 74], [24, 74]], '62', 0.9999828941291119),
([[94, 46], [130, 46], [130, 74], [94, 74]], '26', 0.9997197349619524),
([[180, 46], [242, 46], [242, 74], [180, 74]], '1970', 0.999931275844574)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314775.html
