source: spip-zone/_plugins_/ocr/trunk/inc/ocr_analyser.php @ 74905

Last change on this file since 74905 was 74905, checked in by lesage.sylvain@…, 8 years ago

Fonction ocr_analyser et formulaire de test sur la page de configuration

File size: 3.2 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5/**
6 * Fonction autonome analysant un document donné en paramètre
7 *
8 *  Ensemble des actions necessaires à l'analyse OCR d'une image
9 *
10 * @param int $id_document identifiant du document à convertir
11 */
12function ocr_analyser($id_document, $bin) {
13        spip_log('Analyse OCR du document '.$id_document, 'ocr');
14
15        $exe='/usr/bin/tesseract';
16        $options = ' ';
17
18        $document = ocr_document($id_document);
19        spip_log($document, 'ocr');
20
21        $fichier = $document['fichier'];
22        $dest = $document['cible_url'].$document['basename'];
23       
24        $cmd = $exe.$options.' '.$fichier.' '.$dest.' '.$options;
25        spip_log('Commande d\'analyse OCR : "'.$cmd.'"', 'ocr');
26        exec($cmd, $output, $status_code);
27       
28        $resultat['texte'] = '';
29        $resultat['erreur'] = ocr_texte_erreur($status_code);
30
31        if ($resultat['erreur']) {
32                spip_log('Erreur : '.$status_code.$resultat['erreur'], 'ocr');
33        } else  {
34                // on ouvre et on lit le .txt
35                // TODO : comment connaitre l'encoding du fichier ?
36                $nouveaufichier = $dest.'.txt';
37                if (file_exists($nouveaufichier) && is_readable($nouveaufichier)) {
38                        $texte = file_get_contents($nouveaufichier);
39                        unlink($nouveaufichier);
40                        $resultat['texte'] = $texte;
41                } else {
42                        $resultat['erreur'] = _T('ocr:analyser_erreur_fichier_resultat');
43                }
44        }
45        return $resultat;
46}
47
48/**
49 * Fonction pour convertir le status_code de tesseract en texte d'erreur
50 *
51 *  Calcul un tableau :
52 *  - avec informations sur le documents (nom, repertoire, nature)
53 *  - determine les informations des documents finaux (nom, respertoire, extension)
54 *
55 * @param $status_code status code retourné par la commande tesseract
56 * @return $erreur vide si pas d'erreur ou texte d'erreur selon le status code
57 */
58function ocr_texte_erreur($status_code) {
59        switch ($status_code) {
60                case 0:
61                        $erreur = '';
62                        break;
63                case 1:
64                case 2:
65                case 3:
66                        $erreur = _T('ocr:analyser_erreur_'.$status_code);
67                        break;
68                default:
69                        $erreur = _T('ocr:analyser_erreur_autre');
70        }
71        return $erreur;
72}
73
74/**
75 * Fonction pour connaitre les infos fichiers du document
76 *
77 *  Génère un table avec :
78 *  - des informations sur le document (nom, extension, repertoire)
79 *  - des informations pour le document à générer (nom, repertoire)
80 *
81 * @param $id_document identifiant du document
82 * @return $document : liste de données caractérisant le document
83 */
84function ocr_document($id_document) {
85
86    //on recupere l'url du document
87    $fichier = sql_fetsel(
88        'fichier,extension',
89        'spip_documents',
90        'id_document='.$id_document
91    );
92
93    //chemin relatif du fichier
94    include_spip('inc/documents');
95    $fichier_reel = get_spip_doc($fichier['fichier']);
96
97    //url relative du repertoire contenant le fichier , on retire aussi le / en fin
98    $document['fichier'] = $fichier_reel;
99
100    //information sur le nom du fichier
101    $document['extension'] = $fichier['extension'];
102    $document['name'] = basename($fichier_reel);
103    $document['basename'] = basename($document['name'], '.png');
104
105    // url relative du repertoire cible
106    if(!is_dir(_DIR_VAR."cache-ocr")) {
107                //creation du repertoire cible
108        sous_repertoire(_DIR_VAR,"cache-ocr");
109        }
110        $document['cible_url'] = _DIR_VAR."cache-ocr".'/';
111
112    return $document;
113}
Note: See TracBrowser for help on using the repository browser.