Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh

Tôi quan tâm đến việc phát hiện các dòng (mà tôi quản lý để tìm ra bằng cách sử dụng Hough Transform) và văn bản ở trên nó.

Hình ảnh thử nghiệm của tôi dưới đây:

Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh

Mã tôi đã viết dưới đây. (Tôi đã chỉnh sửa để tôi có thể lặp qua tọa độ của từng dòng)

import cv2
import numpy as np

img=cv2.imread('test3.jpg')
#img=cv2.resize(img,(500,500))
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgEdges=cv2.Canny(imgGray,100,250)
imgLines= cv2.HoughLinesP(imgEdges,1,np.pi/180,230, minLineLength = 700, maxLineGap = 100)
imgLinesList= list(imgLines)

a,b,c=imgLines.shape
line_coords_list = []
for i in range(a):
    line_coords_list.append([(int(imgLines[i][0][0]), int(imgLines[i][0][1])), (int(imgLines[i][0][2]), int(imgLines[i][0][3]))])

print(line_coords_list)#[[(85, 523), (964, 523)], [(85, 115), (964, 115)], [(85, 360), (964, 360)], [(85, 441), (964, 441)], [(85, 278), (964, 278)], [(85, 197), (964, 197)]]

roi= img[int(line_coords_list[0][0][1]): int(line_coords_list[0][1][1]), int(line_coords_list[0][0][0]) : int(line_coords_list[0][1][0])]
print(roi) # why does this print an empty list?
cv2.imshow('Roi NEW',roi) 




Bây giờ tôi chỉ không biết làm thế nào để phát hiện khu vực quan tâm trên những dòng đó. Có thể nói cắt mỗi dòng và có hình ảnh nói ROI_1, ROI_2, ROI_N trong đó mỗi ROI là văn bản trên dòng đầu tiên, văn bản trên dòng thứ hai, v.v.?

Tôi muốn đầu ra là một cái gì đó như thế này.

Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh

Vikas Kumar Ojha

Ngày 26 tháng 5 năm 2021

7 phút đọc

Ảnh của Annie Spratt trên unplash

OCR là một trong những vấn đề quan trọng và phổ biến nhất mà tầm nhìn máy tính đã cố gắng giải quyết trong một thời gian dài. Một lượng lớn nghiên cứu đã được thực hiện trong lĩnh vực OCR do kết quả là một số lượng lớn phương pháp đã được phát hiện. Một số trong số đó là phương pháp tiếp cận thị giác máy tính cổ điển trong khi những người khác đang học sâu. Nói chung, học sâu đánh bại các kỹ thuật cổ điển

OpenCV (Tầm nhìn máy tính nguồn mở) là một thư viện các chức năng lập trình chủ yếu nhằm vào tầm nhìn máy tính thời gian thực. OpenCV trong Python giúp xử lý một hình ảnh và áp dụng các chức năng khác nhau như thay đổi kích thước hình ảnh, thao tác pixel, phát hiện đối tượng, v.v. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng các đường viền để phát hiện văn bản trong một hình ảnh và lưu nó vào tệp văn bản. Cài đặt bắt buộc: & NBSP; (Open source computer vision) is a library of programming functions mainly aimed at real-time computer vision. OpenCV in python helps to process an image and apply various functions like resizing image, pixel manipulations, object detection, etc. In this article, we will learn how to use contours to detect the text in an image and save it to a text file.
Required Installations:
 

pip install opencv-python
pip install pytesseract

Gói OpenCV được sử dụng để đọc hình ảnh và thực hiện các kỹ thuật xử lý hình ảnh nhất định. Python-Tesseract là một trình bao bọc cho động cơ Tesseract-acr của Google, được sử dụng để nhận dạng văn bản từ hình ảnh. Tải tệp thực thi Tesseract từ liên kết này.Approach: & nbsp; . & nbsp;
Download the tesseract executable file from this link.
Approach: 
After the necessary imports, a sample image is read using the imread function of opencv.
 

Áp dụng xử lý hình ảnh cho hình ảnh:

