Script Python Bypass Captcha MKU gọi API để lấy captcha, OCR thành text và trả về kết quả ở định dạng JSON.
Phát triển: Thái Nguyên - Telegram: @tn2k6
Dự án này tự động hóa 3 bước chính:
- Gọi API để lấy captcha mới nhất.
- Giải mã ảnh captcha từ chuỗi
data:image/...;base64,.... - Chạy OCR trên nhiều phiên bản tiền xử lý của cùng một ảnh, sau đó chọn ra kết quả hợp lý nhất.
- Python 3.10+
- Các thư viện trong
requirements.txt
pip install -r requirements.txtIn ra JSON kết quả captcha:
python captcha_ocr.pyLấy captcha và lưu ảnh ra file:
python captcha_ocr.py --save-image captcha.pngLuồng xử lý tổng thể của script:
fetch_captcha()Gọi APIGetCaptchađể nhận về JSON chứaimgvàtoken.decode_data_image()Tách phần base64 trong trườngimg, giải mã thành bytes và nạp thành ảnh RGB.solve_captcha()Chạy nhiều pipeline tiền xử lý trên cùng một ảnh gốc.run_ddddocr()OCR từng ảnh đã tiền xử lý bằngddddocr.vote_text()Tổng hợp tất cả kết quả OCR, mở rộng các ký tự dễ nhầm lẫn, tính điểm và chọn chuỗi tốt nhất.main()In ra stdout đối tượng JSON gồmstatus,captcha,text,tokenđể dễ sử dụng tiếp trong script khác.
Script không chỉ OCR ảnh gốc một lần, mà áp dụng chiến lược nhiều pipeline để tăng độ ổn định:
- Chuyển xám, tăng tương phản, lọc nhiễu và phóng to ảnh.
- Tạo ảnh nhị phân để làm rõ foreground/background.
- Đảo màu ảnh nhị phân để thử trường hợp OCR phân tích tốt hơn với polarity ngược lại.
- Tăng cường biên để giữ nét chữ khi nền có nhiều nhiễu.
Mỗi pipeline trả về một kết quả OCR. Hệ thống sau đó:
- Chuẩn hóa kết quả, chỉ giữ lại chữ và số.
- Chấm điểm heuristic dựa trên:
- độ dài chuỗi,
- mức độ phù hợp với độ dài captcha kỳ vọng,
- việc chuỗi có cả chữ và số hay không,
- mức độ lặp lại ký tự,
- phạt nhẹ các ký tự dễ OCR nhầm như
0,1.
- Sinh thêm các biến thể cho nhóm ký tự dễ nhầm lẫn như
0/O/o,1/I/l,5/S/s,2/Z/z. - Cộng điểm đồng thuận cho các chuỗi được nhiều pipeline hoặc nhiều biến thể cùng ủng hộ.
- Chọn chuỗi có tổng điểm cao nhất làm kết quả cuối.
Captcha thường thay đổi về:
- độ đậm/nhạt của nét chữ,
- độ tương phản giữa chữ và nền,
- nhiễu hạt hoặc viền mờ,
- kiểu ký tự dễ nhầm lẫn.
Một pipeline có thể tốt với ảnh này nhưng lại kém với ảnh khác. Cách tiếp cận hiện tại giảm phụ thuộc vào một kiến trúc tiền xử lý duy nhất bằng cách để nhiều pipeline cùng "bỏ phiếu".
fetch_captcha(): Gọi API và kiểm tra payload hợp lệ.decode_data_image(): Chuyển data URL base64 thành đối tượng ảnh Pillow.preprocess_gray(): Pipeline cơ sở để làm sạch ảnh OCR.preprocess_binary(): Tạo ảnh đen-trắng rõ foreground/background.preprocess_invert_binary(): Đảo màu ảnh binary.preprocess_edges(): Tăng cường đường biên ký tự.run_ddddocr(): OCR 1 ảnh đã xử lý.score_text(): Chấm điểm chất lượng chuỗi OCR.generate_text_variants(): Tạo biến thể cho ký tự dễ nhầm.vote_text(): Hợp nhất kết quả từ nhiều pipeline.solve_captcha(): Điều phối toàn bộ quá trình OCR.
Script in ra JSON với 4 trường:
status:truenếu OCR ra được text không rỗng, ngược lại làfalse.captcha: Chuỗi ảnh captcha gốc dạng data URL từ API.text: Kết quả OCR sau khi bỏ phiếu.token: Token captcha trả về từ API.
Ví dụ:
{
"status": true,
"captcha": "data:image/png;base64,iVBORw0KGgo...",
"text": "Ab3dEf",
"token": "example-token"
}captcha_ocr.py: Script lấy captcha, tiền xử lý ảnh, OCR và bỏ phiếu kết quả.requirements.txt: Danh sách thư viện cần cài.captcha.png: Ảnh captcha mẫu được nhúng trực tiếp trong README..gitignore: Bỏ qua file tạm, cache và file hệ thống/editor.
- Script hiện tại sử dụng
ddddocrlàm OCR engine chính. - OCR captcha không đảm bảo đúng 100% cho mọi ảnh.
- Heuristic scoring và mapping ký tự dễ nhầm đang được tối ưu cho captcha hiện tại; nếu cấu trúc captcha thay đổi mạnh, cần điều chỉnh lại ngưỡng và pipeline.
