1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from tkinter import *
import cv2
import numpy as np
def callbackVision(event):
forms = ''
forms = event.widget.get()
cascadeClassifierPath = 'haarcascade_frontalface_alt2.xml' # Chemin du Classifier
cascadeClassifier = cv2.CascadeClassifier(cascadeClassifierPath)
video = cv2.VideoCapture(0) # On récupère la vidéo
#video.set(3,600)
#video.set(3,500)
if forms == "Visage":
while(True):
_,frame = video.read() # Conversion N/B
detectedFaces = cascadeClassifier.detectMultiScale(frame)# Détection
for (x,y, width, height) in detectedFaces:
cv2.rectangle(frame, (x, y), (x+width, y+height), (0,255,0), 3) # Dessin d'un rectangle
cv2.imshow("result", frame)
if cv2.waitKey(1) == ord('q'):
break
if forms == "Cercle":
while(True):
ret, frame = video.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# La fonction GaussionBlur ici va permettre de réduire le bruit. Le MedianBlur va lisser le bruit pour également le réduire
gray = cv2.GaussianBlur(gray,(5,5),0);
gray = cv2.medianBlur(gray,5)
# AdaptativeThreshold Gaussian permet de calculer la taille de la forme de l'image
gray = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,3.5)
kernel = np.ones((2,2), np.uint8)
gray = cv2.erode(gray,kernel,iterations = 1)
#On dilate l'image pour permettre d'identifier ensuite notre cercle en "grossissant" la forme du cercle
#gray = erosion
gray = cv2.dilate(gray,kernel,iterations = 1)
#gray = dilation
#On identifie le centre de notre possible cercle ainsi que son diamètre
circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1 ,260, param1= 30, param2 = 65, minRadius = 0, maxRadius = 0)
if circles is not None:
circles = np.round(circles[0,:]).astype("int")
for (x,y,r) in circles:
cv2.circle(frame, (x,y), r, (0,0,255), 4)
cv2.rectangle(frame, (x-5, y-5 ), (x+5, y +5), (0,128,255), -1)
print("Column Number: ")
print(x)
print("Row Number: ")
print(y)
print("Radius is : ")
print(r)
cv2.imshow('frame', frame)
if cv2.waitKey(1)==ord('q'):
break
video = cv2.VideoCapture(0)
window = tk.Tk()
text = tk.Label(window, text = 'Choisi la forme qui vous intresse : ')
text.pack()
onglet = ttk.Combobox(window)
onglet['values'] = ['Cercle', 'Triangle', 'Visage']
forms = ""
onglet.bind("<<ComboboxSelected>>", lambda event:callbackVision(event))
video.release()
cv2.destroyAllWindows()
#-------------------------Gestion de l'évènement-------------------------------------------------------
#Cercle = 1365490862336
onglet.pack()
window.title('My Application')
window.geometry('300x300')
window.mainloop()
video.release()
cv2.destroyAllWindows() |
Partager