Tabla de contenido:

Proyectos básicos de OpenCV: 5 pasos
Proyectos básicos de OpenCV: 5 pasos

Video: Proyectos básicos de OpenCV: 5 pasos

Video: Proyectos básicos de OpenCV: 5 pasos
Video: CURSO de VISION ARTIFICIAL CLASE 1 | INTRODUCCION A LAS IMAGENES | Python OpenCV 2024, Mes de julio
Anonim
Proyectos Básicos de OpenCV
Proyectos Básicos de OpenCV

En este proyecto, exploramos algunas funciones básicas de OpenCV a través de 4 proyectos simples que involucran una transmisión de video en vivo. Estos son el reconocimiento facial, la eliminación de fondo, la representación visual especial de los bordes y la aplicación de un efecto de desenfoque a la transmisión de video en vivo. Mi principal objetivo al probar estos proyectos fue simplemente mojarme los pies con la interfaz OpenCV, ya que planeo profundizar en el campo de la visión por computadora.

Suministros

  • Computadora con Python
  • Biblioteca de CV abierta, biblioteca Numpy, biblioteca tkinter, biblioteca sys
  • Cámara para conectar a la computadora (si la computadora aún no incluye una)
  • Archivo de Python del programa (incluido en este instructivo)
  • archivo xml haarcascade (incluido en este instructivo)

Paso 1: Función FaceDetect

Función FaceDetect
Función FaceDetect
Función FaceDetect
Función FaceDetect

Esta función muestra el video de su cámara con cuadrados verdes en las caras que detecta. En el código, usamos la función cv2. VideoCapture () para almacenar el video que estamos capturando en un objeto llamado "capture". CAPTURE_INDEX es un número establecido por su computadora que corresponde al índice de su cámara en la lista de entrada de video de la computadora. Si no tiene una cámara exterior conectada a su computadora, 0 o 1 deberían funcionar.

El objeto face_cascade se inicializa utilizando la función cascadeClassifier y el archivo "haarcascade_frontalface_default.xml" que se encuentra en el github de OpenCV. Usamos este objeto para almacenar las caras detectadas en la lista "caras" como una tupla de entrada de cuatro direcciones que contiene las caras coordenada x, coordenada y, ancho y alto. Luego dibujamos un rectángulo que encierra perfectamente la cara usando la función cv2.rectangle

A partir de este video, OpenCV captura muchas imágenes en nuestro ciclo while usando capture.read () y almacenando la imagen en un marco que llamamos "img". Luego, cada imagen es interpretada y modificada como deseamos. Para faceDetect, hacemos que la imagen sea gris usando la función cvtColor que convierte cualquier imagen dada en el primer parámetro a un tipo particular de color de imagen especificado en el segundo parámetro. La lista de valores aceptables para el segundo parámetro se puede encontrar en línea. Luego mostramos la imagen en una ventana llamada "Detectando la cara" usando la función imshow () que toma una cadena para el nombre de la ventana y el marco de la imagen que se mostrará.

Finalmente esperamos que el usuario ingrese la clave q usando la función cv2.waitKey (). La máscara 0xFF se utiliza como convención para equipos de 64 bits. Una vez que el usuario ha finalizado la transmisión de video, la función faceDetect libera el objeto de captura y luego destruye cualquier otra ventana abierta bajo la interfaz OpenCV. Todas las demás funciones siguen una estructura de diseño similar.

Paso 2: Función BackgroundRemove

Función BackgroundRemove
Función BackgroundRemove
Función BackgroundRemove
Función BackgroundRemove

Esta función intenta eliminar la parte de fondo de nuestro video y dejar solo la imagen de primer plano. Es posible que no funcione en algunas cámaras, ya que utilizan una función de ajuste de iluminación que se activa cuando diferentes objetos / focos ingresan al encuadre. Si su función backgroundRemove no funciona, no se preocupe, ¡podría ser solo su cámara!

Para usar esta función, aléjese del marco de la cámara y presione la tecla "d" para capturar la imagen de fondo. Es importante que no haya objetos en movimiento en el fondo que desee capturar. Luego, podemos volver al marco de la cámara. Si la función funcionó, el usuario solo debería verse a sí mismo en el flujo de video de la función. Cualquier ruido / manchas negras en la imagen de primer plano puede ser el resultado del ajuste de iluminación de la cámara. Para capturar otro fondo, presione la tecla "r" para reinicializar, luego presione "d" nuevamente.

Algunas conclusiones clave de esta función es el uso del booleano "bandera" que se activa en el instante en que el usuario presiona el botón d. Esto captura el fondo y nos permite eliminarlo del video que transmite la función. Nuestro objetivo es almacenar la imagen de fondo en ref_img para que podamos distinguirla de la imagen de primer plano, que captura cualquier objeto en movimiento. Usamos la función cv2.subtract () para restar la imagen de primer plano de la imagen de fondo y viceversa, luego cancelamos cualquier diferencia minúscula en las dos imágenes inmediatamente después. El fondo está oscurecido.

El fgmask se hace usando la diferencia entre estas dos imágenes y luego se aplica al flujo de video de las funciones usando la función OpenCV cv2.bitwise_and ().

Paso 3: Función VideoEdges

Función VideoEdges
Función VideoEdges
Función VideoEdges
Función VideoEdges

Esta función devuelve nuestra transmisión de video en vivo, pero los bordes detectables se muestran en blanco mientras que todo lo demás se oscurece. Lo que distingue a esta función de las otras funciones es la conversión de nuestro video original del formato RBG a HSV, que significa tono, saturación y variación, un método diferente para procesar la luz y el color de un video. Con este método, podemos distinguir más fácilmente los contornos en el video aplicando un filtro (red_low a red_high).

Canny Edge Detection se utiliza para detectar los bordes en una imagen. Acepta una imagen en escala de grises como entrada y utiliza un algoritmo de varias etapas.

Paso 4: Función VideoBlur

Función VideoBlur
Función VideoBlur
Función VideoBlur
Función VideoBlur

Esta función se utiliza para agregar un efecto de desenfoque a nuestra transmisión de video. La función simple llama a la función GaussianBlur cv2 en nuestro marco. Puede encontrar más información sobre la función gaussianBlur aquí:

opencv-python-tutroals.readthedocs.io/en/l…

Paso 5: mejoras

La función más sensible de este proyecto es la función de eliminación de fondo, ya que requiere el uso de una cámara que no tiene la función de ajuste de iluminación. Puede haber un mejor conjunto de funciones dentro de la biblioteca OpenCV que pueden dar cuenta de este ajuste de iluminación y eliminar suavemente el fondo (similar a una pantalla verde).

También podríamos utilizar otras funciones de detección de rostros que pueden producir objetos con más funcionalidad además de las coordenadas de retorno (x, y). Quizás un programa de reconocimiento facial con la capacidad de recordar rostros no sería demasiado difícil de implementar.

La función de desenfoque se puede personalizar más mediante un control intuitivo por parte del usuario. Por ejemplo, el usuario puede querer ajustar la intensidad del efecto de desenfoque o seleccionar un área específica dentro del marco para desenfocar.

Recomendado: