Detección de movimientos con Android
martes, 10 de febrero de 2015Ya hay una aplicación para Android para detección de movimientos, tiene el sorprendente nombre de Motion Detector. La aplicación es excelente (tiene una configuración casi idéntica al MOTION para Linux), consume muy poca batería y es capaz de detectar movimiento y hacer fotos incluso estando el movil bloqueado y con la pantalla apagada lo cual repercute en un excelente bajo consumo de batería, PERO tiene un problema: esta forma de funcionamiento y de acceso a la cámara provoca que las fotografías estén enfocadas en infinito, y no hay manera de enfocarlas desde el propio programa.
Claro es bastante incómodo y algo absurdo, detectar movimientos cerca y fotografiar enfocando lejos, a infinito, justamente el único sitio donde no hay movimiento!!
Pero todo tiene remedio. Con ayuda de Tasker (una app para Android que ya os comenté hace tiempo) he ingeniado una tarea para grabar vídeos/fotografías bien enfocados y con toda la calidad HD que da el Galaxy S4.
La idea es sencilla: detectar movimientos usando Motion detector, pero este en lugar de tomar fotografías activa un evento Tasker que se encarga de: pausar la detección, tomar el control de la cámara, ponerla a grabar (con su autofoco activo), parar la grabación después de unos segundos y volver a reactivar la detección. Así se hizo este vídeo.
Este método via tareas de Tasker tiene algunas limitaciones, la más importante es que Tasker no puede desbloquear el teléfono cuando este se bloquea manualmente ó por un periodo de tiempo inactivo (no es un bug es una feature). Por lo que antes de usar este script es obligatorio eliminar cualquier tipo de sistema de seguridad de la pantalla de bloqueo. Una vez desactivado el bloqueo de la pantalla Secure Settings puede «levantar» el teléfono que se encuentra inactivo y proceder a activar la cámara y emular las pulsaciones de teclas (en realidad Secure Settings si puede levantar un teléfono que esté bloqueado por el método de patrón y PIN, pero puesto que no son métodos que yo esté usando los he ignorado).
Tarea para Tasker
Empezaremos por el final, diseñando la lista de acciones que se van a realizar en el momento que se detecte movimiento. Para ello abrimos Tasker, vamos a TAREAS y creamos una nueva tarea que llamaremos «Grabarunvideo«, esta tarea contiene:
- Desactivar MOTION DETECTOR
Sistema > Enviar INTENT > Acción : org.motion.detector.ACTION_DETECTOR_OFF - Reactivar la pantalla con Secure Settings
Plugins > Secure Settings > Configuracion: Actions > Wake Device : Screen & Keyboard Light on - Esperar 500 ms
Tarea > Esperar : 500 Ms - Abrir cámara
Sistema > Enviar INTENT > Acción : android.media.action.STILL_IMAGE_CAMERA - Esperar 3 s.
Tarea > Esperar : 3 s - Emular pulsación de botón de vídeocámara en pantalla
Script > Ejecutar Consola : input tap 1800 240 - Esperar 20 segundos
Tarea > Esperar : 20 s - Emular pulsación de botón DETENER GRABACIÓN en pantalla
Script > Ejecutar Consola : input tap 1800 260 - Esperar 500 ms
Tarea > Esperar : 500 Ms - Emular botón ATRAS
Entrada > Botón : Atras - Esperar 4 s.
Tarea > Esperar : 4 s - Reactivar MOTION DETECTOR
Sistema > Enviar INTENT > Acción : org.motion.detector.ACTION_DETECTOR_ON
Podéis importar desde Tasker esta tarea usando este XML.
Llegados a este punto si damos PLAY a la tarea que acabamos de crear se nos debería grabar un primer vídeo y al final activaría Motion detector (que no lo teníamos activado).
Configurar Motion Detector
La configuración de Motion detector requeriría un solo apunte para comentarla así es que en este programa únicamente necesitáis por ahora es
- Desactivar la captura de imágenes (Register > Picture > Desac )
- Activar el envío de eventos ( Notification > Send > Activ )
- Activar la recepción de eventos ( Notification > Receive > checkbox seleccionado)
Con esta configuración tal y como aparece en la imagen Motion detector no realizará ninguna acción unicamente producirá y recibirá eventos.
Perfil para Tasker
Ya solo nos falta crear un perfil en Tasker que detecte cuando Motion detector ha detectado movimiento y lance la tarea que creamos anteriormente. Dirígete a la solapa Perfiles de Tasker y crea una nuevo
- Nuevo Perfil > Evento > Sistema > Intent Recibido > Accion: org.motion.detector.ACTION_GLOBAL_BROADCAST
A continuación de la lista de tareas que os mostrará seleccionad la que creasteis anteriormente llamada «Grabarunvideo». Listo.
Funcionamiento y mejoras
Una vez seguidos los pasos anteriores cuando quieras grabar alguna situación lo único que tienes que hacer es deshabilitar cualquier sistema seguridad de la pantalla de bloqueo, buscar una ubicación donde puedas dejar la cámara sin que esta se mueva, activar Motion detector y situar la cámara (desde Motion detector podéis configurar cuanto tiempo de retardo -delay- debe pasar entre que se active el programa y comience la detección, lo normal es darle 20-30 segundos para que os de tiempo tranquilamente a ubicar el teléfono con seguridad y apartarse sin que este os grabe).
Si pretendéis fotografiar algún tipo de fauna (un pajarillo, un ratón) es recomendable además poner en modo silencio el teléfono para evitar sustos como la llegada de un SMS, una llamada inoportuna, etc… .
OJO: La detección sigue de forma indefinida hasta que la detengáis. Para hacerlo bastaría con coger el teléfono parar la grabación que hubiera en marcha y desactivar Tasker. Esta sería la primera mejora.
Mejoras. Como decía si por cualquier motivo se os va de la cabeza que tenéis el teléfono detectando movimiento podéis encontraros con la tarjeta llena ó el aviso de «batería al 15%». Así la primera mejora probablemente sería activar algún contador/limite de grabaciones.
Ahora bien, hay que tener en cuenta que puesto que tanto Motion detector y la tarea Grabarunvideo de Tasker se están reiniciando constantemente no vale con poner una variable que haga de contador porque a cada ciclo esta se reiniciaría a CERO, así es que es necesario recurrir a almacenar datos en la tarjeta SD que mantengan el control de QUE y CUANDO se está grabando para detenerlo cuando nos interese.
Yo no lo he hecho porque tampoco preveo usarlo tanto como para que se me olvide que la estoy usando. La he usado y la uso ocasionalmente para sacar algún primer plano de algún pájaro en casa (no recelan de la presencia cercana de un teléfono) o sorprender a algún ratón saliendo de su madriguera, pero tenedlo en cuenta si queréis darle un uso más intensivo.
A partir del esquema anterior es muy fácil modificar la tarea para realizar otras acciones: llamar por teléfono cuando se detecte movimiento, hacer que el móvil grite si alguien lo mueve, enfocar durante la grabación áreas de la pantalla no-centrales, etc, etc, etc.. las posibilidades son infinitas.
Juan
#1/ 10 de August/2016 a 17:11:03
Otros comentarios de «Juan»
Hola gracias antes que nada por este tutorial y otros que he leído siempre interesantes.
Tengo un LG G4 ,con el software que citas, Tasker, Motion detector ademas de Secure settings y rooteado el telefono.
He importado el xml a tasker.En principio no da ningún error en tasker, pero no graba nada, se abre la aplicaron cámara , se cierra, activa motion, pero no graba.
Como comentas esto esta hecho para el S4, y no sera directamente exportable al mío entiendo.Estoy buscando en la red los valores para el Script > Ejecutar Consola : input tap 1800 240 que se adapten a mi teléfono
He probado Run Shell [ Command:input tap 1740.0 250.0 y cambiando Action:android.media.action.VIDEO_CAPTURE pero no lo logro tampoco me podrías orientar algo.
Gracias
Trebol-a
#2/ 10 de August/2016 a 18:03:04
Otros comentarios de «Trebol-a»
Hola Juan,
el script simula toques en pantalla para pulsar teclas de grabación y demás... es mucho más que probable que estas posiciones cambien de un teléfono a otro. Si lo tienes rooteado muy probablemente dispongas de una herramienta de debug llamado algo como "Mostrar ubicación del cursor" que te muestra una barra de información diciéndote DONDE estás pulsando.
Con ayuda de esta herramienta puedes sacar las coordenadas exactas donde está el botón GRABAR de tu cámara ANDROID y reemplazarla estas coordenadas en el script.
Este "mostrar posición del cursor" en mi Galaxy S4 está en Ajustes > Más > Opciones de desarrollo > Entrada > Mostrar ubicación del cursor.
A las malas siempre puede averiguarlo por aproximación dividiendo tu pantalla, si la resolución de tu teléfono son (p.ejem) 1920 px la mitad del teléfono serán 960px! :D
android.media.action.VIDEO_CAPTURE abre la cámara en preparada para vídeo, supongo que mejorará el rendimiento pero los botones están igual ubicados.
Pones las coordenadas 1740.0 250.0 ... pero deberías ponerlas SIN decimales.
Juan
#3/ 10 de August/2016 a 18:41:57
Otros comentarios de «Juan»
Jolin que rapidez en contestar. Muchísimas gracias.
Voy a seguir tus instrucciones, me han aclarado bastante.
Saludos.
Juan
#4/ 10 de August/2016 a 18:49:48
Otros comentarios de «Juan»
Por cierto Tasker me recuerda a Automator en Mac, lastima que no tenga la opción de grabar eventos al crear un flujo de trabajo, es tremendamente sencillo crear automatizaciones, uno solo tiene ejecutar la tarea y el se encarga de grabar los pasos.
Trebol-a
#5/ 10 de August/2016 a 19:28:02
Otros comentarios de «Trebol-a»
No conozco Automator, pero estoy encantado con Tasker. Recientemente estoy usando un plugin: Task App Factory que te permite convertir en apps casi cualquier tarea... es impresionantemente cómodo y adictivo. Por ejemplo, antes para regar el patio con mi Arduino, entraba a una página web local y pulsaba un botón, ahora ni eso, creo una tarea de Tasker que envia una solicitud CURL a mi página ordenandole regar y luego esa tarea la convierto en applicación. Ahora para regar tengo mi propio icono personalizado en el teléfono que riega en cuanto lo toco!! :D
Juan
#6/ 10 de August/2016 a 19:52:44
Otros comentarios de «Juan»
Lo consegui, ya me funciona perfecto.
Yo he conocido Tasker a través de esta pagina, y como bien dice es impresionante el potencial que tiene, eso si, hay que leerse un cuantos tutoriales para intentar exprimirlo, lo del riego que comenta ya parece ciencia ficción.
Bueno pues nada ahora a grabar las aves que es mi afición (Probe un cámara de espera Bushnell pero fallaba mucho y la calidad a pesar del precio era muy mediocre)
Lo dicho muchísimas gracias por todo.
Un placer
Trebol-a
#7/ 10 de August/2016 a 20:09:57
Otros comentarios de «Trebol-a»
A disfrutarla! :)
Roberto
#8/ 20 de February/2017 a 00:11:04
Otros comentarios de «Roberto»
Hola.
Mi objetivo simplemente es el de conseguir que al detectarme la camara frontal se encienda la pantalla.nada mas.
Serias tan amable de orientarme un poco para conseguir mi objetivo.
Muchas gracias
18 de December, 2024 @ 15:12