Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Trong bài đăng trên blog này, chúng tôi sẽ cố gắng giải thích công nghệ đằng sau động cơ Tesseract được sử dụng nhiều nhất, được nâng cấp với kiến ​​thức mới nhất được nghiên cứu về nhận dạng nhân vật quang học.

Bài viết này cũng sẽ phục vụ như một hướng dẫn/ hướng dẫn hướng dẫn về cách triển khai PDF OCR trong Python bằng công cụ Tesseract. Chúng tôi sẽ đi qua các mô -đun sau:

  • Tesseract OCR Các tính năng
  • Tiền xử lý cho OCR bằng OpenCV
  • Chạy Tesseract với CLI và Python
  • Hạn chế của động cơ Tesseract

Giới thiệu

OCR = Nhận dạng ký tự quang học. Nói cách khác, các hệ thống OCR biến đổi hình ảnh hai chiều của văn bản, có thể chứa văn bản in hoặc viết tay từ biểu diễn hình ảnh của nó thành văn bản có thể đọc được bằng máy. OCR như một quá trình thường bao gồm một số quy trình phụ để thực hiện chính xác nhất có thể. Các quy trình phụ là:

  • Tiền xử lý hình ảnh
  • Bản địa hóa văn bản
  • Phân đoạn nhân vật
  • Nhận dạng nhân vật
  • Xử lý bài

Các quy trình phụ trong danh sách trên tất nhiên có thể khác nhau, nhưng đây là những bước gần như cần thiết để tiếp cận nhận dạng ký tự tự động. Trong phần mềm OCR, mục đích chính của nó là để xác định và nắm bắt tất cả các từ duy nhất bằng cách sử dụng các ngôn ngữ khác nhau từ các ký tự văn bản.

Trong gần hai thập kỷ, các hệ thống nhận dạng ký tự quang đã được sử dụng rộng rãi để cung cấp nhập văn bản tự động vào các hệ thống máy tính. Tuy nhiên, trong tất cả thời gian này, các hệ thống OCR trực tuyến thông thường (như OCR Zonal) chưa bao giờ vượt qua việc họ không thể đọc được nhiều hơn một số loại phông chữ và định dạng trang. Loại cách nhau theo tỷ lệ (bao gồm hầu như tất cả các bản sao kiểu chữ), phông chữ máy in laser và thậm chí nhiều phông chữ máy đánh chữ không cân xứng, vẫn nằm ngoài tầm với của các hệ thống này. Và kết quả là, OCR thông thường chưa bao giờ đạt được nhiều hơn tác động cận biên đến tổng số tài liệu cần chuyển đổi thành dạng kỹ thuật số.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
Quy trình nhận dạng nhân vật quang học (lịch sự)

Động cơ OCR thế hệ tiếp theo giải quyết những vấn đề này được đề cập ở trên thực sự tốt bằng cách sử dụng nghiên cứu mới nhất trong lĩnh vực học tập sâu. Bằng cách tận dụng sự kết hợp của các mô hình sâu và các bộ dữ liệu khổng lồ có sẵn công khai, các mô hình đạt được độ chính xác tiên tiến đối với các nhiệm vụ nhất định. Ngày nay, cũng có thể tạo ra dữ liệu tổng hợp với các phông chữ khác nhau bằng cách sử dụng các mạng đối nghịch thế hệ và một vài phương pháp tiếp cận khác.

Nhận dạng ký tự quang vẫn là một vấn đề đầy thách thức khi văn bản xảy ra trong các môi trường không bị ràng buộc, như các cảnh tự nhiên, do biến dạng hình học, nền phức tạp và các phông chữ đa dạng. Công nghệ vẫn nắm giữ một tiềm năng to lớn do các trường hợp sử dụng khác nhau của OCR dựa trên học tập sâu

  • xây dựng độc giả biển số
  • Số hóa hóa đơn
  • Số hóa menu
  • Số hóa thẻ ID

Có một vấn đề OCR trong tâm trí? Bạn muốn giảm chi phí nhập dữ liệu của tổ chức? Đi tới các nanonet và xây dựng các mô hình OCR để trích xuất văn bản từ hình ảnh hoặc trích xuất dữ liệu từ PDF với PDF OCR dựa trên AI!


Có rất nhiều phần mềm nhận dạng nhân vật quang có sẵn. Tôi không tìm thấy bất kỳ so sánh chất lượng nào giữa họ, nhưng tôi sẽ viết về một số trong số họ dường như là người thân thiện nhất với nhà phát triển.

Tesseract - Một động cơ OCR nguồn mở đã trở nên phổ biến trong các nhà phát triển OCR. Mặc dù đôi khi có thể gây đau đớn khi thực hiện và sửa đổi, nhưng có quá nhiều lựa chọn thay thế OCR miễn phí và mạnh mẽ trên thị trường trong thời gian dài nhất. Tesseract bắt đầu như một tiến sĩ. Dự án nghiên cứu tại HP Labs, Bristol. Nó đã trở nên phổ biến và được phát triển bởi HP từ năm 1984 đến 1994. Năm 2005, HP đã phát hành Tesseract dưới dạng phần mềm nguồn mở. Kể từ năm 2006, nó được phát triển bởi Google.Since 2006 it is developed by Google.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
So sánh xu hướng của Google cho các công cụ OCR nguồn mở khác nhau

