O CAPTCHA de imagem voltou com texto errado? Antes de abrir chamado de suporte, confira estas três causas:
- Qualidade da imagem — captcha pequeno, animado ou com fundo transparente prejudica a leitura.
- Parâmetro de dica ausente —
numeric,regsense,min_len/max_lenoucalcnão configurado para o tipo de captcha. - Formato de envio incorreto — base64 com prefixo
data:image/...ou arquivo corrompido no envio.
Este guia mostra como diagnosticar e corrigir cada uma na API da CaptchaAI.
Checklist rápido: parâmetros da API para corrigir a maioria dos erros
Ajuste o parâmetro certo abaixo antes de reenviar a imagem.
| Parâmetro | Quando usar | Efeito |
|---|---|---|
numeric=1 |
CAPTCHA só com dígitos | Elimina a confusão entre letra e número |
numeric=2 |
CAPTCHA só com letras | Elimina a confusão entre letra e número |
min_len / max_len |
Comprimento da resposta é conhecido | Evita caracteres extras ou faltando |
regsense=1 |
Maiúsculas e minúsculas importam | Preserva a caixa original do texto |
calc=1 |
O captcha é uma expressão matemática | Retorna o resultado já calculado |
phrase=1 |
A resposta tem espaços | Aceita respostas com várias palavras |
language=1 |
Texto em cirílico | Usa o conjunto de caracteres correto |
language=2 |
Texto em latim | Usa o conjunto de caracteres correto |
Se não resolver, veja o envio ou a imagem abaixo.
Erros ao enviar a imagem para a API
Estes erros acontecem antes da leitura do texto: geralmente é formato, tamanho ou codificação. Os três códigos mais comuns:
ERROR_WRONG_FILE_EXTENSION— formato ou base64 inválidoERROR_ZERO_CAPTCHA_FILESIZE— arquivo vazioERROR_TOO_BIG_CAPTCHA_FILESIZE— arquivo grande demais
ERROR_WRONG_FILE_EXTENSION
- Causa: a imagem não está em um formato aceito ou a string base64 está inválida.
- Correção: valide a codificação antes de enviar, como no exemplo abaixo.
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
- Causa: o arquivo de imagem chegou vazio ou o download falhou antes do envio.
- Correção: confira o tamanho do arquivo antes de enviar, como no exemplo abaixo.
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
- Causa: a imagem ultrapassa o tamanho máximo aceito (normalmente 600 KB).
- Correção: reduza o arquivo antes de enviar, como no exemplo abaixo.
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)
Texto errado ou incompleto no retorno
Quando o envio funciona mas a resposta não bate, falta um parâmetro de dica. Os quatro cenários mais comuns:
- Caracteres parecidos trocados entre si (0/O, 1/l/I, 5/S)
- Caixa errada (maiúsculas viram minúsculas)
- Caracteres sobrando ou faltando
- Expressão matemática devolvida sem calcular
Caracteres parecidos trocados entre si
- Causa: o solucionador confunde caracteres visualmente semelhantes (0/O, 1/l/I, 5/S).
- Correção: use os parâmetros de dica para restringir o conjunto de caracteres esperado:
# 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
})
Caixa errada (maiúsculas trocadas por minúsculas)
- Causa: por padrão, o solucionador devolve o texto em minúsculas.
- Correção: ative
regsense=1para preservar a diferenciação entre maiúsculas e minúsculas:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"regsense": 1, # Case-sensitive
"json": 1
})
Caracteres sobrando ou faltando
- Causa: ruído na imagem é interpretado como caractere, ou dois caracteres colados são lidos como um só.
- Correção: fixe o comprimento mínimo e máximo esperado:
# 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
})
Expressão matemática devolvida sem calcular
- Causa: o solucionador lê o texto "3+7" literalmente, em vez de calcular e devolver "10".
- Correção: ative
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
})
Qualidade da imagem: a causa mais comum de erro de OCR
Antes de qualquer parâmetro, confirme a imagem — boa parte dos erros "da API" vêm daqui. Três sintomas cobrem quase todos os casos:
- Captcha pequeno demais (menos de 50 px de altura)
- Captcha animado, com o texto visível só em alguns quadros
- Fundo transparente que o OCR não interpreta bem
CAPTCHA muito pequeno
- Problema: imagens com menos de 50 px de altura perdem detalhe dos caracteres.
- Correção: capture no maior tamanho disponível. É comum em pipelines de QA com Selenium ou Playwright headless e viewport reduzido: o script que funciona localmente falha no CI porque o captcha sai menor. Se a página renderizar o captcha pequeno, verifique se existe uma URL de origem em resolução mais alta:
# 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 animado
- Problema: alguns captchas usam GIFs animados em que o texto só aparece em determinados quadros.
- Correção: extraia o quadro certo:
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")
CAPTCHA com fundo transparente
- Problema: PNG com fundo transparente pode não ser lido corretamente pelo OCR.
- Correção: adicione um fundo branco antes de enviar:
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")
Como reportar uma resposta errada e recuperar o crédito
Se a CaptchaAI devolver o texto errado, siga dois passos:
- Confirme o
task_idretornado no envio original. - Envie a chamada
reportbadcom esse ID.
# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "reportbad",
"id": task_id
})
Isso ajuda a aprimorar a precisão do solucionador e costuma devolver o crédito da requisição. Se as capturas de teste tiverem dado real, considere a LGPD antes de guardá-las — prefira staging com dados fictícios.
Perguntas frequentes
Recebo ERROR_WRONG_FILE_EXTENSION mesmo enviando um PNG válido. O que verificar primeiro?
Confira se a string base64 não inclui o prefixo data:image/png;base64, — a API espera receber só o conteúdo já codificado, puro.
Por que meu captcha volta errado por apenas um caractere?
Normalmente é comprimento mal calculado. Configure min_len e max_len quando souber o tamanho exato, e confirme que a imagem não está borrada.
Base64 ou upload de arquivo: qual devo usar na integração?
Os dois têm a mesma taxa de acerto. Base64 é mais prático para uso programático; upload de arquivo se encaixa melhor em formulários multipart.
O reportbad realmente devolve o crédito da requisição?
Quando a resposta é confirmada como incorreta, sim — o crédito costuma ser devolvido e ajuda a treinar o solucionador para esse padrão.