Hướng dẫn php tesseract-ocr

Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn cách DeCaptcha sử dụng thư viện AForge. NET in Csharp setting

Chắc chắn các bạn ai cũng biết Captcha là gì?

Hiện tại, thì bài viết này chắc cũng ít ứng dụng, vì vậy giờ đa số các website đều sử dụng thư viện Recaptcha API của Google

Nhưng bài viết này, mình viết để các bạn tham khảo

Vậy Decaptcha là gì?

Decptcha là cách chúng ta giải mã hình ảnh của Captcha thành chuỗi (chuỗi) để điền vào biểu mẫu để mình tự động gửi yêu cầu http

Nhận dạng ký tự quang học (OCR) là quá trình chuyển đổi văn bản in thành biểu diễn kỹ thuật số. Nó có tất cả các loại ứng dụng thực tế — từ số hóa sách in, tạo hồ sơ điện tử về biên lai, đến nhận dạng biển số và thậm chí phá vỡ CAPTCHA dựa trên hình ảnh

Hướng dẫn php tesseract-ocr

Tesseract là một chương trình nguồn mở để thực hiện OCR. Bạn có thể chạy nó trên các hệ thống *Nix, Mac OSX và Windows, nhưng sử dụng thư viện, chúng tôi có thể sử dụng nó trong các ứng dụng PHP. Hướng dẫn này được thiết kế để chỉ cho bạn cách

Cài đặt

Sự chuẩn bị

Để giữ mọi thứ đơn giản và nhất quán, chúng tôi sẽ sử dụng Máy ảo để chạy ứng dụng mà chúng tôi sẽ cung cấp bằng Vagrant. Điều này sẽ đảm nhiệm việc cài đặt PHP và Nginx, mặc dù chúng tôi sẽ cài đặt riêng Tesseract để minh họa quy trình

Nếu bạn muốn cài đặt Tesseract trên hệ thống dựa trên Debian hiện có của riêng mình, bạn có thể bỏ qua phần tiếp theo này — hoặc truy cập README để biết hướng dẫn cài đặt trên các hệ thống *nix khác, Mac OSX (gợi ý — sử dụng MacPorts. ) hoặc Windows

Thiết lập mơ hồ

Để thiết lập Vagrant để bạn có thể làm theo hướng dẫn, hãy hoàn thành các bước sau. Ngoài ra, bạn chỉ cần lấy mã từ Github

Nhập lệnh sau để tải xuống cấu hình Homestead Cải tiến Vagrant vào thư mục có tên

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
9

git clone https://github.com/Swader/homestead_improved ocr

Hãy thay đổi cấu hình Nginx trong

192.168.10.10       homestead.app
0 từ

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public

…đến…

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public

Bạn cũng cần thêm phần sau vào tệp máy chủ của mình

192.168.10.10       homestead.app

Cài đặt nhị phân Tesseract

Bước tiếp theo là cài đặt tệp nhị phân Tesseract

Vì Homestead Cải tiến sử dụng bản phân phối Linux dựa trên Debian, chúng tôi có thể sử dụng

192.168.10.10       homestead.app
1 để cài đặt nó sau khi đăng nhập vào máy ảo bằng
192.168.10.10       homestead.app
2. Nó đơn giản như chạy lệnh sau

________số 8

Như tôi đã đề cập ở trên, có hướng dẫn cho các hệ điều hành khác trong README

Kiểm tra và tùy chỉnh cài đặt

Chúng ta sẽ sử dụng trình bao bọc PHP, nhưng trước khi bắt đầu xây dựng, chúng ta có thể kiểm tra xem Tesseract có hoạt động không bằng cách sử dụng dòng lệnh

Đầu tiên, nhấp chuột phải và lưu hình ảnh này

(Hình ảnh lịch sự của Clipart Panda)

Trong VM (

192.168.10.10       homestead.app
2), hãy chạy lệnh sau để “đọc” hình ảnh và thực hiện quy trình OCR

git clone https://github.com/Swader/homestead_improved ocr
0

Điều này tạo ra một tệp trong thư mục hiện tại có tên là

192.168.10.10       homestead.app
4, tất cả đều ổn, phải chứa từ “THẬN TRỌNG”

Bây giờ hãy thử với tệp sign2. jpg

(Hình ảnh là một phiên bản điều chỉnh của cái này)

git clone https://github.com/Swader/homestead_improved ocr
2

