Aplicación del módulo Computer Vision para encontrar un objetivo en una cámara en vivo

NOTA: El uso de un compilador en línea no funcionará aquí. Instale Python 2.7x y cv2, módulos argparse para probar este ejemplo.

Para la mayoría de nosotros, que somos grandes fanáticos de todas esas películas de acción y juegos como Modern Warfare, Black Ops, etc., siempre ha sido un sueño tener la oportunidad de decir «Objetivo adquirido… Esperando aprobación». Equipo Alfa, puedes disparar, la misión es una oportunidad. ¡¡¡Vamos a volar chicos!!! ¡Hurra!» Por supuesto, bueno, no siempre puedes conseguir lo que quieres, pero, al menos ahora, puedo acercarte lo suficiente a tu sueño. Todo lo que necesita para esta lección es Python 2.7, módulo cv2 y sería genial si tuviera una buena grabadora de video con la ayuda de la cual pueda obtener la transmisión de video en vivo. De todos modos, no importará incluso si no tienes uno.

Paso – 1: Revisa tus armas 

Descargue Python 2.7 y asegúrese de tener el módulo cv2 (tenga en cuenta que el módulo cv es antiguo y ha sido reemplazado por cv2) y el módulo argparse. Para esto :

import cv2 as cv
import argparse

Si esto no da un error, entonces está listo para continuar… 

Paso – 2: Detalles de la misión 

Ahora que tiene sus armas con usted, es hora de que se asegure de tener todos los detalles necesarios de la misión. Primero, necesitamos especificar nuestro objetivo. Entonces, nuestro objetivo es:

Sri

Ahora que tiene su objetivo con usted, es hora de configurar un campo de prueba. Obtenga varias copias impresas del objetivo y péguelas en varios lugares de su casa. Ahora, si realmente quiere tener la sensación, haga un cuadricóptero, coloque una cámara pequeña en él, grabe toda la casa correctamente y asegúrese de cubrir los lugares donde ha pegado los objetivos. En caso de que no quiera pasar por todos estos problemas, solo tome una cámara y grabe su casa usted mismo. Te recomiendo que mantengas el video corto.

Paso – 3: ¡Abróchate el cinturón! ¡Tenemos una misión que cumplir! 

Bueno. ¡Este es Alpha 1 informando de servicio! ¡Envíanos las coordenadas de la misión! 

Tienes el objetivo, ¡ahora necesitas adquirirlo! Entonces, para esto, vamos a usar el módulo Computer Vision (cv2). Fragmento de código: 

Enlace de código directo:  https://ide.geeksforgeeks.org/xfUet4 

import argparse
import cv2

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", help="path to the video file")
args = vars(ap.parse_args())

# load the video
camVideo = cv2.VideoCapture(args["video"])

# keep looping
while True:

    # grab the current frame and initialize the status text
    (grabbed, frame) = camVideo.read()
    status = "No Target in sight"

    # check to see if we have reached the end of the
    # video
    if not grabbed:
        break

    # convert the frame to grayscale, blur it, and detect edges
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #grayscale
    blurred = cv2.GaussianBlur(gray, (7, 7), 0) #blur
    edged = cv2.Canny(blurred, 50, 150) #canny edge detection

    # find contours in the edge map
    (cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)

# loop over the contours
for cnt in cnts:
    approx=cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),
    True)

if len(approx)==5:
    cv2.drawContours(frame, [approx], -1, (0, 0, 255), 4)
    status = "Target(s) in sight!"

    # draw the status text on the frame
    cv2.putText(frame, status, (20, 30), cv2.FONT_HERSHEY_SIMPLEX,
    0.5,(0, 0, 255), 2)

    # show the frame and record if a key is pressed
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF

    # if the 's' key is pressed, stop the loop
    if key == ord("s"):
        break

    # cleanup the input recorded video and close any open windows

camVideo.release()
cv2.destroyAllWindows()

Código explicado: 

Recorremos cada cuadro del video grabado y, para la detección de nuestro objetivo, lo convertimos a escala de grises, lo desenfocamos y finalmente usamos el método de detección de bordes astutos para encontrar la imagen delineada.

Recuerde que, camVideo.read() devolverá una tupla con el primer elemento que especifica si el cuadro se leyó correctamente o no, ¡el segundo elemento es el cuadro real en el que trabajaremos!

Ahora, una vez que tenga el marco, usaremos la aproximación de contorno y luego verificaremos la cantidad de elementos en la salida obtenida del paso anterior. Si el número de elementos es 5, entonces tenemos el pentágono regular que estábamos buscando y, por lo tanto, actualizamos el estado.

Ahora bien, todo esto fue bastante fácil y básico. Si realmente desea crear uno de esos programas, debería echar un vistazo a varios filtros para eliminar los efectos de ruido del cuadro y obtener un resultado más preciso. ¡Lo mejor que puedes hacer es seguir experimentando!

Prueba este ejercicio en tu casa, graba el video y comparte tus resultados con nosotros…

¡Cierre de sesión! ¡Paz! Mantente a salvo 🙂

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *