API de traitement côté serveur de FormRead
Traitement de formulaires côté serveur
L'API côté serveur FormRead vous permet d'envoyer une image de formulaire numérisé et de recevoir des résultats structurés (OMR, OCR, BCR) directement en JSON. Pas de navigateur, pas d'iframe - juste une simple requête HTTP de votre backend au nôtre.
- Envoyez une image, recevez des résultats en JSON en une seule requête
- Prend en charge l'OMR (détection de bulles), l'OCR (extraction de texte) et le BCR (lecture de codes-barres/QR)
- La configuration du formulaire est chargée automatiquement à partir du formulaire que vous avez configuré dans le tableau de bord
Quand utiliser cette API
Utilisez l'API côté serveur lorsque vous avez besoin d'un traitement automatisé serveur à serveur sans interface utilisateur - par exemple, pour traiter des lots de formulaires numérisés à partir d'un dossier, intégrer votre pipeline backend existant ou créer des systèmes de notation automatisés.
Si vous avez besoin d'une interface visuelle où les utilisateurs peuvent configurer des formulaires, examiner les résultats et faire de l'assurance qualité - utilisez le API d'intégration Iframe à la place.
Authentification
Pour les utilisations en entreprise, l'API peut être utilisée en générant un jeton d'authentification Bearer.
Connectez-vous au tableau de bord FormRead tableau de bord et accédez à l'option Token API:
Créez les jetons API pour permettre à des services tiers de s'authentifier auprès de notre application en votre nom:
Traiter une image de formulaire
Envoyez une image de formulaire numérisé à traiter. Le formulaire doit déjà être configuré avec des zones de lecture (OMR, OCR, BCR) via le tableau de bord ou l'iframe. L'API utilise la configuration enregistrée du formulaire pour traiter l'image.
En-têtes
| Nom | Valeur |
|---|---|
Authorization |
Bearer YOUR_API_TOKEN |
Accept |
application/json |
Content-Type |
application/json or multipart/form-data |
Avec téléchargement de fichier :
curl --location 'https://formread.org/api/forms/123/process' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--form 'image=@"/path/to/scanned-form.jpg"'
Avec URL d'image :
curl --location 'https://formread.org/api/forms/123/process' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"image_url": "https://example.com/scanned-form.jpg"}'
Réponse
{
"success": true,
"results": {
"OMR-0-0": "A",
"OMR-0-1": "C",
"OMR-0-2": "B,D",
"OCR-1": "John Smith",
"BCR-2": "1234567890"
},
"omr_details": {
"OMR-0": {
"questions": [
[
{"left": 0.12, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.72},
{"left": 0.15, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.15}
]
]
}
},
"anchor_error": false,
"processing_time_ms": 450
}
Champs de réponse
| Champ | Type | Description |
|---|---|---|
success |
boolean | Indique si le traitement a réussi |
results |
object | Paires clé-valeur des résultats de zone. Les clés sont les noms de zone (par exemple, OMR-0-0, OCR-1, BCR-2) |
omr_details |
object | Données détaillées au niveau des bulles pour les zones OMR, y compris les positions et les taux de remplissage |
anchor_error |
boolean | Vrai si la feuille de formulaire n'a pas pu être alignée (par exemple, coins non détectés) |
processing_time_ms |
integer | Temps de traitement en millisecondes |
Options d'entrée d'image
Vous pouvez fournir l'image de trois manières. Utilisez exactement une :
| Paramètre | Type | Description |
|---|---|---|
image |
file | Téléchargement de fichier (multipart/form-data) |
image_url |
string | URL publique de l'image |
image_base64 |
string | Données d'image encodées en Base64 |
Remarque
La configuration du formulaire (zones de lecture, seuils, ancres) est chargée automatiquement à partir du formulaire que vous avez configuré dans le tableau de bord FormRead. Vous n'avez pas besoin d'envoyer de configuration dans la requête.
Traitement par lots
Pour traiter plusieurs images du même formulaire en une seule requête, transmettez une liste d'URL séparées par des virgules dans le champ image_url. Les résultats sont renvoyés sous forme de tableau dans le même ordre.
Requête
curl --location 'https://formread.org/api/forms/123/process' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"image_url": "https://example.com/a.jpg,https://example.com/b.jpg,https://example.com/c.jpg"}'
Réponse
{
"results": [
{
"id": "0",
"image_url": "https://example.com/a.jpg",
"success": true,
"results": { "OMR-0-0": "A", "OCR-1": "John Smith" },
"anchor_error": false,
"processing_time_ms": 430
},
{
"id": "1",
"image_url": "https://example.com/b.jpg",
"success": true,
"results": { "OMR-0-0": "B", "OCR-1": "Jane Doe" }
},
{
"id": "2",
"image_url": "https://example.com/c.jpg",
"success": false,
"error": "Failed to fetch image from URL: 404"
}
],
"total": 3
}
Paramètres de lot
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
image_url |
string | — | Une ou plusieurs URL d'images publiques. Séparées par des virgules pour le mode lot. |
details |
boolean | false | Inclure omr_details (positions des bulles et taux de remplissage) dans chaque résultat de lot. Omis par défaut pour garder les réponses légères. |
Comportement du lot
- Le mode lot n'est disponible qu'avec
image_url. Les téléversements de fichiers etimage_base64sont réservés aux images uniques. - Une URL en échec ne fait pas échouer tout le lot — cet élément reçoit
"success": falseet un champerror; les autres continuent. - Les résultats conservent l'ordre soumis via
id(indexé à partir de 0). omr_detailsest toujours renvoyé en mode image unique ; en mode lot, il nécessite"details": true.
Lot avec omr_details
curl --location 'https://formread.org/api/forms/123/process' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"image_url": "https://example.com/a.jpg,https://example.com/b.jpg",
"details": true
}'
Limites
| Limite | Valeur | Comportement |
|---|---|---|
| Requêtes par minute | 60 |
Par jeton API. Le dépassement renvoie HTTP 429. |
| Délai d'expiration par requête | 60s |
Les requêtes dépassant 60 secondes sont interrompues avec une erreur. |
Une réponse 429 ressemble à ceci :
{
"message": "Too Many Attempts."
}
Une requête par lot compte comme une appel, quel que soit le nombre d'URL qu'elle contient.
Dimensionnement des lots
- Par lot : mesurez
processing_time_mssur un échantillon de réponse en image unique, puis constituez un lot qui se termine confortablement en moins de 60 secondes. - Entre les lots : espacez les requêtes pour rester sous 60 par minute.
- Taille d'image : réduisez côté client aux dimensions les plus petites qui donnent toujours des résultats corrects. C'est le levier le plus important sur le temps par image.
Types de zones pris en charge
| Type | Description | Format des résultats |
|---|---|---|
| OMR | Reconnaissance optique de marques - détecte les bulles remplies sur les feuilles de réponses | "A", "B,C" |
| OCR | Reconnaissance optique de caractères - extrait le texte imprimé ou manuscrit | "John Smith" |
| BCR | Reconnaissance de codes-barres/QR - lit les codes-barres et les codes QR | "1234567890" |
Exemples de code
Voici des exemples complets en Python et JavaScript pour traiter une image de formulaire :
Python
import requests
API_URL = "https://formread.org/api/forms/{form_id}/process"
TOKEN = "YOUR_API_TOKEN"
with open("scanned-form.jpg", "rb") as f:
response = requests.post(
API_URL.format(form_id=123),
headers={
"Accept": "application/json",
"Authorization": f"Bearer {TOKEN}",
},
files={"image": f},
)
data = response.json()
print(data["results"])
# {"OMR-0-0": "A", "OMR-0-1": "C", "OCR-1": "John Smith"}
Node.js
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
const form = new FormData();
form.append('image', fs.createReadStream('scanned-form.jpg'));
const response = await axios.post(
'https://formread.org/api/forms/123/process',
form,
{
headers: {
...form.getHeaders(),
'Accept': 'application/json',
'Authorization': 'Bearer YOUR_API_TOKEN',
},
}
);
console.log(response.data.results);
// { 'OMR-0-0': 'A', 'OMR-0-1': 'C', 'OCR-1': 'John Smith' }
Questions fréquentes
Que fait l'API de traitement côté serveur ?
Vous envoyez une image de formulaire scannée via un seul HTTP POST et vous recevez des résultats structurés OMR (bulles), OCR (texte) et BCR (codes-barres/QR) en JSON - sans navigateur ni iframe.
Comment authentifier les requêtes ?
Passez votre jeton d'accès personnel comme jeton Bearer dans l'en-tête Authorization : Authorization: Bearer VOTRE_TOKEN_API. Générez le jeton depuis la section API Tokens de votre tableau de bord FormRead.
Puis-je traiter plusieurs images dans une seule requête ?
Oui. Passez une liste d'URLs publiques séparées par des virgules dans le champ image_url. Les résultats reviennent dans un tableau respectant l'ordre d'envoi, et une URL en échec n'impacte que son propre élément - les autres continuent.
Quelles sont les limites de taux et de taille ?
Jusqu'à 60 requêtes par minute par jeton API, avec un délai de traitement de 60 secondes par requête. Une requête par lots compte comme un seul appel, quel que soit le nombre d'URLs qu'elle contient.
Dois-je envoyer la configuration du formulaire à chaque requête ?
Non. La configuration du formulaire - zones de lecture, seuils, ancres - est chargée automatiquement depuis le formulaire configuré dans votre tableau de bord FormRead. Votre requête a seulement besoin de l'image et de l'id du formulaire dans l'URL.