▷ Vidgear: Librería de Python para el procesamiento de vídeo 🐍

12 minuto(s) de lectura

VidGear es una poderosa biblioteca de procesamiento de video en Python construida con Gears de subprocesos múltiples, cada uno con un conjunto único de características innovadoras. Estas API proporcionan un contenedor fácil de usar, altamente extensible y multihilo alrededor de muchas bibliotecas subyacentes de última generación como OpenCV ➶ , FFmpeg ➶ , picamera ➶ , pafy ➶ , pyzmq ➶ y python-mss ➶

El siguiente diagrama de bloques funcional muestra claramente el funcionamiento de la biblioteca VidGear:

Diagrama de bloques funcionales de @Vidgear

Tabla de contenido

TL; DR

Engranajes: ¿Qué son estos?

Instalación

Nuevo lanzamiento SneekPeak: v0.1.6

Documentación

Para desarrolladores / contribuyentes

Información adicional

TL; DR

¿Qué es vidgear?

“VidGear es una biblioteca Python de procesamiento de video completa ultrarrápida , compacta, flexible y fácil de adaptar”.

¿Qué hace?

“VidGear puede leer, escribir, procesar, enviar y recibir cuadros de video desde varios dispositivos en tiempo real”.

¿Cual es su propósito?

“Construido con la simplicidad en mente, VidGear permite a los programadores y desarrolladores de software integrar y realizar fácilmente tareas complejas de procesamiento de video en sus aplicaciones existentes o nuevas, sin pasar por la documentación de varias bibliotecas subyacentes y usar solo unas pocas líneas de código. Beneficioso para ambos, si eres nuevo en la programación con lenguaje Python o ya eres un profesional “.

Para obtener información más avanzada, consulte la *documentación de Wiki ➶* .

Engranajes

VidGear está construido con varias *API de* subprocesos *múltiples* *(también conocidas como Gears),* cada una con alguna función / mecanismo único.

Cada una de estas API está diseñada exclusivamente para manejar / controlar diferentes transmisiones de video, transmisiones de red y codificadores de medios específicos del dispositivo. Estas API proporcionan un contenedor fácil de usar, altamente extensible y multihilo alrededor de varias bibliotecas subyacentes para explotar sus características y funciones directamente mientras proporcionan un manejo robusto de errores.

Estos engranajes se pueden clasificar de la siguiente manera:

A. Engranajes de VideoCapture:

B. Equipo de VideoWriter:

  • WriteGear: maneja la codificación y compresión de video sin pérdida fácil.

C. Equipo de red:

  • NetGear: apunta a la transferencia de cuadros de video síncronos / asíncronos entre sistemas de interconexión a través de la red.

CamGear

CamGear puede capturar cuadros ultrarrápidos de una amplia gama de dispositivos / transmisiones, que incluye casi cualquier cámara IP / USB, formato de archivo de video multimedia ( *hasta 4k probado* ), varios protocolos de transmisión de red como http(s), rtp, rstp, rtmp, mms, etc., además de soporte para la transmisión en vivo de Gstreamer y YouTube URLs de video / livestreams.

CamGear proporciona un contenedor multihilo flexible de alto nivel alrededor de la OpenCV's clase VideoCapture con acceso a casi todos sus parámetros disponibles y también emplea pafyAPI de Python para la transmisión en vivo de YouTube . Además, CamGear se implementa exclusivamente en modo de cola enhebrada para un manejo de trama sincronizado, ultrarrápido y sin errores.

El siguiente diagrama de bloques funcional simplificado muestra el funcionamiento generalizado de la API de CamGear:

Diagrama de bloque funcional CamGear

Guía API de CamGear:

»> Guía de uso

VideoGear

VideoGear API proporciona un envoltorio interno especial alrededor de la clase exclusiva de estabilizador de video de VidGear .

Además, la API VideoGear puede proporcionar acceso interno a las API CamGear y PiGear separadas por un indicador especial. Por lo tanto, esta API tiene el poder exclusivo para cualquier VideoStream entrante de cualquier fuente, ya sea en vivo o no, para acceder y estabilizarlo directamente con latencia mínima y requisitos de memoria.

A continuación se muestra una instantánea de un estabilizador de VideoGear en acción:

VideoGear Stabilizer en acción! Video original cortesía de @ SIGGRAPH2013

Código para generar el video estabilizado API VideoGear anterior ( vea ejemplos de uso más detallados aquí ):

