OCR de graphique
Vous avez un graphique en image — capture d’un rapport, histogramme d’une présentation, courbe tirée d’un PDF — mais pas les chiffres qui vont avec. Cette capacité lit le tracé, repère les axes et les séries, puis vous rend les valeurs sous forme de tableau, prêtes à recalculer ou à comparer.
Exécuter en ligne
Exécutez cette tâche sur nos serveurs, avec votre compte. Les outils gratuits tournent dans votre navigateur ; celui-ci est facturé sur votre solde KIT au prix affiché ci-dessus.
Des axes et des séries, pas seulement des pixels
Un graphique porte une information chiffrée que l’œil lit mal : la valeur exacte d’un point, l’écart entre deux barres, la pente d’une courbe. La capacité repère les axes, leurs graduations et les séries représentées, puis reconstitue les valeurs point par point. Vous récupérez un tableau exploitable là où vous n’aviez qu’une image, sans replacer chaque repère à la main ni redessiner la source dans un tableur.
Quand la source chiffrée a disparu
Le cas le plus fréquent : un histogramme figure dans un rapport ou une diapositive, mais le fichier de données d’origine est introuvable. Plutôt que de réestimer chaque valeur à vue, vous confiez l’image à la capacité, qui en extrait les chiffres. C’est particulièrement utile pour reprendre un graphique publié, comparer deux périodes ou vérifier un ordre de grandeur avant de le citer ailleurs.
Tarif à l’image et canaux d’exécution
L’extraction coûte $0.010 par requête, plus $0.0575 par image, en dollars US, sans abonnement. Vous ne payez que ce que vous traitez. La capacité, aujourd’hui en version bêta, s’utilise directement sur cette page; elle est aussi accessible par l’API pour automatiser une série d’images, avec une arrivée prévue sur mobile. Le traitement est asynchrone: vous envoyez l’image, une tâche démarre, les valeurs reviennent une fois l’analyse faite.
Cas d’usage
Reprendre un histogramme d’un rapport
Studio Lumen SAS récupère les chiffres d’un histogramme figurant dans un rapport client, dont le fichier source a été perdu, pour les réutiliser dans une nouvelle présentation.
Vérifier un ordre de grandeur
Thomas Rousseau extrait les valeurs d’une courbe publiée dans un document public afin d’en contrôler l’évolution avant de la citer dans une note.
Comparer deux périodes
Élodie Garnier tire les données de deux graphiques distincts pour les rapprocher dans un même tableau et mesurer l’écart d’une année sur l’autre.
Questions fréquentes
Quels types de graphiques sont pris en charge ?
Les plus courants : histogrammes, courbes, camemberts et nuages de points. La lecture est d’autant plus fidèle que les axes sont gradués et que les valeurs sont annotées sur le tracé.
Les valeurs sont-elles exactes au chiffre près ?
Quand le graphique affiche ses valeurs, elles sont reprises telles quelles. Sans étiquettes, la capacité estime les valeurs d’après les graduations des axes : le résultat est fidèle mais reste une lecture, à recouper pour un usage sensible.
Que se passe-t-il si le graphique n’a pas d’étiquettes de valeurs ?
La lecture s’appuie alors sur l’échelle des axes pour estimer chaque point. Plus les graduations sont nettes et régulières, plus l’estimation est proche.
Combien coûte une extraction ?
$0.010 par requête et $0.0575 par image, en dollars US. Pas d’abonnement : vous payez à l’image traitée. Règlement par PayPal, facture sur demande.
Mon image est-elle conservée ?
Non. Le transfert est chiffré, l’image n’est traitée que le temps d’en extraire les valeurs, puis supprimée. Rien n’est archivé et aucune personne ne consulte votre fichier.
Quelle taille d’image est acceptée ?
Jusqu’à 25 Mo par image.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/ocr/chart \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/ocr/chart", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/chart",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/chart", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/chart", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"image": "https://ejemplo.com/imagen.jpg"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.chart",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 25 |
max_pages | 10 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
422 | task_failed | La tâche a échoué : elle ne vous est pas facturée. |