Contactos

Transmitimos vídeo desde una cámara web conectada a una Raspberry Pi. Conexión de la cámara a la cámara Raspberry pi control ip ptz Raspberry Pi

¡Buen día!

En Nochevieja se me ocurrió la idea de construir una especie de videovigilancia. Tenía todo lo que necesitaba a mano:

  • Computadora de placa única Raspberry Pi Modelo B
  • Cámara web LOGITECH HD Cámara web C270
Después de leer, decidí desarrollar un poco la idea del autor.
Conocido
Entonces, primero, familiaricémonos con el "componente" principal:
Apariencia de la frambuesa Pi:

Características:

  • Procesador Broadcom BCM2835 700MHz ARM1176JZFS con FPU y GPU Videocore 4
  • La GPU proporciona Open GL ES 2.0, OpenVG acelerado por hardware y decodificación de alto perfil 1080p30 H.264
  • La GPU es capaz de alcanzar 1 Gpixel/s, 1,5 Gtexel/s o 24 GFLOPS con filtrado de texturas e infraestructura DMA
  • 512 MB de RAM
  • Arranca desde la tarjeta SD, ejecutando una versión del sistema operativo Linux
  • Toma Ethernet 10/100 BaseT
  • Toma de salida de vídeo HDMI
  • 2 tomas USB 2.0
  • Toma de salida de vídeo compuesto RCA
  • Zócalo para tarjeta SD
  • Alimentado desde una toma microUSB
  • Conector de salida de audio de 3,5 mm
  • Conector de cámara de vídeo Raspberry Pi HD
  • Tamaño: 85,6x53,98x17mm"
pi@hall-pi ~ $ cat /proc/cpuinfo procesador: 0 nombre del modelo: procesador compatible con ARMv6 rev 7 (v6l) BogoMIPS: 2.00 Características: swp half thumb fastmult vfp edsp java tls Implementador de CPU: 0x41 Arquitectura de CPU: variante de 7 CPU : 0x0 Parte de CPU: 0xb76 Revisión de CPU: 7 Hardware: BCM2708 Revisión: 000e Serie: 000000005a82c372

Puede encontrar una lista de distribuciones admitidas oficialmente. Elegí Raspbian sin shell gráfico.

El proceso de instalación es bastante sencillo y no necesita una descripción detallada, por lo que enumeraré los hechos principales a los que vale la pena prestar atención:

  1. Configurar la zona horaria
  2. Configurar el nombre de la computadora
  3. Habilitar el acceso SSH
  4. Actualizacion del sistema
