Este commit está contenido en:
Pauline Berta 2021-01-16 13:46:02 -05:00
commit e224b59406
Se han modificado 37 ficheros con 238 adiciones y 0 borrados

Archivo binario no mostrado.

Archivo binario no mostrado.

BIN
Big Data/Etude Big Data.pdf Archivo normal

Archivo binario no mostrado.

BIN
CV/Berta Pauline CV.pdf Archivo normal

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 167 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 169 KiB

Archivo binario no mostrado.

Archivo binario no mostrado.

Ver fichero

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

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

Archivo binario no mostrado.

BIN
Semantic Data/Semantic Data.pdf Archivo normal

Archivo binario no mostrado.

BIN
Smart Devices/Datasheet.pdf Archivo normal

Archivo binario no mostrado.

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 3,7 MiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 3,9 MiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 129 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 77 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 71 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 158 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 176 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 178 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 108 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 104 KiB

Archivo binario no mostrado.

Después

Anchura:  |  Altura:  |  Tamaño: 103 KiB