Skip to content
Snippets Groups Projects
Commit 5733cc9a authored by Victor Demessance's avatar Victor Demessance
Browse files

Merge branch 'main' into 'victor_prgm'

# Conflicts:
#   supervised_learning/create_classifiers.py
#   supervised_learning/detection.py
parents 42a2ab56 826cd765
No related branches found
No related tags found
1 merge request!5[+] Add global light classifier, different scale between light & sign, global...
0,48,127,193,fvert,0.9488638965462507
608,144,735,289,frouge,0.9108585220743701
272,176,399,321,fvert,0.8895836594445553
400,128,527,273,fvert,0.877665580856861
560,416,687,561,frouge,0.822439042674998
320,336,447,481,frouge,0.7707272520675015
128,32,255,177,fvert,0.7420041200043779
264,168,454,385,stop,0.9967170965308115
240,656,367,801,fvert,0.996328291799753
416,48,543,193,frouge,0.9737347317354985
224,400,351,545,fvert,0.9724734390986917
0,96,190,313,forange,0.9532640691139742
112,400,239,545,fvert,0.9476349394512237
480,456,670,673,frouge,0.9380977779581677
400,352,527,497,forange,0.9218452514529774
608,592,735,737,fvert,0.9048974297689133
0,304,127,449,fvert,0.9015444544626695
54,378,482,867,fvert,0.8505643526126447
160,208,287,353,frouge,0.847427848014558
336,448,463,593,forange,0.7811306591945232
144,512,271,657,fvert,0.7220600566071843
480,168,670,385,fvert,0.7199181737080304
608,336,735,481,fvert,0.7186611921927715
160,768,287,913,fvert,0.7015408781850739
256,656,383,801,frouge,0.9999998649101208
608,192,735,337,ceder,0.999985728904932
368,336,495,481,frouge,0.9951889989104354
162,486,590,975,frouge,0.9928645239007842
368,624,495,769,frouge,0.9874774247331431
360,48,550,265,fvert,0.9869204915415256
368,752,495,897,frouge,0.9849570651307225
496,848,623,993,interdiction,0.9837698803541571
560,448,687,593,ceder,0.9738150434245632
512,272,639,417,danger,0.9716125769371682
208,0,335,145,ceder,0.9695208218905375
608,0,735,145,danger,0.956130554303084
224,256,351,401,obligation,0.9559719636347589
160,704,287,849,frouge,0.9243023917482435
96,496,223,641,interdiction,0.9208845929912137
64,624,191,769,danger,0.9164699794834144
216,384,406,601,frouge,0.9014073102428324
288,832,415,977,frouge,0.8952890587426112
144,848,271,993,interdiction,0.883629789242684
112,176,239,321,frouge,0.8823683973255505
432,464,559,609,frouge,0.8437691194308651
400,224,527,369,fvert,0.7084189612883776
432,48,622,265,forange,0.9544132668619814
448,304,575,449,interdiction,0.9533305453674042
96,736,223,881,frouge,0.9296377777612068
624,656,751,801,frouge,0.8873901292257897
368,448,495,593,forange,0.8668555533944166
304,848,431,993,interdiction,0.8532575803217125
144,304,271,449,forange,0.8458316138406432
624,464,751,609,forange,0.8367287794984228
208,480,335,625,frouge,0.7821556570474244
64,112,191,257,frouge,0.781953628921386
360,696,550,913,interdiction,0.7303241781141279
384,96,574,313,stop,0.9999961786208349
464,272,591,417,frouge,0.961581906672076
312,336,502,553,fvert,0.8588571631373797
464,464,591,609,danger,0.9879619342232258
464,64,591,209,danger,0.9857065269685417
396,612,681,938,interdiction,0.9824499929161948
464,336,591,481,danger,0.9667308314787896
528,208,655,353,danger,0.9369233084512567
416,192,543,337,danger,0.8380811438105122
324,216,752,705,danger,0.7609197419181045
272,848,399,993,frouge,0.7601510281044455
672,704,799,849,danger,0.7237105096500488
160,496,287,641,frouge,0.9819131673246628
576,64,703,209,forange,0.9562738506195138
16,672,143,817,fvert,0.9101673803587994
112,64,239,209,forange,0.9006204916596843
160,672,287,817,forange,0.8538708189587332
456,408,646,625,frouge,0.8525610810660433
400,576,527,721,fvert,0.7571704612873768
576,560,703,705,fvert,0.7314249488657094
0,96,127,241,frouge,0.7190222044228405
......@@ -4,6 +4,6 @@ TRAINING_IMAGE_FOLDER_PATH = "./data/train/images/"
TRAINING_LABEL_FOLDER_PATH = "./data/train/labels/"
VAL_IMAGE_FOLDER_PATH = "./data/val/images/"
VAL_LABEL_FOLDER_PATH = "./data/val/labels/"
PREDICTION_LABEL_FOLDER_PATH = "./data/train/predicted_labels/"
PREDICTION_LABEL_FOLDER_PATH = "./data/val/predicted_labels/"
CLASSIFIERS_FOLDER_PATH = "./supervised_learning/classifiers/saves/"
STEP_SIZE = 16
\ No newline at end of file
......@@ -99,6 +99,7 @@ for classe in CLASSES:
if classe not in ['ff', 'empty']:
datasets["train"][classe]["X"], datasets["train"][classe]["Y"] = create_binary_classification_dataset(datas_train, classe)
datasets["val"][classe]["X"], datasets["val"][classe]["Y"] = create_binary_classification_dataset(datas_val, classe)
# Create a dataset for general light classifier
datasets["train"]["feux"]["X"], datasets["train"]["feux"]["Y"] = create_binary_classification_dataset(datas_train, "feux")
......@@ -135,7 +136,6 @@ for classe in classifiers.keys():
y_pred = classifiers[classe].predict(X_val)
print(f"Précision pour panneaux {classe}: {np.mean(y_pred == y_val)}")
# ------------- SAVE CLASSIFIERS -----------------
print("Saving classifiers")
for classes, model in classifiers.items():
......
......@@ -13,6 +13,7 @@ parser.add_argument('output_file', metavar='DIR', help='Folder of output labels
# Analyser les arguments de la ligne de commande
args = parser.parse_args()
# Load input folder
input_folder = args.input_folder
# Check if input folder exists
......
from supervised_learning.detection import *
from supervised_learning.config import *
from supervised_learning.utils import *
from PIL import Image, ImageDraw, ImageFont, ImageColor
......@@ -6,8 +5,30 @@ import os
import csv
import random
import matplotlib.pyplot as plt
import argparse
# ------------- IMPORT PARSER & ARGS ---------------
parser = argparse.ArgumentParser()
parser.add_argument('img_folder', metavar='DIR', help='Folder of input images to analyse')
parser.add_argument('pred_folder', metavar='DIR', help='Folder of predicted labels from the analysis')
# Analyser les arguments de la ligne de commande
args = parser.parse_args()
# Load input folder
img_folder = args.img_folder
# Check if input folder exists
if not os.path.exists(img_folder):
raise FileNotFoundError(f"[Error] Folder '{img_folder}' does not exist.")
# Load input folder
pred_folder = args.pred_folder
# Check if input folder exists
if not os.path.exists(pred_folder):
raise FileNotFoundError(f"[Error] Folder '{pred_folder}' does not exist.")
#detecteur(VAL_IMAGE_FOLDER_PATH, PREDICTION_LABEL_FOLDER_PATH)
def calculate_text_size(text, font):
# calculate text size based on font properties
......@@ -80,9 +101,9 @@ fig, axs = plt.subplots(2, 5, figsize=(12, 6))
for ax in axs.ravel():
#images_dir = os.path.join("train", "images")
#labels_dir = os.path.join("train", "labels")
image_name = random.choice(os.listdir(VAL_IMAGE_FOLDER_PATH))
image_path = os.path.join(VAL_IMAGE_FOLDER_PATH, image_name)
csv_path = os.path.join(PREDICTION_LABEL_FOLDER_PATH, image_name[:-4] + ".csv")
image_name = random.choice(os.listdir(img_folder))
image_path = os.path.join(img_folder, image_name)
csv_path = os.path.join(pred_folder, image_name[:-4] + ".csv")
# Call visualize_image function to modify the image
image_to_display = visualize_image(image_path, csv_path)
......
import cv2
import matplotlib.pyplot as plt
def selective_search(image, visualize=True, visulize_count=100):
# Convert image to BGR format for OpenCV
image_bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
# Initialiser la recherche sélective
ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
ss.setBaseImage(image_bgr)
# Utiliser la recherche sélective en mode rapide (ou en mode qualité)
ss.switchToSelectiveSearchFast() # Pour la recherche rapide
# ss.switchToSelectiveSearchQuality() # Pour une recherche plus précise
# Obtenir les régions candidates
roi = ss.process()
if visualize:
# Dessiner les régions candidates sur l'image
for (x, y, w, h) in roi[:visulize_count]: # Limiter à 100 régions pour la visualisation
cv2.rectangle(image_bgr, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Convertir l'image BGR en RGB pour Matplotlib
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB)
# Afficher l'image avec les régions candidates
plt.figure(figsize=(10, 10))
plt.imshow(image_rgb)
plt.axis('off') # Cacher les axes pour une meilleure visualisation
plt.show()
return roi
img = cv2.imread("./data/val/images/0846.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Assurer que l'image est en RGB
result = selective_search(img_rgb)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment