Php ocr pdf

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 cơ Tesseract được sử dụng nhiều nhất, được nâng cao 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

Nội dung chính Hiển thị

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 phát triển khai thác PDF OCR trong Python bằng công cụ Tesseract. We will go through the module after

  • 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
  • Chế độ hủy bỏ độ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 biến hệ thống OCR thay đổi hình ảnh hai chiều của văn bản, có thể chứa văn bản trong hoặc viết tay từ biểu tượng hình ảnh của nó thành văn bản có thể đọc được bằng máy. OCR as a normal 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 vùng 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 tất nhiên có thể khác nhau, nhưng đây là những bước gần nhất 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 định 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 hết 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 đối, 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 định dạng kỹ thuật số

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 đặt ra dựa trên thực tế 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 chuyên 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à bộ dữ liệu có sẵn để khai thác, các mô hình đạt được độ chính xác tiên tiến đối với các nhiệm vụ được xác định rõ nhất. Ngày nay, cũng có thể tạo tổng hợp dữ liệu 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 đề toàn thức khi văn bản xảy ra trong các môi trường không bị ràng buộc, chẳng hạn 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 giữ một tiềm năng để thực hiện 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ố
  • Numberizes
  • Menu Numbers
  • Số hóa thẻ ID

Có một vấn đề OCR trong tâm trí?

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ỳ sự 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 start as a 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. Từ năm 2006, nó được phát triển bởi Google

So sánh xu hướng của Google cho các nguồn công cụ OCR mở khác nhau

OCROPUS - OCROPUS là một hệ thống nguồn OCR mở cho phép đánh giá và sử dụng lại các thành phần OCR một cách 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òn 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. Tập hợp các chương trình phân tích tài liệu, không phải hệ thống OCR chìa khóa trao tay. Để áp dụng nó vào tài liệu của bạn, bạn có thể cần thực hiện một số xử lý trước hình ảnh và cũng có thể đào tạo các mô hình mới. Ngoài bản thân các tập lệnh nhận dạng, còn có một số tập lệnh để chỉnh sửa và chỉnh sửa sự thật cơ bản, đo tỷ lệ lỗi, xác định ma trận nhầm lẫn dễ sử dụng và chỉnh sửa

M eye - Mạng hoạt động tốt nhất trên các tài liệu được viết 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à. Đây là một hệ thống OCR lịch sử tiên tiến nhất. Các tính năng chính của nó là

  • 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 tài liệu hình ảnh và kho văn bản
  • Khả năng xử lý các tài liệu ồn ào. No bestquansity, interval, the vertical vertical
  • Hỗ trợ 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 biến mẫu có thể mô tả chính xác bao gồm cách viết cổ xưa và tốc độ của máy trong
  • Đồng thời, sao chép khớp vào cả hai định dạng ngoại giao [nghĩa đen] và các định dạng chuẩn hóa

Swiftoc - Tôi cũng sẽ đề cập đến việc động cơ OCR được viết bằng Swift vì 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 để nghiên cứu 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 tuyên bố rằng công cụ của họ hoạt động tốt hơn thư viện Tessaract nổi tiếng

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. tập trung vào Tesseract OCR và tìm hiểu thêm về cách hoạt động cũng như cách sử dụng

Tesseract OCR

Tesseract là một công cụ nhận dạng mã nguồn mở văn bản [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 thành viên lập trình] bằng cách sử dụng API để trích xuất văn bản trong 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 bên thứ ba. Tesseract có thể tương thích với nhiều ngôn ngữ khuôn mẫu và khổ thiết lập 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 sự phân tích bố cục cục bộ hiện có để nhận định dạng văn bản trong một tài liệu lớn hoặc nó có thể được sử dụng tương tự 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 bức ảnh.

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

Teseract 4. 00 bao gồm một hệ thống 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ừ công việc khai triển 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 thức biến [VGSL], cũng có sẵn cho TensorFlow

