martes, 23 de febrero de 2021

Definición del Proyecto

Las razones... Hasta ahora siempre he desarrollado mis proyectos "en silencio", pero con el tiempo he aprendido que es no es positivo por varias razones:
  • A veces no recuerdo qué problemas me encontré en el camino y cómo los resolví
  • Con el tiempo olvido algunos aspectos del sistema que desarrollé (tampoco son tantos ni tan complejos, no se crean ;) )
  • No comparto conocimiento: Otras personas no acceden a los entresijos del mismo, con lo que no pueden aprender como he aprendido (y aprendo) yo de otros proyectos.
  • No facilito la colaboración: Otras personas no pueden ayudarme o participar, ya que ni siquiera saben que el proyecto existe.
  • No comparto los resultados: salvo con "Calzador" casi nunca consigo que otras personas se beneficien de la aplicación, como me beneficio yo de las aplicaciones de otros.
Creo que todos estos inconvenientes pueden solucionarse si a partir de ahora comienzo a documentar mis proyectos a través de blogs. Como mis proyectos suelen ser "pequeñitos", creo que este medio es suficiente. Si más adelante hay que plantearse otra cosa, pues ya veremos... La necesidad a resolver: los centros de enseñanza disponemos de una aplicación para la gestión académica llamada Séneca, que hace poco ha incorporado la inclusión de fotos de los alumnos. Además desde siempre los centros han necesitado esas fotos para hacer listados de clase, confección de carnés escolares, etc. Hasta ahora la gestión de esas fotos, al menos en mi centro, es bastante ineficiente (al menos en mi opinión):
  1. Los alumnos adjuntan una foto tamaño carné, que no siempre es de buena calidad
  2. Las administrativas tienen que separar las fotos y ordenarlas
  3. Hay que recortarlas a un tamaño determinado
  4. Hay que pegarlas, bien en el carné, bien en el listado de clase
  5. Si hay cambios en una clase, o hay que recomponer la hoja de fotos entera o ésta queda desordenada
  6. Además, para incluir la foto en Séneca hay que seguir el siguiente proceso:
    1. Escanear cada listado de fotos
    2. Recortar cada foto
    3. Buscar el IdEscolar de cada alumno y asignar el mismo como nombre de dicha foto
    4. Trasladar la foto (ya que la tarea anterior la realizan alumnos voluntarios, y la siguiente el personal administrativo del centro)
    5. Insertar la foto en Séneca.
    Este sistema plantea bastantes inconvenientes:
    • Es engorroso
    • Requiere la colaboración de mucha gente (o de lo contrario se tarda muchísimo tiempo)
    • Es imposible que las fotos estén para principios de curso, y siempre se tarda unas semanas en tenerlas
    • Como se ha comentado, cuando se producen cambios entre cursos los listados hay que rehacerlos o dejarlos desordenados
    • No resulta fácil usar las fotos para otros cometidos, como pudieran ser la generación de avisos que incluyan foto del alumno, emisión del carné por puntos, emisión de listados con fotos para excursiones, etc.
    La solución que se busca: En un primer momento se me ocurrió hacer una aplicación que "recortase" cada foto del listado de fotos, pero entonces, después de hablar con nuestras encantadoras administrativas, comprendí que ya el hecho de apartar las fotos, recortarlas y pegarlas era un trabajo tedioso. Precisamente por esos días leí un artículo sobre un programa de software libre capaz de manejar una cámara fotográfica desde el ordenador: gphoto2. Se podía sacar la foto y descargarla al pc dándole el nombre que uno desease. Y se me encendió la bombillita... No resultaría complejo realizar una aplicación basada en base de datos, en la que se volcasen los datos de los alumnos, usando el IdEscolar de cada uno de ellos para campo Llave Primaria; que permitiese sacar listados de alumnos con/sin fotos, en los que el nombre de cada uno fuese el enlace a un formulario para sacar su foto. Este formulario, en lugar de introducir una foto en la base de datos, lo que haría es:
    1. disparar la cámara,
    2. descargar la foto poniéndole como nombre del archivo el IdEscolar del Alumno,
    3. escalar la foto a varias resoluciones, preparando una de ellas a las que precisa Séneca,
    4. volcar una copia de la preparada para Séneca a una carpeta que sólo tendría una foto cada vez.
    5. borrar la foto anterior cada vez que se guarde la siguiente
    La justificación de los dos últimos puntos es la siguiente: esto permitiría que si quien saca las fotos es personal con privilegios suficientes en Séneca, pueda ir insertando las fotos en la misma de una forma más cómoda, ya que siempre buscaría en la misma carpeta, y siempre se encontraría una sola foto. De lo único que tendría que preocuparse es de ir llevando el mismo orden en el listado de Séneca que en el de nuestra aplicación. La solución: Consistiría en un sistema hardware/software dedicado (o sea, los elementos no estarían disponibles para otros menesteres), compuesto por los siguientes elementos:
    • Pc de baja potencia. con un Pentium III sería más que suficiente.
    • Cámara fotográfica soportada por Gphoto2, que irá conectada por puerto USB.
    • Alimentador de corriente alterna para la cámara (para evitar el uso de pilas).
    • Soporte para la cámara. Se comenzará por un simple trípode, pero se intentará desarrollar un soporte que se ajuste, al menos en altura, mediante mando eléctrico.
    • Sevidor Apache+Mysql+PHP.
    • Gphoto2.
    • La aplicación a desarrollar.
    Posible evolución del proyecto: Como se infiere de todo lo anterior, se plantea un sistema hardware/software que debe ser manipulado con alguien con conocimiento. Pero se podría intentar en el futuro hacer que el sistema sea completamente autónomo, si exceptuamos la parte de introducir la foto en Séneca. Para conseguir este objetivo habría que desarrollar un soporte para la cámara que se desplazase en dos ejes, y que fuese capaz de "encuadrar" al alumno. Para la elección del "alumno objetivo" se podría usar una pistola láser lectora de códigos de barra, y que el alumno introdujese una ficha previamente proporcionada por Secretaría. Además habría que instalarla en un mueble que colocase mínimamente al alumno, tal vez en una silla. Conclusión Bueno, creo que con esta entrada está más que definido el Proyecto. En las próximas entradas iré describiendo los pasos que he ido dando y cómo fui solucionando los problemas que me encontré. Si alguien quiere colaborar o formar parte de este proyecto puede añadir un comentario a este mensaje, o a cualquiera de los que le sigan, y me pondré en contacto con él. Si alguien considera que la forma de contactar para participar debe ser otra, se admiten sugerencias. ;)

    viernes, 28 de mayo de 2010

    El primer paso: el programa

    Como de la posibilidad de que se pudiese tomar instantáneas directamente desde la cámara, iba a depender el resto del desarrollo, me puse a solucionar esto en primer lugar.

    Lo primero era instalar el programa. En mi pc trabajo con Ubuntu 8.04 Hardy Heron, al que seguramente jubilaré este verano por Ubuntu 10.04 Lucid Lynx, ya que me gusta "saltar" de LTS en LTS (lanzamientos con soporte largo).

    Instalar el programa fue tan sencillo como abrir un terminal (Aplicaciones=>Accesorios=>Terminal) y escribir:

    # sudo apt-get install gphoto2

    responder con la contraseña del administrador y esperar unos pocos instantes a que se instale el programa como sus dependencias.

    La documentación en línea del programa se encuentra en:
    http://www.gphoto.org/doc/

    El resto del software ya lo tenía instalado, pues se trata de PHP5, Apache y Mysql. De la instalación de la misma ya está Luis Garrido confeccionando la documentación, pero no requiere más dificultad que la de instalar gphoto2.

    En el siguiente artículo el segundo paso ;)

    El segundo paso: la cámara


    Como es lógico empecé a probar con mi cámara, una Olympus Camedia Ultra-Zoom 750.

    Estupenda cámara, magnífico zoom (10x) y fácil uso, con la que se sacan unas estupendas fotografías.

    Desgraciadamente en este asunto no me ayudó mucho, ya que el programa la detecta, pero no es capaz de manejarla. Según entendí para que el driver pudiese manejar este tipo de cámaras hay que ponerlas en modo PC, y ésta no se puede. En la documentación se menciona que pulsando simultáneamente "Quick View" y "OK" mientras se abre la tapa de la tarjeta de memoria, se accede al modo PC, pero en mi máquina lo único que se consigue es que aparezca el mensaje de que la tarjeta está inaccesible :(

    Luego lo intenté con una Sony Ciber-Shot DSC, ahora no recuerdo el número exacto. Ni la detectaba, así que repasé la documentación y pude ver que ningún modelo de Sony estaba soportada. Creo que debí leer primero :D

    Después lo intenté con dos cámaras del Departamento Sanitaria, una réflex Olympus de la serie E (E-30, creo) y finalmente con una Canon PowerShot A80.

    La primera, una virguería de aparato, funcionaba muy bien con gphoto, y me sirvió para familiarizarme con la interfaz en modo texto de este programa, pero estaba claro que no podía "condenar" a esta maravilla para sacar fotos de las caras de los alumnos. Recuerden que la intención es dejar tanto la cámara como el Pc dedicados a esta función.


    La segunda, la Canon PowerShot A80 también está bastante soportada por el programa y también pude sacar varias fotos, pero éstas salían distorsionadas debido a avería en la máquina. Al menos me sirvió para asegurarme de que esta gama de cámaras funcionaban bien con el programa y ello me ayudó a dar el siguiente paso "comprar una de segunda mano".

    Busqué por eBay y en www.segundamano.com, y encontré a un tal Pablo, aquí en Sevilla, que quería vender una cámara parecida, una Canon PowerShot A40 por 30 lauros.

    Nos vimos en una terraza, y allí mismo la probé con mi netbook. Enseguida pude hacer una foto con el programa, pero falló la función "--capture-image-and-download", lo que me dejó un poco preocupado: " a ver si luego no voy a poder descargar la foto hecha al ordenador...".

    Pero me arriesgué e hice la compra.