Después de completar todas las configuraciones necesarias, puede comenzar.
Preparación
Primero, instalemos todos los paquetes necesarios:
sudo apt-get install imagemagick libav-tools subversión libjpeg8-dev
Luego descargue y ensamble mjpg-streamer:
sudo svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer cd mjpg-streamer make
Porque Almacenaremos todos los datos en la nube, configuraremos el trabajo con un sistema de archivos remoto a través de WebDAV:
sudo apt-get install davfs2 sudo mkdir /mnt/dav sudo mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi
Para no ingresar su nombre de usuario y contraseña cada vez, debe agregarlos al archivo
/etc/davfs2/secretos
/mnt/dav contraseña de usuario
El proceso de trabajo
Agreguemos comandos a /etc/rc.local para montar WebDAV y ejecutar el script para transmitir a la red:
mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi cd /home/pi/mjpg-streamer && ./mjpg_streamer -i "./input_uvc.so" -o "./salida_http.so -w ./www"
Ahora, yendo a http://:8080/ tendremos acceso a la cámara. Todo lo que queda es reenviar el puerto en el enrutador y podrá acceder a la cámara fuera de la red local.
Creando vídeo time-lapse
En primer lugar, necesitamos obtener una imagen de la cámara. Porque ya está ocupado (la imagen es transmitida por el servidor web), entonces aprovecharemos la oportunidad para recibir la imagen actual del servidor web:
curl http://localhost:8080/?action=snapshot > salida.jpg
Si queremos dibujar la fecha de la foto en la imagen, podemos usar el comando convertir
marca de tiempo=`stat -c %y out.jpg` convertir out.jpg -rellenar negro -rellenar blanco -pointsize 15 -draw "text 5.15 "$(timestamp:0:19)"" out_.jpg
Versión completa del guión:
#!/bin/bash nombre de archivo=$(perl -e "tiempo de impresión") nombre de carpeta=$(fecha --rfc-3339=fecha) curl http://localhost:8080/?action=snapshot > $nombre de archivo marca de tiempo=` stat -c %y $nombre de archivo` mkdir /mnt/dav/out/$nombre de carpeta convertir $nombre de archivo -rellenar negro -rellenar blanco -tamaño de puntos 15 -draw "text 5.15 "$(marca de tiempo:0:19)"" /mnt /dav /out/$nombrecarpeta/$nombrearchivo.jpg rm $nombrearchivo
El video se ensambla usando el comando avconv:
avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 out.avi
Versión completa del guión del montaje del vídeo:
#!/bin/bash filename=$(date --rfc-3339=date) i=0 para f en `ls -tr /mnt/dav/out/$filename/*.jpg 2>/dev/null` hacer newf=`printf %06d $i`.jpg echo $f "-->" $newf mv $f $newf i=$((i+1)) done rmdir -R /mnt/dav/out/$nombre de archivo/ avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 /mnt/dav/$nombrearchivo.avi rm *.jpg
Ahora solo queda registrar la ejecución de scripts en el programador Cron:
* * * * * pi bash /home/pi/cam.sh 59 23 * * * pi bash /home/pi/build.sh
Vídeo de ejemplo
Conclusión
Este enfoque ayuda a eliminar la necesidad de pasar mucho tiempo viendo vídeos y también reduce el coste del producto final. Gracias a la presencia de un sistema operativo completo, es posible ampliar la funcionalidad en la dirección correcta.

La computadora de placa única Raspberry Pi te permite crear cosas realmente interesantes y útiles: desde centros multimedia hasta sistemas domóticos. Al conectar varios módulos a la Raspberry Pi, puede ampliar significativamente la funcionalidad de esta minicomputadora.



Uno de estos complementos adicionales es una cámara, que le permite tomar fotografías o grabar videos. Hoy en día existen en el mercado una serie de cámaras para Raspberry Pi, y en este artículo haremos un breve repaso de ellas.


Veamos seis de las cámaras más populares: ZeroCam Noir, ZeroCam FishEye, Raspberry Pi Compatible Fisheye Camera, Raspberry Pi Camera V2, Raspberry Pi Camera V2 Noir y Raspberry Pi Camera 1.3.



ZeroCam Noir es un módulo de cámara para Raspberry Pi Zero o Raspberry Pi Zero W, por lo que si quieres usarlo en Raspberry Pi 3 o 2, necesitarás usar un cable adaptador. Esta cámara no tiene un filtro de infrarrojos en la lente, lo que la hace ideal para fotografías con poca luz. Estas son algunas de sus principales características: sensor de 5 megapíxeles, 2592 × 1944 píxeles, 1080p a 30 FPS (o 60 FPS a 720p, 90 FPS a 480p), distancia focal 3,60 mm, 53,50 grados horizontal, 41,41 grados vertical, aprox. Dimensiones del tablero con cámara: 60 x 11,4 x 5,1 mm.



Esta es la versión ojo de pez de ZeroCam, lo que significa que tiene una imagen de gran angular. Esta cámara también está hecha para Pi Zero o Pi Zero W, por lo que para usarla con otro panel Pi necesitas un cable adaptador.



Esta es una cámara ojo de pez compatible con Raspberry Pi que se puede encontrar fácilmente en varias plataformas comerciales en línea como AliExpress, TaoBao, eBay. Se caracteriza por un gran angular de visión de 175º. Se basa en el sensor Omnivision 5647 con una resolución de 5 megapíxeles (2592 x 1944 píxeles).



