HomeOur Team
Giải mã Captcha
Articles
Giải mã Captcha
hoang.le
hoang.le
September 19, 2020
4 min
  • Chắc mọi người đều đã quen thuộc với thuật ngữ CAPTCHA, nó là những hình ảnh khó chịu chứa văn bản mà bạn phải nhập trước khi có thể truy cập vào một trang web.CAPTCHA là viết tắt của “Completely Automated Public Turing test to tell Computers and Humans Apart”.

  • Mục đích chính của CAPTCHA là ngăn chặn việc tự động hóa nội dung trên internet bằng bot hay nói cách khác đó là một bài kiểm tra được sử dụng trong máy tính để xác định xem người dùng có phải là con người hay không. Nhưng với sự gia tăng của học sâu và tầm nhìn máy tính, giờ đây chúng thường có thể bị đánh bại một cách dễ dàng.Và đến bây giờ thì có rất rất nhiều cách để có thể giải mã CAPTCHA.

  • Sau đây mình sẽ giới thiệu cho mọi người các bạn cách giải mã captcha bằng Machine learning

  • Các bước thực hiện :

    • Thu thập dữ liệu
    • Xử lý ảnh
    • Training the Model
    • Giải mã
  • Flow giải mã CAPTCHA

I. Thu thập dữ liệu

  • Chúng ta lúc mới được sinh ra thì mọi thứ đối với chúng ta lúc đấy cũng chỉ là trang giấy trắng tinh mơ. Thế mà khi lớn lên chúng ta có thể nhận biết được nhiều thứ như chiếc cốc, cái ghế,…
  • Vậy làm sao để chúng ta làm được như vậy? Đó là do chúng đã tiếp thu và học được kiến thức từ nhưng thứ xung quanh , những thứ mà chúng nhìn thấy được, nghe được. Sau đó chúng suy luận và đưa ra sự nhận biết của chúng.
  • Giải mã captcha cũng vậy, để giải mã captcha chúng ta cần phải cho nó nhìn thấy những mẫu captcha để chúng có thể phân biệt được. Dữ liệu captcha càng nhiều thì chúng ta sẽ có thể suy luận và đưa ra giải mã đúng nhất.
  • Nên việc thu thập dữ liệu nó rất quan trọng, nếu chúng ta thu thập được càng nhiều dữ liệu captcha mẫu để phan tích và xử lý thì tỷ lệ để giải mã captcha sẽ rất cao.

Đây là ví dụ 1 danh sách các captcha.

II. Xử lý ảnh.

  • Trong phần xử lý ảnh này chũng ta sẽ có 4 phần.
    • Đánh dấu ảnh
    • Xử lý nhiễu
    • Cắt ảnh và lưu ảnh

1. Đánh dấu ảnh.

  • Đối với từng ảnh mẫu chúng ta thu thập được khi được đưa vào máy sẽ không thể biết nội dung ảnh là gì.

  • Vậy bước đầu tiên chúng ta cần phải đánh dấu ảnh bằng cách thay đổi tên của từng ảnh theo nội dung của ảnh đó.

  • Có nhiều cách để đánh dấu cho một tập dữ liệu, tùy vào đặc thù bài toán mà ta sẽ lựa chọn:

    • Đánh thủ công bằng tay
    • Sử dụng các API có sẵn
    • Tự viết script
    • Sử dụng các model Machine Learning đã được train sẵn
  • Ví dụ 1 số ảnh đã được đổi tên

2. Xử lý nhiễu.

  • Ảnh Captcha hầu như sẽ bị làm nhiễu hay làm mờ các ký tự để bot không thể đọc được. Nên việc xử lý nhiễu này sẽ giúp chúng ta đưa ảnh về hình dạng dễ nhận biết được nhất.
  • Mỗi trang web sẽ có từng loại captcha khác nhau. Một số dạng như sau :

  • Đối với từng dạng ảnh sẽ có cách xử lý nhiễu khác nhau. Thường 1 bức ảnh sẽ có 2 phông màu sáng và tối nên mình sẽ đưa ảnh về đen trắng để làm rõ ảnh nhất. Sau đây là cách xử lý nhiễu theo dạng ảnh của mình.

  • Kết quả sau khi xử lý nhiễu.

3. Cắt ảnh

  • Khi ảnh mẫu được được làm rõ thì đến bước này chúng ta sẽ xử lý cắt từng ký tự trong ảnh ra làm nhiều ảnh con.
  • Coi ảnh giống như một ma trận các điểm, ta sẽ duyệt một vòng các cột của ma trận từ trái sang phải. Tại mỗi cột, nếu cột đó có pixel màu đen thì có nghĩa là cột đó chứa một phần ký tự.
  • Ta ghi nhớ index cột khi bắt đầu chạm vào ký tự và cột khi bắt đầu ra khỏi ký tự bằng các biến found và in_letter, sau đó cắt các ký tự ra theo các giá trị đó.

  • Các ảnh cắt ra phải cùng một kích cỡ, nên đồng thời với cắt ta sẽ resize ảnh về kích cỡ phù hợp, ở đây mình chọn là 30x60.

Ta sẽ được các ký tự giống như thế này:

  • Mỗi ảnh con sẽ được lưu vào thư mục có tên theo từng ký tự của file ảnh ở bước 1 đã đánh dấu.

III. Training the Model

  • Khi chúng ta chỉ cần xác định từng chữ cái của CAPTCHA thì ta không cần một mạng neural quá phức tạp để giải mã CAPTCHA. Nhận diện từng kí tự dễ dàng hơn rất nhiều so với nhận diện ảnh.

  • Chúng ta sẽ sử dụng mạng Neural với thiết kế như sau:

  • Để xác định mạng này, chúng ta code đơn giản bằng cách sử dụng Keras:

  • Sau khi chạy xong thì chúng ta tạo được 1 file model. (captcha_model.hdf5)

IV. Giải mã

  • Ở bước này chúng ta cần thực hiện các bước sau :
    • Lấy captcha cần xử lý, thực hiện phần xử lý ảnh ở bước 2, chia nhỏ CAPTCHA thành các ký tự.
    • Sử dụng model đã được tạo ở bước 3 để phần tích từng ký tự.
    • Ghép các ký tự lại để lấy kết quả.

Link tham khảo:


Tags

#captcha#092020#model#data processing
hoang.le

hoang.le

Developer

Related Posts

Imperative và Declarative trong Swift
Imperative và Declarative trong Swift
September 28, 2020
2 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media