Khắc Phục Sự Cố

Các lỗi và cách sửa lỗi OCR CAPTCHA phổ biến

OCR CAPTCHA trả sai ký tự thường không phải vì bộ giải kém, mà vì thiếu tham số gợi ý hoặc ảnh đầu vào có vấn đề. Một team QA ở TP.HCM theo dõi giá Shopee từng gặp tỷ lệ sai ký tự cao bất thường — hoá ra chỉ vì quên gửi numeric=1 cho CAPTCHA toàn chữ số. Dưới đây là từng lỗi Image/text CAPTCHA kèm nguyên nhân và cách sửa.


Tra cứu nhanh: tham số nào sửa lỗi nào

Tham số hay dùng khi gửi task tới in.php:

Tham số Khi nào dùng Tác dụng
numeric=1 CAPTCHA chỉ gồm chữ số Loại bỏ nhầm lẫn chữ/số
numeric=2 CAPTCHA chỉ gồm chữ cái Loại bỏ nhầm lẫn chữ/số
min_len / max_len Biết trước độ dài đáp án Ngăn ký tự bị thừa/thiếu
regsense=1 Cần phân biệt hoa/thường Giữ nguyên hoa/thường trong kết quả
calc=1 Ảnh chứa phép tính Trả về đáp án đã tính, không phải chuỗi đề bài
phrase=1 Đáp án có khoảng trắng Cho phép câu trả lời nhiều từ
language=1 Văn bản Cyrillic Dùng đúng bộ ký tự
language=2 Văn bản Latin Dùng đúng bộ ký tự

Lỗi khi gửi request

Xảy ra trước khi CaptchaAI đọc được ảnh, thường do định dạng hoặc dung lượng file.

ERROR_WRONG_FILE_EXTENSION: ảnh sai định dạng hoặc base64 hỏng

Nguyên nhân: ảnh sai định dạng, hoặc chuỗi base64 vẫn còn dính tiền tố data:image/.... Cách sửa: mã hoá lại đúng chuẩn và bỏ tiền tố trước khi gửi:

import base64

# Ensure proper encoding
with open("captcha.png", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

# Don't include the data URI prefix
# WRONG: "data:image/png;base64,iVBOR..."
# RIGHT: "iVBOR..."

ERROR_ZERO_CAPTCHA_FILESIZE: file ảnh rỗng

Nguyên nhân: file ảnh trống, hoặc bước tải ảnh đã thất bại trước khi gửi lên. Cách sửa: kiểm tra dung lượng file trước khi submit:

import os

# Check file size before submitting
if os.path.getsize("captcha.png") == 0:
    print("Image file is empty — re-download")
    # Re-capture the captcha

ERROR_TOO_BIG_CAPTCHA_FILESIZE: ảnh vượt giới hạn dung lượng

Nguyên nhân: ảnh vượt quá dung lượng tối đa (~600KB). Cách sửa: nén lại mà không làm mất độ nét của ký tự:

from PIL import Image
import io

img = Image.open("captcha.png")
# Reduce quality without losing text clarity
buffer = io.BytesIO()
img.save(buffer, format="PNG", optimize=True)

Kết quả OCR trả về sai ký tự

Request được chấp nhận bình thường nhưng văn bản trả về không khớp ảnh gốc.

Nhầm ký tự giống nhau (0/O, 1/l/I, 5/S)

Nguyên nhân: bộ giải nhầm các ký tự hình dạng gần giống nhau. Cách sửa: dùng tham số gợi ý để thu hẹp tập ký tự có thể xảy ra:

# If captcha is digits only
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "base64", "body": b64,
    "numeric": 1,  # 1 = digits only
    "json": 1
})

# If captcha is letters only
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "base64", "body": b64,
    "numeric": 2,  # 2 = letters only
    "json": 1
})

Sai hoa/thường

Nguyên nhân: mặc định bộ giải trả kết quả chữ thường. Cách sửa: bật regsense=1 để phân biệt hoa/thường:

