import os, time import numpy as np import cv2 as cv ############################################################################### # cam_bille-test.py : # @title: Détection de la bille par vision (caméra + OpenCV) # @project: Blender-EduTech - Tutoriel : Tutoriel 6 : Labyrinthe à bille - Développement de jumeau numérique # @lang: fr # @authors: Philippe Roy # @copyright: Copyright (C) 2023 Philippe Roy # @license: GNU GPL ############################################################################### ### # Installation : # - pip3 install opencv-python ### ############################################################################### # Initialisation ############################################################################### # Init de la caméra cam_id = 0 # 0 pour la 1ere camera, 1 pour la seconde ... cam = cv.VideoCapture(cam_id) # 0 pour la 1ere camera, 1 pour la assert cam.isOpened(), "Erreur lors de l'ouverture de la camera !" # Création de la fenêtre d'affichage # cv.namedWindow("Caméra") ############################################################################### # Affichage ############################################################################### # Capture vidéo echap='' while cam.isOpened(): cam_actif, cam_img = cam.read() cam_gray = cv.cvtColor(cam_img, cv.COLOR_BGR2GRAY) cam_gray = cv.medianBlur(cam_gray, 5) # (thresh, cam_bw) = cv.threshold(gray, 127, 255, cv.THRESH_BINARY) rows = cam_gray.shape[0] cercles = cv.HoughCircles(cam_gray, cv.HOUGH_GRADIENT, 1.5, rows / 8, param1=100, param2=30, minRadius=2, maxRadius=10) # cercles = cv.HoughCircles(cam_gray, cv.HOUGH_GRADIENT, 1, rows / 8, param1=100, param2=30, minRadius=5, maxRadius=10) # Dessin de la zone de détection # Détection de la bille if cercles is not None: cercles = np.uint16(np.around(cercles)) for i in cercles[0, :]: centre = (i[0], i[1]) cv.circle(cam_img, centre, 1, (0, 100, 100), 3) # Point des centres rayon = i[2] print ("Rayon :", rayon, "- Centre :", centre) cv.circle(cam_img, centre, rayon, (255, 0, 255), 3) # Contour des cercles cv.imshow("Detection de cercles", cam_img) # "Détection" -> bug ! # cv.imwrite("camera.png", cam_img) # Enregister l'image # Sortir echap = cv.waitKey(1) # Saisie clavier avec un timeout de 1 ms if echap & 0xFF == ord('q') or echap == 27 : break ############################################################################### # Quitter ############################################################################### cam.release() cv.destroyAllWindows()