17

Lisez les codes barres

scancode

POST https://tesseractor.com/api/v1/scancode?login=&password=

loginVotre code d'identification.
passwordVotre mot de passe.
multipart/form-data
fileContenu du PDF ou de l'image JPG, PNG ou GIF en binaire.
yoloDétection des codes barres (expérimental).
resolutionRésolution en dpi de l'image générée pour chaque page d'un PDF.
imagesExtraction directe des seules images d'un PDF.
rotateRotation des images.
cropDécouper les images.
reframeRecadrer les images sur un fond.
unborderSupprimer les lignes de bordure.
resizeRedimensionner les images.
normalizeAjouter du contraste aux couleurs.
colorspaceConvertir en niveaux de gris.
unsharpAccentuer les contours.
dotsSupprimer les points blancs.

yolo -  : 1 - chaque image est découpée autour des codes barres à l'aide du système de détection d'objets. IMPORTANT : Ne fonctionne pour l'instant que sur des codes QR.

Indiquez le mode d'extraction de chaque page d'un PDF :

resolution : résolution de l'image générée en dpi - 50, 75, 100, 125, 150 ou 200. IMPORTANT : Si une page ne contient qu'une image et aucun texte, l'image est systématiquement directement extraite du document.
images : 1 - extraire uniquement directement toutes les images.

Activez les options de traitement de chaque image avant analyse :

rotate : 180 pour retourner l'image, -90 ou 90 pour la tourner vers la gauche ou vers la droite,
crop -  : découper l'image à la taille spécifiée par une largeur et une hauteur séparées par un x à partir d'une position spécifiée par des coordonnées x et y précédées par un +, e.g. 640x200+50+80,
reframe -  : recadrer l'image sur un fond avec un niveau de flou entre 1 et 20, e.g. 5,
unborder -  : retirer les bordures avec, séparées par un x, la largeur et la hauteur maximum d'un texte entre 10 et 1000 pixels, e.g. 30x30,
resize -  : redimensionner l'image de 50, 75, 125, 150 ou 200 %,
normalize -  : 1 - ajouter du contraste aux couleurs,
colorspace -  : 1 - convertir les couleurs en niveaux de gris,
unsharp -  : 1 - accentuer les contours,
dots -  : 1 - supprimer les points blancs.

IMPORTANT : Les options de traitement d'une image sont effectués dans l'ordre ci-dessus.

Pour avoir une bonne compréhension des effets de ces paramètres, testez-les dans l'interface de votre espace personnel.

barcode39.jpg ean128.gif qr.png
$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@barcode39.jpg" -o -
WIKIPEDIA
$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@ean128.gif" -o -
010123456789012815057072
$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@qr.png" -o -
https://www.wikipedia.org

Sur le PDF qui contient les 3 images, une par page :

$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@barcodes.pdf" -o -
WIKIPEDIA
010123456789012815057072
https://www.wikipedia.org
$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@barcodes.pdf" -F "firstpage=3" -o -
https://www.wikipedia.org
3qr1.jpg 3qr2.jpg 3qr3.jpg
$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "images=1" -F "file=@3qr.pdf" -o -
210934
NEWDOC
https://www.tesseractor.com
https://www.tesseractor.com
NEWDOC
210934
210934
NEWDOC
https://www.tesseractor.com

Le PDF a 3 pages :
1 •  2 images avec 1 QR https://www.tesseractor.com + les 2 QR NEWDOC et 210934,
2 •  3 images avec 1 QR https://www.tesseractor.com + 1 QR NEWDOC + 1 QR 210934,
3 •  1 seule image avec les 3 QR.

L'option images=1 extrait directement les images dans leur tailles d'origine, sans le texte. Essayez avec l'option resolution=125.

YOLO (You Only Look Once)

dqr.jpg

$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "file=@dqr.jpg" -o -
210968

Seul 1 QR est lu par ZBar.

$ curl -s --fail --show-error -X POST "https://tesseractor.com/api/v1/scancode?login=abcdef&password=ABCDEF" -F "yolo=1" -F "file=@dqr.jpg" -o -
210968
NEWDOC

À l'aide de YOLO, l'image est analysée et découpée en 2 images distinctes que ZBar peut facilement décoder.

yolo_dqr.jpg

Traitement par lots

Téléchargez le programme scancode2csv.php :

IMPORTANT : Éditez les constantes LOGIN et PASSWORD dans le fichier avant de l'essayer et sélectionnez la liste des traitements opérés sur chaque fichier dans le tableau $passes.

Copiez tous les PDF et les JPG, PNG ou GIF à traiter dans un dossier et tapez la commande suivante :

$ php -f scancode2csv.php dir file.csv