response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "base64", "body": b64,
    "regsense": 1,  # Case-sensitive
    "json": 1
})

Thừa hoặc thiếu ký tự

Nguyên nhân: nhiễu ảnh bị đọc nhầm thành ký tự, hoặc hai ký tự dính liền bị gộp một. Cách sửa: khai báo độ dài đáp án cố định:

# If you know the CAPTCHA is always 6 characters
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "base64", "body": b64,
    "min_len": 6,
    "max_len": 6,
    "json": 1
})

Không tính được biểu thức toán học

Nguyên nhân: bộ giải đọc đúng chuỗi "3+7" nhưng trả nguyên văn thay vì kết quả "10". Cách sửa: bật calc=1:

response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "base64", "body": b64,
    "calc": 1,  # Compute the math expression
    "json": 1
})

Ảnh CAPTCHA chất lượng kém

Ba dạng ảnh sau gây lỗi OCR dù tham số đã đúng.

Ảnh quá nhỏ

Vấn đề: ảnh có chiều cao dưới 50px làm mất chi tiết ký tự. Cách sửa: chụp ở kích thước lớn nhất hiện có; nếu trang nhúng ảnh nhỏ, kiểm tra URL nguồn có bản độ phân giải cao hơn:

# Check for higher-res version
img_src = captcha_el.get_attribute("src")
# Some sites use ?size=small — try removing or changing the parameter
high_res_src = img_src.replace("size=small", "size=large")

CAPTCHA dạng ảnh động (GIF)

Vấn đề: một số CAPTCHA dùng GIF động, văn bản chỉ hiện rõ ở vài khung hình nhất định. Cách sửa: tách từng khung hình và chọn khung có chữ:

from PIL import Image

gif = Image.open("captcha.gif")
# Extract each frame and find the one with text
for i in range(gif.n_frames):
    gif.seek(i)
    gif.save(f"frame_{i}.png")

Nền ảnh trong suốt

Vấn đề: PNG nền trong suốt có thể khiến OCR đọc sai. Cách sửa: thêm nền trắng trước khi gửi:

from PIL import Image

img = Image.open("captcha.png").convert("RGBA")
background = Image.new("RGBA", img.size, (255, 255, 255, 255))
background.paste(img, mask=img)
background.convert("RGB").save("captcha_white_bg.png")

Báo lỗi kết quả sai để CaptchaAI cải thiện độ chính xác

CaptchaAI trả sai? Báo lỗi thay vì tự sửa tay — dữ liệu này giúp cải thiện độ chính xác và có thể được hoàn phí giải đó:

# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
    "key": API_KEY,
    "action": "reportbad",
    "id": task_id
})

Câu hỏi thường gặp

Vì sao kết quả OCR luôn sai đúng một ký tự?

Gần như luôn do thiếu min_len/max_len — nhiễu ảnh bị đọc nhầm thành ký tự thừa, hoặc hai ký tự dính liền bị gộp. Khai báo độ dài cố định trước khi kiểm tra chất lượng ảnh.

CaptchaAI có giải được CAPTCHA âm thanh không?

Không. Quy trình OCR này chỉ áp dụng cho CAPTCHA dạng ảnh/văn bản; CAPTCHA âm thanh cần luồng xử lý khác — xem tài liệu API CaptchaAI.

Tỷ lệ lỗi OCR bình thường là bao nhiêu?

Không có con số cố định. Sai vượt quá vài phần trăm trên cùng một loại CAPTCHA gần như luôn là thiếu tham số (numeric, regsense, min_len), không phải lỗi bộ giải.

Có cần bật calc=1 cho mọi CAPTCHA dạng phép tính không?

Có. Nếu không, bộ giải trả nguyên chuỗi "3+7" thay vì "10" — không dùng được để điền form.

CAPTCHA có dấu tiếng Việt thì xử lý thế nào?

Hiếm gặp trên các trang phổ biến. Bộ ký tự tiếng Việt vẫn là Latin, nên thử language=2 trước; nếu vẫn sai, bỏ tham số language để bộ giải tự nhận diện.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.