Fotos en línea de Live Streaming desde cualquier tarjeta SD activado cámara

Introducción

Soy un estudiante de ingeniería de software que también es un apasionado de la fotografía así que quería combinar los dos intereses en un divertido proyecto. Lo que terminé con es un servidor web que mostrará automáticamente fotos a cualquier navegador conectado tan pronto como se toma una foto con una cámara digital. Ahora quiero enseñarle a hacer también!

Hice este instructable para el concurso de fotografía y realmente apreciaría su voto si crees que es digno (haga clic en el "voto" naranja de la cinta en la parte superior derecha). ¡ Gracias!

Si no tienes mucha codificación de experiencia, no te preocupes! Literalmente lo guiará a través de cada línea de código. Sólo debe tomar alrededor de una hora.

Este Instructable hace uso de una tarjeta SD Eye-Fi ($39,99 nuevo) que hace parte del trabajo para nosotros de forma inalámbrica cómo transferir fotos desde la cámara a un ordenador o que puede imitar el comportamiento de la Eye-Fi de pegar fotos en un directorio que vamos a crear! Te mostraré cómo configurar una tarjeta Eye-Fi, por lo que podemos conseguir una foto de la cámara en el directorio correcto y cómo configurar un servidor web para conseguir esa foto del directorio a los navegadores de mucha gente - al instante!

En primer lugar, conseguiremos que funcione en una red local para que pueden ser compartido con otras personas conectadas a la misma conexión wi-fi (que es una mayoría del Instructable). Entonces, para el público más técnico, voy a explicar unos pasos sobre cómo hacerlo funciona en un servidor web público para cualquier persona en todo el world wide web puede sacar su transmisión en vivo. El código puede encontrarse en mi repositorio de Github.

Explicación del sistema

Necesitarás un par de cosas físicas:

  • Tarjeta SD activado Cámara Digital
  • Tarjeta Eye-Fi SD
  • Una computadora conectada a Internet

Veamos un diagrama de sistema de cómo esto va a funcionar.

Una vez tomada la foto, la imagen se envía a los servidores de Eye-Fi antes de ser enviado a nuestro propio ordenador. Mientras tanto, nuestro servidor es aceptar conexiones y abrir sockets de web con cada navegador que intenta conectar con él. Cuando el servidor detecta una nueva imagen que acaba de subir, envía un link a esa imagen a cada uno de los clientes a través de la toma. Bastante simple, ¿verdad?

Así que vamos a empezar.

Configurar el servidor

En primer lugar, necesitaremos instalar JS de nodo (que referiré a como a 'nodo') para ejecutar nuestro servidor. Hay un par de fáciles métodos descritos en el nodo página de Github. Una vez instalado el nodo, haremos un directorio para el proyecto e instalación de unos módulos de nodo que harán nuestra vida mucho más fácil. Va a utilizar el terminal para completar estas tareas y para algunos similares tareas en el futuro. En Windows, esto se puede acceder presionando la tecla de windows, escribiendo 'cmd', y presiona entrar. En OSX, simplemente abra la aplicación Terminal. Ejecute los siguientes comandos en el terminal. Nodo-watch es para monitorear nuestro directorio, expreso es el marco que estamos utilizando para nuestro servidor web y socket.io es para mantener tomas de la web.

Pido disculpas que el código no copiables; no se puede escribir código en el sitio de Instructable porque no quieren que te lo hackeo. No puedo decir que culparlos.

Ahora podemos empezar a crear nuestro servidor. En su editor de elección (< 3 Sublime Text) crear un archivo llamado "livePhotoServer.js", escriba el código siguiente y guárdelo en el directorio de nuestro proyecto. Lo que estamos haciendo en este trozo es simplemente importar el código de los módulos que necesitamos para ejecutar una aplicación web ('http' y 'express') y configurar el servidor para aceptar conexiones de clientes. Los detalles no son muy importantes.

Ahora que se ha escrito el código, corremos el servidor. Para ejecutar el servidor, simplemente ingrese el nodo livePhotoServer.js y, más tarde, cuando tenemos que detenerlo, tipo control + c. Pero por el momento lo dejas correr.

Nota: Si recibe un error como ' Error: escuchar EADDRINUSE' al tratar de ejecutar el servidor, puede que necesite cambiar el puerto activo. Para ello, tomar la línea 19 de 'livePhotoServer.js' server.listen(X); donde X es algún número entre 3000 y 9000 pero no 8080.