Lần này, bạn sẽ thấy rằng nó được tạo ra từ “Einbahnstral'ie”. Gần đúng, nhưng không đúng — mặc dù văn bản trong hình ảnh khá sắc nét và rõ ràng, nhưng nó không thể nhận ra ký tự eszett (ß)

Để Tesseract đọc đúng chuỗi, chúng ta cần cài đặt một số tệp ngôn ngữ mới - trong trường hợp này là tiếng Đức

Có một danh sách đầy đủ các tệp ngôn ngữ có sẵn ở đây, nhưng chúng ta hãy tải xuống tệp thích hợp trực tiếp

git clone https://github.com/Swader/homestead_improved ocr
3

…giải nén nó…

git clone https://github.com/Swader/homestead_improved ocr
4

Sau đó sao chép các tập tin vào thư mục sau

git clone https://github.com/Swader/homestead_improved ocr
5

e. g

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
0

Bây giờ hãy chạy lại lệnh trước đó, nhưng sử dụng công tắc

192.168.10.10       homestead.app
5 như sau

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
1

“deu” là mã ISO 639-3 cho tiếng Đức

Lần này, văn bản phải được xác định chính xác là “Einbahnstraße”

Vui lòng thêm các ngôn ngữ bổ sung bằng cách lặp lại quy trình này

Thiết lập ứng dụng

Chúng tôi sẽ sử dụng thư viện trình bao bọc này để sử dụng Tesseract từ PHP

Chúng tôi sẽ tạo một ứng dụng web thực sự đơn giản cho phép mọi người tải lên một hình ảnh và xem kết quả của quy trình OCR. Chúng tôi sẽ sử dụng vi khung Silex để triển khai nó - mặc dù đừng lo lắng nếu bạn không quen với nó, vì bản thân ứng dụng sẽ rất đơn giản

Hãy nhớ rằng tất cả mã cho hướng dẫn này đều có sẵn trên Github

Bước đầu tiên là cài đặt các phụ thuộc bằng Composer

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
2

Bây giờ hãy tạo ba thư mục sau

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
3

Chúng tôi sẽ cần một biểu mẫu tải lên (

192.168.10.10       homestead.app
6)

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
4

Và một trang cho kết quả (

192.168.10.10       homestead.app
7)

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
5

Bây giờ hãy tạo ứng dụng khung xương Silex (

192.168.10.10       homestead.app
8)

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
6

Nếu bạn truy cập ứng dụng trong trình duyệt của mình, bạn sẽ thấy biểu mẫu tải tệp lên. Nếu bạn đang theo dõi và sử dụng Homestead Cải thiện với Vagrant, bạn sẽ tìm thấy nó tại URL sau

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
7

Bước tiếp theo là thực hiện upload file. Silex làm điều này thực sự dễ dàng; . Đây là một số mã để xử lý tệp đã tải lên (lưu ý rằng mã này đi theo lộ trình POST)

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
8

Như bạn có thể thấy, chúng tôi đang tạo một tên tệp gần như ngẫu nhiên để giảm thiểu xung đột tên tệp — nhưng cuối cùng trong ngữ cảnh của ứng dụng này, việc chúng tôi gọi tệp đã tải lên là gì không thực sự quan trọng

Khi chúng tôi có một bản sao của tệp trên hệ thống tệp cục bộ, chúng tôi có thể tạo một phiên bản của thư viện Tessearct, chuyển cho nó đường dẫn đến hình ảnh mà chúng tôi muốn phân tích

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Project/public
9

Thực hiện OCR trên hình ảnh thực sự đơn giản. Chúng ta chỉ đơn giản gọi phương thức

sudo apt-get install tesseract-ocr
1

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
0

Cuối cùng, chúng tôi có thể hiển thị trang kết quả, chuyển cho nó kết quả của OCR

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
1

Hãy dùng thử trên một số hình ảnh và xem nó hoạt động như thế nào. Nếu bạn gặp sự cố khi nhận dạng hình ảnh, bạn có thể thấy hữu ích khi tham khảo hướng dẫn về cải thiện chất lượng

Một ví dụ thực tế

Hãy xem xét một ứng dụng thực tế hơn của công nghệ OCR. Trong ví dụ này, chúng tôi sẽ cố gắng tìm và định dạng một số điện thoại được nhúng trong một hình ảnh

Hãy xem hình ảnh sau đây và thử tải nó lên ứng dụng của bạn

Hướng dẫn php tesseract-ocr

Kết quả sẽ giống như thế này

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
2