Để nhận ra một hình ảnh có chứa 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 chọn 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 bị 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 rút gọn của nhiều lớp. Tesseract được phát triển từ mô hình Ocropus trong Python, một bản ngã ba của LSMT trong C++, được gọi là CLSTM. CLSTM là việc phát 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ố

Tesseract 3 OCR quy trình từ giấy

Di sản Teseract 3. x phụ thuộc vào quy trình nhiều giai đoạn mà chúng ta có thể phân biệt các bước

  • Search from
  • Search lines
  • 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 các ký tự khoảng cách. Công nhận sau đó tiến trì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 lần từ lần cuối. Mỗi từ giải thưởng đáng được chuyển đến một loại ứng dụng phân loại dưới dạng dữ liệu đào tạo. Trình phân loại ứng dụng sau đó có cơ hội xác nhận chính xác hơn văn bản hạ 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 bắt đầu được xử lý trong hộp dòng [hình chữ nhật] theo dòng cung cấp cho mô hình LSTM và được đưa ra đầu ra. Trong hình ảnh dưới đây, chúng tôi có thể định hình cách nó hoạt động

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 quả 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ể sửa hoặc hạn 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 đây đượ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 việc cài đặt Linux hoặc Mac, nó đã được cài đặt bằng 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 các đầ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

Thư viện Tesseract được cung cấp cùng với một công cụ dòng lệnh tiện dụng có tên là tesseract. Chúng tôi 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. Nếu chúng tôi muốn tích hợp Tesseract trong mã C++ hoặc Python của mình, chúng tôi sẽ sử dụng API của Tesseract

Chạy Tesseract với CLI

Gọi công cụ Tesseract trên hình ảnh bằng image_path và chuyển đổi hình ảnh thành văn bản, được viết từng dòng trong dấu nhắc lệnh bằng cách gõ như sau

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
7

Để viết văn bản đầu ra trong một tập tin

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
8

Để chỉ định tên mô hình ngôn ngữ, hãy viết phím tắt ngôn ngữ sau cờ -l, theo mặc định, nó lấy ngôn ngữ tiếng Anh

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
9

Theo mặc định, Tesseract mong đợi một trang văn bản khi nó phân đoạn một hình ảnh. Nếu bạn chỉ đang tìm cách OCR một vùng nhỏ, hãy thử một chế độ phân đoạn khác, sử dụng đối số --psm. Có 14 chế độ có sẵn có thể được tìm thấy ở đây. Theo mặc định, Tesseract hoàn toàn tự động hóa việc phân đoạn trang nhưng không thực hiện định hướng và phát hiện tập lệnh. Để chỉ định tham số, gõ 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
0

Còn một đối số quan trọng nữa, chế độ công cụ OCR [oem]. Tesseract 4 có hai công cụ OCR — Legacy Tesseract engine và LSTM engine. Có bốn chế độ hoạt động được chọn bằng tùy chọn --oem.
0    Chỉ công cụ cũ.
1    Chỉ công cụ LSTM của mạng nơ-ron.
2    Công cụ cũ + LSTM.
3    Mặc định, dựa trên những gì có sẵn.

Kết quả của công cụ Tesseract OCR

OCR với Pytesseract và OpenCV

Pytesseract hoặc Python-tesseract là một công cụ OCR dành cho trăn cũng đóng vai trò là trình bao bọc cho Công cụ Tesseract-OCR. Nó có thể đọc và nhận dạng văn bản trong hình ảnh và thường được sử dụng trong hình ảnh python ocr cho các trường hợp sử dụng văn bản

Nó cũng hữu ích như một tập lệnh gọi độc lập cho tesseract, vì nó có thể đọc tất cả các loại hình ảnh được thư viện hình ảnh Gối và Leptonica hỗ trợ, bao gồm jpeg, png, gif, bmp, tiff, v.v.

Thông tin thêm về cách tiếp cận Python đọc tại đây. Mã cho hướng dẫn này có thể được tìm thấy trong kho lưu trữ này

________số 8

Tiền xử lý cho Tesseract

Để tránh tất cả các cách giảm độ chính xác đầu ra tesseract của bạn, bạn cần đảm bảo rằng hình ảnh được xử lý trước một cách thích hợp

Điều này bao gồm thay đổi kích thước, nhị phân hóa, loại bỏ tiếng ồn, làm mờ, v.v.

Để xử lý trước hình ảnh cho OCR, hãy sử dụng bất kỳ chức năng python nào sau đây hoặc làm theo tài liệu OpenCV

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] 

Hãy làm việc với một ví dụ để thấy mọi thứ tốt hơn. Đây là những gì hình ảnh ban đầu của chúng tôi trông giống như -

Hệ thống chữ viết Aurebesh

Sau khi tiền xử lý với đoạn mã sau

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]

và vẽ các hình ảnh kết quả, chúng tôi nhận được kết quả sau

Hình ảnh sau khi tiền xử lý

Đầu ra cho hình ảnh gốc trông như thế này -

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

Đây là kết quả đầu ra cho các hình ảnh được xử lý trước khác nhau trông như thế nào -

Hình ảnh cạnh Canny [không tốt lắm] -

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
2

Hình ảnh ngưỡng -

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
3

Hình ảnh mở đầu -

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
4

Nhận hộp xung quanh văn bản

Sử dụng Pytesseract, bạn có thể lấy thông tin hộp giới hạn cho kết quả OCR của mình bằng mã sau

Tập lệnh bên dưới sẽ cung cấp cho bạn thông tin hộp giới hạn cho từng ký tự được phát hiện bởi tesseract trong OCR

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
5

Nếu bạn muốn các hộp xung quanh các từ thay vì các ký tự, chức 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
1 sẽ có ích. Bạn có thể sử dụng hàm 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 với loại đầu ra được chỉ định bằng 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

Có một vấn đề OCR trong tâm trí?

Chúng tôi sẽ sử dụng hình ảnh hóa đơn mẫu ở trên để kiểm tra kết quả đầu ra tesseract của chúng tôi

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
9

Điều này sẽ cung cấp cho bạn đầu ra 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
4

Sử dụng từ điển này, chúng tôi có thể nhận được từng từ được phát hiện, thông tin hộp giới hạn của chúng, văn bản trong đó và điểm tin cậy cho từng từ

Bạn có thể vẽ các hộp bằng cách sử dụng mã bên dưới -

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

Đây là hình ảnh của hóa đơn mẫu

Đối sánh mẫu văn bản

Lấy ví dụ về việc cố gắng tìm vị trí của một ngày trong một hình ảnh. Ở đây, mẫu của chúng tôi sẽ là một mẫu biểu thức chính quy mà chúng tôi sẽ khớp với các kết quả OCR của mình để tìm các hộp giới hạn thích hợp. chúng tôi sẽ sử dụng

Mô-đun
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 và hàm 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 cho việc 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]
1

Như mong đợi, chúng tôi nhận được một hộp xung quanh ngày lập hóa đơn trong hình ảnh

Chế độ phân đoạn trang

Có một số cách một trang văn bản có thể được phân tích. Api tesseract cung cấp một số chế độ phân đoạn trang nếu bạn chỉ muốn chạy OCR trên một vùng nhỏ hoặc theo các hướng khác nhau, v.v.

Đây là danh sách các chế độ phân đoạn trang được hỗ trợ bởi tesseract -

