Wiki

Clone wiki

gpyvozcontrol / sistema

Desarrollo de "gpyVozControl"


  1. Lista de órdenes
  2. Biblioteca libwnck
  3. Funcionamiento
  4. Archivos y funcionamiento del sistema gpyVozControl
  5. 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.

anterior Inicio Siguiente

Updated