Extracción de texto con OCR
Discuse extrae el texto de imágenes y documentos para que puedas leer —y moderar— contenido que, de otro modo, sería invisible para un filtro de texto. Envía hasta 5 URL de imágenes o documentos a POST /api/v2/ocr y recibirás el texto reconocido; además, de forma predeterminada, ese texto se procesa con las comprobaciones de contenido de tu proyecto.
¿Por qué usar OCR para moderación?
Muchos abusos se esconden dentro de imágenes: un insulto incrustado en un meme, un enlace de phishing en una captura de pantalla, un número de teléfono fraudulento en un folleto. Una comprobación de texto sin formato nunca los ve. OCR extrae primero las palabras, de modo que las mismas comprobaciones de sentimiento, spam, palabras prohibidas e idioma que ya aplicas al texto también se apliquen al contenido de imágenes y documentos.
¿Cómo extraigo texto?
Envía una o varias URL de archivos. moderate tiene como valor predeterminado true, así que el texto extraído también se comprueba y recibes un objeto results; configúralo como false si solo quieres el texto sin procesar.
curl -X POST https://api.discuse.com/api/v2/ocr \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"file_urls": ["https://example.com/user-meme.jpg"],
"moderate": true
}'
Una sola solicitud acepta hasta 5 URL de imágenes o documentos.
Respuesta
{
"text": "BUY FOLLOWERS NOW — dm @spammer for 50% off",
"has_text": true,
"num_files": 1,
"has_violations": true,
"results": {
"hits": true,
"spamfinder": {
"label": "spam",
"confidence": 0.94,
"is_spam": true,
"hit": true
}
},
"usage": {
"api_requests_used": 412,
"api_requests_limit": 10000,
"api_requests_remaining": 9588
}
}
Cuando moderate es false (o no se encontró texto), results se omite y has_violations es false: solo recibes el text extraído.
Campos de la solicitud
| Campo | Tipo | Notas |
|---|---|---|
api_key |
string | Opcional en el cuerpo; también puedes enviar X-API-Key |
file_urls |
string[] | URL de imágenes o documentos para leer. Se requiere al menos una, hasta 5 |
moderate |
boolean | Procesa el texto extraído con tus comprobaciones de texto. El valor predeterminado es true |
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
text |
string | Texto reconocido, concatenado entre todos los archivos |
has_text |
boolean | True si se reconoció algún texto no vacío |
num_files |
number | Número de archivos leídos correctamente |
has_violations |
boolean | True si el texto moderado activó una comprobación |
results |
object | Los resultados de las comprobaciones de texto (consulta Análisis de texto), presentes solo cuando se ejecutó la moderación y se encontró texto |
usage |
object | api_requests_used, api_requests_limit, api_requests_remaining |
El objeto results tiene la misma estructura que POST /api/v2/check: spamfinder, sentiment, language, badwords y el indicador de nivel superior hits. Consulta Análisis de texto para ver los detalles de los campos.
Límites de uso
OCR es una función de los planes de pago; cada archivo del que extraigas texto cuenta una vez contra tu cuota de OCR.
| Plan | Extracciones OCR mensuales | Tarifa por exceso |
|---|---|---|
| Basic | No disponible | - |
| Gold | 1,000 | $0.0015/extraction |
| Platinum | 2,000 | $0.001275/extraction (15% discount) |
| Ultimate | 4,000 | $0.001125/extraction (25% discount) |
Si un proyecto no tiene una suscripción activa, las solicitudes de OCR se rechazan.
Buenas prácticas
Modera en una sola llamada
Deja moderate activado (el valor predeterminado) cuando tu objetivo sea detectar infracciones de políticas en imágenes. Una sola llamada de OCR extrae el texto y lo comprueba, en lugar de hacer una llamada de OCR seguida de otra llamada independiente a /check.
async function moderateImage(fileUrl) {
const res = await ocr([fileUrl], true);
if (res.has_violations) {
await flagForReview(fileUrl, res.results);
}
return res.text;
}
Comprueba has_text antes de actuar
Una imagen sin texto legible devuelve has_text: false y un text vacío. Ramifica tu lógica en función de ello para no tratar “no hay nada que leer” como “limpio y confirmado”.
Agrupa archivos relacionados
Si un envío incluye varias imágenes, envíalas juntas (hasta 5) en una sola solicitud en lugar de hacer una llamada por archivo: menos idas y vueltas, y una sola respuesta contabilizada en la cuota.
Ejemplos de integración
Node.js
async function ocr(fileUrls, moderate = true) {
const response = await fetch('https://api.discuse.com/api/v2/ocr', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.DISCUSE_API_KEY
},
body: JSON.stringify({ file_urls: fileUrls, moderate })
});
return response.json();
}
Python
import os
import requests
def ocr(file_urls, moderate=True):
response = requests.post(
'https://api.discuse.com/api/v2/ocr',
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['DISCUSE_API_KEY']
},
json={'file_urls': file_urls, 'moderate': moderate}
)
return response.json()
¿Listo para leer texto de imágenes? Empieza con Discuse.