Esta cámara está equipada con un sensor de imagen Sony IMX219 de 8 megapíxeles con lente focal fija, capaz de mostrar imágenes estáticas de 3280×2464 píxeles, admite vídeos de 1080p30, 720p60 y 640×480p90. La cámara es compatible con todas las placas Raspberry Pi, pero si quieres usarla con Pi Zero, necesitas un cable adaptador.



Esta cámara tiene todas las características del módulo Raspberry Pi Camera V2, pero no tiene filtro IR. Esto significa que es casi una cámara ideal para disparar en la oscuridad.



Raspberry Pi Camera 1.3 es el predecesor del módulo V2. Está equipado con un sensor OmniVision OV5647 de 5 megapíxeles.

Comparación del campo de visión y calidad de imagen de cámaras para Raspberry Pi

En esta prueba, todas las cámaras se instalan a una distancia de 1 metro de la imagen de prueba. Los resultados son los siguientes:











Comparación de la calidad de imagen y la reproducción cromática de las cámaras Raspberry Pi al hacer zoom











Comparación de la calidad de la fotografía de noche.

Los resultados a continuación demuestran el rendimiento de varias cámaras con capacidad nocturna que capturan la misma imagen de prueba con muy poca luz y en la oscuridad.







conclusiones

Todas las cámaras funcionan un poco mejor de lo esperado con módulos tan baratos. Desafortunadamente, no hay ninguna cámara todo en uno entre ellas, y hay que hacer una compensación ya que no parece haber ninguna cámara gran angular (ojo de pez) sin el filtro de corte IR. Entonces, si desea un gran angular, necesitará iluminación regular y, a la inversa, es poco probable que pueda tomar fotografías en gran angular por la noche.

Porque Este ordenador tiene rendimiento suficiente para recibir, almacenar, procesar y transmitir vídeo desde una cámara (por ejemplo, desde una cámara USB) vía wifi a otros dispositivos. Hay cámaras especiales para Raspberry PI que se conectan a un conector especial y cámaras USB que se conectan a cualquier puerto USB de Raspberry PI. Porque Las cámaras USB, por regla general, son mucho más baratas que las especiales (aunque peores), por lo que a continuación consideraremos usar una cámara USB con Raspberry PI. Hay varios programas para capturar video desde una cámara USB, o puedes escribir el tuyo propio, pero en aras de la simplicidad, primero veamos cómo capturar y transmitir video usando el programa de movimiento. Para instalar el programa de movimiento en Raspberry PI, primero debe conectarse a él a través del programa Putty (o cualquier otro programa de terminal con la capacidad de comunicarse a través de SSH) (para obtener información sobre cómo hacerlo, consulte el artículo anterior “Raspberry PI 3 configuración y gestión de GPIO a través de WIFI”). Después de conectarse a Raspberry PI, debe actualizar el sistema usando los comandos

Sudo apt-obtener actualización

Sudo apt-get actualización

Después de una actualización exitosa del sistema, debe instalar el programa de movimiento con el comando

Sudo apt-get install movimiento

Durante la instalación es posible que se le pregunte "¿Desea continuar?" después de lo cual deberá ingresar la letra "Y". Después de instalar el programa de movimiento, deberá realizar algunos cambios en los archivos de configuración. Abra el archivo motion.conf en el editor nano con el comando

Sudo nano /etc/motion/motion.conf

Entonces

Reemplazado por

A continuación, encontraremos otras líneas para cambiar, para hacer esto presione la combinación de teclas CTRL+W, ingrese “stream_localhost” y presione enter, luego de eso se debe encontrar la línea requerida, si no se encuentra, entonces la variable “stream_localhost ”se llama de otra manera, por ejemplo “webcam_localhost” o algo así. Después de encontrar la línea con esta variable, debe

Stream_localhost encendido

reemplazado por

Stream_maxrate 1

Y reemplazar con

Stream_maxrate 100

Reemplazado por

Entonces

