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
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/public9
git clone //github.com/Swader/homestead_improved ocrHãy thay đổi cấu hình Nginx trong 192.168.10.10 homestead.app0 từ
sites: - map: homestead.app to: /home/vagrant/Code/Project/public…đến…
sites: - map: homestead.app to: /home/vagrant/Code/publicBạ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.appCà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.app1 để cài đặt nó sau khi đăng nhập vào máy ảo bằng 192.168.10.10 homestead.app2. Nó đơn giản như chạy lệnh sau
________số 8Như 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.app2), hãy chạy lệnh sau để “đọc” hình ảnh và thực hiện quy trình OCR
git clone //github.com/Swader/homestead_improved ocr0Đ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.app4, 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 //github.com/Swader/homestead_improved ocr2Lầ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 //github.com/Swader/homestead_improved ocr3…giải nén nó…
git clone //github.com/Swader/homestead_improved ocr4Sau đó sao chép các tập tin vào thư mục sau
git clone //github.com/Swader/homestead_improved ocr5e. g
sites: - map: homestead.app to: /home/vagrant/Code/Project/public0Bâ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.app5 như sau
sites: - map: homestead.app to: /home/vagrant/Code/Project/public1“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/public2Bây giờ hãy tạo ba thư mục sau
sites: - map: homestead.app to: /home/vagrant/Code/Project/public3Chúng tôi sẽ cần một biểu mẫu tải lên (192.168.10.10 homestead.app6)
sites: - map: homestead.app to: /home/vagrant/Code/Project/public4Và một trang cho kết quả (192.168.10.10 homestead.app7)
sites: - map: homestead.app to: /home/vagrant/Code/Project/public5Bây giờ hãy tạo ứng dụng khung xương Silex (192.168.10.10 homestead.app8)
sites: - map: homestead.app to: /home/vagrant/Code/Project/public6Nế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/public7Bướ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/public8Như 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/public9Thự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-ocr1
sites: - map: homestead.app to: /home/vagrant/Code/public0Cuố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/public1Hã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
Kết quả sẽ giống như thế này
sites: - map: homestead.app to: /home/vagrant/Code/public2Nó 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/public3Có 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
- Cố gắng trích xuất chuỗi số, có thể là số điện thoại
- 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-ocr2 của chúng ta
sites: - map: homestead.app to: /home/vagrant/Code/public4Đừng quên cập nhật
sites: - map: homestead.app to: /home/vagrant/Code/public5Bâ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/public6Hy 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/public7Chú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/public8Giờ đâ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