OCROPUS - OCROPUS là một hệ thống OCR nguồn mở cho phép đánh giá và sử dụng lại các thành phần OCR dễ dàng của cả các nhà nghiên cứu và công ty. Một bộ sưu tập các chương trình phân tích tài liệu, không phải là một hệ thống OCR chìa khóa quay. Để áp dụng nó cho các tài liệu của bạn, bạn có thể cần phải thực hiện một số tiền xử lý hình ảnh, và cũng có thể đào tạo các mô hình mới. Ngoài các tập lệnh nhận dạng, có một số tập lệnh để chỉnh sửa và chỉnh sửa sự thật trên mặt đất, đo lường tỷ lệ lỗi, xác định các ma trận nhầm lẫn dễ sử dụng và chỉnh sửa.A collection of document analysis programs, not a turn-key OCR system. To apply it to your documents, you may need to do some image preprocessing, and possibly also train new models. In addition to the recognition scripts themselves, there are several scripts for ground truth editing and correction, measuring error rates, determining confusion matrices that are easy to use and edit.


M mắt - Mạng hoạt động tốt nhất trên các tài liệu được in bằng cách sử dụng máy ép tay, bao gồm cả những tài liệu được viết bằng nhiều ngôn ngữ. Nó hoạt động bằng cách sử dụng dòng lệnh. Nó là một hệ thống OCR lịch sử tiên tiến. Các tính năng chính của nó là:It is a state-of-the-art historical OCR system. Its primary features are:

  • Học không được giám sát về các phông chữ không xác định: Chỉ yêu cầu hình ảnh tài liệu và một kho văn bản.
  • Khả năng xử lý các tài liệu ồn ào: Không nhất quán, khoảng cách, căn chỉnh dọc
  • Hỗ trợ cho các tài liệu đa ngôn ngữ, bao gồm cả những tài liệu có chuyển đổi mã cấp độ đáng kể.
  • Học không được giám sát về các mẫu biến thể chính tả bao gồm cách viết cổ xưa và tốc ký của máy in.
  • Đồng thời, sao chép khớp vào cả hai dạng ngoại giao (nghĩa đen) và các dạng chuẩn hóa.

Swiftoc - Tôi cũng sẽ đề cập đến động cơ OCR được viết bằng Swift vì có sự phát triển rất lớn được thực hiện để thúc đẩy việc sử dụng Swift làm ngôn ngữ lập trình phát triển được sử dụng để học sâu. Kiểm tra blog để tìm hiểu thêm tại sao. Swiftoc là một thư viện OCR nhanh và đơn giản, sử dụng các mạng thần kinh để nhận dạng hình ảnh. Swiftoc tuyên bố rằng động cơ của họ vượt trội so với thư viện Tessaract nổi tiếng.SwiftOCR claims that their engine outperforms well known Tessaract library.

Trong bài đăng trên blog này, chúng tôi sẽ tập trung vào Tesseract OCR và tìm hiểu thêm về cách thức hoạt động và cách sử dụng.focus on Tesseract OCR and find out more about how it works and how it is used.


Tesseract OCR

Tesseract là một công cụ nhận dạng văn bản nguồn mở (OCR), có sẵn theo giấy phép Apache 2.0. Nó có thể được sử dụng trực tiếp hoặc (cho các lập trình viên) bằng cách sử dụng API để trích xuất văn bản in từ hình ảnh. Nó hỗ trợ nhiều ngôn ngữ khác nhau. Tesseract không có GUI tích hợp, nhưng có một số có sẵn từ trang 3rdparty. Tesseract tương thích với nhiều ngôn ngữ và khuôn khổ lập trình thông qua các trình bao bọc có thể được tìm thấy ở đây. Nó có thể được sử dụng với phân tích bố cục hiện có để nhận dạng văn bản trong một tài liệu lớn hoặc nó có thể được sử dụng cùng với một máy dò văn bản bên ngoài để nhận ra văn bản từ một hình ảnh của một dòng văn bản.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
Dòng chảy quá trình OCR để xây dựng API với Tesseract từ một bài đăng trên blog

Tesseract 4.00 bao gồm một hệ thống con mạng thần kinh mới được cấu hình dưới dạng trình nhận dạng dòng văn bản. Nó có nguồn gốc từ việc triển khai LSTM dựa trên Python của Ocropus nhưng đã được thiết kế lại cho Tesseract trong C ++. Hệ thống mạng thần kinh trong Tesseract trước ngày TensorFlow nhưng tương thích với nó, vì có một ngôn ngữ mô tả mạng có tên là Ngôn ngữ thông số kỹ thuật biểu đồ biến (VGSL), cũng có sẵn cho TensorFlow.

Để nhận ra một hình ảnh chứa một ký tự duy nhất, chúng tôi thường sử dụng mạng thần kinh tích chập (CNN). Văn bản có độ dài tùy ý là một chuỗi các ký tự và các vấn đề như vậy được giải quyết bằng RNN và LSTM là một dạng RNN phổ biến. Đọc bài viết này để tìm hiểu thêm về LSTM.


Công nghệ - Cách thức hoạt động

