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 Show
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ế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
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 tesserocr con trănBạ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 pipTả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>.whl Package_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.whl Bướ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 Pillow Tệ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
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/tessdata 2. Chuẩn bị hình ảnh thử nghiệmLưu hình ảnhCác cách hiệu quả nhất để có được hình ảnh thử nghiệm như sau
Các cách kém hiệu quả nhất để lấy hình ảnh thử nghiệm như sau
Tôi đã lưu những hình ảnh sau làm hình ảnh thử nghiệm
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
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ôiNế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')
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 ảnhBạ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.whl 1 để 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.whl 2 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: Xử lý thủ công cho một hình ảnhMặ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') 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.whl 3)pip install <package_name>.whl 0Bạ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>.whl 1Nhận ngôn ngữ có sẵnNgoà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.whl 4. Bạn có thể sử dụng đầu ra làm tham chiếu cho tham số langpip install <package_name>.whl 2Đầ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>.whl 3Sử dụng câu lệnh with cho nhiều hình ảnhBạ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ácBạ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>.whl 4Trê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>.whl 5Mộ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>.whl 6Tham 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 trangTrong 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
Bạn có thể chỉ định nó trong mã như sau pip install <package_name>.whl 7Nế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 anhHì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>.whl 8Sách điện tửpip install <package_name>.whl 9Tóm tắt bài báo khoa họcpip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl 0đ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 Làm cách nào để nhập Tesseract trong Python?MỞ MỘT HÌNH ẢNH ĐƠN GIẢN . Nhập cv2 Nhập pytesseract Lưu hình ảnh thử nghiệm trong cùng thư mục Tạo một biến để lưu trữ hình ảnh bằng cv2. imread() và chuyển tên của hình ảnh làm tham số Để thay đổi kích thước hình ảnh, hãy sử dụng cv2. resize() và vượt qua độ phân giải cần thiết Sử dụng cv2. . Thêm một cv2 Làm cách nào để triển khai OCR trong Python?Python OCR là công nghệ nhận dạng và trích xuất văn bản trong hình ảnh như tài liệu và ảnh được quét bằng Python. Nó có thể được hoàn thành bằng cách sử dụng công cụ OCR mã nguồn mở Tesseract . Chúng ta có thể làm điều này trong Python bằng một vài dòng mã. Một trong những công cụ OCR phổ biến nhất được sử dụng là Tesseract.
Tesseract có sử dụng máy học không?Tesseract 3. x dựa trên thuật toán thị giác máy tính truyền thống . Trong vài năm qua, các phương pháp dựa trên Học sâu đã vượt qua các kỹ thuật học máy truyền thống bằng một khoảng cách rất lớn về độ chính xác trong nhiều lĩnh vực của Thị giác máy tính. Nhận dạng chữ viết tay là một trong những ví dụ nổi bật.
Làm cách nào để python chuyển đổi hình ảnh thành văn bản bằng OCR với Tesseract?Pytesseract hay Python-tesseract là công cụ Nhận dạng ký tự quang học (OCR) dành cho python. . Đang tải Hình ảnh được lưu từ máy tính hoặc tải xuống bằng trình duyệt và sau đó tải tương tự. (Mọi hình ảnh có văn bản) Nhị phân hóa hình ảnh (Chuyển đổi hình ảnh thành nhị phân) Sau đó chúng tôi sẽ chuyển hình ảnh qua hệ thống OCR |