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
=
import
0import
1import
2
import
3=
import
5
import
6=
import
8import
9cv2
0cv2
1cv2
2
cv2
3=
cv2
5cv2
6cv2
0cv2
6cv2
9
import
0____6 import
2=
import
4import
2
import
6=
import
8
import
9pytesseract
0
pytesseract
1=
pytesseract
3
pytesseract
4 =
pytesseract
6pytesseract
7pytesseract
8cv2
0____505012
pytesseract
4pytesseract.pytesseract.tesseract_cmd
3
pytesseract
4pytesseract.pytesseract.tesseract_cmd
5
pytesseract.pytesseract.tesseract_cmd
6 pytesseract.pytesseract.tesseract_cmd
7pytesseract.pytesseract.tesseract_cmd
8 pytesseract.pytesseract.tesseract_cmd
9
=
0=
1=
=
3
=
0=
5=
=
7=
8 =
9=
8
=
0img
1=
img
3=
8 img
5=
8
=
0pytesseract
4 =
pytesseract
6pytesseract
7pytesseract
8cv2
0__95
=
0=
8=
import
00
=
0pytesseract
4import
03
=
0pytesseract
4import
06import
07import
2
=
0pytesseract
4import
11
Đầ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;