Hướng dẫn extract text from noisy image python - trích xuất văn bản từ python hình ảnh ồn ào

Tôi có một hình ảnh thực sự ồn ào mà tôi phải thực hiện OCR trên. Đoạn trích đính kèm là một phần của hình ảnh lớn hơn. Làm thế nào tôi có thể xử lý trước hình ảnh này theo cách tối ưu nhất?

Tôi đã thử xử lý trước hình ảnh bằng cách sử dụng Binarization OTSU, làm mịn hình ảnh bằng các bộ lọc khác nhau và sự xói mòn xói mòn. Tôi cũng đã sử dụng ConnectionComponentWithStats để loại bỏ nhiễu trong hình ảnh. Nhưng không ai trong số này giúp xử lý văn bản bị nhòe

Chỉnh sửa - Văn bản này cần được xử lý trước để thực hiện OCR

img = cv2.imread[file,0]
gaus = cv2.GaussianBlur[img,[5,5],0]

_, blackAndWhite = cv2.threshold[gaus, 127, 255, cv2.THRESH_BINARY_INV]

nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats[blackAndWhite, None, None, None, 8, cv2.CV_32S]
sizes = stats[1:, -1] 
img2 = np.zeros[[labels.shape], np.uint8]

for i in range[0, nlabels - 1]:
    if sizes[i] >= 50:  
        img2[labels == i + 1] = 255

res = cv2.bitwise_not[img2]

[thresh, img_bin] = cv2.threshold[img, 128, 255,cv2.THRESH_BINARY|     cv2.THRESH_OTSU]

img_bin = 255-img_bin 

kernel_length = np.array[img].shape[1]//80
 
verticle_kernel = cv2.getStructuringElement[cv2.MORPH_RECT, [1, kernel_length]]

hori_kernel = cv2.getStructuringElement[cv2.MORPH_RECT, [kernel_length, 1]]

kernel = cv2.getStructuringElement[cv2.MORPH_RECT, [3, 3]]

img_temp1 = cv2.erode[img_bin, verticle_kernel, iterations=3]
verticle_lines_img = cv2.dilate[img_temp1, verticle_kernel, iterations=3]

img_temp2 = cv2.erode[img_bin, hori_kernel, iterations=3]
horizontal_lines_img = cv2.dilate[img_temp2, hori_kernel, iterations=3]

alpha = 0.5
beta = 1.0 - alpha

img_final_bin = cv2.addWeighted[verticle_lines_img, alpha, horizontal_lines_img, beta, 0.0]

img_final_bin = cv2.erode[~img_final_bin, kernel, iterations=2]
[thresh, img_final_bin] = cv2.threshold[img_final_bin, 128,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU]

Tôi đang làm việc về trích xuất văn bản từ hình ảnh bằng Tesseract. Tôi đã áp dụng việc đánh bóng và ngưỡng như các bước tiền xử lý. Đây là hình ảnh đầu vào của tôi.

Sau đây là việc thực hiện của tôi trên Python

gray = cv2.cvtColor[image, cv2.COLOR_BGR2GRAY]
ret, thresh = cv2.threshold[gray, 5, 255, cv2.THRESH_TOZERO]
conf = '-l eng --oem 3 --psm 11'
data_str = image_to_data[image, config=conf]

Vấn đề chính là nó không thể trích xuất tất cả các văn bản từ hình ảnh vì tiếng ồn trong hình ảnh. Đầu ra của Image_TO_DATA [] là theo sau.

Làm thế nào để tiền xử lý loại hình ảnh này để trích xuất hoàn toàn văn bản từ hình ảnh. Cảm ơn bạn!

Tạo tập lệnh Python Tesseract Tạo một thư mục dự án và thêm một tệp Main.py mới bên trong thư mục đó. Khi ứng dụng cung cấp quyền truy cập vào các tệp PDF, nội dung của nó sẽ được trích xuất dưới dạng hình ảnh. Những hình ảnh này sau đó sẽ được xử lý để trích xuất văn bản. this post, I will show you how to extract text from an image using OpenCV and OCR. This process is simply called “Text Recognition” or “Text Detection”. So basically, as you can understand from the title, we will build a simple python program that will extract text for us. After the extraction, the program will also export the result into a text document. This way, we can keep a record of our results. We are going to see two methods which are Tesseract and EasyOCR.