0    Chỉ định hướng và phát hiện tập lệnh [OSD].
1    Phân đoạn trang tự động với OSD.
2    Phân đoạn trang tự động nhưng không có OSD hoặc OCR.
3    Phân đoạn trang hoàn toàn tự động, nhưng không có OSD. [Mặc định]
4    Giả sử một cột văn bản có kích thước thay đổi.
5    Giả sử một khối văn bản được căn chỉnh theo chiều dọc thống nhất.
6    Giả sử một khối văn bản thống nhất.
7    Xử lý hình ảnh dưới dạng một dòng văn bản.
8    Xử lý hình ảnh dưới dạng một từ.
9    Coi hình ảnh như một từ duy nhất trong một vòng tròn.
10    Xử lý hình ảnh dưới dạng một ký tự.
11    Văn bản thưa thớt. Tìm càng nhiều văn bản càng tốt không theo thứ tự cụ thể.
12    Văn bản thưa thớt với OSD.
13    Dòng thô. Xử lý hình ảnh dưới dạng một dòng văn bản, bỏ qua các bản hack dành riêng cho Tesseract.

Để thay đổi chế độ phân vùng trang của bạn, hãy thay đổi các đố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 hướng và lệnh tập tin

Bạn có thể phát hiện hướng của văn bản trong hình ảnh của bạn và cũng là lệnh mà nó được viết. Hình ảnh sau - after running through the code after -


sau khi chạy qua đoạn mã sau -______82

will in the start up after

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ố

Giành 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


Văn bản được trích xuất từ ​​​​hình ảnh này 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]
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ẽ giố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

White list character character

Giả sử bạn chỉ muốn phát một số ký tự định dạng nhất từ ​​​​hình ảnh đã chọn 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ự [tại đây, chúng tôi đã sử dụng tất cả các ký tự thông 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

Black list character character

Nếu bạn chắc chắn rằng 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 vì các ký tự được liệt kê trong danh sách đen], bạn có thể đưa vào danh sách

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

Black list character character

Nếu bạn chắc chắn rằng 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 vì các ký tự được liệt kê trong danh sách đen], bạn có thể đưa vào danh sách

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 Lang value ở đây. - Chỉ những ngôn ngữ có

Định dạng tệp
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
23 được hỗ trợ bởi tesseract

