Extraction de texte OCR
Discuse extrait le texte des images et des documents afin que vous puissiez lire — et modérer — du contenu qui serait autrement invisible pour un filtre textuel. Envoyez jusqu’à 5 URL d’images ou de documents à POST /api/v2/ocr et vous récupérez le texte reconnu, ainsi que, par défaut, ce texte soumis aux contrôles de contenu de votre projet.
Pourquoi utiliser l’OCR pour la modération ?
De nombreux abus se cachent dans les images : une insulte intégrée à un mème, un lien de phishing dans une capture d’écran, un numéro de téléphone frauduleux sur un flyer. Une vérification de texte simple ne les voit jamais. L’OCR extrait d’abord les mots, afin que les mêmes contrôles de sentiment, de spam, de mots interdits et de langue que vous appliquez déjà au texte s’appliquent aussi au contenu des images et des documents.
Comment extraire du texte ?
Envoyez une ou plusieurs URL de fichiers. moderate vaut true par défaut, donc le texte extrait est également vérifié et vous recevez un objet results en retour ; définissez-le sur false si vous voulez uniquement le texte brut.
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
}'
Une seule requête accepte jusqu’à 5 URL d’images ou de documents.
Réponse
{
"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
}
}
Lorsque moderate vaut false (ou qu’aucun texte n’a été trouvé), results est omis et has_violations vaut false — vous obtenez simplement le text extrait.
Champs de la requête
| Champ | Type | Remarques |
|---|---|---|
api_key |
string | Facultatif dans le corps ; vous pouvez envoyer X-API-Key à la place |
file_urls |
string[] | URL d’images ou de documents à lire. Au moins une est requise, jusqu’à 5 |
moderate |
boolean | Fait passer le texte extrait par vos contrôles textuels. Vaut true par défaut |
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
text |
string | Texte reconnu, concaténé à partir de tous les fichiers |
has_text |
boolean | True si un texte non vide a été reconnu |
num_files |
number | Nombre de fichiers lus avec succès |
has_violations |
boolean | True si le texte modéré a déclenché un contrôle |
results |
object | Les résultats des contrôles textuels (voir Analyse de texte), présents uniquement lorsque la modération a été exécutée et qu’un texte a été trouvé |
usage |
object | api_requests_used, api_requests_limit, api_requests_remaining |
L’objet results a la même structure que POST /api/v2/check — spamfinder, sentiment, language, badwords, ainsi que l’indicateur de premier niveau hits. Consultez Analyse de texte pour le détail des champs.
Limites d’utilisation
L’OCR est une fonctionnalité réservée aux offres payantes ; chaque fichier dont vous extrayez le contenu compte une fois dans votre quota OCR.
| Offre | Extractions OCR mensuelles | Tarif de dépassement |
|---|---|---|
| Basic | Non disponible | - |
| Gold | 1,000 | $0.0015/extraction |
| Platinum | 2,000 | $0.001275/extraction (15 % de réduction) |
| Ultimate | 4,000 | $0.001125/extraction (25 % de réduction) |
Si un projet n’a pas d’abonnement actif, les requêtes OCR sont refusées.
Bonnes pratiques
Modérez en un seul appel
Laissez moderate activé (valeur par défaut) lorsque votre objectif est de détecter les violations de règles dans les images. Un seul appel OCR extrait le texte et le vérifie, au lieu d’un appel OCR suivi d’un appel /check séparé.
async function moderateImage(fileUrl) {
const res = await ocr([fileUrl], true);
if (res.has_violations) {
await flagForReview(fileUrl, res.results);
}
return res.text;
}
Vérifiez has_text avant d’agir
Une image sans texte lisible renvoie has_text: false et un text vide. Utilisez cette information pour éviter de considérer « rien à lire » comme « propre et confirmé ».
Regroupez les fichiers liés
Si une soumission contient plusieurs images, envoyez-les ensemble (jusqu’à 5) dans une seule requête plutôt que de faire un appel par fichier — moins d’allers-retours, et une seule réponse comptabilisée dans le quota.
Exemples d’intégration
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()
Prêt à lire le texte des images ? Commencez avec Discuse.