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:
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.
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:
- Ngưỡng đơn giản
- Ngưỡng thích nghi
- 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:
Python3
import
cv2
import
pytesseract
pytesseract.pytesseract.tesseract_cmd
=
'System_path_to_tesseract.exe'
img
=
pip install opencv-python pip install pytesseract1
pip install opencv-python pip install pytesseract2
pip install opencv-python pip install pytesseract3
pip install opencv-python pip install pytesseract4
=
pip install opencv-python pip install pytesseract6
pip install opencv-python pip install pytesseract7
=
pip install opencv-python pip install pytesseract9
import
0import
1import
223import
4=
import
6import
7import
1import
7cv2
0
cv2
1=
cv2
3=
cv2
5
pip install opencv-python pip install pytesseract3
cv2
7=
cv2
9
import
0import
1
import
2=
import
4
import
5 =
import
7import
8import
9import
1pytesseract
1
pip install opencv-python pip install pytesseract3
import
5pytesseract
4
import
5pytesseract
6
pytesseract
7 pytesseract
8pytesseract
9 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
1import
5 =
import
7import
8import
9import
1img
6
pip install opencv-python pip install pytesseract3
pytesseract.pytesseract.tesseract_cmd
1img
9=
pip install opencv-python pip install pytesseract01
pytesseract.pytesseract.tesseract_cmd
1import
5
pip install opencv-python pip install pytesseract04
pytesseract.pytesseract.tesseract_cmd
1import
5
pip install opencv-python pip install pytesseract07
pip install opencv-python pip install pytesseract08
pip install opencv-python pip install pytesseract3
pytesseract.pytesseract.tesseract_cmd
1import
5
pip install opencv-python pip install pytesseract12
Đầu ra: & nbsp; tệp văn bản cuối cùng: & nbsp; & nbsp;
Final text file:
Các khối văn bản được phát hiện: & nbsp; & nbsp;