You can download down file

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
20 cho ngôn ngữ bạn cần từ đây và đặt nó vào thư mục
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
21 [điều này giống như nơi thư mục
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
22 đượ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

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
23 được hỗ trợ bởi Tesseract


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 -
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 bắt đầu ra OCR của mình, hãy sử dụng các đối số

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
24 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 - - Ngôn ngữ được chỉ định đầu tiên cho

Tham số
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
25 là ngôn ngữ chính

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

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
27

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

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
25 là ngôn ngữ chính

Thật không may, Tesseract không có tính năng tự động phát 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à

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
26 could not beinstallation through 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 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 ngôn ngữ. Cách tốt nhất để làm điều này là lần đầu 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

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
26 để tìm bất kỳ 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 nhận 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 ngôn ngữ mã hóa được sử dụng bởi

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
46 theo mã ISO 639-1. Để so sánh, 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 hoạt động kém 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 bị sai hoặc hoàn toàn không được đề cập. Điều này cũng có thể đánh lừa mô-đun langdetect khá nhiều

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ữ chỉ được xác định trong cấu hình là sai hoặc hoàn toàn không được cập nhật. Điều này có thể đánh lừa mô-đun Langdetect khá nhiều

Use 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ế mô hình ngôn ngữ Tessdata của mình bằng mô hình TessData_Fast là phiên bản nguyên 8 bit của 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 hiệp hội 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 mức độ 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. KHÔNG thể thực hiện được từ các mô hì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
    
    30 này, vì chúng là số nguyên 8 bit
  • Hầu hết người dùng sẽ muốn sử dụng các tệp đã được đào tạo Dữ liệu này để thực hiện OCR và họ sẽ được chuyển đổi 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

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
30 this, because they are integer 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ã?

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

Teseract 4. 00 bao gồm một công cụ nhận định 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 tài liệu hình ảnh. 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 cơ sở tesseract. Đối với các ngôn ngữ dựa trên tiếng Latinh, mô hình dữ liệu 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ữ. Đối với các ngôn ngữ dựa trên tiếng Latinh, dữ liệu mô hình hiện có được cung cấp đã được đào tạo trên khoảng 400000 dòng văn bản bao gồm khoảng 4500 phông chữ

To run to the direction to create 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, đồng thời có các lệnh đào tạo và tệp dữ liệu được đào tạo cần thiết trong một số thư mục định sẵn. 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 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, hãy làm điều đó, đâ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. - Bắt đầu với một ngôn ngữ được đào tạo hiện có, đào tạo về dữ liệu bổ sung cụ thể của bạn. Ví dụ: đào tạo về tập dữ liệu viết tay và một số phông chữ bổ sung
  • Cắt lớp trên cùng - từ mạng và Khử 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ự việc tương tự tại sao điều này hữu ích, lấy một mô hình có 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 hiển thị các đối 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 các mô hình đang kết hợp . 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. - từ mạng và đào tạo lại lớp trên cùng mới bằng cách sử dụ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 lại hữu ích, hãy lấy ví dụ về các mô hình được đào tạo trên bộ dữ liệu ImageNet. Mục tiêu là xây dựng bộ phân loại mèo hoặc chó, các lớp thấp hơn trong mô hình có khả năng trừu tượng hóa ở 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ắt, mũi của mèo hoặc chó . 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 khác mới của mình
  • Đà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 hiện đại 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. - Đây là một cách tiếp cận rất chậm trừ khi bạn có một tập huấn luyện đủ lớn và đại diện cho vấn đề của mình. Tài nguyên tốt nhất để đào tạo từ đầu là theo dõi repo github này

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

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
23 may be found at here, here and at here

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

Unmode of 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 khiến bạn không thể nhận được đầu ra chất lượng tốt từ Tesseract chẳng hạn 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áng] thì kết quả nhận dạng càng tốt. Nó yêu cầu một chút xử lý tiền để cải thiện kết quả OCR, hình ảnh cần được thu nhỏ theo một cách thích hợp, càng có nhiều mức độ tương phản hình ảnh càng tốt và văn bản phải được căn cứ theo chiều ngang. Tesseract OCR khá mạnh 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 tốt với hình ảnh bị ảnh hưởng bởi các tác nhân tạo bao gồm một phần, 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 khiển này dưới dạng OCR đầu tiên
  • 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ể bị mất
  • 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 thừa nhận rằng một tài liệu chứa hai cột và có thể cố gắng tham khảo 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 thấp
  • 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 là 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 nano

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 cần phải lo lắng về công việc trước hình ảnh hoặc lo lắng về việc lắng nghe 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 cườ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ú ý đến nó, đặt mô hình để đào tạo và chờ đợi dự đoán thông tin 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ã, lắng nghe về GPU hoặc tìm kiếm kiến ​​​​trúc . Bạn cũng có thể nhận được các phản hồi JSON của từng dự đoán để phân tích 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 trạng thái kỹ thuật thuật toán và cơ sở hạ tầng.

Sử dụng GUI. https. //ứng dụng. mạng nano. com/

Bạn cũng có thể sử dụng API nanonets-onr bằng cách thực hiện theo các bước dưới đây. ‌

Bước 1. Sao chép 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. //ứng dụng. mạng nano. com/#/keys
Nhận Khóa API miễn phí của bạn từ https. //ứng dụng. mạng nano. com/#/phím

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

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 Điều này tạo ra một MODEL_ID mà bạn cần cho bước tiếp theo

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 ý. You will get your_model_id from step before bạn sẽ nhận được YOUR_MODEL_ID từ bước trước đó

Bước 6. Đào tạo dữ liệu đào tạo Dữ liệu đào tạo được tìm thấy trong

image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
27 [tệp hình ảnh] và
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
38 [chú thích cho các tệp hình ảnh]
Dữ liệu huấn luyện được tìm thấy trong
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
37 [tệp hình ảnh] và
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
38 [chú thích cho tệp hình ảnh]
image = cv2.imread['aurebesh.jpg']

gray = get_grayscale[image]
thresh = thresholding[gray]
opening = opening[gray]
canny = canny[gray]
1

Chủ Đề