LSTM là tuyệt vời trong các chuỗi học tập nhưng chậm lại rất nhiều khi số lượng trạng thái quá lớn. Có những kết quả thực nghiệm cho thấy tốt hơn là yêu cầu LSTM tìm hiểu một chuỗi dài hơn một chuỗi ngắn của nhiều lớp. Tesseract được phát triển từ mô hình Ocropus trong Python, một ngã ba của LSMT trong C ++, được gọi là CLSTM. CLSTM là việc triển khai mô hình mạng thần kinh tái phát LSTM trong C ++, sử dụng thư viện Eigen cho các tính toán số.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
Tesseract 3 OCR quy trình từ giấy

Legacy Tesseract 3.x phụ thuộc vào quy trình nhiều giai đoạn nơi chúng ta có thể phân biệt các bước:

  • Tìm kiếm từ
  • Tìm kiếm dòng
  • Phân loại nhân vật

Tìm kiếm từ được thực hiện bằng cách tổ chức các dòng văn bản thành Blobs, và các dòng và vùng được phân tích cho văn bản cố định hoặc văn bản theo tỷ lệ. Các dòng văn bản được chia thành các từ khác nhau theo loại khoảng cách ký tự. Công nhận sau đó tiến hành như một quá trình hai đường. Trong lần đầu tiên, một nỗ lực được thực hiện để nhận ra từng từ lần lượt. Mỗi từ thỏa đáng được chuyển đến một trình phân loại thích ứng dưới dạng dữ liệu đào tạo. Trình phân loại thích ứng sau đó có cơ hội nhận ra chính xác hơn văn bản hạ xuống trang.

Hiện đại hóa công cụ Tesseract là một nỗ lực trong việc làm sạch mã và thêm một mô hình LSTM mới. Hình ảnh đầu vào được xử lý trong dòng hộp (hình chữ nhật) theo dòng cung cấp vào mô hình LSTM và đưa ra đầu ra. Trong hình ảnh dưới đây, chúng ta có thể hình dung cách nó hoạt động.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
Cách Tesseract sử dụng trình bày mô hình LSTM

Sau khi thêm một công cụ đào tạo mới và đào tạo mô hình với rất nhiều dữ liệu và phông chữ, Tesseract đạt được hiệu suất tốt hơn. Tuy nhiên, không đủ tốt để làm việc trên văn bản viết tay và phông chữ kỳ lạ. Có thể tinh chỉnh hoặc kiềm chế các lớp trên cùng để thử nghiệm.


Cài đặt Tesseract

Cài đặt Tesseract trên Windows rất dễ dàng với các nhị phân được biên dịch trước được tìm thấy ở đây. Đừng quên chỉnh sửa biến Môi trường đường dẫn và thêm đường dẫn Tesseract. Đối với cài đặt Linux hoặc Mac, nó được cài đặt với một vài lệnh.

Sau khi cài đặt xác minh rằng mọi thứ đang hoạt động bằng cách nhập lệnh vào thiết bị đầu cuối hoặc CMD:

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
5

Và bạn sẽ thấy đầu ra tương tự như:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

Bạn có thể cài đặt trình bao bọc Python cho Tesseract sau đó bằng PIP.

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
6
image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
6

Tesseract library is shipped with a handy command-line tool called tesseract. We can use this tool to perform OCR on images and the output is stored in a text file. If we want to integrate Tesseract in our C++ or Python code, we will use Tesseract’s API.


Running Tesseract with CLI

Call the Tesseract engine on the image with image_path and convert image to text, written line by line in the command prompt by typing the following:

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
7

To write the output text in a file:

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
8

To specify the language model name, write language shortcut after -l flag, by default it takes English language:

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
9

By default, Tesseract expects a page of text when it segments an image. If you're just seeking to OCR a small region, try a different segmentation mode, using the --psm argument. There are 14 modes available which can be found here. By default, Tesseract fully automates the page segmentation but does not perform orientation and script detection. To specify the parameter, type the following:

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
0

There is also one more important argument, OCR engine mode (oem). Tesseract 4 has two OCR engines — Legacy Tesseract engine and LSTM engine. There are four modes of operation chosen using the --oem option.
0    Legacy engine only.
1    Neural nets LSTM engine only.
2    Legacy + LSTM engines.
3    Default, based on what is available.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
Result of the Tesseract OCR engine

OCR with Pytesseract and OpenCV

Pytesseract or Python-tesseract is an OCR tool for python that also serves as a wrapper for the Tesseract-OCR Engine. It can read and recognize text in images and is commonly used in python ocr image to text use cases.

It is also useful as a stand-alone invocation script to tesseract, as it can read all image types supported by the Pillow and Leptonica imaging libraries, including jpeg, png, gif, bmp, tiff, and others.

More info about Python approach read here. The code for this tutorial can be found in this repository.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Preprocessing for Tesseract

To avoid all the ways your tesseract output accuracy can drop, you need to make sure the image is appropriately pre-processed.

This includes rescaling, binarization, noise removal, deskewing, etc.

To preprocess image for OCR, use any of the following python functions or follow the OpenCV documentation.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

Let's work with an example to see things better. This is what our original image looks like -

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
The Aurebesh writing system

After preprocessing with the following code

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

and plotting the resulting images, we get the following results.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?
The image after preprocessing

The output for the original image look like this -

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

Here's what the output for different preprocessed images looks like -

Canny edge image (not so good)-

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im

Thresholded image -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

Opening image -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH

Getting boxes around text

Using Pytesseract, you can get the bounding box information for your OCR results using the following code.

The script below will give you bounding box information for each character detected by tesseract during OCR.

import cv2
import pytesseract

img = cv2.imread('image.jpg')

h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) 
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

If you want boxes around words instead of characters, the function

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
1 will come in handy. You can use the
GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
1 function with output type specified with pytesseract
GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
3.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Have an OCR problem in mind? Want to digitize invoices, PDFs or number plates? Head over to Nanonets and build free online OCR models for free!


We will use the sample invoice image above to test out our tesseract outputs.

import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

This should give you the following output -

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
4

Using this dictionary, we can get each word detected, their bounding box information, the text in them and the confidence scores for each.

You can plot the boxes by using the code below -

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
0

Here's what this would look like for the image of a sample invoice.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Text template matching

Take the example of trying to find where a date is in an image. Here our template will be a regular expression pattern that we will match with our OCR results to find the appropriate bounding boxes. We will use the

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
5 module and the
GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
1 function for this.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
1

As expected, we get one box around the invoice date in the image.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Page segmentation modes

There are several ways a page of text can be analysed. The tesseract api provides several page segmentation modes if you want to run OCR on only a small region or in different orientations, etc.

Here's a list of the supported page segmentation modes by tesseract -

0    Orientation and script detection (OSD) only.
1    Automatic page segmentation with OSD.
2    Automatic page segmentation, but no OSD, or OCR.
3    Fully automatic page segmentation, but no OSD. (Default)
4    Assume a single column of text of variable sizes.
5    Assume a single uniform block of vertically aligned text.
6    Assume a single uniform block of text.
7    Treat the image as a single text line.
8    Treat the image as a single word.
9    Treat the image as a single word in a circle.
10    Treat the image as a single character.
11    Sparse text. Find as much text as possible in no particular order.
12    Sparse text with OSD.
13    Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.

Để thay đổi chế độ phân đoạn trang của bạn, hãy thay đổi đối số

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
7 trong chuỗi cấu hình tùy chỉnh của bạn thành bất kỳ mã chế độ nào được đề cập ở trên.


Phát hiện định hướng và tập lệnh

Bạn có thể phát hiện định hướng của văn bản trong hình ảnh của bạn và cũng là tập lệnh mà nó được viết. Hình ảnh sau - sau khi chạy qua mã sau -

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

after running through the following code -

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
2

sẽ in đầu ra sau.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
3

Chỉ phát hiện các chữ số

Lấy hình ảnh này chẳng hạn - văn bản được trích xuất từ ​​hình ảnh này trông như thế này.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

The text extracted from this image looks like this.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
4

Bạn chỉ có thể nhận ra các chữ số bằng cách thay đổi cấu hình thành các chữ cái sau

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
5

Đầu ra sẽ trông như thế này.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
6

Ký tự danh sách trắng

Giả sử bạn chỉ muốn phát hiện một số ký tự nhất định từ hình ảnh đã cho và bỏ qua phần còn lại. Bạn có thể chỉ định danh sách trắng của các ký tự (ở đây, chúng tôi đã sử dụng tất cả các ký tự thường từ A đến Z) bằng cách sử dụng cấu hình sau.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
7

Đầu ra -

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
8

Ký tự danh sách đen

Nếu bạn chắc chắn một số ký tự hoặc biểu thức chắc chắn sẽ không xuất hiện trong văn bản của bạn (OCR sẽ trả lại văn bản sai thay cho các ký tự bị liệt vào danh sách đen), bạn có thể đưa vào danh sách các ký tự đó bằng cách sử dụng cấu hình sau.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
9

Đầu ra -

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
0

Ký tự danh sách đen

Nếu bạn chắc chắn một số ký tự hoặc biểu thức chắc chắn sẽ không xuất hiện trong văn bản của bạn (OCR sẽ trả lại văn bản sai thay cho các ký tự bị liệt vào danh sách đen), bạn có thể đưa vào danh sách các ký tự đó bằng cách sử dụng cấu hình sau.

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
8

Phát hiện bằng nhiều ngôn ngữ

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
9

Bạn có thể kiểm tra các ngôn ngữ có sẵn bằng cách nhập nó vào thiết bị đầu cuối

Để tải xuống Tesseract cho việc sử dụng ngôn ngữ cụ thể

Trường hợp Lang là mã ba chữ cái cho ngôn ngữ bạn cần. Bạn có thể tìm ra các giá trị Lang ở đây. - Only languages that have a

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
3 file format are supported by tesseract.

Bạn có thể tải xuống tệp

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
0 cho ngôn ngữ bạn cần từ đây và đặt nó vào thư mục
CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
1 (điều này giống như nơi thư mục
CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
2 được cài đặt) và nó sẽ sẵn sàng để sử dụng.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
1

Lưu ý - Chỉ các ngôn ngữ có định dạng tệp

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
3 được hỗ trợ bởi Tesseract.
Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

You can work with multiple languages by changing the LANG parameter as such -

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
2

Để chỉ định ngôn ngữ bạn cần đầu ra OCR của mình, hãy sử dụng đối số

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
4 trong cấu hình trong đó Lang là mã 3 chữ cái cho ngôn ngữ bạn muốn sử dụng.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
3