Nó không nhận được văn bản nội dung, điều mà chúng tôi có thể mong đợi do chất lượng hình ảnh kém. Nó đã xác định được số điện thoại, nhưng cũng có thêm một số "tiếng ồn" trong đó

Để thử và trích xuất thông tin liên quan, có một vài điều chúng ta có thể làm

Bạn có thể yêu cầu Tesseract giới hạn đầu ra của nó trong các phạm vi ký tự nhất định. Vì vậy, chúng ta có thể yêu cầu nó chỉ trả về các chữ số bằng cách sử dụng dòng sau

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
3

Có một vấn đề với điều này, tuy nhiên. Thay vì bỏ qua các ký tự không phải là số, thay vào đó, nó thường diễn giải các chữ cái dưới dạng chữ số. Ví dụ: tên “Bob” có thể được hiểu là số “808”

Thay vào đó, hãy sử dụng quy trình hai giai đoạn

  1. Cố gắng trích xuất chuỗi số, có thể là số điện thoại
  2. Sử dụng thư viện để xác thực lần lượt từng ứng viên, dừng lại khi chúng tôi tìm thấy số điện thoại hợp lệ

Đối với phần đầu tiên, chúng ta có thể sử dụng biểu thức chính quy thô sơ. Để thử và xác định xem một chuỗi số có phải là số điện thoại hợp lệ hay không, chúng tôi có thể sử dụng libphonenumber của Google

Ghi chú. Tôi đã viết về libphonenumber ở đây trên Sitepoint như một phần của bài viết có tựa đề Làm việc với số điện thoại trong JavaScript

Hãy thêm một cổng PHP của thư viện libphonenumber vào tệp

sudo apt-get install tesseract-ocr
2 của chúng ta

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
4

Đừng quên cập nhật

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
5

Bây giờ chúng ta có thể viết một hàm nhận vào một chuỗi và cố gắng trích xuất một số điện thoại hợp lệ từ chuỗi đó

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
6

Hy vọng rằng các ý kiến ​​​​sẽ giải thích những gì chức năng đang làm. Lưu ý rằng nếu thư viện không phân tích được một chuỗi số dưới dạng số điện thoại thì nó sẽ đưa ra một ngoại lệ. Đây không phải là một vấn đề như vậy;

Nếu chúng tôi tìm thấy một số điện thoại, chúng tôi sẽ trả lại số đó bằng E. định dạng 164. Điều này cung cấp một phiên bản được quốc tế công nhận của một số, sau đó chúng tôi có thể sử dụng để thực hiện cuộc gọi hoặc gửi SMS

Bây giờ chúng ta có thể sử dụng nó như sau

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
7

Chúng tôi cần cung cấp libphonenumber với một "gợi ý" về quốc gia mà số điện thoại được đặt. Bạn có thể muốn thay đổi điều này cho đất nước của bạn

Chúng ta có thể kết thúc tất cả những điều này trong một lộ trình mới

sites:
    - map: homestead.app
      to: /home/vagrant/Code/public
8

Giờ đây, chúng tôi có cơ sở của một API đơn giản - do đó có phản hồi JSON - mà chúng tôi có thể sử dụng, chẳng hạn như phần cuối của một ứng dụng di động đơn giản để thêm danh bạ hoặc thực hiện cuộc gọi từ một số điện thoại được in

Tóm lược

OCR có nhiều ứng dụng — và việc tích hợp vào các ứng dụng của bạn dễ dàng hơn bạn có thể mong đợi. Trong bài viết này, chúng tôi đã cài đặt gói OCR mã nguồn mở; . Chúng tôi mới chỉ thực sự chạm vào bề mặt của những gì có thể, nhưng hy vọng điều này đã cho bạn một số ý tưởng về cách bạn có thể sử dụng công nghệ này trong các ứng dụng của riêng mình

Chia sẻ bài viết này

Lukas trắng

Lukas là một nhà phát triển web và di động tự do có trụ sở tại Manchester ở miền Bắc nước Anh. Anh ấy đã phát triển PHP kể từ khi rời xa những ngày đầu phát triển web bằng cách sử dụng tất cả các loại công cụ như Trang máy chủ Java, đảo dữ liệu ASP và XML cổ điển, cùng với JavaScript - trở lại thời điểm thực sự là JavaScript và Netscape thống trị. Khi anh ấy không phát triển trang web và ứng dụng di động và phàn nàn rằng đây là tất cả các lĩnh vực, Lukas thích nấu tất cả các loại thức ăn của Thế giới