# importar bibliotecas 
de vidgear.gears importar VideoGear
 import numpy como np
 import cv2

stream_stab = VideoGear ( source = ' test.mp4 ' , stabilize  =  True ) .start () # Para abrir cualquier transmisión de video válida con el indicador `estabilizar` establecido en True. 
stream_org = VideoGear ( source = ' test.mp4 ' ) .start () # abre la misma secuencia sin estabilización para la comparación

# bucle infinito 
mientras es  verdadero :
  
  frame_stab = stream_stab.read ()
   # leer marcos estabilizados

  # comprueba si frame es None 
  si frame_stab es  None :
     # if True rompe el 
    salto de bucle infinito
  
  # leer el marco original 
  frame_org = stream_org.read ()

  # Concatenate ambos marcos 
  output_frame = np.concatenate ((frame_org, frame_stab), eje = 1 )

  # put text 
  cv2.putText (output_frame, " Before " , ( 10 , output_frame.shape [ 0 ] -  10 ), cv2. FONT_HERSHEY_SIMPLEX , 0.6 , ( 0 , 255 , 0 ), 2 )
  cv2.putText (output_frame, " After " , (output_frame.shape [ 1 ] // 2 + 10 , frame.shape [ 0 ] -  10 ), cv2. FONT_HERSHEY_SIMPLEX , 0.6 , ( 0 , 255 , 0 ), 2 )
  
  cv2.imshow ( " Marco estabilizado " , marco_salida)
   # Mostrar ventana de salida

  key = cv2.waitKey ( 1 ) &  0x FF 
  # verifique 'q' presione la
   tecla if key ==  ord ( " q " ):
     # if 'q' presionó la tecla break 
    break

cv2.destroyAllWindows ()
# cerrar ventana de salida
stream_org.stop ()
stream_stab.stop ()
# cierra de forma segura las transmisiones de video.

VideoGear API Guide:

»> Guía de uso

PiGear

PiGear es similar a CamGear, pero está hecho para admitir varios módulos de cámara Raspberry Pi *(como el módulo de cámara OmniVision OV5647 y el módulo de cámara Sony IMX219 )* .

PiGear proporciona una envoltura flexible de múltiples subprocesos alrededor de la biblioteca completa de Python picamera para interactuar con estos módulos correctamente, y también otorga la capacidad de explotar sus diversas características brightness, saturation, sensor_mode, etc.sin esfuerzo.

Lo mejor de todo es que la API de PiGear proporciona un excelente manejo de errores con características como un temporizador interno roscado que mantiene un seguimiento activo de cualquier subproceso congelado y maneja fallas de hardware / subprocesos congelados de manera robusta y, por lo tanto, saldrá de manera segura si se produce algún error. Entonces, si accidentalmente desconectó el cable del módulo de la cámara al ejecutar PiGear API en su secuencia de comandos, en lugar de entrar en posibles hilos de pánico / congelación del kernel, la API se cierra de manera segura para ahorrar recursos.

El siguiente diagrama de bloques funcional simplificado muestra la API de PiGear:

Diagrama de bloque funcional de PiGear

Guía de API de PiGear:

»> Guía de uso

ScreenGear

ScreenGear API actúa como Screen Recorder, que puede capturar fotogramas de su monitor en tiempo real, ya sea definiendo un área en la pantalla de la computadora o en pantalla completa a expensas de una latencia insignificante. También proporciona soporte aparentemente para capturar cuadros de múltiples monitores.

ScreenGear proporciona un contenedor de subprocesos múltiples de alto nivel alrededor de la API de la biblioteca python python-mss y también admite una manipulación directa y flexible de parámetros internos.

A continuación se muestra una instantánea de una API ScreenGear en acción:

ScreenGear en acción!

Código para generar el resultado anterior:

# importar bibliotecas 
de vidgear.gears import ScreenGear
 import cv2

stream = ScreenGear (). start ()

# bucle infinito 
mientras es  verdadero :
  
  frame = stream.read ()
   # marcos de lectura

  # comprobar si el cuadro es Ninguno 
  si el cuadro es  Ninguno :
     # si Verdadero romper el 
    salto de bucle infinito
  
  cv2.imshow ( " Marco de salida " , marco)
   # Mostrar ventana de salida

  key = cv2.waitKey ( 1 ) &  0x FF 
  # verifique 'q' presione la
   tecla if key ==  ord ( " q " ):
     # if 'q' presionó la tecla break 
    break

cv2.destroyAllWindows ()
# cerrar ventana de salida

stream.stop ()
# cerrar de forma segura la transmisión de video.

Guía de la API de ScreenGear:

»> Guía de uso

WriteGear

WriteGear maneja varias poderosas herramientas de escritura que nos brindan la libertad de hacer casi cualquier cosa imaginada con archivos multimedia.

WriteGear API proporciona un contenedor completo, flexible y robusto en torno a FFmpeg , un marco multimedia líder. Con WriteGear, podemos procesar cuadros de video en tiempo real en un formato comprimido sin pérdidas con cualquier especificación adecuada en solo unas pocas líneas de códigos fáciles . Estas especificaciones incluyen la configuración de cualquier propiedad de video / audio, como bitrate, codec, framerate, resolution, subtitles, etc.tareas fáciles y complejas, como la multiplexación de video con audio en tiempo real (ver este ejemplo wiki ). Lo mejor de todo, WriteGear le otorga la libertad de jugar con cualquier parámetro FFmpeg con su exclusiva función de Comando personalizado (consulte este ejemplo wiki ), mientras maneja todos los errores de manera robusta.

Además de esto, WriteGear también proporciona acceso flexible a la API VideoWriter de OpenCV que proporciona algunas herramientas básicas para la codificación de cuadros de video pero sin compresión.

WriteGear opera principalmente en los siguientes dos modos:

  • Modo de compresión: en este modo, WriteGear utiliza FFmpeg'scodificadores incorporados para codificar archivos multimedia sin pérdidas. Nos brinda la capacidad de explotar casi todos los parámetros disponibles disponibles dentro de FFmpeg, con tanta facilidad y flexibilidad y, al mismo tiempo, maneja de manera robusta todos los errores / advertencias de manera silenciosa. Puede encontrar más información sobre este modo aquí .
  • Modo sin compresión: en este modo, WriteGear utiliza la API de VideoWriter incorporada de OpenCV básica . Similar al modo de compresión, WriteGear también admite la manipulación de todos los parámetros disponibles en la API VideoWriter de OpenCV. Pero este modo carece de la capacidad de manipular los parámetros de codificación y otras características importantes como la compresión de video, la codificación de audio, etc. Puede obtener información sobre este modo aquí .

El siguiente diagrama de bloques funcional muestra el funcionamiento generalizado de la API WriteGear:

Diagrama de bloque funcional WriteGear

WriteGear API Guide:

»> Guía de uso

NetGear

NetGear está diseñado exclusivamente para transferir cuadros de video de forma síncrona y asíncrona entre sistemas de interconexión a través de la red en tiempo real.

NetGear implementa un contenedor de alto nivel alrededor de la biblioteca PyZmQ python que contiene enlaces python para ZeroMQ , una biblioteca de mensajería distribuida asincrónica de alto rendimiento que tiene como objetivo ser utilizada en aplicaciones distribuidas o concurrentes. Proporciona una cola de mensajes, pero a diferencia del middleware orientado a mensajes, un sistema ZeroMQ puede ejecutarse sin un intermediario de mensajes dedicado.

NetGear proporciona un soporte perfecto para la transmisión bidireccional de datos entre el receptor (cliente) y el remitente (servidor) a través de patrones de mensajes síncronos bidireccionales como zmq.PAIR (Patrón de par ZMQ) y zmq.REQ / zmq.REP (Patrón de solicitud / respuesta ZMQ) .

NetGear también admite capacidades de compresión de codificación / decodificación de cuadros en tiempo real para optimizar el rendimiento mientras se envían los cuadros directamente a través de la red, codificando el cuadro antes de enviarlo y decodificándolo en el extremo del cliente automáticamente en tiempo real.

Por seguridad, NetGear implementa un fácil acceso a las capas de seguridad potentes, inteligentes y seguras de ZeroMQ, que permiten un cifrado fuerte de los datos y una autenticación irrompible entre el servidor y el cliente con la ayuda de certificados / claves personalizados y brinda privacidad y autenticación fáciles y estandarizadas para sistemas distribuidos a través de la red.

Lo mejor de todo es que NetGear puede manejar de manera robusta dispositivos de Servidores Múltiples a la vez, proporcionando así acceso a la Transmisión en vivo sin interrupciones de los dispositivos múltiples en una red al mismo tiempo.

NetGear a partir de ahora admite sin problemas tres patrones de mensajería ZeroMQ:

El siguiente diagrama de bloques funcional muestra el funcionamiento generalizado de la API de NetGear:

Diagrama de bloque funcional de NetGear

Guía de API de NetGear:

»> Guía de uso

Instalación

Prerrequisitos:

Antes de instalar VidGear, debe verificar que se cumplan las siguientes dependencias:

  • ⚠️Debe usar solo legados de Python compatibles y también pip ya instalado y configurado.

  • OpenCV:VidGear debe requerir que los binarios habilitados para Python OpenCV (3.0+) estén instalados en su máquina para sus funciones principales. Para su instalación, puede seguir estos tutoriales en línea para Linux y Raspberry Pi , de lo contrario, instálelo a través de pip:

        pip3 install -U opencv-python        # o instala opencv-contrib-python de manera similar
    
  • FFmpeg: VidGear debe requerir FFmpeg por sus poderosas capacidades de compresión y codificación de video. 🌟Siga esta página wiki de FFmpeg para su instalación.🌟

  • picamera:Se requiere si usa módulos de cámara Raspberry Pi ( como el módulo de cámara OmniVision OV5647 ) con su máquina Raspberry Pi. Puede instalarlo fácilmente a través de pip:

        pip3 instalar picamera
    

    Además, asegúrese de habilitar la configuración específica de hardware de Raspberry Pi antes de usar esta biblioteca.

  • mss:Se requiere para usar Screen Casting. Instalarlo a través de pip:

        pip3 instalar mss
    
  • pyzmq:Se requiere para transferir cuadros de video en vivo a través del sistema de mensajería ZeroMQ a través de la red. Instalarlo a través de pip:

        pip3 instalar pyzmq
    
  • pafy:Se requiere para las capacidades de transmisión directa de videos de YouTube. Ambas pafyy las últimas bibliotecas youtube-dl( como backend de pafy ) deben instalarse a través de pip de la siguiente manera:

        pip3 instalar pafy
        pip3 install -U youtube-dl
    

Opciones de instalación disponibles:

Opción 1: instalación de PyPI

La mejor opción para instalar VidGear rápidamente .

  pip3 instalar vidgear

Opción 2: Descarga del archivo de lanzamiento

La mejor opción si desea un archivo comprimido .

Las versiones de VidGear están disponibles para descargar como paquetes en la última versión .

Opción 3: clonar el repositorio

La mejor opción para probar los últimos parches ( *quizás experimentales* ), solicitudes de extracción o contribuir al desarrollo.

Puede clonar la testingrama de este repositorio para el desarrollo y, por lo tanto, puede instalar de la siguiente manera:

git clone https://github.com/abhiTronix/vidgear.git
  cd vidgear
 prueba de pago git
 instalación de sudo pip3 .

Documentación

La documentación completa para todas las clases y funciones de VidGear se puede encontrar en el siguiente enlace:

Pruebas

  • Requisitos previos: las pruebas de VidGear requieren algunas dependencias y datos adicionales que se pueden descargar manualmente de la siguiente manera:

    • Clonar e instalar rama de pruebas

    • Descargue algunas bibliotecas de Python adicionales:

         pip3 instala seis
         pip3 instalar pytest
      
    • Descargar el conjunto de datos de prueba: para realizar pruebas, se requiere un conjunto de datos de prueba adicional, que se puede descargar (al directorio temporal) ejecutando el script bash de la siguiente manera:

         chmod + x scripts / bash / prepare_dataset.sh
         .scripts / bash / prepare_dataset.sh                # para Windows, use `scripts / bash / prepare_dataset.sh`
      
  • Ejecutar pruebas: luego se pueden ejecutar varias pruebas de VidGear con pytest( en la carpeta raíz de VidGear ) como se muestra a continuación:

      pytest -sv                                    # -sv para resultados detallados.
    

Legados de Python compatibles

  • Python 3+ solo son legados compatibles para instalar Vidgear v0.1.6 y superior.
  • ⚠️El soporte heredado de Python 2.7 cayó en v0.1.6 .

Licencia

Esta biblioteca tiene licencia bajo la licencia Apache 2.0 .

👉 Repositorio de Python 🐍 👉 Repositorio de Github: Vidgear 🐍 👉 Aprender Python y Más Librerías 🐍


Fuente: Vidgear por Abhishek Thakur

Deja un comentario