Tiempo_marco_mínimo 0

Reemplazado por

Tiempo_marco_mínimo 1

Esto último se hace para que los cuadros se generen una vez por segundo; esto no se ve muy bien, pero el video no desaparecerá si la imagen cambia repentinamente. El propósito de cada variable se puede leer en los comentarios.
Ahora guardemos los cambios presionando CTRL+O e ingrese, luego presione CTRL+X y salga del nano editor. Ahora editemos otro archivo, para ello ingresamos el comando

Sudo nano /etc/default/motion

Y reemplaza la línea

Start_motion_daemon=no

Start_motion_daemon=sí

Luego guarde los cambios presionando CTRL+O e ingrese y luego presione CTRL+X y salga del nano editor. Ahora puedes iniciar la transferencia de vídeo (la cámara USB debe estar conectada a uno de los puertos) con el comando

Inicio del movimiento del servicio Sudo

detenerse con el comando

Detención del movimiento del servicio Sudo

Para ver el video, debe abrir el navegador e ingresar la dirección IP de la Raspberry PI en la barra de direcciones, luego poner dos puntos y 8081 (dirección IP de la Raspberry PI: 8081) y presionar Enter, después de lo cual El vídeo de la cámara USB debería aparecer en el navegador. Puedes ver cómo se hace todo esto, ver el resultado y algo más en el vídeo:

Así es como puedes obtener vídeo desde una cámara USB conectada a una Raspberry PI de forma sencilla. Si es una Raspberry PI 3 con wifi incorporado y alimentada por una powerbank (o alguna otra fuente portátil de electricidad) (por ejemplo esta o alguna más económica, aunque no se recomienda usar una barata, Raspberry PI necesita una fuente de energía normal para utilizar todas sus capacidades, también es muy recomendable instalar un disipador de calor para el procesador y otros microcircuitos que se acumulan durante el funcionamiento de la Raspberry, lo ideal es que el disipador de calor sea de cobre y esté recubierto con pintura negra especial), luego en base a Todo esto se puede hacer con algún tipo de sistema de videovigilancia, cámara de vídeo o algo similar.

Uno de los proyectos de Raspberry Pi más populares es la creación de un servidor de videovigilancia con capacidad de transmitir a Internet. Mucha gente utiliza estos sistemas como sistemas de seguridad (incluido yo mismo), pero también existen otros usos. Si se te ocurre algo interesante, puedes escribirlo en los comentarios. Un proyecto como este costaría entre £ 60 y £ 70, pero usé algunos componentes adicionales que tenía por ahí (y terminé sin costar nada). Utilicé la cámara web Logitech Quickcam en mi proyecto.

Lo que necesitamos:

  • Frambuesa Pi
  • Tarjeta SD de 8 GB o más
  • Cámara web
  • Acceso a Internet mediante adaptador Ethernet o WiFi.
  • Concentrador USB con fuente de alimentación externa
  • Teclado
  • Ratón (para configuración de WiFi)

Entonces, comencemos instalando la última versión de Debian "Wheezy" en la tarjeta SD, lo cual es posible. Para instalar la imagen en una computadora con Windows, puede usar la utilidad y, para computadoras Mac, use este programa. (Más sobre la instalación de imágenes)

Una vez completada la copia de la imagen, inserte la tarjeta SD en la Raspberry Pi. Conectamos el cable de red o adaptador inalámbrico, así como el teclado. Finalmente, no olvide conectar el concentrador USB y suministrarle energía.

Después de encender la Raspberry Pi, configure la zona horaria según su ubicación usando la utilidad configuración raspi.

Tenga en cuenta que para iniciar sesión en un sistema recién instalado debe utilizar su nombre de usuario Pi con contraseña frambuesa.

Si está utilizando una conexión de red WiFi:

Para configurar un adaptador inalámbrico y conectarse a WiFi mediante una interfaz gráfica, debe ingresar el comando:

