Descripción
En un futuro cercano, viviremos la revolución de Internet de las cosas (IoT), donde cada vez más dispositivos tendrán acceso a Internet. Esto abre un abanico de nuevas posibilidades con el consecuente potencial de nuevas aplicaciones. Android Things puede ser un actor importante en este nuevo mercado. Todo esto y mucho más se trata en este libro:
Análisis de imágenes con OpenCV: Utiliza desde Android la herramienta más extendida y potente para procesar imágenes en tiempo real. Comprende todos los conceptos teóricos necesarios para realizar un preproceso que resalte los elementos que tratas de localizar. Segmenta las zonas donde están los objetos a reconocer. Extrae las características que pueden identificar los objetos. Desarrolla un proyecto que reconozca señales de tráfico en tiempo real y que te avise si tu velocidad es excesiva.
Desarrollo de aplicaciones para Internet de las cosas: Instala Android Things en una Raspberry Pi e interacciona con sensores a través de sus entradas/salidas (GPIO, PWM, I2C y UART). Interacciona con un microcontrolador Arduino. Integra Google Assistant para que tu dispositivo responda a comandos de voz. Descubre y configura nodos IoT usando Nearby Connections.
Crea servicios web RESTfull en Android Things. Aprende a utilizar MQTT para aplicaciones de IoT.
Programación en código nativo: Usa NDK para escribir directamente tus algoritmos en C/C++ y compílalos a código nativo del procesador. Reconoce en que circunstancias has de utilizar código nativo. Realiza apps mixtas usando JNI.
Ingeniería inversa: Aprende a jaquear aplicaciones para evitar que lo hagan con las tuyas. Estudia el código y modifica
aplicaciones de terceros. Ofusca el código e incluye licencias de Google Play para evitar usos no autorizados de su aplicación.
Evita que se realice ingeniería inversa en tus aplicaciones.
El libro propone un aprendizaje dinámico, con actividades, muchas de ellas a través de Internet:
Ejercicio paso a paso: La mejor forma de aprender es practicando.
Práctica: Para afianzar lo aprendido hay que practicar.
Preguntas de repaso: ¿Lo has entendido todo correctamente?
Trivial programación Android: Mide tus conocimientos jugando en red.
Índice
¿ Cómo leer este libro? . XII
CAPÍTULO 1. Análisis de imagen en Android usando OpenCV 1
1.1 Introducción 2
1.2 Instalación de OpenCV para Android . 3
1.2.1 Prerrequisitos 3
1.2.2 Instalación de la librería OpenCV y los ejemplos 4
1.2.3 Prueba en el dispositivo 5
1.3 Imágenes digitales . 6
1.3.1 Imágenes en color . 7
1.3.2 Imágenes en Android . 8
1.4 Programas básicos con OpenCV en Android . 9
1.4.1 Primer programa para procesamiento de imágenes usando OpenCV 10
1.4.2 Configurar la cámara y su resolución . 16
1.4.3 Seleccionar la entrada desde fichero . 19
1.4.4 Guardar el resultado . 21
1.4.5 La clase Mat de OpenCV . 22
1.4.6 Determinar la orientación del dispositivo 24
1.4.7 Separar el procesamiento de las imágenes 26
1.4.8 Procesar imágenes monocromas 27
1.4.9 Procesamiento de las imágenes en fases 27
1.4.10 Conclusión 35
CAPÍTULO 2. Visión artificial: preproceso . 37
2.1 Transformaciones de Intensidad . 38
2.1.1 Histogramas 39
2.1.2 Aumento lineal del contraste . 40
2.1.3 Ecualilzación del histograma . 45
2.1.4 Del color al monocromo 47
2.1.5 Funciones OpenCV relevantes 51
2.1.6 Resumen de las transformaciones de intensidad . 53
2.2 Preproceso : Operadores locales 53
2.2.1 Filtros lineales . 55
2.2.2 Filtros morfológicos . 70
2.2.3 Operadores morfológicos en OpenCV 77
CAPÍTULO 3. Visión artificial : Segmentación y reconocimiento 81
3.1 Binarización 82
3.1.1 Umbralización fija 84
3.1.2 Umbralización dependiente de la imagen . 84
3.1.3 Umbralización por Otsu 86
3.1.4 Umbralización adaptativa 88
3.1.5 Umbralización en OpenCV 89
3.2 Segmentación 80
3.2.1 La segmentación en OpenCV . 92
3.2.2 Objetos delgados y objetos con agujeros . 94
3.2.3 Opciones de findContours() 95
3.3 Características . 97
3.3.1 El Bounding Box 97
3.3.2 Análisis del interior del rectángulo . 102
3.4 Reconocimiento de dígitos . 104
3.4.1 Extracción de características 104
3.4.2 Clasificación . 106
CAPÍTULO 4. Android Things: Entradas / Salidas . 119
4.1 Internet de las cosas 120
4.2 Introducción a Android Things 121
4.2.1 Solución completamente administrada 122
4.2.2 Plataformas hardware soportadas 125
4.2.3 SDK de Android Things 128
4.2.4 Consola Android Things 130
4.3 Raspberry Pi 3 . 130
4.3.1 Comparativa con otros modelos 131
4.3.2 Características . 132
4.3.3 Alternativas pra el Sistemas Operativos . 133
4.4 Instalaciones de Android Things . 134
4.4.1 Descarga de la Imagen del Sistema de Android Things . 134
4.4.2 Configuración de la conexión a Internet 135
4.4.3 Acceder al dispositivo desde Android Studio 140
4.4.4 Un primer proyecto . 140
4.4.5 Uso del laboratorio remoto 142
4.5 Algunos conceptos de electrónica 144
4.5.1 Voltaje y fuente de alimentación . 144
4.5.2 Señales analógcas y digitales 145
4.5.3 Resistencia pull-up / pull-down . 145
4.5.4 LED y cálculo de resistencia de ajuste 146
4.6 Entradas / Salidas en Android Things . 147
4.6.1 Conexiones GPIO 148
4.6.2 Salidas PWM 153
4.6.3 Bus series I2C . 156
4.6.4 Entradas/ salidas series SPI 163
4.6.5 Entradas /salidas series UART . 163
4.6.6 Medidor ultrasónico de distancia 166
4.7 Usar un microcontrolador Arduino como esclavo . 169
4.8 Controladores de usuario . 176
4.8.1 Utilizar controladores 176
4.8.2 Escribir contoladores de usuario 177
4.9 Integrar Google Assitant SDK . 180
4.9.1 Añadir control de volumen . 188
4.9.2 Usar acciones predefinidas en Google Assistant . 189
4.9.3 Definir acciones personalizadas . 192
CAPÍTULO 5. Android Things: Comunicaciones . 195
5.1 Opciones de comunicación en Android Things 196
5.2 Comunicaciones offine . 197
5.2.1 Bluetooth . 198
5.2.2 LoWPAN 199
5.2.3 Nearby Connections . 200
5.3 Comunicaciones online 221
5.3.1 Servidor web en Android Things . 221
5.3.2 Protocolos de comunicaciones 227
CAPÍTULO 6: Programación en código nativo 271
6.1 Android NDK . 272
6.1.1 Cuándo utilizar código nativo . 273
6.1.2 Contenido de Android NDK 275
6.2 Instalación de Android NDK 277
6.2.1 Instalación Android NDK en Android Stuido 2.2 o superior 278
6.2.2 Intslación Android NDK en Android Stuido 2.1 o inferior . 279
6.3 Funcionamiento y estructura de Android NDK . 285
6.3.1 Desarollo práctico de Android NDK con CMake 286
6.3.2 Desarrollo práctico de Android NDK con ndk- build . 298
6.4 interfaz entre JAVA y C/C++ (JNI) 309
6.4.1 Bibliotecas de enlace estático y dinámico 309
6.4.2 Tipos fundamentales , referencias y arrays 310
6.4.3 Desarrollo paso a paso de un programa mediante JNNI (I) . 312
6.4.4 Acceso a métodos Java desde código nativo (JNI calback) 317
6.4.5 Excepciones 323
6.5 Rendimiento de aplicaciones con código nativo . 324
6.6 Procesado con imagen con código nativo 329
CAPÍTULO 7. Ingeniería inversa en Android 335
7.1 El formato APK . 336
7.2 Decompilando aplicaciones Android 342
7.2.1 Un primer vistazo al contenido de un fichero .apk 342
7.2.2 La máquina virtual Dalvik/ART . 343
7.2.3 Decompilando aplicaiones Android 348
7.3 Modificando aplicaciones Android 348
7.3.1 Modificando recursos binarios de una aplicación 348
7.3.2 Modificando recursos XML de una aplicación 351
7.3.3 Modificando el código de una aplicación . 352
7.4 Ofuscación del código 356
7.5 Obtención de licencias con Google Play 360
7.5.1 Cómo funciona el servicio de licencias 361
7.5.2 Como añadir una licencia a nuestra aplicación 362
7.5.3 ¿Quñe es una política de licencia ? 369
7.6 Cómo evitar que se elimine la verificación de licencia en nuestras aplicaciones . 370
7.6.1 Ingeniería inversa en una aplicación con licencia 371
7.6.2 Primera contramediida: ofuscar el código 376
7.6.3 Segunda contramedida : no usar la librería LVL estándar 379
7.6.4 Tercera contramedida : verificar que no ha modificado nuestra APK . 381
Anexo A el paquete camera2 de Android 387
1.1 Introducción 387
1.2 Obtener información sobre las cámaras . 388
1.2.1 Nivel de Hardware Soportado 389
1.2.2 Orientación y posición de las cámaras . 390
1.2.3 Métodos de enfoque y exposición 392
1.2.4 Tamaños de imagen . 394
1.3 Arrancar la captura y visualizar 396
1.3.1 Capturando fotos. 402
1.4 Analizando imágenes de forma continua . 408
1.4.1 Accediendo a los pixels 411
1.4.2 Conclusión . 413
1.5 Zoom Digital 414
1.5.1 Determinación de las dimensiones del sensor y la distancia focal 415
1.5.2 Determinación del máximo zoom digital . 416
1.5.3 Seleccionando una zona útil del sensor . 417
1.5.4 Controlando el nivel de zoom mediante gestos . 418
1.5.5 Conclusión 419
1.6 Detección Facial . 419
1.7 Conclusión . 423