Beispiel #1
0
def search_destroy(image):
    "Usa Tracking para seguir al objetivo mientras mueve la torreta y dispara"
    global p_actual
    global objetivo
    global objetivos_destruidos
    global modo
    centro_objetivo = Utiles.centro_rectangulo(objetivo)
    p_actual = Motor_Mockup.desplazamiento(p_actual, centro_objetivo)
    # Utiles.dibuja_puntos(image, [centro])
    # x1, y1, x2, y2 = aume nta_roi(objetivo)

    # cv.imshow("ROI", roi)
    # coordenadas_reducidas(image)
    # cv.waitKey(0)
    # while True:
    image, objetivos = Tracker.tracker(image)
    objetivo = Tracker.actualiza_objetivo(objetivo, objetivos)
    # image = Utiles.atencion_blur(image, objetivo)
    Utiles.dibuja_contornos(image, objetivos)
    Utiles.dibuja_rectangulo(image, objetivo, Config.UI.cyan2)
    image = Utiles.dibuja_mira(image, p_actual)
    # Comprueba si se puede disparar
    p_objetivo = Utiles.centro_rectangulo(objetivo)
    if (destruccion(p_actual, p_objetivo)):
        image = cv.putText(image, "Bang!", (p_actual[0] + 5, p_actual[1] - 5),
                           0, 1, Config.UI.rojo, 2, 16)
        # Limpia la lista de destruidos y agrega el ultimo TODO mejorar
        objetivos_destruidos.append(objetivo)
        if (len(objetivos_destruidos) > 3):
            objetivos_destruidos.pop(0)
        modo = Config.Modo.deteccion
    return image
Beispiel #2
0
def actualiza_objetivo(objetivo, objetivos):
    "Actualiza el objetivo si se mueve"
    # No hay nuevos objetivos, nos quedamos con el que se detecto
    if (len(objetivos) < 1):
        return objetivo
    # Elimina las detecciones del tracker con area muy distinta del objetivo
    x, y, w, h = objetivo
    area_objetivo = w * h
    rectangulos = Utiles.genera_rectangulos(objetivos)
    rectangulos = Utiles.elimina_rect_irelevantes(rectangulos, area_objetivo)
    # Los objetivos no eran suficientemente similares en area
    if (len(rectangulos) < 1):
        return objetivo
    # Cambia el objetivo por el mas cercano detectado por el tracker
    distancia_max = max(w, h)
    p_objetivo = Utiles.centro_rectangulo(objetivo)
    objetivo_alt = Selector.objetivo_prioritario(p_objetivo, rectangulos,
                                                 distancia_max)
    if (len(objetivo_alt) > 0):
        return objetivo_alt
    # No habia un objetivo lo suficientemete cercano
    return objetivo