Después de esto, puede configurar una conexión inalámbrica. Cuando termine, haga clic con el mouse en la esquina inferior izquierda de la pantalla y seleccione Cerrar sesión para volver a la línea de comando.

Ahora es el momento de actualizar el sistema. Escriba la línea de comando:

sudo apt-get actualización sudo apt-get actualización

y esperar a que finalice. Ahora necesita instalar Motion, un software que transmitirá vídeo utilizando el servidor web integrado. Para hacer esto, ingrese:

Sudo apt-get install movimiento

y espera. Una vez completada la instalación, conecte la cámara web a un puerto USB con alimentación de su concentrador.

Ahora necesita realizar cambios en el archivo de configuración del programa Motion. Para hacer esto, ejecute el comando:

Sudo nano /etc/motion/motion.conf

Se abrirá un editor con un archivo de configuración en el que podrá realizar cambios. Los más importantes son estos parámetros:

Daemon = OFF (corregir en ON - este parámetro está en algún lugar al principio del archivo) webcam_localhost = ON (corregir en OFF - este parámetro está en algún lugar al final del archivo)

Presione Ctrl + X para guardar, luego 'y' para confirmar la operación y finalmente Enter para especificar el nombre del archivo.

Ahora puede iniciar el servidor Motion:

Inicio del movimiento del servicio Sudo

Espere unos 60 segundos, luego ingrese la dirección IP de Raspberry Pi en su navegador. La mejor opción de navegador es la última versión de Firefox.

La dirección se ve así: 192.168.X.X:8081

Asegúrese de que el puerto 8081 aparezca al final de la línea para ver la imagen. Para acceder a la configuración, utilice el puerto 8080 en lugar del 8081.

Puerto 8081 – vídeo Puerto 8080 – interfaz web de configuración

Tenga en cuenta que solo podrá acceder a la cámara dentro de su red local. No podrá conectarse a su servidor de video doméstico desde otra ubicación. Para conectarse desde el exterior, configure la redirección de la conexión entrante en el enrutador de su hogar.

¡Felicidades! ¡Acabas de configurar tu propio servidor CCTV en tu Raspberry Pi! ¡Te deseo éxito y no dudes en compartir este artículo!

Nota: si el servidor de video muestra un rectángulo gris en lugar de una imagen, ingrese el comando ls /dev/video en la terminal para determinar el nombre del dispositivo de video. De forma predeterminada, /etc/motion/motion.conf está configurado en video0. Si su cámara web tiene un nombre diferente, corrija el archivo de configuración y luego reinicie Motion.

¡Atención! ¡Repite todo lo descrito en este artículo bajo tu propia responsabilidad y riesgo! No soy responsable de ninguna consecuencia. Este artículo es sólo una guía.

Hace dos años, cuando comencé a trabajar en multicópteros, tuve que construir uno pequeño. Dado que el cuadricóptero estaba destinado a ser puramente autónomo, todo lo que se necesitaba de este control remoto era controlar el dron durante las pruebas y la configuración.

En principio, el mando a distancia hizo frente con bastante éxito a todas las tareas que se le asignaron. . Pero también hubo graves deficiencias.

  1. Las baterías no encajaban en el estuche, así que tuve que pegarlas con cinta aislante :)
  2. Los parámetros se ajustaron mediante cuatro potenciómetros, que resultaron ser muy sensibles a la temperatura. Estableces algunos valores en el interior, sales al exterior y ya son diferentes, se han ido flotando.
  3. El Arduino Nano que utilicé en el control remoto tiene sólo 8 entradas analógicas. Cuatro estaban ocupados por potenciómetros de sintonización. Un potenciómetro sirvió como gas. Se conectaron dos entradas al joystick. Sólo quedaba una salida libre y había muchos más parámetros para configurar.
  4. El único joystick no era el del piloto. Controlar el acelerador con un potenciómetro también resultaba bastante frustrante.
  5. Y el mando a distancia no emitió ningún sonido, lo que a veces resulta muy útil.

