Wiki
Clone wikigpyvozcontrol / sistema
Desarrollo de "gpyVozControl"
- Lista de órdenes
- Biblioteca libwnck
- Funcionamiento
- Archivos y funcionamiento del sistema gpyVozControl
- Repositorio del proyecto
Ya con los modelos acústicos creados que son el motor principal para el reconocimiento de las órdenes, se crea el Sistema de órdenes de voz en software libre "gpyvozcontrol" para cada uno de los modelos. Para esto se toma como base el ejemplo realizado por RainCT "Writing a command and control application with voice recognition", el cual consiste en manipular el reproductor de música con la voz del usuario utilizando la biblioteca Julius.
El nombre "gpyvozcontrol" surge de la combinación de las letras "g" por el escritorio Gnome, "py" de Python, ya que esta implementado en este lenguaje y "vozcontrol" porque es con la voz del usuario que se controla el equipo.
Es importante resaltar el hecho que se ha desarrollado un sistema completo de órdenes de voz para cada uno de los modelos acústicos creados anteriores, que funcionan de manera separada con cada biblioteca.
Lista de órdenes
Las órdenes que "gpyvozcontrol" puede reconocer son las siguientes:
-
Abrir los programas: Calculadora, Cliente de correo, Navegador web, Mensajería, Terminal, Editor de documentos, Editor de texto, Carpeta de archivos, Reproductor de música, Visualizador de PDF Evince. Mediante la instrucción:
abrir o abre programa
-
Bajar y subir el volumen del sistema. Mediante la instrucción:
bajar o subir volumen al sistema o equipo
-
Saber la hora y la fecha. Mediante la orden:
decir o dime la hora decir o dime la fecha
-
Ejecutar las acciones de minimizar, maximizar, ampliar, reducir y cerrar las ventanas. Mediante las instrucciones:
minimizar o minimiza la ventana miminizar o minimiza todas las ventanas maximizar o maximiza la ventana maximizar o maximiza todas las ventanas ampliar o amplia la ventana reducir o reduce la ventana cerrar o cierra la ventana tambien se permite solo decir: minimizar, maximizar, reducir, ampliar y cerrar.
-
Saber título de la o las ventanas activas, con el comando de voz:
titulo de la ventana dime o decir ventanas activas
-
Manipular el Evince (visualizador de PDF), mediante la orden:
lamina siguiente o anterior primera o última lamina cambiar o cambia a la lamina número lamina actual
-
Manipular el reproductor de música, con las ordenes siguientes:
abrir o abre reproductor canción siguiente o anterior cambiar o próxima canción bajar o subir volumen al reproductor pausar o pausa el reproductor titulo de la canción
Biblioteca libwnck
Para poder manipular las ventanas del entorno gráfico (minimizar, maximizar, ampliar, reducir y cerrar), se utilizó la biblioteca libwnck, del ambiente gráfico GNOME, que permite administrar ventanas y espacios de trabajo a través de busqueda, lista de tareas, entre otras actividades.
A continuación se colocan las funciones que realizan ese trabajo:
def Acciones(self, screen): while gtk.events_pending(): gtk.main_iteration() ventana = wnck.Screen.force_update(screen) windows = screen.get_windows() for w in windows: return windows
que retorna las ventanas activas en el sistema y que son recibidas por la función siguiente:
def Actions(self, windows, accion, n): for w in windows: window = wnck.Screen.get_active_window(w.get_screen()) if accion == 'maximizar' or accion == 'maximiza': if n == 2: win = wnck.Screen.get_windows(wnck.screen_get_default()) for w in win: w.unminimize(0) #window.unminimize(0) print "Maximizando la ventana "+window.get_name() Reproducir("Se maximiza la ventana "+window.get_name()) if n == 1: print "Maximizando todas las ventanas" win = wnck.Screen.get_windows(wnck.screen_get_default()) for w in win: w.unminimize(0) Reproducir("Se maximizan todas las ventanas") if accion == 'minimizar' or accion == 'minimiza': if n == 2: window.minimize() print "Minimizando la ventana "+window.get_name() Reproducir("Se minimiza la ventana "+window.get_name()) if n == 1: print "Minimizando todas las ventanas" for w in windows: w.minimize() Reproducir("Se minimizan todas las ventanas") if accion == 'cerrar' or accion == 'cierra': if n == 2: window.close(int(time.time())) print 'Cerrando la ventana '+window.get_name() Reproducir('Cerrando la ventana '+window.get_name()) if n == 1: win = wnck.Screen.get_windows(wnck.screen_get_default()) for w in win: w.close(int(time.time())) print "Se cierran todas las ventanas" Reproducir("Se cierran todas las ventanas") if accion == 'ampliar' or accion == 'amplia': if n == 2: window.maximize() print "Ampliando la ventana "+window.get_name() Reproducir("Se amplía la ventana "+window.get_name()) if n == 1: print "Ampliando todas las ventanas" for w in windows: w.maximize(0) Reproducir('Se amplían todas las ventanas') if accion == 'reducir' or accion == 'reduce': if n == 2: window.unmaximize() print "Se reduce la ventana "+window.get_name() Reproducir("Se reduce la ventana "+window.get_name()) if n == 1: print "Reduce todas las ventanas" for w in windows: w.unmaximize(0) Reproducir('Se Reducen todas las ventanas') if accion == 'titulo': if n == 1: win = wnck.Screen.get_windows(wnck.screen_get_default()) print "La ventana activa es "+window.get_name() Reproducir("La ventana activa es "+window.get_name()) else: Reproducir("Las ventanas activas son:") for w in windows: Reproducir(" "+w.get_name())
la cual ejecuta la instrucción.
Funcionamiento
"Gpyvozcontrol", en cualquiera de sus versiones, funciona de la siguiente forma: El programa captura una señal de audio por medio de un micrófono. Esta es convertida mediante la biblioteca Julius o CMUSphinx en una señal de texto. Luego este texto se envía a la clase principal que ejecuta la orden invocando al sistema operativo o al entorno gráfico.
Antes de comenzar a pronunciar cualquier instrucción, es obligatorio decir la palabra clave "vozcontrol". Esto activa un pequeño sonido (bandera), lo que indica que se puede pronunciar la instrucción a ejecutar. Luego que se ha pronunciado la orden el sistema reproducirá el siguiente mensaje: "espere un momento". Cuando se haya ejecutado la instrucción el sistema reproducirá un mensaje (el mensaje depende de la acción realizada). Cuando no reconoce la orden, el sistema emite el mensaje de audio: "Ups! no entiendo la orden" y se queda en espera de la palabra clave antes para ejecutar la próxima instrucción. Por ejemplo:
- usuario: "vozcontrol"
- sistema: (un sonido indicando que se puede pronunciar la instrucción)
- usuario: abrir editor de texto
- sistema: mensaje "espere un momento"
- sistema: (ejecuta la orden)
- sistema: mensaje "la aplicación editor de texto fue abierta"
- sistema: ...(esperando la palabra clave "vozcontrol")
Noten que el sistema reporta, en audio, el resultado de la acción solicitada.
Archivos y funcionamiento del sistema gpyVozControl
Los archivos que comprende este desarrollo son:
- gpyvozcontrol.py
-
- es el archivo principal con el que se comunica la biblioteca Julius y CMUSphinx para ejecutar el comando del usuario.
- reproductor.py
-
- es la clase que permite manipular el reproductor.
- evince.py
-
- es el que permite manipular el visualizador de PDF.
- sistema.py
-
- permite manipular algunas acciones del sistema.
- speak.py
-
- permite reproducir los audios para indicar al usuario que eventos se realizan.
- aplicaciones.py
-
- permite saber que programa desea abrir el usuario.
- correo.py
-
- es el que permite abrir el cliente de correo.
- multimedia.py
-
- permite saber que reproductor esta instalado en el sistema.
- clientecorreo.py
-
- permite saber cual cliente de correo está instalado.
- numero.py
- convierte los números de formato letra a dígito.
En gpyvozcontrol.py se implementa la clase CommandAndControl que contiene los métodos de nivel superior que controlan todo el sistema e invocan a los objetos que encapsulan las funcionalidades particulares y las invocaciones al sistema operativo y a su gestor de interfaz gráfica.
Repositorio del proyecto
Con la instrucción del protocolo git para gestión de proyectos, se puede descargar el proyecto desde el repositorio BitBucket, así:
git clone https://ortegajao@bitbucket.org/gproyectogrado/gpyvozcontrol.git
Allí se encuentran los fuentes y archivos creados con las bibliotecas Julius y CMUSphinx, incluyendo los script, modelos acústicos y el sistema de órdenes de voz creados por el autor de este proyecto.
Updated