Ahora, si usted abre tu navegador web y vaya a 'localhost:8080' (o, si tuvo que cambiar su número de puerto, escriba ese número de puerto después de los dos puntos), se debe ver "¡ Bienvenido a nuestro streamer impresionante foto!". Esto significa que nuestro servidor está respondiendo!

Lo siguiente que vamos a hacer es servir una página HTML en lugar de texto cuando el servidor para que finalmente podemos mostrar una imagen. En primer lugar, vamos a crear un directorio dentro de nuestro directorio de proyecto llamado 'público', dentro de los cuales se almacenará los archivos que serviremos a nuestros clientes.

A continuación, crearemos un archivo llamado 'livePhoto.html' dentro del directorio 'público' y entrar el código de abajo. El código crea una página web simple con una sola plaza roja.

Finalmente, vamos a añadir un par de líneas a nuestro fichero 'livePhotoServer.js' que configura el directorio público como nuestro archivo estático compartido fuente (línea 14) y el módulo para lectura de archivos (línea 17). Entonces modificamos nuestra ruta raíz (líneas 20-24) para leer el archivo livePhoto.html y enviar el texto en la respuesta (que presentarán como HTML en el navegador). Animo a comparar los números de línea en las imágenes para averiguar dónde en los archivos de que los bits de código ir.

Ahora tenemos que iniciar nuevamente el servidor. Para volver a subir un directorio, escriba 'cd..'  después de lo cual puede iniciar el servidor (nodo livePhotoServer.js). Cargar http://localhost: 8080 (o cualquiera que sea su número de puerto) en su navegador y ver la Plaza Roja!

Hay una capa más de comunicación que tenemos entre nuestro servidor y nuestro cliente: websockets. WebSockets dan al servidor la capacidad para iniciar a una transferencia de datos al cliente en vez de según el cliente para solicitar nuevas páginas. Podemos utilizar estos tubos de dos vías para mantener abierto un canal de comunicación que le notificará al cliente cuando recibimos una nueva foto.

Empezaremos añadiendo dos líneas a nuestro script 'livePhotoServer.js'. Primero, importamos el módulo de e/s de socket y empezar a escuchar las conexiones en dirección de nuestro servidor. Luego creamos un array que contenga referencias a las tomas que vamos a hacer.

Entonces, a escribir un método que en nuestro servidor acepta conexiones de socket de la web de clientes, almacena la referencia de toma a la matriz y envía un poco de mensajes hacia atrás para asegurarse de que ha funcionado. También, para mantener la lógica limpia, eliminamos la referencia toma de corriente de la matriz en desconectar.

Ahora tenemos que escribir la lógica que inicializa conexiones de socket de la web desde el navegador cuando se carga la página de nuestro servidor. Crear un archivo titulado ' livePhoto client.js " en el directorio público y añadir algo de código para iniciar una conexión web de socket con el servidor (línea 2). Cuando el cliente recibe un mensaje "conectado" del servidor, abrirá un cuadro de diálogo con el contenido del mensaje (líneas 5-10).

La parte final de nuestra mezcla de zócalo web implica ejecutar este javascript del lado cliente mediante la vinculación de nuestro archivo HTML de cliente. También vinculamos al zócalo io código (debe ser declarado antes nuestro archivo livePhoto client.js para que la biblioteca io no está definida). jQuery también está vinculado en porque hará que nuestra vida un poco más fácil cuando añadimos código más complicado más tarde.

Si reiniciar el servidor de nuevo y volver a cargar la página, debería ver un cuadro de alerta con el mensaje: ' mensaje de servidor: ¡ Bienvenido a foto corriente. " Si ves que tu websockets está trabajando maravillosamente!

¡ UF! Suficiente javascript ya. Vamos a configurar la tarjeta Eye-Fi para trabajar con nuestro código.

Eye-Fi configurar

En primer lugar, vamos a crear un directorio "imágenes" dentro de nuestro directorio de 'público' que las fotos se entregarán por arte de magia a (o que puede pegar imágenes en si no tienes una tarjeta Eye-Fi).

