Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
2.3 kB
2
Indexable
Never
import cv2
import numpy as np
import pygame  # Importa pygame

# Initializeaza pygame pentru audio
pygame.init()
pygame.mixer.init()
alarm_sound = pygame.mixer.Sound("alarm-sound.wav")  # Încarcă sunetul de alarmă

def detect_fire(frame):
    # Converteste imaginea din BGR in HSV
    hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # Defineste intervalul de culoare pentru detectarea focului
    lower_red = np.array([0, 150, 150])
    upper_red = np.array([10, 255, 255])
    mask1 = cv2.inRange(hsv_frame, lower_red, upper_red)

    # Defineste un alt interval de culoare
    lower_red = np.array([170, 150, 150])
    upper_red = np.array([180, 255, 255])
    mask2 = cv2.inRange(hsv_frame, lower_red, upper_red)

    # Combina mastile pentru a obtine masca finala
    mask = mask1 + mask2

    # Aplica o operatie de eroziune pentru a elimina zgomotul minor
    kernel = np.ones((5, 5), np.uint8)
    mask = cv2.erode(mask, kernel, iterations=1)

    # Aplica o operatie de dilatare pe masca pentru a combina zonele adiacente detectate
    mask = cv2.dilate(mask, kernel, iterations=2)

    # Aplica masca pe cadru
    fire = cv2.bitwise_and(frame, frame, mask=mask)

    # Returneaza rezultatul si masca
    return fire, mask

# Captureaza video
cap = cv2.VideoCapture('path_to_your_video.mp4')

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # Aplica functia de detectare a focului
    fire_frame, fire_mask = detect_fire(frame)
    
    # Verifica daca exista foc detectat si reda sunetul de alarma
    if np.sum(fire_mask) > 0:  # Verifică dacă masca de foc are pixeli albi (foc detectat)
        if not pygame.mixer.get_busy():  # Verifică dacă sunetul de alarmă nu este deja în redare
            alarm_sound.play()

    # Afiseaza rezultatul detectarii focului
    cv2.imshow('Fire Detection', fire_frame)

    # Afiseaza videoclipul original
    cv2.imshow('Original Video', frame)

    # Iesi din bucla daca utilizatorul apasa 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Elibereaza captura si inchide toate ferestrele
cap.release()
cv2.destroyAllWindows()

# Adauga o pauza la final pentru a evita inchiderea rapida a ferestrei CMD
input("Press Enter to exit...")
Leave a Comment