CARIA.2.0
Precedent repo CARIA : Ajout de nouveau modele. Travail sur multiple ia. ...
This commit is contained in:
90
server-ia/Identify_RoadSignV1/identify-RoadSign-speed.py
Normal file
90
server-ia/Identify_RoadSignV1/identify-RoadSign-speed.py
Normal file
@@ -0,0 +1,90 @@
|
||||
import cv2
|
||||
from tensorflow.keras.models import load_model
|
||||
import numpy as np
|
||||
|
||||
# Charger le modèle sauvegardé
|
||||
model = load_model("server-ia/data/modeles/RoadSign/modele_signaux_routiers.h5")
|
||||
|
||||
# Fonction pour charger les noms de classe à partir d'un fichier
|
||||
def load_class_names(file_path):
|
||||
with open(file_path, 'r') as file:
|
||||
class_names = [line.strip() for line in file.readlines()]
|
||||
return class_names
|
||||
|
||||
# Définir le chemin du fichier contenant les noms de classe
|
||||
class_names_file = "server-ia/data/modeles/RoadSign/class_names.txt"
|
||||
|
||||
# Charger les noms de classe à partir du fichier
|
||||
class_names = load_class_names(class_names_file)
|
||||
|
||||
# Fonction pour détecter les panneaux de signalisation dans une image
|
||||
def detect_sign(image):
|
||||
# Prétraiter l'image
|
||||
preprocessed_img = preprocess_image(image)
|
||||
|
||||
# Faire une prédiction avec le modèle
|
||||
predictions = model.predict(preprocessed_img)
|
||||
|
||||
# Obtenir l'indice de la classe prédite
|
||||
predicted_class_index = np.argmax(predictions)
|
||||
|
||||
# Récupérer le nom de la classe prédite
|
||||
predicted_class_name = class_names[predicted_class_index]
|
||||
|
||||
return predicted_class_name
|
||||
|
||||
# Fonction pour prétraiter l'image
|
||||
def preprocess_image(image):
|
||||
# Mettre à l'échelle l'image aux dimensions attendues par le modèle
|
||||
scaled_image = cv2.resize(image, (224, 224))
|
||||
scaled_image = scaled_image.astype("float") / 255.0
|
||||
|
||||
# Ajouter une dimension pour correspondre à la forme d'entrée du modèle
|
||||
preprocessed_img = np.expand_dims(scaled_image, axis=0)
|
||||
|
||||
return preprocessed_img
|
||||
|
||||
# Définir la source vidéo ou la caméra
|
||||
# Pour une vidéo
|
||||
video_path = "server-ia/data/videos/autoroute.mp4"
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
|
||||
# Pour la caméra
|
||||
# cap = cv2.VideoCapture(0)
|
||||
# Nombre de trames à sauter entre chaque trame lue
|
||||
skip_frames = 5
|
||||
|
||||
# Boucle pour lire les images de la vidéo ou de la caméra
|
||||
frame_count = 0
|
||||
while cap.isOpened():
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Incrémenter le compteur de trames
|
||||
frame_count += 1
|
||||
|
||||
# Si le compteur de trames est un multiple de skip_frames, traiter la trame et afficher
|
||||
if frame_count % skip_frames == 0:
|
||||
# Réinitialiser le compteur de trames
|
||||
frame_count = 0
|
||||
|
||||
# Détecter les panneaux de signalisation dans l'image
|
||||
predicted_class_name = detect_sign(frame)
|
||||
|
||||
# Dessiner un carré autour de chaque objet détecté et afficher le nom de la classe au-dessus
|
||||
# (ici, je vais dessiner un carré au hasard pour donner un exemple)
|
||||
x_min, y_min, x_max, y_max = 900, 50, 1200, 650 # Coordonnées de la boîte englobante (à remplacer par les bonnes valeurs)
|
||||
cv2.rectangle(frame, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)
|
||||
cv2.putText(frame, predicted_class_name, (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
|
||||
|
||||
# Afficher l'image
|
||||
cv2.imshow('Frame', frame)
|
||||
|
||||
# Attendre la touche 'q' pour quitter
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
# Libérer la capture et fermer les fenêtres
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
||||
97
server-ia/Identify_RoadSignV1/identify-RoadSign-speed2.py
Normal file
97
server-ia/Identify_RoadSignV1/identify-RoadSign-speed2.py
Normal file
@@ -0,0 +1,97 @@
|
||||
import cv2
|
||||
from tensorflow.keras.models import load_model
|
||||
import numpy as np
|
||||
|
||||
# Charger le modèle sauvegardé
|
||||
model = load_model("server-ia/data/modeles/RoadSign/modele_signaux_routiers.h5")
|
||||
|
||||
# Fonction pour charger les noms de classe à partir d'un fichier
|
||||
def load_class_names(file_path):
|
||||
with open(file_path, 'r') as file:
|
||||
class_names = [line.strip() for line in file.readlines()]
|
||||
return class_names
|
||||
|
||||
# Définir le chemin du fichier contenant les noms de classe
|
||||
class_names_file = "server-ia/data/modeles/RoadSign/class_names.txt"
|
||||
|
||||
# Charger les noms de classe à partir du fichier
|
||||
class_names = load_class_names(class_names_file)
|
||||
|
||||
# Fonction pour prétraiter l'image
|
||||
def preprocess_image(image):
|
||||
# Mettre à l'échelle l'image aux dimensions attendues par le modèle
|
||||
scaled_image = cv2.resize(image, (224, 224))
|
||||
scaled_image = scaled_image.astype("float") / 255.0
|
||||
|
||||
# Ajouter une dimension pour correspondre à la forme d'entrée du modèle
|
||||
preprocessed_img = np.expand_dims(scaled_image, axis=0)
|
||||
|
||||
return preprocessed_img
|
||||
|
||||
# Fonction pour obtenir les coordonnées de la boîte englobante
|
||||
def obtenir_coordonnees_boite(predictions):
|
||||
# A DEFINIR
|
||||
# Supposons que predictions est une liste de [x_min, y_min, x_max, y_max] pour chaque boîte englobante
|
||||
return predictions[0] # Retourne les coordonnées de la première boîte englobante
|
||||
|
||||
# Fonction pour détecter les panneaux de signalisation dans une image
|
||||
def detect_sign(image):
|
||||
# Prétraiter l'image
|
||||
preprocessed_img = preprocess_image(image)
|
||||
|
||||
# Faire une prédiction avec le modèle
|
||||
predictions = model.predict(preprocessed_img)
|
||||
|
||||
# Obtenir l'indice de la classe prédite
|
||||
predicted_class_index = np.argmax(predictions)
|
||||
|
||||
# Récupérer le nom de la classe prédite
|
||||
predicted_class_name = class_names[predicted_class_index]
|
||||
|
||||
return predicted_class_name, predictions
|
||||
|
||||
# Définir la source vidéo ou la caméra
|
||||
# Pour une vidéo
|
||||
video_path = "server-ia/data/videos/autoroute.mp4"
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
|
||||
# Pour la caméra
|
||||
# cap = cv2.VideoCapture(0)
|
||||
# Nombre de trames à sauter entre chaque trame lue
|
||||
skip_frames = 5
|
||||
|
||||
# Boucle pour lire les images de la vidéo ou de la caméra
|
||||
frame_count = 0
|
||||
while cap.isOpened():
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Incrémenter le compteur de trames
|
||||
frame_count += 1
|
||||
|
||||
# Si le compteur de trames est un multiple de skip_frames, traiter la trame et afficher
|
||||
if frame_count % skip_frames == 0:
|
||||
# Réinitialiser le compteur de trames
|
||||
frame_count = 0
|
||||
|
||||
# Détecter les panneaux de signalisation dans l'image
|
||||
predicted_class_name, predictions = detect_sign(frame)
|
||||
|
||||
# Obtenir les coordonnées de la boîte englobante de l'objet détecté
|
||||
x_min, y_min, x_max, y_max = obtenir_coordonnees_boite(predictions)
|
||||
|
||||
# Dessiner un carré autour de chaque objet détecté et afficher le nom de la classe au-dessus
|
||||
cv2.rectangle(frame, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)
|
||||
cv2.putText(frame, predicted_class_name, (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
|
||||
|
||||
# Afficher l'image
|
||||
cv2.imshow('Frame', frame)
|
||||
|
||||
# Attendre la touche 'q' pour quitter
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
# Libérer la capture et fermer les fenêtres
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
||||
76
server-ia/Identify_RoadSignV1/identify-RoadSign.py
Normal file
76
server-ia/Identify_RoadSignV1/identify-RoadSign.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import cv2
|
||||
from tensorflow.keras.models import load_model
|
||||
import numpy as np
|
||||
|
||||
# Charger le modèle sauvegardé
|
||||
model = load_model("server-ia/data/modeles/RoadSign/modele_signaux_routiers.h5")
|
||||
|
||||
# Fonction pour charger les noms de classe à partir d'un fichier
|
||||
def load_class_names(file_path):
|
||||
with open(file_path, 'r') as file:
|
||||
class_names = [line.strip() for line in file.readlines()]
|
||||
return class_names
|
||||
|
||||
# Définir le chemin du fichier contenant les noms de classe
|
||||
class_names_file = "server-ia/data/modeles/RoadSign/class_names.txt"
|
||||
|
||||
# Charger les noms de classe à partir du fichier
|
||||
class_names = load_class_names(class_names_file)
|
||||
|
||||
# Fonction pour détecter les panneaux de signalisation dans une image
|
||||
def detect_sign(image):
|
||||
# Prétraiter l'image
|
||||
preprocessed_img = preprocess_image(image)
|
||||
|
||||
# Faire une prédiction avec le modèle
|
||||
predictions = model.predict(preprocessed_img)
|
||||
|
||||
# Obtenir l'indice de la classe prédite
|
||||
predicted_class_index = np.argmax(predictions)
|
||||
|
||||
# Récupérer le nom de la classe prédite
|
||||
predicted_class_name = class_names[predicted_class_index]
|
||||
|
||||
return predicted_class_name
|
||||
|
||||
# Fonction pour prétraiter l'image
|
||||
def preprocess_image(image):
|
||||
# Mettre à l'échelle l'image aux dimensions attendues par le modèle
|
||||
scaled_image = cv2.resize(image, (224, 224))
|
||||
scaled_image = scaled_image.astype("float") / 255.0
|
||||
|
||||
# Ajouter une dimension pour correspondre à la forme d'entrée du modèle
|
||||
preprocessed_img = np.expand_dims(scaled_image, axis=0)
|
||||
|
||||
return preprocessed_img
|
||||
|
||||
# Définir la source vidéo ou la caméra
|
||||
# Pour une vidéo
|
||||
video_path = "server-ia/data/videos/autoroute.mp4"
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
|
||||
# Pour la caméra
|
||||
# cap = cv2.VideoCapture(0)
|
||||
|
||||
# Boucle pour lire les images de la vidéo ou de la caméra
|
||||
while cap.isOpened():
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Détecter les panneaux de signalisation dans l'image
|
||||
predicted_class_name = detect_sign(frame)
|
||||
|
||||
# Afficher le résultat sur l'image
|
||||
cv2.putText(frame, predicted_class_name, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
|
||||
|
||||
# Afficher l'image
|
||||
cv2.imshow('Frame', frame)
|
||||
|
||||
# Attendre la touche 'q' pour quitter
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
# Libérer la capture et fermer les fenêtres
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
||||
Reference in New Issue
Block a user