import math from pathlib import Path import cv2 Y_MIN_Z1 = 20 Y_MAX_Z1 = 70 THRESHOLD_ZONE_1 = 45 Y_MIN_Z2 = 270 Y_MAX_Z2 = 370 THRESHOLD_ZONE_2 = 45 Y_MIN_Z3 = 510 Y_MAX_Z3 = 770 THRESHOLD_ZONE_3 = 45 R = 0 G = 1 B = 2 class Zone: def __init__(self, y_min, y_max, threshold, active_pixels, image_mask): self.y_min = y_min self.y_max = y_max self.pixels = [ (pix[0], pix[1]) for pix in active_pixels if self.y_min < pix[1] < self.y_max ] self.moyenne_r = self.get_moyenne(R, image_mask) self.moyenne_g = self.get_moyenne(G, image_mask) self.moyenne_b = self.get_moyenne(B, image_mask) self.threshold = threshold def get_moyenne(self, color, img): return sum([img[pix[0], pix[1]][color] for pix in self.pixels]) / len(self.pixels) def get_moyennes(self, img): mr, mg, mb = 0, 0, 0 for pix in self.pixels: p = img[pix[0], pix[1]] mr += p[0] mg += p[1] mb += p[2] leng = len(self.pixels) return mr/leng, mg/leng, mb/leng class Mask: def __init__(self, image): self.image = cv2.imread(image) # Passer l'url et l'ouvrir avec cv2 self.active_px = [ # Iterer sur tous les pixels de l'image pour trouver ceux qui sont != 0 0 0 (a, b) for a in range(0, 720) for b in range(0, 1280) if (self.image[a, b].any() and (int(self.image[a, b][0]) + int(self.image[a, b][1]) + int(self.image[a, b][2]) > 50)) ] self.zone1 = Zone(Y_MIN_Z1, Y_MAX_Z1, 20, self.active_px, self.image) self.zone2 = Zone(Y_MIN_Z2, Y_MAX_Z2, 20, self.active_px, self.image) self.zone3 = Zone(Y_MIN_Z3, Y_MAX_Z3, 20, self.active_px, self.image) def process_frame_moyennes(frame, mask): if(process_zone_moyennes(frame, mask.zone1) and # Passer à travers les zones de la classe mask, faire la moyenne des pixels process_zone_moyennes(frame, mask.zone2) and process_zone_moyennes(frame, mask.zone3)): return 1 else: return 0 def process_zone_moyennes(frame, zone): # calculer la diff avec la moyenne des bonnes immages moy_r, moy_g, moy_b = zone.get_moyennes(frame) if math.sqrt(pow(moy_r - zone.moyenne_r, 2) + pow(moy_g - zone.moyenne_g, 2) + pow(moy_b - zone.moyenne_b, 2)) < zone.threshold: return 1 else: return 0 def is_image_from_robot_view(frame): return process_frame_moyennes(frame, mask) mask = Mask(str(Path(__file__).parent / 'mask.jpg'))