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

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

passer les parametres de configurations (bin et opt) + utiliser le plugin cfg

File size: 3.7 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) {
13        spip_log('Analyse OCR du document '.$id_document, 'ocr');
14
15        include_spip('inc/config');
16        $config = lire_config('ocr',array());
17        if ($config['ocr_bin']) {
18                $bin = $config['ocr_bin'];
19        } else {
20                // TODO : essayer de trouver tout seul l'exécutable
21                spip_log('Erreur analyse OCR : Il faut specifier l\'exécutable dans le panneau de configuration');
22                $resultat['erreur'] = _T('ocr:analyser_erreur_executable_introuvable');
23                return $resultat;
24        }
25        $opt = $config['ocr_opt'] ? $config['ocr_opt'] : '';
26
27        $resultat = array('texte'=>'','erreur'=>'');
28        $document = ocr_document($id_document);
29        spip_log($document, 'ocr');
30
31        $fichier = $document['fichier'];
32
33        if (!$fichier) {
34                $resultat['erreur'] = _T('ocr:analyser_erreur_document_inexistant');
35                return $resultat;
36        }
37       
38        $dest = $document['cible_url'].$document['basename'];
39       
40        $cmd = $bin.$options.' '.$fichier.' '.$dest.' '.$opt;
41        spip_log('Commande d\'analyse OCR : "'.$cmd.'"', 'ocr');
42        exec($cmd, $output, $status_code);
43       
44        $resultat['texte'] = '';
45        $resultat['erreur'] = ocr_texte_erreur($status_code);
46
47        if ($resultat['erreur']) {
48                spip_log('Erreur : '.$resultat['erreur'], 'ocr');
49        } else  {
50                // on ouvre et on lit le .txt
51                // TODO : comment connaitre l'encoding du fichier ?
52                $nouveaufichier = $dest.'.txt';
53                if (file_exists($nouveaufichier) && is_readable($nouveaufichier)) {
54                        $texte = file_get_contents($nouveaufichier);
55                        unlink($nouveaufichier);
56                        $resultat['texte'] = $texte;
57                } else {
58                        $resultat['erreur'] = _T('ocr:analyser_erreur_fichier_resultat');
59                }
60        }
61        return $resultat;
62}
63
64/**
65 * Fonction pour convertir le status_code de tesseract en texte d'erreur
66 *
67 *  Calcul un tableau :
68 *  - avec informations sur le documents (nom, repertoire, nature)
69 *  - determine les informations des documents finaux (nom, respertoire, extension)
70 *
71 * @param $status_code status code retourné par la commande tesseract
72 * @return $erreur vide si pas d'erreur ou texte d'erreur selon le status code
73 */
74function ocr_texte_erreur($status_code) {
75        switch ($status_code) {
76                case 0:
77                        $erreur = '';
78                        break;
79                case 1:
80                case 2:
81                case 3:
82                        $erreur = _T('ocr:analyser_erreur_'.$status_code);
83                        break;
84                default:
85                        $erreur = _T('ocr:analyser_erreur_autre');
86        }
87        return $erreur;
88}
89
90/**
91 * Fonction pour connaitre les infos fichiers du document
92 *
93 *  Génère un table avec :
94 *  - des informations sur le document (nom, extension, repertoire)
95 *  - des informations pour le document à générer (nom, repertoire)
96 *
97 * @param $id_document identifiant du document
98 * @return $document : liste de données caractérisant le document
99 */
100function ocr_document($id_document) {
101
102    //on recupere l'url du document
103    $fichier = sql_fetsel(
104        'fichier,extension',
105        'spip_documents',
106        'id_document='.$id_document
107    );
108
109    //chemin relatif du fichier
110    include_spip('inc/documents');
111    $fichier_reel = get_spip_doc($fichier['fichier']);
112
113    //url relative du repertoire contenant le fichier , on retire aussi le / en fin
114    $document['fichier'] = $fichier_reel;
115
116    //information sur le nom du fichier
117    $document['extension'] = $fichier['extension'];
118    $document['name'] = basename($fichier_reel);
119    $document['basename'] = basename($document['name'], '.png');
120
121    // url relative du repertoire cible
122    if(!is_dir(_DIR_VAR."cache-ocr")) {
123                //creation du repertoire cible
124        sous_repertoire(_DIR_VAR,"cache-ocr");
125        }
126        $document['cible_url'] = _DIR_VAR."cache-ocr".'/';
127
128    return $document;
129}
Note: See TracBrowser for help on using the repository browser.