Không gian màu của hình ảnh được thay đổi đầu tiên và được lưu trữ trong một biến. Để chuyển đổi màu, chúng tôi sử dụng hàm CV2.cvtcolor (input_image, cờ). Cờ tham số thứ hai xác định loại chuyển đổi. Chúng ta có thể chọn trong số CV2.color_bgr2gray và CV2.color_bgr2hsv. CV2.color_bgr2gray giúp chúng tôi chuyển đổi hình ảnh RGB thành hình ảnh tỷ lệ màu xám và CV2.color_bgr2HSV được sử dụng để chuyển đổi hình ảnh RGB thành hình ảnh không gian màu HSV (Hute, Saturation, Giá trị). Ở đây, chúng tôi sử dụng CV2.color_bgr2gray. Một ngưỡng được áp dụng cho hình ảnh được chuyển đổi bằng hàm cv2.threshold. & Nbsp; Có 3 loại ngưỡng: & nbsp; & nbsp;cv2.COLOR_BGR2GRAY and cv2.COLOR_BGR2HSV. cv2.COLOR_BGR2GRAY helps us to convert an RGB image to gray scale image and cv2.COLOR_BGR2HSV is used to convert an RGB image to HSV (Hue, Saturation, Value) color-space image. Here, we use cv2.COLOR_BGR2GRAY. A threshold is applied to the converted image using cv2.threshold function. 
There are 3 types of thresholding: 
 

  1. Ngưỡng đơn giản
  2. Ngưỡng thích nghi
  3. Binarization Otsu

Để biết thêm thông tin về ngưỡng, tham khảo các kỹ thuật ngưỡng bằng openCV.cv2.threshold () có 4 tham số, tham số đầu tiên là hình ảnh thay đổi không gian màu, theo sau là giá trị ngưỡng tối thiểu, giá trị ngưỡng tối đa và loại ngưỡng cần được áp dụng. & nbsp;
cv2.threshold() has 4 parameters, first parameter being the color-space changed image, followed by the minimum threshold value, the maximum threshold value and the type of thresholding that needs to be applied.
 

Để có được một cấu trúc hình chữ nhật:

CV2.GetStructuringEuity () được sử dụng để xác định một phần tử cấu trúc như hình elip, hình tròn, hình chữ nhật, v.v. Ở đây, chúng tôi sử dụng phần tử cấu trúc hình chữ nhật (CV2.Morph_Rect). CV2.GetStructuringEuity có thêm kích thước của tham số kernel. Một hạt nhân lớn hơn sẽ làm cho nhóm các khối văn bản lớn hơn với nhau. Sau khi chọn hạt nhân chính xác, sự giãn nở được áp dụng cho hình ảnh có chức năng CV2.dilate. Sự giãn nở làm cho các nhóm văn bản được phát hiện chính xác hơn vì nó giãn ra (mở rộng) một khối văn bản. & Nbsp;size of the kernel parameter. A bigger kernel would make group larger blocks of texts together. After choosing the correct kernel, dilation is applied to the image with cv2.dilate function. Dilation makes the groups of text to be detected more accurately since it dilates (expands) a text block.
 

Tìm đường viền:

CV2.FindContours () được sử dụng để tìm các đường viền trong hình ảnh bị giãn. Có ba đối số trong CV.FindContours (): hình ảnh nguồn, chế độ truy xuất đường viền và phương thức xấp xỉ đường viền. & NBSP; Hàm này trả về các đường viền và phân cấp. Đường viền là một danh sách Python của tất cả các đường viền trong hình ảnh. Mỗi đường viền là một mảng numpy của tọa độ (x, y) của các điểm ranh giới trong đối tượng. Các đường viền thường được sử dụng để tìm một vật màu trắng từ nền đen. Tất cả các kỹ thuật xử lý hình ảnh trên được áp dụng để các đường viền có thể phát hiện các cạnh ranh giới của các khối văn bản của hình ảnh. Một tệp văn bản được mở trong chế độ ghi và xóa. Tệp văn bản này được mở để lưu văn bản khỏi đầu ra của OCR. & NBSP;
This function returns contours and hierarchy. Contours is a python list of all the contours in the image. Each contour is a Numpy array of (x, y) coordinates of boundary points in the object. Contours are typically used to find a white object from a black background. All the above image processing techniques are applied so that the Contours can detect the boundary edges of the blocks of text of the image. A text file is opened in write mode and flushed. This text file is opened to save the text from the output of the OCR.
 

Áp dụng OCR:

Vòng lặp qua từng đường viền và lấy tọa độ x và y và chiều rộng và chiều cao bằng cách sử dụng hàm cv2.boundrect (). Sau đó vẽ một hình chữ nhật trong hình ảnh bằng hàm cv2.rectangle () với sự trợ giúp của tọa độ X và Y thu được và chiều rộng và chiều cao. Có 5 tham số trong CV2.Rectangle (), tham số đầu tiên chỉ định hình ảnh đầu vào, theo sau là tọa độ x và y (tọa độ bắt đầu của hình chữ nhật), tọa độ kết thúc của hình chữ nhật là (x+w, y+ h), màu biên cho hình chữ nhật trong giá trị RGB và kích thước của ranh giới. Bây giờ cắt vùng hình chữ nhật và sau đó chuyển nó đến tesseract để trích xuất văn bản từ hình ảnh. Sau đó, chúng tôi mở tệp văn bản được tạo ở chế độ nối để nối văn bản thu được và đóng hình ảnh mẫu được sử dụng cho mã: & nbsp; & nbsp;
Sample image used for the code: 
 

Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh

Python3

import cv2

import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'System_path_to_tesseract.exe'

img =

pip install opencv-python
pip install pytesseract
1
pip install opencv-python
pip install pytesseract
2
pip install opencv-python
pip install pytesseract
3

pip install opencv-python
pip install pytesseract
4=
pip install opencv-python
pip install pytesseract
6

pip install opencv-python
pip install pytesseract
7=
pip install opencv-python
pip install pytesseract
9import0import1import223

import4= import6import7import1import7cv20

cv21= cv23= cv25

pip install opencv-python
pip install pytesseract
3

cv27= cv29

import0import1

import2= import4

import5 = import7import8import9import1pytesseract1

pip install opencv-python
pip install pytesseract
3

import5pytesseract4

import5pytesseract6

pytesseract7 pytesseract8pytesseract9 pytesseract.pytesseract.tesseract_cmd 0

pytesseract.pytesseract.tesseract_cmd 1pytesseract.pytesseract.tesseract_cmd 2= pytesseract.pytesseract.tesseract_cmd 4

pytesseract.pytesseract.tesseract_cmd 1pytesseract.pytesseract.tesseract_cmd 6=

pytesseract.pytesseract.tesseract_cmd 1'System_path_to_tesseract.exe'2= 'System_path_to_tesseract.exe'4pytesseract.pytesseract.tesseract_cmd 9 'System_path_to_tesseract.exe'6__

pytesseract.pytesseract.tesseract_cmd 1import5 = import7import8import9import1img 6

pip install opencv-python
pip install pytesseract
3

pytesseract.pytesseract.tesseract_cmd 1img 9=

pip install opencv-python
pip install pytesseract
01

pytesseract.pytesseract.tesseract_cmd 1import5

pip install opencv-python
pip install pytesseract
04

pytesseract.pytesseract.tesseract_cmd 1import5

pip install opencv-python
pip install pytesseract
07
pip install opencv-python
pip install pytesseract
08
pip install opencv-python
pip install pytesseract
3

pytesseract.pytesseract.tesseract_cmd 1import5

pip install opencv-python
pip install pytesseract
12

Đầu ra: & nbsp; tệp văn bản cuối cùng: & nbsp; & nbsp; 
Final text file: 
 

Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh

Các khối văn bản được phát hiện: & nbsp; & nbsp;
 

Hướng dẫn detect text lines in image python - phát hiện các dòng văn bản trong python hình ảnh


Chúng ta có thể trích xuất văn bản từ hình ảnh bằng Python không?

Tesseract là một công cụ OCR (Nhận dạng ký tự quang học) nguồn mở cho phép trích xuất văn bản từ hình ảnh.Để sử dụng nó trong Python, chúng tôi cũng sẽ cần thư viện PyTesseract, một trình bao bọc cho động cơ Tesseract.. In order to use it in Python, we will also need the pytesseract library which is a wrapper for Tesseract engine.

Làm thế nào tôi có thể xác định các chữ cái trong một bức tranh?

Nhận dạng ký tự quang học (OCR)..
Text_Detection phát hiện và trích xuất văn bản từ bất kỳ hình ảnh nào.Ví dụ, một bức ảnh có thể chứa dấu hiệu đường phố hoặc biển báo giao thông.....
Document_text_detection cũng trích xuất văn bản từ một hình ảnh, nhưng phản hồi được tối ưu hóa cho văn bản và tài liệu dày đặc ..

Thuật toán nào được sử dụng để phát hiện văn bản trong hình ảnh?

Nhận dạng ký tự quang học (OCR) được sử dụng để phân tích văn bản trong hình ảnh. is used to analyze text in images.

Thuật toán nào được sử dụng để phát hiện văn bản trong hình ảnh opencv?

Gói OpenCV được sử dụng để đọc hình ảnh và thực hiện các kỹ thuật xử lý hình ảnh nhất định.Python-Tesseract là một trình bao bọc cho động cơ Tesseract-acr của Google, được sử dụng để nhận biết văn bản từ hình ảnh.Python-tesseract is a wrapper for Google's Tesseract-OCR Engine which is used to recognize text from images.