Ví dụ, lấy hình ảnh này - bạn có thể làm việc với nhiều ngôn ngữ bằng cách thay đổi tham số Lang như vậy - - The language specified first to the

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
5 parameter is the primary language.

Và bạn sẽ nhận được đầu ra sau -

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
7

Lưu ý - Ngôn ngữ được chỉ định đầu tiên cho tham số

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
5 là ngôn ngữ chính.

Thật không may, Tesseract không có một tính năng để tự động phát hiện ngôn ngữ của văn bản trong một hình ảnh. Một giải pháp thay thế được cung cấp bởi một mô -đun Python khác có tên là

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
6 có thể được cài đặt thông qua PIP.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
4

Mô -đun này một lần nữa, không phát hiện ngôn ngữ của văn bản bằng hình ảnh nhưng cần đầu vào chuỗi để phát hiện ngôn ngữ. Cách tốt nhất để làm điều này là trước tiên sử dụng Tesseract để lấy văn bản OCR bằng bất kỳ ngôn ngữ nào bạn có thể cảm thấy ở đó, sử dụng

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
6 để tìm ngôn ngữ nào được đưa vào văn bản OCR và sau đó chạy lại OCR với các ngôn ngữ được tìm thấy.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
5

Nói rằng chúng tôi có một văn bản chúng tôi nghĩ là bằng tiếng Anh và tiếng Bồ Đào Nha.

Điều này sẽ xuất ra một danh sách các ngôn ngữ trong văn bản và xác suất của chúng.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
6

Các mã ngôn ngữ được sử dụng bởi

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
6 theo mã ISO 639-1. Để so sánh, xin vui lòng kiểm tra điều này và điều này. Chúng tôi thấy rằng ngôn ngữ được sử dụng trong văn bản là tiếng Anh và tiếng Tây Ban Nha thay thế. - Tesseract performs badly when, in an image with multiple languages, the languages specified in the config are wrong or aren't mentioned at all. This can mislead the langdetect module quite a bit as well.


Chúng tôi nhận lại văn bản bằng cách thay đổi cấu hình thành

Lưu ý - Tesseract thực hiện xấu khi, trong một hình ảnh có nhiều ngôn ngữ, các ngôn ngữ được chỉ định trong cấu hình là sai hoặc hoàn toàn không được đề cập. Điều này có thể đánh lừa mô -đun Langdetect khá nhiều.

Sử dụng Tessdata_fast

Nếu tốc độ là mối quan tâm chính đối với bạn, bạn có thể thay thế các mô hình ngôn ngữ Tessdata của mình bằng các mô hình TessData_Fast là phiên bản số nguyên 8 bit của các mô hình Tessdata.