Si nunca ha utilizado su tarjeta Eye-Fi, siga las instrucciones en la Página Web de Eye-Fi para configurarlo. Si ya ha utilizado, asegúrese de que usted puede conectar a una red inalámbrica. Vamos a asegurarse de que la tarjeta Sube fotos al directorio "imágenes" dentro de nuestra carpeta 'pública' y que no crea carpetas basado en la fecha. Si usted está confundido acerca de este paso, vea la imagen debajo de la aplicación de centro de Eye-Fi.

Finalmente, podemos empezar a tomar fotos! Te recomiendo cambiar la configuración de la cámara a la resolución más baja posible, si tiene la capacidad, por lo que podemos lograr tiempos de carga más rápidos. Tomar unas fotos y comprobar que terminan en el directorio de 'imágenes'. Si no parece estar funcionando, asegúrese de cámara no entra en modo de reposo después de tomar fotos y que estás lo suficientemente cerca para el router inalámbrico. Tuve algunos problemas con este yo cuando estaba trabajando en el proyecto.
Ahora volvamos al código.

Monitorización del sistema de archivos

Ahora vamos a iniciar nuestro sistema de archivo para detectar cuando Eye-Fi ofrece una foto nueva a nuestro directorio de 'imágenes' de vigilancia. Tendremos que añadir el siguiente código a nuestro fichero 'livePhotoServer.js' por lo que podemos importar el módulo de reloj de nodo para utilizar su método de reloj . Supervisa un directorio y nos brinda una devolución de llamada se ejecuta cuando cambia un archivo (línea 32). Desafortunadamente, el nombre del archivo modificado que proporciona en la devolución de llamada es el nombre del directorio padre (en nuestro caso público/imágenes) que es bastante inútil. En cambio, vamos a crear un array llamado imágenes en las que nos se manualmente realizar un seguimiento de las imágenes que ya hemos mostrado para que se sepa que imagen es nuevo cuando se cambia el sistema de archivos (voy a escribir la aplicación de findNewImageName() en el paso siguiente).

Ahora vamos a añadir más código a nuestro fichero 'livePhotoServer.js' para añadir todas las imágenes que están en el directorio en nuestra matriz tan pronto como inicie el servidor para que accidentalmente no disponemos ellos como tomar más imágenes (líneas 92-103 y 106). Luego, cuando conseguimos aviso de nodo-ver que algo cambió, podemos iterar sobre el sistema de archivos para ver que archivo no está en nuestra matriz (líneas 71-85). Parece ser un poco complicado para una tarea tan simple tan si cualquier persona puede pensar de una forma más sencilla de hacerlo, por favor me avisan.

Ahora, si reinicia el servidor y tomar algunas fotos, el terminal debe imprimir los nombres de las imágenes que usted está tomando! Impresionante.

Representación y transmisión de imagen URL

La parte final del sistema consiste en enviar a través de URLs de las imágenes nuevo a todos los sockets de cliente espera. En nuestro "livePhotoServer.js" archivo, vamos a añadir algo de código para actualizar los clientes de iterar a través de la gama de zócalos y enviando por la URL a cada uno. Esto se llama cada vez que detectemos un cambio en el sistema de archivos.

Luego actualizamos nuestro archivo 'livePhoto.html' para sacar el cuadrado rojo y sustituirlo con un elemento de la imagen que se puede actualizar. Asignar el id de la foto en vivo para que nosotros podemos acceder a ella en nuestro JavaScript.

Por último, vamos a actualizar nuestro JavaScript del lado cliente para que pueda recibir mensajes de socket con el nuevo URL de la imagen. Utilizar jQuery para encontrar el elemento de la imagen y actualizar el atributo de origen de su (líneas 5-11).

Reinicie su servidor nodo actualice su página de localhost:8080 y empezar a tomar fotos. Debe estar actualizando en la página en tiempo real Allí es acerca de un retraso de segundo 3 entre toma de fotografías y que aparece en mi navegador cuando se utiliza el tamaño del archivo 'S3' ajuste en mi Canon DSLR así esperar un retraso del transporte de esa magnitud.

También puede ver la transmisión en vivo de cualquier otro dispositivo en la misma red inalámbrica que su servidor. Simplemente encontrar su dirección IP utilizando ya sea el comando ifconfig , si tu corriendo OSX o el ipconfig, si tu Windows funcionando, en su terminal. Entrar en que dirección IP seguida de ": 8080' (o cualquier puerto número que usted utiliza) en otro dispositivo y lo actualizaré con fotos al tomarlas (o pegarlos en la carpeta 'images').

