first commit

This commit is contained in:
Pauline Berta 2021-01-16 13:46:02 -05:00
commit e224b59406
37 changed files with 238 additions and 0 deletions

Binary file not shown.

BIN
Big Data/Etude Big Data.pdf Normal file

Binary file not shown.

BIN
CV/Berta Pauline CV.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Binary file not shown.

View file

@ -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()

Binary file not shown.

Binary file not shown.

BIN
Smart Devices/Datasheet.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB