source: pmb4.1/trunk/fuentes/pmb/classes/diarization_docnum.class.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 4.2 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: diarization_docnum.class.php,v 1.1 2014-01-10 15:46:42 apetithomme Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once $class_path."/voxilab/voxilabDiarization.class.php";
10require_once $class_path.'/progress_bar.class.php';
11
12/**
13 * Classe de gestion de la segmentation des documents numériques
14 */
15class diarization_docnum {
16        /**
17         * Instance de explnum
18         * @var explnum
19         */
20        private $explnum;
21       
22        /**
23         * Chemin du fichier à envoyer au serveur
24         * @var string
25         */
26        private $file = "";
27       
28        /**
29         * Instance de segmentation
30         * @var voxilabDiarization
31         */
32        private $diarization;
33       
34        /**
35         * Instance de fichier segmenté
36         * @var voxilabSpeechfile
37         */
38        private $speechFile;
39       
40        /**
41         * @param explnum explnum
42         */
43        public function __construct($explnum) {
44                $this->explnum = $explnum;
45               
46                $options = array(
47                                'url' => "http://speechweb.sigb.net:8080/files.json"
48                                );
49               
50                $this->diarization = new voxilabDiarization("http", $options);
51        }
52       
53        /**
54         * Renvoie le chemin du fichier à envoyer au serveur
55         * @return string
56         */
57        public function getFile() {
58                global $base_path;
59                if (!$this->file) {
60                        if ($this->explnum->infos_docnum['contenu'] || $this->explnum->explnum_data) {
61                                // Si c'est un nouveau document ou un document stocké en base, on définit un nom unique dans le dossier temporaire
62                                if ($this->explnum->infos_docnum['userfile_name']) {
63                                        $nom_temp = session_id().microtime(true).".".$this->explnum->infos_docnum['userfile_name'];
64                                } else {
65                                        $nom_temp = session_id().microtime(true).".".$this->explnum->explnum_ext;
66                                }
67                               
68                                $this->file = $base_path."/temp/".$nom_temp;
69                               
70                                if ($this->explnum->infos_docnum['contenu']) {
71                                        file_put_contents($this->file, $this->explnum->infos_docnum['contenu']);
72                                } else {
73                                        file_put_contents($this->file, $this->explnum->explnum_data);
74                                }
75                        } else {
76                                $this->file = $this->explnum->explnum_rep_path.$this->explnum->explnum_nomfichier;
77                        }
78                }
79                return $this->file;
80        }
81       
82        /**
83         * Segmente le document numérique et stocke le résultat en base de données
84         */
85        public function diarize() {
86                // On commence par supprimer
87                $query = "delete from explnum_segments where explnum_segment_explnum_num = ".$this->explnum->explnum_id;
88                mysql_query($query);
89               
90                $query = "delete from explnum_speakers where explnum_speaker_explnum_num = ".$this->explnum->explnum_id;
91                mysql_query($query);
92               
93                // Gestion de la progress_bar
94                $progress_bar = new progress_bar("upload to server");
95                $progress_bar->set_percent(0);
96               
97                $this->speechFile = $this->diarization->sendFile($this->getFile());
98//              $this->speechFile = $this->diarization->getFile(67);
99               
100                $status = $this->speechFile->getStatus();
101                while ($status != "diarization_phase7") {
102                        if ($status == "uploaded") {
103                                $progress_bar->set_percent(round((1/8)*100));
104                        } else {
105                                $nb = str_replace("diarization_phase", "", $status);
106                                $progress_bar->set_percent(round((($nb+1)/8)*100));
107                        }
108                        $progress_bar->set_text($status);
109               
110                        $status = $this->speechFile->getStatus();
111                        sleep(0.5);
112                }
113                sleep(10);
114                $progress_bar->hide();
115               
116                $speakers = $this->speechFile->getSpeakers();
117               
118                $speakers_ids = array();        // Tableau associant l'identifiant du speaker avec son identifiant dans la table
119               
120                foreach ($speakers as $speaker) {
121                        $query = "insert into explnum_speakers (explnum_speaker_explnum_num, explnum_speaker_speaker_num, explnum_speaker_gender) values (".$this->explnum->explnum_id.", '".$speaker->getID()."', '".$speaker->getGender()."')";
122                        mysql_query($query);
123                        $speakers_ids[$speaker->getID()] = mysql_insert_id();
124                }
125               
126                $segments = $this->speechFile->getSegments();
127               
128                foreach ($segments as $segment) {
129                        $query = "insert into explnum_segments (explnum_segment_explnum_num, explnum_segment_speaker_num, explnum_segment_start, explnum_segment_duration, explnum_segment_end) values (".$this->explnum->explnum_id.", '".$speakers_ids[$segment->getSpeaker()->getID()]."', ".$segment->getStart().", ".$segment->getDuration().", ".$segment->getEnd().")";
130                        mysql_query($query);
131                }
132        }
133}
134?>
Note: See TracBrowser for help on using the repository browser.