API de traitement côté serveur de FormRead

Oscar Munoz Oscar Munoz · · 7 min de lecture

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:

Menu du tableau de bord FormRead avec l'option Jetons API mise en évidence

Créez les jetons API pour permettre à des services tiers de s'authentifier auprès de notre application en votre nom:

Création d'un nouveau jeton API FormRead avec des cases à cocher de permissions

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.

POST /api/forms/{form_id}/process

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 et image_base64 sont réservés aux images uniques.
  • Une URL en échec ne fait pas échouer tout le lot — cet élément reçoit "success": false et un champ error ; les autres continuent.
  • Les résultats conservent l'ordre soumis via id (indexé à partir de 0).
  • omr_details est 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_ms sur 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.

Arrêtez de corriger vos formulaires à la main.

Mettez FormRead au travail dès maintenant : créez votre formulaire, numérisez votre première feuille et obtenez des résultats structurés en quelques minutes.

Commencez maintenant — aucune carte bancaire requise