¡ Disfrute!

Opcional y más avanzado: vivo desde un sitio web

Si ya tienes un servidor FTP activo en algún lugar, no es demasiado más problemas para mover esta foto streaming server en ella. Hay tres cambios que necesitamos hacer:

  • Cambiar la dirección de lo socket de cliente
  • Cambiar la configuración de Eye-Fi
  • Compruebe si las fotos se cargan completamente antes de notificar a los clientes

Vamos a comenzar con el cambio de la dirección del socket de cliente. En el ' livePhoto-client.js' archivo, cambiar el método de io.connect para aceptar el nombre de dominio de su servidor:

Ahora vamos a utilizar la capacidad de Eye-Fi para enviar las fotos a un servidor FTP. Usted debe seguir Eye-Fi gran instrucciones de cómo hacer esta aquí pero también desean especificar una cosa más. Por alguna razón, Eye-Fi no te permite desautorizar directorio titulado creación para las fotos como lo hacen cuando tienes transferidos a su computadora local, por lo que necesita para la transacción FTP público LivePhoto (en vez de LivePhoto/público/imágenes como teníamos antes) y el nombre del álbum a las imágenes. Así, la estructura de archivos mantiene igual así que nuestro código no se rompe.


El cambio final que tenemos que hacer es una consecuencia de la aplicación de FTP (puede depender el servicio FTP que utilizas en tu sever... No estoy seguro... He usado pure-ftp). He encontrado que al utilizar el código de arriba en mi servidor FTP, enlaces sería enviados una y otra vez a los clientes ya que la carga estaba en progreso. A veces los enlaces dejó de ser enviados antes de la carga completa para que los navegadores ver cuadros incompletos o faltantes. Para contrarrestar ese efecto de la manera más simple posible, agregué un intervalo de 5 segundos antes de enviar el enlace, y si otro cambio de archivo fue detectado porque la imagen sigue siendo fue subida antes de los 5 segundos arriba, restablece el intervalo. Esto pareció aliviar el problema.

Hay un par otros más complicados, pero más confiables, maneras de conseguir alrededor de esto como programas como lsof (soportes para archivos abiertos de la lista) de monitoreo o control de su servidor FTP inicia ya que generalmente indican que cuando un archivo ha terminado de cargar. Sin embargo, para esta demo, los hubiera más problemas que valen.

Y eso es todo! Ejecuta el nodo servidor, vaya a YOUR_DOMAIN:8080 y empieza tus fotos vivo!

Mi agradecimiento a selkeymoonbeam por su ayuda trabajando las torceduras de este Instructable.

Artículos Relacionados

Twitch streaming desde OS X con una nVidia escudo tableta

Twitch streaming desde OS X con una nVidia escudo tableta

Después de descubrir el maravilloso mundo de twitch.tv, decidí que quería transmitir algunos juegos que he jugado. Sin embargo, fue difícil establecer en OS X. Necesaria que descargar Alpha release software (OBS), Yosemite (soundflower) de hackear y
Streaming de vídeo desde la tarjeta SD para Nokia LCD con Arduino

Streaming de vídeo desde la tarjeta SD para Nokia LCD con Arduino

Durante mucho tiempo con que pensé en reproducción de video audio no fue posible en el Arduino. Entonces un día decidí darle una oportunidad y que resultó para ser más sencillo de lo que pensaba.Me decidí a escribir los pasos de un instructivo en ben
Ver UFC en combustible TV Live Stream Online gratis

Ver UFC en combustible TV Live Stream Online gratis

visite aquí para Ver UFC en combustible TV en vivo Watch UFC en combustible TV en vivo - Ultimate Fighting Championship (UFC) saldrá al aire una vez más una tarjetas de toda la pelea, ahora con UFC en combustible TV 8, que comenzará alrededor de... c
Cómo obtener acceso a sus medios de comunicación desde cualquier lugar por su propia nube de alojamiento!

Cómo obtener acceso a sus medios de comunicación desde cualquier lugar por su propia nube de alojamiento!

