first commit
BIN
Architectures des Services/Annexe - Liste de Commandes.pdf
Звичайний файл
BIN
Architectures des Services/Rapport Projet SOA.pdf
Звичайний файл
BIN
Big Data/Etude Big Data.pdf
Звичайний файл
BIN
CV/Berta Pauline CV.pdf
Звичайний файл
BIN
Cloud/Adaptability and Autonomic Management.pdf
Звичайний файл
BIN
From 3G to 6G/Iridium Next, Oneweb, Starlink.pdf
Звичайний файл
BIN
From 3G to 6G/Présentation - From 3G to 5G.pdf
Звичайний файл
BIN
Intergiciels et Services/Middleware for IoT TP1.pdf
Звичайний файл
BIN
Intergiciels et Services/Middleware for IoT TP2.pdf
Звичайний файл
BIN
Intergiciels et Services/Middleware for IoT TP3.pdf
Звичайний файл
BIN
Intergiciels et Services/Middleware for IoT TP4.pdf
Звичайний файл
BIN
Méthodes de Créativité/Courbe en S du Ski avec Triz.pdf
Звичайний файл
BIN
Méthodes de Créativité/Courbe en S.jpg
Звичайний файл
Після Ширина: | Висота: | Розмір: 167 КіБ |
BIN
Méthodes de Créativité/Diagramme en Araignée.jpg
Звичайний файл
Після Ширина: | Висота: | Розмір: 169 КіБ |
BIN
Méthodes de Créativité/Evolution du Ski.pdf
Звичайний файл
BIN
Projet Innovation/Demonstration_Lign_Assist.mp4
Звичайний файл
238
Projet Innovation/Franchissement.py
Звичайний файл
|
@ -0,0 +1,238 @@
|
|||
import cv2
|
||||
#import numpy as np
|
||||
import time
|
||||
import sys
|
||||
|
||||
#Hauteur des zones de détection.
|
||||
ymin=550
|
||||
ymax=551
|
||||
#Largeur de la zone de détection de gauche.
|
||||
xmin1=130
|
||||
xmax1=300
|
||||
#Largeur de la zone de détection de droite.
|
||||
xmin2=700
|
||||
xmax2=870
|
||||
|
||||
|
||||
#Fonction Point qui créée un point avec une position correspondant à celle du contour détecté.
|
||||
def point(capteur):
|
||||
s1=len(capteur)-1
|
||||
s2=len(capteur)-1
|
||||
for i in range(len(capteur)):
|
||||
if capteur[i]!=0:
|
||||
s1=i
|
||||
break
|
||||
if s1!=len(capteur)-1:
|
||||
for i in range(len(capteur)-1, s1-1, -1):
|
||||
if capteur[i]!=0:
|
||||
s2=i
|
||||
break
|
||||
return int((s1+s2)/2)
|
||||
return -1
|
||||
|
||||
|
||||
#Variables
|
||||
s1_old=0
|
||||
s2_old=0
|
||||
s1=0
|
||||
s2=0
|
||||
s1_time=0
|
||||
s2_time=0
|
||||
|
||||
#Seuils utilisés pour la fonction Canny (détection des contours)
|
||||
th1=75
|
||||
th2=150
|
||||
|
||||
stop=0
|
||||
|
||||
#Niveau de flou de l'image
|
||||
k=3
|
||||
|
||||
#On commence par récupérer la vidéo à traiter.
|
||||
cap=cv2.VideoCapture("C:/Users/Pauline/Documents/INSA/5eme Année INSA ISS/Projet ISS/Video_Test.mp4")
|
||||
|
||||
while True:
|
||||
|
||||
if not stop:
|
||||
#On ségmente la vidéo et on récupère les images, image par image.
|
||||
ret, frame=cap.read()
|
||||
|
||||
if ret is False:
|
||||
sys.exit()
|
||||
|
||||
image=frame.copy()
|
||||
|
||||
#Detection de la ligne de gauche (avec une zone de détection).
|
||||
#Je transforme mon image en gris (avec différentes nuances de gris).
|
||||
#Pour ma zone de détection située à gauche.
|
||||
gray1=cv2.cvtColor(image[ymin:ymax, xmin1:xmax1], cv2.COLOR_BGR2GRAY)
|
||||
|
||||
if k!=1:
|
||||
gray1=cv2.blur(gray1, (k, k))
|
||||
|
||||
#La fonction Canny permet de détecter les contours des différents objets présents sur l'image.
|
||||
#Elle prend en argument l'image transformée en gris et les deux seuils.
|
||||
capteur1=cv2.Canny(gray1, th1, th2)
|
||||
|
||||
#Detection de la ligne de droite (avec une zone de détection).
|
||||
#Je transforme mon image en gris (avec différentes nuances de gris).
|
||||
#Pour ma zone de détection située à droite.
|
||||
gray2=cv2.cvtColor(image[ymin:ymax, xmin2:xmax2], cv2.COLOR_BGR2GRAY)
|
||||
|
||||
if k!=1:
|
||||
gray2=cv2.blur(gray2, (k, k))
|
||||
|
||||
#La fonction Canny permet de détecter les contours des différents objets présents sur l'image.
|
||||
#Elle prend en argument l'image transformée en gris et les deux seuils.
|
||||
capteur2=cv2.Canny(gray2, th1, th2)
|
||||
|
||||
#Affichage des contours des deux zones de détection.
|
||||
cv2.rectangle(image, (xmin1, ymin), (xmax1, ymax), (255, 0, 0), 1)
|
||||
cv2.rectangle(image, (xmin2, ymin), (xmax2, ymax), (255, 0, 0), 1)
|
||||
|
||||
#Pour palier à la détection qui vacile au niveau des lignes discontinus ainsi qu'à la venue d'éventuelles
|
||||
#erreurs. On va conserver l'information ligne détectée pendant une seconde après la dernière détection.
|
||||
#Cela nous permettra de ne pas considérer l'absence de ligne lorsqu'il s'agit simplement d'une ligne discontinue par exemple!
|
||||
|
||||
#Capteur situé sur la zone de détection de gauche.
|
||||
#Création d'un point dans la zone de détection qui désigne la position du contour détecté.
|
||||
s1=point(capteur1[0])
|
||||
|
||||
#Si un contour est détecté.
|
||||
if s1!=-1:
|
||||
#Affichage d'un point de couleur verte lorsque la zone détecte la ligne.
|
||||
cv2.circle(image, (s1+xmin1, ymin), 3, (0, 255, 0), 3)
|
||||
#On concerve l'information (ligne détectée).
|
||||
s1_old=s1
|
||||
#On enregistre le moment où la ligne a été détectée.
|
||||
s1_time=time.time()
|
||||
|
||||
else:
|
||||
#Si le temps écoulé depuis la dernière perte de détection est inférieur à une seconde.
|
||||
if time.time()-s1_time<1:
|
||||
#Affichage d'un point de couleur jaune lorsque la zone ne détecte pas la ligne.
|
||||
cv2.circle(image, (s1_old+xmin1, ymin), 3, (100, 255, 255), 3)
|
||||
s1=s1_old
|
||||
|
||||
#Pour un temps supérieur on ne concerve pas l'information (ligne détectée).
|
||||
else:
|
||||
s1=-1
|
||||
|
||||
#Capteur situé sur la zone de détection de droite.
|
||||
#Création d'un point dans la zone de détection qui désigne la position du contour détecté.
|
||||
s2=point(capteur2[0])
|
||||
|
||||
#Si un contour est détecté.
|
||||
if s2!=-1:
|
||||
#Affichage d'un point de couleur verte lorsque la zone détecte la ligne.
|
||||
cv2.circle(image, (s2+xmin2, ymin), 3, (0, 255, 0), 3)
|
||||
#On concerve l'information (ligne détectée).
|
||||
s2_old=s2
|
||||
#On enregistre le moment où la ligne a été détectée.
|
||||
s2_time=time.time()
|
||||
|
||||
else:
|
||||
#Si le temps écoulé depuis la dernière perte de détection est inférieur à une seconde.
|
||||
if time.time()-s2_time<1:
|
||||
#Affichage d'un point de couleur jaune lorsque la zone ne détecte pas la ligne.
|
||||
cv2.circle(image, (s2_old+xmin2, ymin), 3, (100, 255, 255), 3)
|
||||
s2=s2_old
|
||||
|
||||
#Pour un temps supérieur on ne concerve pas l'information (ligne détectée).
|
||||
else:
|
||||
s2=-1
|
||||
|
||||
#Alerte du décalage à gauche ou à droite de la voiture sur la chaussée.
|
||||
#Si un contour est détecté dans les deux zones de détection.
|
||||
if s1!=-1 and s2!=-1:
|
||||
#Variable permettant d'évaluer un décalage trop important à droite ou à gauche.
|
||||
s2_=abs(xmax2-xmin2-s2)
|
||||
|
||||
#Si un décalage trop important est observé d'un côté ou de l'autre de la voie.
|
||||
if abs(s2_-s1)>20:
|
||||
c=(0, max(0, 255-10*int(abs(s1-s2_)/2)), min(255, 10*int(abs(s1-s2_)/2)))
|
||||
#Affichage d'un cercle de couleur variable en fonction d'un décalage plus ou moins conséquent.
|
||||
cv2.circle(image, (int((xmax2-xmin1)/2)+xmin1, ymax-25), 5, c, 7)
|
||||
#Affichage d'une flèche d'orientation et de couleur variable en fonction d'un décalage plus ou moins conséquent et de sa direction.
|
||||
cv2.arrowedLine(image, (int((xmax2-xmin1)/2)+xmin1, ymax-25), (int((xmax2-xmin1)/2)+xmin1+2*int((s1-s2_)/2), ymax-25), c, 3, tipLength=0.4)
|
||||
|
||||
#La voiture est bien centrée au milieu de sa voie.
|
||||
else:
|
||||
cv2.putText(image, "OK", (int((xmax2-xmin1)/2)+xmin1-15, ymax-16), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 0), 1)
|
||||
|
||||
#Renseignement à l'écran des valeurs de Seuil, de niveau de Flou, des touches d'Arrêt et Ajustement de la ligne de détection
|
||||
cv2.putText(image, "Seuil 1: {:d} , Seuil 2: {:d} , Niveau de Flou: {:d}".format(th1, th2, k), (10, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 220, 255), 1)
|
||||
cv2.putText(image, "Entrer 's' : STOP , Entrer 'q' : QUITTER", (10, 60), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 220, 255), 1)
|
||||
cv2.putText(image, "Commandes d'Ajustement de la ligne de Detection", (50, 90), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 220, 255), 1)
|
||||
cv2.putText(image, "Entrer 'm' : Abaisser la ligne de Detection , Entrer 'p' : Elever la ligne de Detection", (10, 120), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 220, 255), 1)
|
||||
cv2.putText(image, "Entrer 'o' : Decaler vers la droite la ligne , Entrer 'l' : Decaler vers la gauche la ligne", (10, 150), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 220, 255), 1)
|
||||
#Création fenêtre avec l'image de la vidéo et les annotions renseignées précédemment.
|
||||
cv2.imshow("image", image)
|
||||
|
||||
#Je transforme mon image en gris (avec différentes nuances de gris).
|
||||
gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||
|
||||
if k!=1:
|
||||
#Application du flou sur l'image.
|
||||
gray=cv2.blur(gray, (k, k))
|
||||
|
||||
#Création fenêtre avec l'image de la vidéo en niveaux de gris et floutée.
|
||||
cv2.imshow("blur", gray)
|
||||
|
||||
#La fonction Canny permet de détecter les contours des différents objets présents sur l'image.
|
||||
gray_canny=cv2.Canny(gray, th1, th2)
|
||||
#Création fenêtre avec l'image de la vidéo contourée grâce à la fonction Canny.
|
||||
cv2.imshow("canny", gray_canny)
|
||||
|
||||
if not stop:
|
||||
key=cv2.waitKey(20)&0xFF
|
||||
|
||||
else:
|
||||
key=cv2.waitKey()
|
||||
image=frame.copy()
|
||||
|
||||
if key==ord('q'):
|
||||
break
|
||||
|
||||
#Modification du positionnement des lignes de détection
|
||||
if key==ord('m'):
|
||||
ymin+=1
|
||||
ymax+=1
|
||||
if key==ord('p'):
|
||||
ymin-=1
|
||||
ymax-=1
|
||||
if key==ord('o'):
|
||||
xmin1+=1
|
||||
xmax1+=1
|
||||
xmin2+=1
|
||||
xmax2+=1
|
||||
if key==ord('l'):
|
||||
xmin1-=1
|
||||
xmax1-=1
|
||||
xmin2-=1
|
||||
xmax2-=1
|
||||
|
||||
#Modification des seuils de la fonction Canny et du niveau de flou
|
||||
# if key==ord('y'):
|
||||
# k=min(255, k+2)
|
||||
# if key==ord('h'):
|
||||
# k=max(1, k-2)
|
||||
# if key==ord('u'):
|
||||
# th1=min(255, th1+1)
|
||||
# if key==ord('j'):
|
||||
# th1=max(0, th1-1)
|
||||
# if key==ord('i'):
|
||||
# th2=min(255, th2+1)
|
||||
# if key==ord('k'):
|
||||
# th2=max(0, th2-1)
|
||||
|
||||
if key==ord('s'):
|
||||
stop=not stop
|
||||
|
||||
# if key==ord('a'):
|
||||
# for cpt in range(200):
|
||||
# ret, frame=cap.read()
|
||||
# image=frame.copy()
|
||||
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
BIN
Projet Innovation/Smart Connected Car Report.pdf
Звичайний файл
BIN
Protocoles pour les Objets Connectés/Présentation - OneM2M.pdf
Звичайний файл
BIN
Protocoles pour les Objets Connectés/Rapport - OneM2M.pdf
Звичайний файл
BIN
Psychologie Sociale/Présentation - Psychologie Sociale.pdf
Звичайний файл
BIN
Semantic Data/Semantic Data.pdf
Звичайний файл
BIN
Smart Devices/Datasheet.pdf
Звичайний файл
BIN
Smart Devices/Images Complémentaires/Image1.jpg
Звичайний файл
Після Ширина: | Висота: | Розмір: 3,7 МіБ |
BIN
Smart Devices/Images Complémentaires/Image2.jpg
Звичайний файл
Після Ширина: | Висота: | Розмір: 3,9 МіБ |
BIN
Smart Devices/Images Complémentaires/coté.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 129 КіБ |
BIN
Smart Devices/Images Complémentaires/dessous.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 77 КіБ |
BIN
Smart Devices/Images Complémentaires/dessus.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 71 КіБ |
BIN
Smart Devices/Images Complémentaires/pcb.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 158 КіБ |
BIN
Smart Devices/Images Complémentaires/sch.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 176 КіБ |
BIN
Smart Devices/Images Complémentaires/sch2.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 178 КіБ |
BIN
Smart Devices/Images Complémentaires/schema.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 108 КіБ |
BIN
Smart Devices/Images Complémentaires/schema2.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 104 КіБ |
BIN
Smart Devices/Images Complémentaires/schema2bis.PNG
Звичайний файл
Після Ширина: | Висота: | Розмір: 103 КіБ |