Affichez les résultats dans le fichier file.csv avec votre tableur.

  1. define('USAGE', 'php -f %s dir file.csv');
  2.  
  3. function abort($msg, $code=1) {
  4.     echo $msg, PHP_EOL;
  5.     exit($code);
  6. }
  7.  
  8. function usage() {
  9.     global $argv;
  10.  
  11.     abort(sprintf(USAGE, basename($argv[0])), 1);
  12. }
  13.  
  14. if ($argc != 3) {
  15.     usage();
  16. }
  17.  
  18. $dir=$argv[1];
  19. $csv=$argv[2];
  20.  
  21. define('LOGIN', 'abcdef');
  22. define('PASSWORD', 'ABCDEF');
  23.  
  24. define('DELIMITER', ',');
  25. define('ENCLOSURE', '"');
  26. define('ESCAPE', '\\');
  27.  
  28. define('URL', 'https://tesseractor.com/api/v1/scancode' . '?' . 'login=' . urlencode(LOGIN) . '&' . 'password=' . urlencode(PASSWORD));
  29.  
  30. define('SCANCODE', 'curl -s --fail --show-error -X POST "' . URL . '" -F "file=@%s" %s -o -');
  31.  
  32. $passes=array(
  33.     'YOLO_0_IMAGES_1'               => '-F "yolo=0" -F "images=1"',
  34. //  'YOLO_1_IMAGES_1'               => '-F "yolo=1" -F "images=1"',
  35. //  'YOLO_0_IMAGES_1_RESIZE_150'    => '-F "yolo=0" -F "images=1" -F "resize=150"',
  36. //  'YOLO_0_DPI_125'                => '-F "yolo=0" -F "resolution=125"',
  37. );
  38.  
  39. $filelist=@scandir($dir, SCANDIR_SORT_NONE);
  40.  
  41. if (!$filelist) {
  42.     abort($dir . '?');
  43. }
  44.  
  45. sort($filelist, SORT_NATURAL);
  46.  
  47. $csvout = @fopen($csv, 'w');
  48.  
  49. if ($csvout === false) {
  50.     abort($csv . '?');
  51. }
  52.  
  53. $headline=array(false);
  54.  
  55. foreach ($passes as $label => $arg) {
  56.     $headline[]=$label;
  57.     $headline[]=''; // count
  58.     $headline[]=''; // secs
  59. }
  60.  
  61. if (fputcsv($csvout, $headline, DELIMITER, ENCLOSURE, ESCAPE) === false) {
  62.     abort($csv . '?');
  63. }
  64.  
  65. foreach ($filelist as $file) {
  66.     if ($file == '.' || $file == '..')
  67.         continue;
  68.  
  69.     echo $file, PHP_EOL;
  70.  
  71.     $line=array($file);
  72.  
  73.     foreach ($passes as $label => $arg) {
  74.         $cmdline=sprintf(SCANCODE, $dir . DIRECTORY_SEPARATOR . $file, $arg);
  75.  
  76.         $output=false;
  77.  
  78.         $stime=microtime(true);
  79.  
  80.         @exec($cmdline, $output, $ret);
  81.  
  82.         $etime=microtime(true);
  83.  
  84.         $line[]=$ret == 0 && $output ? implode("\n", $output) : false;
  85.         $line[]=$ret == 0 && $output ? count($output) : 0;
  86.         $line[]=$ret == 0 ? sprintf('%0.2f', round($etime-$stime, 2)) : false;
  87.     }
  88.  
  89.     if (fputcsv($csvout, $line, DELIMITER, ENCLOSURE, ESCAPE) === false) {
  90.         abort($csv . '?');
  91.     }
  92. }
  93.  
  94. exit(0);

Téléchargez le code des fonctions sendpost et file_mime_type de la librairie iZend. Copiez les fichiers dans l'espace de votre application.

NOTE : Reportez-vous à la page Appelez l'API du service pour une description des fonctions sendpost et file_mime_type.

Ajoutez le fichier scancode.php avec le contenu suivant :

  1. require_once 'sendhttp.php';
  2. require_once 'filemimetype.php';

Charge le code des fonctions sendpost et file_mime_type.

  1. function scancode($login, $password, $file, $yolo=false, $output='file.txt', $params=false) {

Définit la fonction scancode. $login est votre code d'identification. $password est votre mot de passe. $file est le chemin d'accès du fichier PDF, JPEG, PNG ou GIF à analyser. Si $yolo vaut true, chaque image est découpée autour des codes barres à l'aide du système de détection d'objets. $output donne le nom du fichier texte qui contiendra le résultat de l'analyse de $file. $params est un tableau associatif contenant les noms et les valeurs des paramètres spécifiant le mode d'extraction de chaque page d'un PDF et les options de traitement de chaque image avant analyse, e.g. array('images' => true).

  1.     $curl = 'https://tesseractor.com/api/v1/scancode' . '?' . 'login=' . urlencode($login) . '&' . 'password=' . urlencode($password);

Met $curl à l'URL de l'action scancode avec le code d'identification et le mot de passe du compte de l'utilisateur. $login et $password doivent être échappés.

  1.     $args = array(
  2.         'yolo'      => $yolo ? '1' : '0',
  3.     );
  4.  
  5.     $args = array_merge($args, $params);

Prépare la liste des arguments du POST.

  1.     $files=array('file' => array('name' => basename($file), 'tmp_name' => $file, 'type' => file_mime_type($file)));

Prépare la liste des fichiers attachés au POST : file - le fichier PDF, JPEG, PNG ou GIF à analyser avec le nom du fichier, le chemin d'accès au fichier et son type MIME.

  1.     $response=sendpost($curl, $args, $files);

Envoie la requête HTTP avec sendpost. Les arguments login et password sont déjà dans $curl.

  1.     if (!$response or $response[0] != 200) {
  2.         return false;
  3.     }

Si $response vaut false, le serveur est inaccessible. Si $response[0] ne contient pas le code de retour HTTP 200 Ok, une erreur d'exécution s'est produite. En cas d'erreur, scancode retourne false.

  1.     return @file_put_contents($output, $response[2]);
  2. }

Retourne true si le texte retourné par la requête a bien été écrit dans le fichier de sortie, sinon false.

EXEMPLE

En supposant que vous avez sauvé les fichiers sendhttp.php, filemimetype.php et scancode.php dans le répertoire courant, lancez PHP en mode interactif, chargez la fonction scancode et appelez-la avec votre code d'identification et votre mot de passe, le chemin d'accès à un fichier PDF, JPEG, PNG ou GIF en argument :

$ php -a
php > require_once 'scancode.php';
php > scancode('abcdef', 'ABCDEF', 'qr.png');
php > quit

Affichez le résultat :

$ cat file.txt
VOIR AUSSI

Appelez l'API du service, Analysez le texte

Commentaires

Pour ajouter un commentaire, cliquez ici.