HE ACTUALIZADO ESTA GUÍA ***Por favor ve la nueva versión de esta guía aquí.¿Alguna vez has soñado con tener acceso a sus medios de comunicación desde cualquier lugar del mundo? Este tutorial te mostrará cómo organizar tu propia nube en casa que le p
Voz mando su hogar desde cualquier lugar del mundo

Voz mando su hogar desde cualquier lugar del mundo

.. .no la ciencia ficción más...Utilizando hardware y software disponible hoy en día, este Instructable demostrará cómo es posible comando de voz la mayoría de los sistemas de su hogar mediante comando de voz, smartphone, tablet o PC desde cualquier
Reproducción de audio desde la tarjeta SD con Arduino

Reproducción de audio desde la tarjeta SD con Arduino

Reproducción de archivos de audio desde la tarjeta SD le dirá. Sin utilizar ningún módulo jugará la archivos de audio de MP3 sólo con lector de tarjetas SD.Paso 1: materiales:Materiales:ArduinoMódulo de tarjeta SDAltavozadaptador y tarjeta sdPaso 2:
Controlar el escritorio de tu Pi desde cualquier dispositivo móvil

Controlar el escritorio de tu Pi desde cualquier dispositivo móvil

Una de las grandes cosas sobre un Raspberry Pi es que puede caber en su bolsillo de la camisa, pero fuera de la caja si desea utilizarlo debe conectarlo a un teclado, ratón, monitor voluminoso, etc.... casi derrotar a atributo mayor de Pi.Pero... ust
Acceso a ARIAG25 desde cualquier parte del mundo

Acceso a ARIAG25 desde cualquier parte del mundo

SISTEMAS DE ACMEDiseño y fabricación en Italia Linux incrustado placas desde el 2005. Nuestro negocio principal es para crear alta calidad CPU Linux módulos diseñados para el mercado profesional con la disponibilidad a largo plazo, alta confiabilidad
Control de internet (desde cualquier lugar) ESP8266

Control de internet (desde cualquier lugar) ESP8266

Hay pero unas cosas mejores que (con éxito) de programación y utilizando el Arduino. Seguramente una de esas cosas es usar su ESP8266 como un Arduino con WiFi!En este instructable te mostraré una manera fácil de conseguir el ESP8266 como un servidor
Controlador de puerta de garaje con frambuesa Pi: supervisar el estado y controlar su garaje desde cualquier lugar del mundo! ¿

Controlador de puerta de garaje con frambuesa Pi: supervisar el estado y controlar su garaje desde cualquier lugar del mundo! ¿

** Tiene su siempre condujo fuera de su garage y después de algunos minutos en su unidad, temía no cierras la puerta?** ¿Qué pasa si usted ¿realmente deje la puerta abierta?La puerta puede cerrarse después de pocos minutos, pero eso significa que su
Cómo importar datos desde cualquier página web a excel hoja de cálculo al instante.

Cómo importar datos desde cualquier página web a excel hoja de cálculo al instante.

Este video se demuestra cómo utilizar una herramienta en excel que le permite recuperar datos desde cualquier página web a excel hoja de cálculo.Rascándose la cabeza... sólo tratando de averiguar cómo transferir los datos más buscados de la web en su
Cómo acceder a tu música desde cualquier lugar con su Mac Mini

Cómo acceder a tu música desde cualquier lugar con su Mac Mini

este instructable convierte su ordenador en un servidor privado compartido. Acogerá tu música para que sólo usted puede conseguir en él. Pero, suponiendo que tu conexión a internet es lo suficientemente rápida, podrás conseguir en él de todo el mundo
El control de su puerta de garaje desde cualquier lugar!

El control de su puerta de garaje desde cualquier lugar!

¿Cuántas veces has tirado fuera de su calzada y conseguido diez minutos por la carretera sólo para comenzar segundo adivinar si realmente se cierra su garaje o no? Problema resuelto! Con este instructable puede Compruebe si su garaje es cerrado o abr
Abrir su puerta de garaje desde cualquier lugar además de seguridad Cam!

Abrir su puerta de garaje desde cualquier lugar además de seguridad Cam!

Hola a todos, aquí es un simple hace instructable teléfono antiguo, una cámara de seguridad se puede ver dondequiera allí es internet y controla también su puerta de garaje remotamente con muy pocos componentes.Se hace uso de una aplicación gratuita