Làm thế nào để Python phát hiện tiếng ồn trong một hình ảnh?

1 câu trả lời.

Chuyển đổi hình ảnh thành không gian màu HSV bằng cách sử dụng, xem CV2. ....

Tính biểu đồ của kênh bão hòa, xem CV2. ....

Tính tỷ lệ phần trăm của pixel với độ bão hòa tối thiểu, giả sử ít nhất 0,05 ..

Làm cách nào để giảm nhiễu hình ảnh trong Python?

Bộ lọc trung bình được sử dụng để làm mờ một hình ảnh để loại bỏ nhiễu. Nó liên quan đến việc xác định giá trị trung bình của các giá trị pixel trong hạt n x n. Cường độ pixel của phần tử trung tâm sau đó được thay thế bằng giá trị trung bình. Điều này giúp loại bỏ một số nhiễu trong hình ảnh và làm mịn các cạnh của hình ảnh.

Cài đặt Tesseract

Bạn có thể cài đặt trình bao bọc Python cho Tesseract sau đó bằng PIP. Sau khi cài đặt Tesseract không quên chỉnh sửa biến môi trường đường dẫn của người Viking và thêm Tesseract

$ pip cài đặt pytesseract

OCR với Tesseract và OpenCV

Nhập CV2Import pytesseract# tesseract pathpytesseract.pytesseract.tesseract_cmd = r'c: \ files program \ tesseract-acr \ tesseract.exe '# read ImageImg = OEM 1 - PSM 3 ']# pytessercattext = pytesseract.image_to_string [img, config = config] in [văn bản]
import pytesseract
#Tesseract path
pytesseract.pytesseract.tesseract_cmd = r’C:\Program Files\Tesseract-OCR\tesseract.exe’
# read image
img = cv2.imread[‘demo.jpg’]
# configurations
config = [‘-l eng — oem 1 — psm 3’]
# pytessercat
text = pytesseract.image_to_string[img, config=config]
print[text]

Chương trình trên sẽ hiển thị kết quả của hình ảnh và chúng tôi đã sử dụng Tesseract mà không cần xử lý trước nên độ chính xác sẽ rất thấp. Chúng ta phải làm tiền xử lý sau đó áp dụng tesseract.

Tiền xử lý và phát hiện

Để tránh tất cả các cách mà độ chính xác đầu ra của bạn có thể giảm, bạn cần đảm bảo hình ảnh được xử lý trước một cách thích hợp. Điều này bao gồm tái định cư, nhị phân, loại bỏ tiếng ồn, v.v.

Nhập cv2import pytesseractpytesseract.pytesseract.tesseract_cmd = r'c: \ files chương trình \ tesseract-acr \ tesseract.exe ' .Color_BGR2Gray] văn bản chính xác và điều này sẽ cung cấp không chính xác #ResultThresh = cv2.threshold [nhiễu, 0, 255, cv2.thresh_binary | cv2.thresh_otsu] [1] #configurationconfig = ['-l eng-oem 3-psm 3'] pytesseract.image_to_string [ngưỡng, config = config] in [văn bản]
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r’C:\Program Files\Tesseract-OCR\tesseract.exe’
#read image
img = cv2.imread[‘happy.jpg’]
# get grayscale image
gray = cv2.cvtColor[img, cv2.COLOR_BGR2GRAY]
#noise removal
noise=cv2.medianBlur[gray,3]
# thresholding# converting it to binary image by Thresholding
# this step is require if you have colored image because if you skip this part
# then tesseract won’t able to detect text correctly and this will give incorrect #result
thresh = cv2.threshold[noise, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU][1]
#Configuration
config = [‘-l eng — oem 3 — psm 3’]
# pytessercat
text = pytesseract.image_to_string[thresh,config=config]
print[text]

Kết quả

Hạnh phúc đang vui mừng cuộc sống nhỏ.
enjoying the little things
in life.

Phương pháp - 2 [sử dụng Easyoc]

Easyoc

Easyoc được xây dựng với thư viện học tập sâu Python và Pytorch, có GPU có thể tăng tốc toàn bộ quá trình phát hiện. Phần phát hiện là sử dụng thuật toán thủ công và mô hình nhận dạng là CNN. Nó bao gồm 3 thành phần chính, trích xuất tính năng [chúng tôi hiện đang sử dụng resnet], ghi nhãn trình tự [LSTM] và giải mã [CTC]. Easyoc không có nhiều phụ thuộc phần mềm, nó có thể được sử dụng trực tiếp với API của nó.

Cài đặt Easyoc

Easyoc là một thư viện Pytorch, vì vậy trước khi cài đặt Easyoc phải cài đặt Pytorch và sau đó cài đặt Easyoc bằng CMD sau.

$ pip cài đặt dễ dàng

Tiền xử lý và phát hiện

Để tránh tất cả các cách mà độ chính xác đầu ra của bạn có thể giảm, bạn cần đảm bảo hình ảnh được xử lý trước một cách thích hợp. Điều này bao gồm tái định cư, nhị phân, loại bỏ tiếng ồn, v.v.
import easyocr
img = cv2.imread[‘happy.jpg’]
gray = cv2.cvtColor[img, cv2.COLOR_BGR2GRAY]
noise=cv2.medianBlur[gray,3]
thresh = cv2.threshold[noise, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU][1]
reader = easyocr.Reader[[‘en’]]
result = reader.readtext[img,paragraph=”False”]
df=pd.DataFrame[result]
print[df[1]]

Kết quả

Hạnh phúc đang vui mừng cuộc sống nhỏ.

Phương pháp - 2 [sử dụng Easyoc]

Easyocesseract and EasyOCR both are perfect for scanning clean documents and comes with high accuracy. I would say that both are good go-to tools if your task is scanning books, pdf, and printed text on a clean white background. Particularly Tesseract works well for scanned print documents, whereas EasyOCR works well for extracting texts in general scenes / random pictures.

Làm cách nào để sử dụng tesseract để đọc văn bản từ một hình ảnh?

Tạo tập lệnh Python Tesseract Tạo một thư mục dự án và thêm một tệp Main.py mới bên trong thư mục đó.Khi ứng dụng cung cấp quyền truy cập vào các tệp PDF, nội dung của nó sẽ được trích xuất dưới dạng hình ảnh.Những hình ảnh này sau đó sẽ được xử lý để trích xuất văn bản. Create a project folder and add a new main.py file inside that folder. Once the application gives access to PDF files, its content will be extracted in the form of images. These images will then be processed to extract the text.

Làm thế nào để Python phát hiện tiếng ồn trong một hình ảnh?

1 câu trả lời..
Chuyển đổi hình ảnh thành không gian màu HSV bằng cách sử dụng, xem CV2.....
Tính biểu đồ của kênh bão hòa, xem CV2.....
Tính tỷ lệ phần trăm của pixel với độ bão hòa tối thiểu, giả sử ít nhất 0,05 ..

Làm cách nào để giảm nhiễu hình ảnh trong Python?

Bộ lọc trung bình được sử dụng để làm mờ một hình ảnh để loại bỏ nhiễu.Nó liên quan đến việc xác định giá trị trung bình của các giá trị pixel trong hạt n x n.Cường độ pixel của phần tử trung tâm sau đó được thay thế bằng giá trị trung bình.Điều này giúp loại bỏ một số nhiễu trong hình ảnh và làm mịn các cạnh của hình ảnh.. It involves determining the mean of the pixel values within a n x n kernel. The pixel intensity of the center element is then replaced by the mean. This eliminates some of the noise in the image and smooths the edges of the image.

Bài Viết Liên Quan

Chủ Đề