Système de chronométrage de course (de ski)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

88 lines
2.5 KiB

#!/usr/bin/python3
# (c) Mablr
# GNU GPL v3
import time
import cv2
import serial
avertPortique = False
portiqueOuvert = True
seqInit = True
courseEnCours = False
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorMOG2()
detectShadows = True
fermeturePropre = 0
ouverturePropre = 0
# Seuil de détection
seuilDetec = 5000
# Peut etre a enlever
continuer = True
# Initialisation de la connexion série
ser = serial.Serial('/dev/ttyACM0',9600)
while continuer:
# Récupération de l'état du portique
serialDATA = str(ser.readline())[2:3]
if serialDATA == "0":
portiqueOuvert = False
else:
portiqueOuvert = True
## Séquence d'initialisation
if portiqueOuvert and seqInit and not courseEnCours:
fermeturePropre = 0# remise à zéro du compteur fermeture stable
if not avertPortique:
print("Veuillez fermer le portique.")
avertPortique = True
# Si le portique est fermé
if not portiqueOuvert and seqInit and not courseEnCours:
time.sleep(0.01)
fermeturePropre += 1 # incrément fermeture stable
if not portiqueOuvert and fermeturePropre > 20 and not courseEnCours and seqInit:
# On peut résonablement penser que le portique de départ est bien fermé
input("Taper sur ENTRER pour autoriser le départ, ou Ctrl+C pour quitter le programme.\n")
seqInit = False
avertPortique = False
ouverturePropre = 0
# Si le portique ouvre (départ du skieur)
if portiqueOuvert and not seqInit and not courseEnCours:
ouverturePropre += 1 # incrément ouverture stable
## Début de la course
if portiqueOuvert and ouverturePropre > 100 and not seqInit and not courseEnCours:
tsDepart = time.time()
courseEnCours = True
print("Timestamp de départ :", tsDepart)
# Stabilisation de l'image
for i in range(100):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
if courseEnCours and not seqInit:
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
countWhite = cv2.countNonZero(fgmask)
# Si on détecte un skieur
if countWhite >= seuilDetec:
# Traitement du temps du skieur
tsArrivee = time.time()
temps = tsArrivee - tsDepart
print("\n#################################\n# Temps de course:", str(temps)[:7],"sec. #\n#################################\n")
# La course est finie
courseEnCours = False
seqInit = True