Theo Tessdata_fast GitHub -

  • Kho lưu trữ này chứa các phiên bản số nguyên nhanh của các mô hình được đào tạo cho động cơ OCR nguồn mở Tesseract.
  • Các mô hình này chỉ hoạt động với động cơ LSTM OCR của Tesseract 4.
  • Đây là một sự thỏa hiệp về tốc độ/chính xác đối với những gì cung cấp "giá trị tiền" tốt nhất về tốc độ so với độ chính xác.
  • Đối với một số ngôn ngữ, điều này vẫn là tốt nhất, nhưng đối với hầu hết không.
  • Cấu hình mạng "giá trị tốt nhất cho tiền" sau đó đã được số nguyên cho tốc độ hơn nữa.NOT be possible from these
    GALACTIC BASIC
    (AVREBESH)
    RS 7FVMeEVEi1iFf o£
    A B C D EF GH IJ K LM
    AOoder7Nnvroroava
    N O P Q@R S$ TU VW XK Y¥ Z
    7 ee For 8 Ro Pf F Boao om #
    0 12 3 4 5 6 7 8 9 , . !
    >» 1kr7 @ by FEN
    2? S$ ( Por Foy of ee
    ASGSANDIE
    CH AE EO KH NG OO SH TH
    
    0 models, as they are 8-bit integer.
  • Hầu hết người dùng sẽ muốn sử dụng các tệp được TrainedData này để thực hiện OCR và chúng sẽ được vận chuyển như một phần của phân phối Linux, ví dụ. Ubuntu 18.04.

Đào tạo tinh chỉnh/đào tạo gia tăng sẽ không thể từ các mô hình

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
0 này, vì chúng là số nguyên 8 bit.


Cần số hóa các tài liệu, biên lai hoặc hóa đơn nhưng quá lười biếng để viết mã? Đi đến nanonets và xây dựng các mô hình OCR miễn phí!


Đào tạo Tesseract trên dữ liệu tùy chỉnh

Tesseract 4.00 bao gồm một công cụ nhận dạng dựa trên mạng thần kinh mới cung cấp độ chính xác cao hơn đáng kể trên hình ảnh tài liệu. Mạng lưới thần kinh đòi hỏi dữ liệu đào tạo nhiều hơn đáng kể và đào tạo chậm hơn rất nhiều so với tesseract cơ sở. Đối với các ngôn ngữ dựa trên Latin, dữ liệu mô hình hiện tại được cung cấp đã được đào tạo trên khoảng 400000 dòng văn bản kéo dài khoảng 4500 phông chữ.For Latin-based languages, the existing model data provided has been trained on about 400000 text lines spanning about 4500 fonts.

Để chạy thành công hướng dẫn đào tạo Tesseract 4.0 LSTM, bạn cần phải cài đặt hoạt động của các công cụ đào tạo Tesseract 4 và Tesseract 4 và cũng có các tập lệnh đào tạo và các tệp dữ liệu được đào tạo cần thiết trong một số thư mục nhất định. Truy cập REPO GitHub cho các tập tin và công cụ.

Tesseract 4,00 mất vài ngày đến một vài tuần để đào tạo từ đầu. Ngay cả với tất cả các dữ liệu đào tạo mới này, do đó, đây là một số lựa chọn để đào tạo:

  • Fine -Tune - Bắt đầu với một ngôn ngữ được đào tạo hiện có, hãy đào tạo dữ liệu bổ sung cụ thể của bạn. Ví dụ, đào tạo trên một bộ dữ liệu viết tay và một số phông chữ bổ sung. - Starting with an existing trained language, train on your specific additional data. For example training on a handwritten dataset and some additional fonts.
  • Cắt lớp trên cùng - từ mạng và kiềm chế một lớp trên cùng mới bằng dữ liệu mới. Nếu tinh chỉnh không hoạt động, đây rất có thể là lựa chọn tốt nhất tiếp theo. Sự tương tự tại sao điều này hữu ích, lấy một mô hình thể hiện được đào tạo trên bộ dữ liệu ImageNet. Mục tiêu là xây dựng một phân loại mèo hoặc chó, các lớp thấp hơn trong mô hình rất tốt trong việc trừu tượng ở mức độ thấp như các góc, đường ngang và dọc, nhưng các lớp cao hơn trong mô hình đang kết hợp các tính năng đó và phát hiện tai mèo hoặc chó, mắt, mũi mũi và như thế. Bằng cách chỉ đào tạo lại các lớp trên cùng, bạn đang sử dụng kiến ​​thức từ các lớp thấp hơn và kết hợp với bộ dữ liệu mới khác nhau của bạn. - from the network and retrain a new top layer using the new data. If fine-tuning doesn't work, this is most likely the next best option. The analogy why is this useful, take for an instance models trained on ImageNet dataset. The goal is to build a cat or dog classifier, lower layers in the model are good at low-level abstraction as corners, horizontal and vertical lines, but higher layers in model are combining those features and detecting cat or dog ears, eyes, nose and so on. By retraining only top layers you are using knowledge from lower layers and combining with your new different dataset.
  • Đào tạo lại từ đầu - Đây là một cách tiếp cận rất chậm trừ khi bạn có một bộ đào tạo rất đại diện và đủ lớn cho vấn đề của bạn. Tài nguyên tốt nhất để đào tạo từ đầu là theo repo GitHub này. - This is a very slow approach unless you have a very representative and sufficiently large training set for your problem. The best resource for training from scratch is following this github repo.

Hướng dẫn về cách đào tạo dữ liệu tùy chỉnh của bạn và tạo các tệp

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im
3 có thể được tìm thấy ở đây, ở đây và tại đây.

Chúng tôi sẽ không bao gồm mã để đào tạo bằng Tesseract trong bài đăng trên blog này.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Hạn chế của Tesseract

Tesseract hoạt động tốt nhất khi có một phân đoạn sạch của văn bản tiền cảnh từ nền. Trong thực tế, nó có thể cực kỳ khó khăn để đảm bảo các loại thiết lập này. Có nhiều lý do bạn có thể không nhận được đầu ra chất lượng tốt từ Tesseract như nếu hình ảnh có tiếng ồn trên nền. Chất lượng hình ảnh càng tốt (kích thước, độ tương phản, sét) thì kết quả nhận dạng càng tốt. Nó đòi hỏi một chút tiền xử lý để cải thiện kết quả OCR, hình ảnh cần được thu nhỏ một cách thích hợp, có càng nhiều độ tương phản hình ảnh càng tốt và văn bản phải được căn chỉnh theo chiều ngang. Tesseract OCR khá mạnh mẽ nhưng có những hạn chế sau.

Giới hạn Tesseract được tổng hợp trong danh sách.

  • OCR không chính xác như một số giải pháp thương mại có sẵn cho chúng tôi.
  • Không làm tốt với hình ảnh bị ảnh hưởng bởi các tạo tác bao gồm tắc một phần, phối cảnh bị biến dạng và nền tảng phức tạp.
  • Nó không có khả năng nhận ra chữ viết tay.
  • Nó có thể tìm thấy vô nghĩa và báo cáo điều này dưới dạng đầu ra OCR.
  • Nếu một tài liệu chứa các ngôn ngữ bên ngoài những ngôn ngữ được đưa ra trong các đối số -L Lang, kết quả có thể kém.
  • Không phải lúc nào cũng tốt trong việc phân tích thứ tự đọc tự nhiên của các tài liệu. Ví dụ, có thể không nhận ra rằng một tài liệu chứa hai cột và có thể cố gắng tham gia văn bản trên các cột.
  • Quét chất lượng kém có thể tạo ra OCR chất lượng kém.
  • Nó không tiết lộ thông tin về văn bản gia đình phông chữ nào thuộc về.

Tất nhiên có một cách tốt hơn, đơn giản hơn và trực quan hơn nhiều để thực hiện các nhiệm vụ OCR.

OCR với ống nanon

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

API Nanonets OCR cho phép bạn xây dựng các mô hình OCR một cách dễ dàng. Bạn không phải lo lắng về việc xử lý trước hình ảnh hoặc lo lắng về các mẫu phù hợp hoặc xây dựng các công cụ dựa trên quy tắc để tăng độ chính xác của mô hình OCR của bạn.

Bạn có thể tải lên dữ liệu của mình, chú thích nó, đặt mô hình để đào tạo và chờ đợi dự đoán thông qua giao diện người dùng dựa trên trình duyệt mà không cần viết một dòng mã, lo lắng về GPU hoặc tìm kiến ​​trúc phù hợp cho các mô hình học tập sâu của bạn. Bạn cũng có thể có được các phản hồi JSON của từng dự đoán để tích hợp nó với các hệ thống của riêng bạn và xây dựng các ứng dụng chạy bằng máy học được xây dựng trên các thuật toán nghệ thuật trạng thái và cơ sở hạ tầng mạnh mẽ.

Sử dụng GUI: https://app.nanonets.com/

Bạn cũng có thể sử dụng API nanonets-onr bằng cách làm theo các bước dưới đây: ‌

Bước 1: Bản sao repo, cài đặt phụ thuộc

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
7

Bước 2: Nhận khóa API miễn phí của bạn Nhận khóa API miễn phí của bạn từ https://app.nanonets.com/#/keys
Get your free API Key from https://app.nanonets.com/#/keys

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Bước 3: Đặt khóa API làm biến môi trường

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
8

Bước 4: Tạo một mô hình mới

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 
9

Lưu ý: Điều này tạo ra một model_id mà bạn cần cho bước tiếp theo This generates a MODEL_ID that you need for the next step

Bước 5: Thêm ID mô hình làm biến môi trường

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
0

Lưu ý: Bạn sẽ nhận được của bạn_model_id từ bước trước you will get YOUR_MODEL_ID from the previous step

Bước 6: Tải dữ liệu đào tạo Dữ liệu đào tạo được tìm thấy trong

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
7 (tệp hình ảnh) và
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
8 (chú thích cho các tệp hình ảnh)

The training data is found in
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
7 (image files) and
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
8 (annotations for the image files)

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
1

Bước 7: Mô hình đào tạo Một khi hình ảnh đã được tải lên, bắt đầu đào tạo mô hình
Once the Images have been uploaded, begin training the Model

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
2

Bước 8: Nhận trạng thái mô hình Mô hình mất ~ 2 giờ để đào tạo. Bạn sẽ nhận được một email sau khi mô hình được đào tạo. Trong khi đó bạn kiểm tra trạng thái của mô hình
The model takes ~2 hours to train. You will get an email once the model is trained. In the meanwhile you check the state of the model

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
3

Bước 9: Đưa ra dự đoán sau khi mô hình được đào tạo. Bạn có thể đưa ra dự đoán bằng mô hình
Once the model is trained. You can make predictions using the model

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
4

Nanonets và con người trong vòng lặp

Màn hình 'vừa phải' hỗ trợ các quy trình sửa chữa và nhập cảnh và giảm gần 90% khối lượng công việc của người đánh giá thủ công và giảm 50% chi phí cho tổ chức.

Hướng dẫn how do i use ocr in python? - làm cách nào để sử dụng ocr trong python?

Các tính năng bao gồm

  1. Theo dõi dự đoán đúng
  2. Theo dõi cái nào sai
  3. Thực hiện sửa chữa cho những người không chính xác
  4. Xóa những cái sai
  5. Điền vào các dự đoán bị thiếu
  6. Bộ lọc hình ảnh với phạm vi ngày
  7. Nhận số lượng hình ảnh được kiểm duyệt đối với những hình ảnh không được kiểm duyệt

Tất cả các trường được cấu trúc thành GUI dễ sử dụng cho phép người dùng tận dụng công nghệ OCR và hỗ trợ làm cho nó tốt hơn khi chúng đi, mà không phải nhập bất kỳ mã nào hoặc hiểu cách thức hoạt động của công nghệ.


Có một vấn đề OCR trong tâm trí? Bạn muốn tự động hóa chi phí nhập dữ liệu của tổ chức? Đi đến Nanonets và xây dựng các mô hình OCR để chuyển đổi hình ảnh thành văn bản hoặc trích xuất dữ liệu từ PDFS!


Sự kết luận

Giống như việc học sâu đã tác động đến gần như mọi khía cạnh của tầm nhìn máy tính, điều tương tự cũng đúng với nhận dạng nhân vật và nhận dạng chữ viết tay. Các mô hình dựa trên học tập sâu đã quản lý để có được độ chính xác nhận dạng văn bản chưa từng có, vượt xa việc trích xuất thông tin truyền thống và phương pháp xử lý hình ảnh học máy.

Tesseract hoạt động tốt khi hình ảnh tài liệu tuân theo các hướng dẫn tiếp theo:

  • Phân đoạn sạch của văn bản tiền cảnh từ nền
  • Được sắp xếp theo chiều ngang và quy mô một cách thích hợp
  • Hình ảnh chất lượng cao mà không bị mờ và tiếng ồn

Bản phát hành mới nhất của Tesseract 4.0 hỗ trợ OCR dựa trên học tập sâu chính xác hơn đáng kể. Bản thân động cơ OCR được xây dựng trên mạng bộ nhớ ngắn hạn (LSTM) dài hạn, một loại mạng thần kinh tái phát (RNN).

Tesseract là hoàn hảo để quét các tài liệu sạch và đi kèm với độ chính xác khá cao và độ biến thiên của phông chữ vì đào tạo của nó là toàn diện. Tôi sẽ nói rằng Tesseract là một công cụ đi đến nếu nhiệm vụ của bạn đang quét sách, tài liệu và văn bản in trên nền trắng sạch.


Đọc thêm

  • Mô hình được đào tạo tốt nhất cho LSTM Tesseract 4.0
  • Phương pháp tiếp cận Dropbox với OCR 4.2017
  • Tổng quan về Tesseract OCR Engine Legacy
  • Diễn đàn cho các nhà phát triển Tesseract
  • Diễn đàn cho người dùng Tesseract
  • So sánh độ chính xác của OCR trên sách in sớm bằng cách sử dụng động cơ nguồn mở Calamari và Ocropus
    Open Source Engines Calamari and OCRopus
  • OCR hiệu quả, không có từ vựng bằng cách sử dụng học tập sâu
  • Sự phù hợp của động cơ OCR trong hệ thống trích xuất thông tin - Đánh giá so sánh
  • Điểm chuẩn DeepText
  • Danh sách dự án OCR
  • Tesseract GitHub phát hành mới nhất
  • CVPR 2019 - Nhận thức về khu vực nhân vật để phát hiện văn bản (Craft)
  • Thẻ tín dụng OCR với OpenCV và Python
  • Tiền xử lý hình ảnh
  • Tiền xử lý hình ảnh trong opencv
  • OCR sử dụng Tesseract trên Raspberry Pi
  • Tesseract OCR cho các ngôn ngữ không phải tiếng Anh
  • Cách thực hiện OCR từ dòng lệnh Linux bằng cách sử dụng Tesseract
  • Tổng quan về động cơ OCR Tesseract
  • Hộp xử lý hình ảnh và giới hạn cho OCR
  • Tiếp tục phân tích cú pháp
  • OCR với PYPDF2
Cập nhật: Rất nhiều người hỏi chúng tôi làm thế nào họ có thể nhận được ngày dưới dạng văn bản hoặc sử dụng khi phát hiện ngày hoặc bất kỳ dữ liệu cụ thể nào khác để họ có thể nối vào danh sách. Hộp ngày, bạn sẽ nhận thấy một dòng phù hợp với mẫu regex với
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
9. Nó chỉ vẽ một hộp nếu mẫu phù hợp. Bạn chỉ có thể trích xuất các giá trị từ
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
9 khi mẫu khớp và nối chúng vào danh sách.

A lot of people asked us how they can get date in the form of text or using when it detects date or any other specific data so they could append to list.
Here's the answer:
In the code to draw a bounding box around the date box, you will notice a line which matches the regex pattern with
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
9. It only draws a box if the pattern matches. You could simply extract the values from
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
9 once the pattern matches and append them to a list.
Cập nhật 2: Để giải quyết các câu hỏi xung quanh OCR không phải tiếng Anh, chúng tôi đã cập nhật thêm danh sách đọc.
To address questions around non-English OCR, we have updated further reading lists.

Làm cách nào để viết mã OCR bằng Python?

Bạn có thể cài đặt trình bao bọc Python cho Tesseract sau đó bằng PIP. Thư viện Tesseract được vận chuyển với một công cụ dòng lệnh tiện dụng gọi là Tesseract. Chúng ta có thể sử dụng công cụ này để thực hiện OCR trên hình ảnh và đầu ra được lưu trữ trong tệp văn bản.install the python wrapper for tesseract after this using pip. Tesseract library is shipped with a handy command-line tool called tesseract. We can use this tool to perform OCR on images and the output is stored in a text file.

OCR hoạt động như thế nào trong Python?

Nhận dạng ký tự quang học là quá trình phát hiện nội dung văn bản trên hình ảnh và chuyển đổi nó thành văn bản được mã hóa bằng máy mà chúng ta có thể truy cập và thao tác trong Python (hoặc bất kỳ ngôn ngữ lập trình nào) dưới dạng biến chuỗi.

Python có thư viện OCR không?

Python-Tesseract là một công cụ nhận dạng ký tự quang học (OCR) cho Python.Đó là, nó sẽ nhận ra và đọc văn bản được nhúng trong hình ảnh.. That is, it will recognize and “read” the text embedded in images.

Làm thế nào để bạn sử dụng OCR?

Mở tệp PDF chứa hình ảnh được quét trong Acrobat cho Mac hoặc PC.Nhấp vào công cụ Chỉnh sửa PDF PDF ở khung bên phải.Acrobat tự động áp dụng nhận dạng ký tự quang (OCR) cho tài liệu của bạn và chuyển đổi nó thành một bản sao hoàn toàn có thể chỉnh sửa PDF của bạn.Nhấp vào phần tử văn bản bạn muốn chỉnh sửa và bắt đầu gõ.