Tôi biết rằng tesseract không nhằm mục đích sử dụng trên dữ liệu viết tay, nhưng tôi đang cố giải quyết một vấn đề không thực sự có giải pháp đơn giản vào lúc này, đó là nhận dạng mã nguồn viết tay. Không có bộ dữ liệu mã nguồn viết tay được gắn nhãn để xây dựng mô hình từ đầu
Có một nghiên cứu được thực hiện vào năm 2017 khi họ đánh giá hiệu suất của công cụ thương mại myscript trên mã nguồn viết tay. Họ đã tạo và xuất bản bộ dữ liệu đánh giá các mẫu mã python viết tay
Nỗ lực của tôi là so sánh kết quả của họ với tesseract 4. 0 sau khi sử dụng các công cụ đào tạo để đào tạo tesseract nhận biết tập dữ liệu đánh giá của họ
Bước đầu tiên, tôi tinh chỉnh tessdata_best bằng cách cung cấp cho nó langdata sau
1. tiếng anh. training_text - đối với tệp này, tôi đã cung cấp cho nó mã nguồn gốc thực tế của các mẫu viết tay (Cuối cùng, tôi muốn NN tạo ra một mô hình tổng quát hơn bằng cách cung cấp cho nó rất nhiều mã python nhưng bước đầu tiên tôi nghĩ là chỉ thực hiện với
2. tiếng anh. danh sách từ - Tôi đã cung cấp cho tệp này tập hợp các từ khóa python từ thường xuyên nhất đến ít nhất
3. tiếng anh. punc và eng. số - Tôi đã loại bỏ các biểu thức mà tôi biết sẽ không bao giờ xuất hiện trên mã nguồn và giữ phần còn lại. (hãy nhớ rằng tập dữ liệu chỉ có mã nguồn, tất cả các nhận xét đều bị xóa)
Tôi đã tạo dữ liệu đào tạo bằng cách sử dụng khoảng 27 phông chữ viết tay mà tôi tìm thấy trên mạng
Tôi đã đính kèm dữ liệu và tập lệnh tôi đã sử dụng và đính kèm kết quả của hai hình ảnh 1. png và 9. png trong Kết quả. txt
cho 9. png như bạn có thể thấy nó cho thấy một chút cải tiến vì nó không có các ký tự từ vựng và WER thấp hơn. Tôi nhận thấy rằng mô hình hoạt động tốt đối với các chữ cái khối như trong 9. png nhưng vẫn không thể nhận ra khi chữ viết tay lộn xộn, điều này có lý
Trong 1. png trong đó chữ viết tay hơi khó hiểu, chúng tôi thực sự không thể nói rằng mô hình được đào tạo tốt hơn
Câu hỏi của tôi là, những thứ khác mà tôi có thể thử để giảm WER từ tesseract mặc định. Tôi có thể thử những gì khác nhau?
Tôi sẽ thử đào tạo từ đầu và đào tạo một vài lớp tiếp theo, bất kỳ suy nghĩ nào về những cách tiếp cận đó cũng sẽ hữu ích
Bài viết này là hướng dẫn từng bước sử dụng Tesseract OCR để nhận dạng các ký tự từ hình ảnh bằng Python. Do tính chất của tập dữ liệu đào tạo của Tesseract, nhận dạng ký tự kỹ thuật số được ưu tiên hơn, mặc dù Tesseract OCR cũng có thể được sử dụng để nhận dạng chữ viết tay. Tesseract OCR là một dự án mã nguồn mở, được bắt đầu bởi Hewlett-Packard. Sau đó, Google tiếp quản sự phát triển. Kể từ ngày 29 tháng 10 năm 2018, phiên bản ổn định mới nhất 4. 0. 0 dựa trên LSTM (bộ nhớ ngắn hạn dài). Hãy xem nó trên Github để tìm hiểu thêm
Phiên bản chính thức của Tesseract OCR cho phép các nhà phát triển xây dựng ứng dụng của riêng họ bằng API C hoặc C++. Theo thời gian, cộng đồng đã tạo ra các phiên bản công cụ bên ngoài, trình bao bọc và thậm chí cả các dự án đào tạo của riêng họ. Trong bài viết này, tôi sẽ sử dụng một trình bao bọc Python có tên là tesserocr bởi vì
- Nó đơn giản và dễ sử dụng
- Nó hỗ trợ phiên bản 4. 0. 0 (tại thời điểm viết bài này)
- Phần bình luận và giải thích trong file rất chi tiết
Nếu bạn đang tìm kiếm các trình bao bọc hoặc công cụ khác, hãy kiểm tra đặt liên kết này
Hướng dẫn này bao gồm các phần sau
- Thiết lập và cài đặt
- Chuẩn bị hình ảnh thử nghiệm
- Cách sử dụng và lệnh gọi API
- tinh chỉnh
- Kết quả
- Phần kết luận
Có nhiều cách để cài đặt tesserocr. Các yêu cầu và các bước nêu trong phần này sẽ dựa trên cài đặt qua pip trên hệ điều hành Windows. Bạn có thể kiểm tra các bước cần thiết qua Github chính thức nếu muốn cài đặt qua các phương pháp khác
chung cư
Nếu bạn đang sử dụng Conda, bạn có thể cài đặt nó qua conda-forge
conda install -c conda-forge tesserocrcon trăn
Bạn nên cài đặt python với phiên bản 3. 6 hoặc 3. 7. Tôi sẽ sử dụng Python 3. 7. 1 được cài đặt trong môi trường ảo cho hướng dẫn này
Mô-đun Python qua pip
Tải xuống tệp được yêu cầu dựa trên phiên bản python và hệ điều hành. Tôi đã tải xuống tesserocr v2. 4. 0 — Trăn 3. 7–64bit và lưu vào thư mục tesserocr-master (bạn có thể lưu ở đâu tùy thích). Từ thư mục, mở dấu nhắc lệnh (chỉ cần trỏ nó vào thư mục chứa tệp whl nếu bạn đã mở dấu nhắc lệnh từ thư mục khác). Cài đặt qua pip được thực hiện thông qua đoạn mã sau
pip install <package_name>.whlPackage_name đề cập đến tên của tệp whl bạn đã tải xuống. Trong trường hợp của tôi, tôi đã tải xuống tesserocr-2. 4. 0-cp37-cp37m-win_amd64. whl. Do đó, tôi sẽ sử dụng đoạn mã sau để cài đặt
pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whlBước tiếp theo là cài đặt Gối, một mô-đun để xử lý hình ảnh trong Python. Gõ lệnh sau
pip install PillowTệp dữ liệu ngôn ngữ
Các tệp dữ liệu ngôn ngữ được yêu cầu trong quá trình khởi tạo lệnh gọi API. Có ba loại tệp dữ liệu
- dữ liệu. Mô hình tiêu chuẩn chỉ hoạt động với Tesseract 4. 0. 0. Chứa cả công cụ kế thừa (--oem 0) và công cụ dựa trên mạng thần kinh LSTM (--oem 1). oem đề cập đến một trong các tham số có thể được chỉ định trong quá trình khởi tạo. Nhanh hơn rất nhiều so với tessdata_best với độ chính xác thấp hơn. Liên kết đến tessdata tiêu chuẩn
- tessdata_best. Mô hình được đào tạo tốt nhất chỉ hoạt động với Tesseract 4. 0. 0. Nó có độ chính xác cao nhất nhưng chậm hơn rất nhiều so với phần còn lại. Liên kết tới tessdata_best
- tessdata_fast. Mô hình này cung cấp một tập hợp thay thế các mô hình LSTM số nguyên đã được xây dựng với một mạng nhỏ hơn. Liên kết tới tessdata_fast
Tôi sẽ sử dụng tessdata tiêu chuẩn trong hướng dẫn này. Tải xuống qua liên kết ở trên và đặt nó vào thư mục gốc của dự án của bạn. Trong trường hợp của tôi, nó sẽ nằm trong thư mục tesserocr-master. Tôi đã thực hiện thêm một bước và đổi tên các tệp dữ liệu thành tessdata. Điều này có nghĩa là tôi có cấu trúc thư mục sau
.../tesserocr-master/tessdata2. Chuẩn bị hình ảnh thử nghiệmLưu hình ảnh
Các cách hiệu quả nhất để có được hình ảnh thử nghiệm như sau
- Tìm kiếm hình ảnh trực tuyến bằng cách sử dụng các từ khóa như “biển báo đường bộ”, “nhà hàng”, “thực đơn”, “đã quét”, “biên lai”, v.v.
- Sử dụng công cụ snipping để lưu hình ảnh của các bài báo trực tuyến, tiểu thuyết, sách điện tử, v.v.
- Sử dụng máy ảnh để chụp ảnh màn hình nhãn hoặc hướng dẫn dán trên các sản phẩm gia dụng
Các cách kém hiệu quả nhất để lấy hình ảnh thử nghiệm như sau
- Tìm một cuốn sách và gõ vài đoạn đầu tiên trong bất kỳ tài liệu soạn thảo văn bản nào. Sau đó, in nó trên một tờ giấy A4 và quét dưới dạng pdf hoặc bất kỳ định dạng hình ảnh nào khác
- Thực hành chữ viết tay của bạn để viết như thể các từ đang được gõ. Kiếm đủ tiền để mua máy ảnh DSLR cao cấp hoặc điện thoại có camera chất lượng cao. Chụp ảnh màn hình và chuyển nó vào máy tính của bạn
- Nghiên cứu kiến thức cơ bản về pixel để lấp đầy canvas 128x128 bằng các khối ký tự. Nếu bạn cảm thấy quá tốn thời gian, hãy cân nhắc tham gia một số lớp lập trình và thuật toán để viết một số mã tự động hóa quy trình điền pixel
Tôi đã lưu những hình ảnh sau làm hình ảnh thử nghiệm
- biên lai
- Một bản tóm tắt từ một bài báo được xuất bản
- Giới thiệu từ một cuốn sách
- đoạn mã
- Một vài đoạn trong tiểu thuyết (tiếng Trung và tiếng Nhật)
- Một vài biểu tượng cảm xúc của Trung Quốc
Sơ chế
Hầu hết các hình ảnh yêu cầu một số hình thức hoặc tiền xử lý để cải thiện độ chính xác. Kiểm tra liên kết sau để tìm hiểu thêm về cách cải thiện chất lượng hình ảnh. Một vài lưu ý quan trọng cần được tính đến để có độ chính xác tốt nhất
- văn bản tối trên nền trắng
- hình ảnh đen trắng
- xóa kênh alpha (lưu hình ảnh dưới dạng jpeg/jpg thay vì png)
- tinh chỉnh thông qua các tham số psm (Chế độ phân đoạn trang)
Page Segmentation Mode sẽ được thảo luận sau, trong phần tiếp theo. Chúng tôi sẽ bắt đầu với việc chuyển đổi một hình ảnh thành đen trắng. Cho hình ảnh sau
Đoạn mã mẫu từ Notebook của tôi
Nếu bạn đang sử dụng Jupyter Notebook, bạn có thể nhập đoạn mã sau và nhấn Shift+Enter để thực thi mã
from PIL import Imagecolumn = Image.open('code.jpg')gray = column.convert('L')
blackwhite = gray.point(lambda x: 0 if x < 200 else 255, '1')
blackwhite.save("code_bw.jpg")
- Hình ảnh. mở ('mã. jpg’). mã số. jpg là tên của tập tin. Sửa đổi cái này theo tên của tệp đầu vào
- PIL. đề cập đến phiên bản cũ của Gối. Bạn chỉ cần cài đặt Gối và bạn sẽ có thể nhập mô-đun Hình ảnh. Không cài đặt cả Gối và PIL
- cột. chuyển đổi ('L'). L đề cập đến chế độ thang độ xám. Các tùy chọn khả dụng khác bao gồm RGB và CMYK
- x < 200 khác 255. tinh chỉnh giá trị 200 thành bất kỳ giá trị nào khác nằm trong khoảng từ 0 đến 255. Kiểm tra tệp đầu ra để xác định giá trị phù hợp
Nếu bạn đang sử dụng dòng lệnh để gọi tệp Python. Nhớ thay đổi tệp đầu vào và nhập sys
Phiên bản đen trắng của đoạn mã
Vui lòng thử các phương pháp xử lý hình ảnh khác để cải thiện chất lượng hình ảnh của bạn. Khi bạn đã hoàn tất, hãy chuyển sang phần tiếp theo
3. Sử dụng và lệnh gọi APISử dụng câu lệnh with cho một hình ảnh
Bạn có thể sử dụng câu lệnh with để khởi tạo đối tượng và pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl1 để lấy kết quả. Phương pháp này đang được gọi là trình quản lý ngữ cảnh. Nếu bạn không sử dụng câu lệnh with, thì nên gọi rõ ràng pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl2 khi nó không còn cần thiết nữa. Tham khảo ví dụ bên dưới để xử lý thủ công cho một hình ảnh
________số 8_______Nếu bạn gặp lỗi sau trong khi gọi, điều đó có nghĩa là chương trình không thể định vị các tệp dữ liệu ngôn ngữ (thư mục tessdata)
RuntimeError: Failed to init API, possibly an invalid tessdata path:Bạn có thể giải quyết vấn đề này bằng cách cung cấp đường dẫn làm đối số trong quá trình khởi tạo. Bạn thậm chí có thể chỉ định ngôn ngữ được sử dụng — như bạn có thể thấy trong ví dụ này (kiểm tra phần được tô đậm)
from tesserocr import PyTessBaseAPIwith PyTessBaseAPI(path='C:/path/to/tessdata/.', lang='eng') as api:api.SetImageFile('sample.jpg')
print(api.GetUTF8Text())
Xử lý thủ công cho một hình ảnh
Mặc dù phương thức được đề xuất là thông qua trình quản lý bối cảnh, nhưng bạn vẫn có thể khởi tạo nó dưới dạng đối tượng theo cách thủ công
from tesserocr import PyTessBaseAPIapi = PyTessBaseAPI(path='C:/path/to/tessdata/.', lang='eng')try:
api.SetImageFile('sample.jpg')
print(api.GetUTF8Text())
finally:
api.End()
Nhận giá trị tin cậy cho mỗi từ
PyTessBaseAPI có một số phương thức tesseract khác có thể được gọi. Điều này bao gồm nhận phiên bản tesseract hoặc thậm chí giá trị độ tin cậy cho mỗi từ. Tham khảo tesserorc. pyx để biết thêm thông tin. Để có được sự tự tin của từ, bạn chỉ cần sử dụng hàm pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl3)
pip install <package_name>.whl0Bạn sẽ nhận được một danh sách các số nguyên từ 0(tệ nhất) đến 100(tốt nhất) chẳng hạn như kết quả bên dưới (mỗi điểm đại diện cho một từ)
pip install <package_name>.whl1Nhận ngôn ngữ có sẵn
Ngoài ra còn có một chức năng để có được tất cả các ngôn ngữ có sẵn. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl4. Bạn có thể sử dụng đầu ra làm tham chiếu cho tham số lang
pip install <package_name>.whl2Đầu ra sau đây phụ thuộc vào số lượng tệp dữ liệu ngôn ngữ mà bạn có trong thư mục tessdata
pip install <package_name>.whl3Sử dụng câu lệnh with cho nhiều hình ảnh
Bạn có thể sử dụng danh sách để lưu trữ đường dẫn đến từng hình ảnh và gọi vòng lặp for để lặp từng hình ảnh
tesserocr cung cấp cho chúng ta rất nhiều hàm trợ giúp có thể được sử dụng với luồng để xử lý đồng thời nhiều hình ảnh. Phương pháp này có hiệu quả cao và nên được sử dụng bất cứ khi nào có thể. Để xử lý một hình ảnh duy nhất, chúng ta có thể sử dụng hàm trợ giúp mà không cần khởi tạo PyTessBaseAPI
Các chức năng trợ giúp có sẵn khác bao gồm
Nếu bạn muốn biết thêm về các lệnh gọi API có sẵn khác, hãy kiểm tra tesserocr. tập tin pyx. Hãy chuyển sang phần tiếp theo
4. tinh chỉnhTrong phần này, chúng ta sẽ khám phá cách tinh chỉnh tesserocr để phát hiện các ngôn ngữ khác nhau và đặt các PSM khác nhau (Chế độ phân đoạn trang)
Đặt ngôn ngữ khác
Bạn có thể thay đổi ngôn ngữ bằng cách chỉ định tham số ngôn ngữ trong quá trình khởi tạo. Ví dụ, để đổi ngôn ngữ từ tiếng Anh sang tiếng Trung giản thể, chỉ cần sửa eng thành chi_sim, như sau
pip install <package_name>.whl4Trên thực tế, bạn có thể chỉ định nhiều hơn một ngôn ngữ. Đơn giản chỉ cần viết nó bằng dấu +. Lưu ý rằng thứ tự rất quan trọng vì nó sẽ ảnh hưởng đến độ chính xác của kết quả
pip install <package_name>.whl5Một số ngôn ngữ, chẳng hạn như tiếng Nhật và tiếng Trung, có một danh mục riêng khác để nhận dạng văn bản dọc
pip install <package_name>.whl6Tham khảo đoạn mã sau về cách thay đổi ngôn ngữ trong quá trình khởi tạo
Đặt chế độ phân đoạn trang
Trong quá trình khởi tạo, bạn có thể đặt một tham số khác gọi là psm, tham số này đề cập đến cách mô hình sẽ xử lý hình ảnh. Nó sẽ ảnh hưởng đến độ chính xác, tùy thuộc vào cách bạn đặt nó. Nó chấp nhận bảng liệt kê PSM. Danh sách như sau
- 0. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl5 Chỉ định hướng và phát hiện tập lệnh
- 1. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl6 Tự động phân đoạn trang với định hướng và phát hiện tập lệnh. (OSD)
- 2. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl7 Phân đoạn trang tự động, nhưng không có OSD hoặc OCR
- 3. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl8 Phân đoạn trang hoàn toàn tự động, nhưng không có OSD. (chế độ mặc định cho tesserocr)
- 4. pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl9-Giả sử một cột văn bản có kích thước thay đổi
- 5. pip install Pillow0-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. pip install Pillow1-Giả sử một khối văn bản thống nhất
- 7. pip install Pillow2-Xử lý hình ảnh dưới dạng một dòng văn bản
- số 8. pip install Pillow3-Coi hình ảnh như một từ đơn
- 9. pip install Pillow4-Xử lý hình ảnh như một từ duy nhất trong một vòng tròn
- 10. pip install Pillow5-Xử lý hình ảnh dưới dạng một ký tự
- 11. pip install Pillow6-Tìm càng nhiều văn bản càng tốt không theo thứ tự cụ thể
- 12. pip install Pillow7-Văn bản thưa thớt với tính năng định hướng và phát hiện tập lệnh
- 13. pip install Pillow8-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
Bạn có thể chỉ định nó trong mã như sau
pip install <package_name>.whl7Nếu bạn gặp sự cố khi phát hiện văn bản, hãy thử cải thiện hình ảnh hoặc thay đổi các giá trị PSM
Tiếp theo, tôi sẽ chia sẻ một số kết quả thú vị mà tôi thu được
5. Kết quảĐây là kết quả từ thử nghiệm của tôi khi chạy tesserocr
Chinese emoticons (表情包)
Hình ảnh là tệp đầu vào được sử dụng trong khi chú thích là kết quả
是 的 没 错
你 巳 经 超 过 1 尘
没 理 你 的 小 宝 宝 了
后 退 , 我 要 开 始 装 逼 了
Kết quả khá tốt khi văn bản nằm trong một dòng. Cũng lưu ý rằng các biểu tượng cảm xúc có văn bản màu đen trên nền trắng. Tôi đã thử phủ văn bản màu trắng lên một cảnh trong hoạt hình (một cảnh có màu, không có bất kỳ hình ảnh xử lý trước nào). Kết quả khá tệ
văn bản kỹ thuật số tiếng anh
Hình ảnh là tệp đầu vào và chú thích là danh mục. Kết quả được hiển thị sau hình ảnh
Biên laipip install <package_name>.whl8
Sách điện tửpip install <package_name>.whl9
Tóm tắt bài báo khoa họcpip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl0
đoạn mã
Nhìn chung, kết quả rất xuất sắc, ngoại trừ một số vấn đề về định dạng, dấu cách và ngắt dòng
6. Phần kết luậnĐây là phần cuối của hướng dẫn của chúng tôi về cách sử dụng tesserocr để nhận dạng các từ kỹ thuật số trong hình ảnh. Mặc dù kết quả rất hứa hẹn nhưng vẫn còn rất nhiều việc phải làm để tạo ra một quy trình cho trường hợp sử dụng thực tế. Điều này bao gồm tiền xử lý hình ảnh, cũng như xử lý hậu kỳ văn bản
Ví dụ: để tự động điền tự động chứng minh nhân dân để đăng ký hoặc giấy biên nhận để điền bồi thường, có một ứng dụng hoặc dịch vụ web đơn giản chấp nhận đầu vào hình ảnh. Đầu tiên, ứng dụng cần cắt ảnh và chuyển thành ảnh đen trắng. Sau đó, nó sẽ chuyển hình ảnh đã sửa đổi để nhận dạng ký tự qua tesserocr. Văn bản đầu ra sẽ được xử lý tiếp để xác định dữ liệu cần thiết và lưu vào cơ sở dữ liệu. Một phản hồi đơn giản sẽ được chuyển tiếp đến người dùng, cho biết quá trình đã hoàn tất thành công
Bất kể công việc liên quan hiện nay là gì, công nghệ này vẫn ở đây. Bất cứ ai sẵn sàng dành thời gian và nguồn lực để triển khai nó sẽ được hưởng lợi từ nó. nơi nào có ý chí nơi đó có dường đi