Para eliminar todas estas deficiencias, decidí rediseñar radicalmente el mando a distancia. Tanto la parte de hardware como la de software. Esto es lo que quería hacer:

  • Haz un estuche grande para que puedas guardar en él todo lo que quieras ahora (incluidas las baterías) y lo que quieras después.
  • De alguna manera soluciono el problema con la configuración, no aumentando el número de potenciómetros. Además, agregue la capacidad de guardar parámetros en el control remoto.
  • Haz dos joysticks, como en las consolas de piloto normales. Bueno, pon los joysticks ortodoxos.

Nuevo edificio

La idea es extremadamente simple y efectiva. Cortamos dos placas de plexiglás u otro material fino y las conectamos con rejillas. Todo el contenido del estuche está sujeto a la placa superior o inferior.

Controles y menús

Para controlar una serie de parámetros, debe colocar varios potenciómetros en el control remoto y agregar un ADC, o realizar todas las configuraciones a través del menú. Como ya dije, ajustar con potenciómetros no siempre es una buena idea, pero tampoco hay que renunciar a ello. Entonces, se decidió dejar cuatro potenciómetros en el control remoto y agregar un menú completo.

Para navegar por el menú y cambiar parámetros se suelen utilizar botones. Izquierda derecha arriba abajo. Pero quería usar un codificador en lugar de botones. Obtuve esta idea del controlador de una impresora 3D.


Por supuesto, debido a la adición del menú, el código del control remoto se ha ampliado varias veces. Para empezar, agregué solo tres elementos de menú: "Telemetría", "Parámetros" y "Almacenar parámetros". La primera ventana muestra hasta ocho indicadores diferentes. Hasta ahora sólo uso tres: batería, brújula y altitud.

En la segunda ventana están disponibles seis parámetros: coeficientes del controlador PID para los ejes X/Y, Z y ángulos de corrección del acelerómetro.

El tercer elemento le permite guardar parámetros en EEPROM.

Palancas de mando

No pensé mucho en la elección de los joysticks piloto. Dio la casualidad de que el primer joystick Turnigy 9XR me lo regaló un colega en el negocio de los cuadricópteros: Alexander Vasiliev, propietario del conocido sitio web alex-exe.ru. Pedí el segundo directamente a Hobbyking.


El primer joystick tenía un resorte en ambas coordenadas para controlar la guiñada y el cabeceo. El segundo que tomé fue el mismo, para luego convertirlo en un joystick para controlar la tracción y la rotación.

Nutrición

En el antiguo control remoto usaba un regulador de voltaje LM7805 simple, que se alimentaba con un montón de 8 baterías AA. Una opción terriblemente ineficiente, en la que se gastaron 7 voltios en calentar el regulador. 8 baterías, porque solo había un compartimento de este tipo a mano, y LM7805, porque en ese momento esta opción me parecía la más simple y, lo más importante, la más rápida.

Ahora decidí actuar con más prudencia e instalé un regulador bastante eficaz en el LM2596S. Y en lugar de 8 pilas AA, instalé un compartimento para dos baterías LiIon 18650.


Resultado

Juntando todo, obtuvimos este dispositivo. Vista interior.


Pero con la tapa cerrada.


Faltan las tapas de un potenciómetro y las tapas de los joysticks.

Por último, un vídeo sobre cómo se configuran los ajustes a través del menú.


Línea de fondo

El mando a distancia está físicamente montado. Ahora estoy trabajando para finalizar el código del control remoto y el cuadricóptero para devolverles su antigua y fuerte amistad.

Al configurar el control remoto, se identificaron deficiencias. En primer lugar, las esquinas inferiores del control remoto descansan en sus manos: (probablemente rediseñaré un poco las placas, suavizaré las esquinas. En segundo lugar, incluso una pantalla de 16x4 no es suficiente para una hermosa pantalla de telemetría; tengo que acortar el nombres de parámetros a dos letras En la próxima versión del dispositivo instalaré una pantalla de puntos o inmediatamente una matriz TFT.



¿Te gustó el artículo? Compártelo