Laptimer
The lap timer uses a minimalist interface that displays the number of laps completed in red and the last lap time in black.
Code
Just copy the code and let it run! Please note that
cv2.VideoCapture(0)
is used here, i.e., the laptop's internal camera. If you want to use an external USB camera, you must change this to
cv2.VideoCapture(1)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
from time import time
import cv2
from ultralytics import YOLO
class DoubleTextDisplay(QWidget):
def __init__(self):
super().__init__()
# GUI
self.setWindowTitle("YOLO LapTimer")
self.setMinimumSize(600, 200)
# labels for lap - numer and time
self.left_label = QLabel()
self.right_label = QLabel()
self.left_label.setStyleSheet("border: 2px solid black; padding: 10px; color: red")
self.right_label.setStyleSheet("border: 2px solid black; padding: 10px;")
self.left_label.setFixedWidth(200)
self.left_label.setFixedWidth(400)
# large font
font = QFont("Arial", 200, QFont.Bold)
self.left_label.setFont(font)
self.right_label.setFont(font)
self.left_label.setAlignment(Qt.AlignCenter)
self.right_label.setAlignment(Qt.AlignCenter)
# Layout: horizontal
layout2 = QHBoxLayout()
layout2.addWidget(self.left_label)
layout2.addWidget(self.right_label)
self.setLayout(layout2)
# Video Capture via OpenCV
self.cam = cv2.VideoCapture(0)
# AI Model for Object Detection
self.model = YOLO("yolo11n_ncnn_model")
def set_texts(self, left_text, right_text):
self.left_label.setText(left_text)
self.right_label.setText(right_text)
def startlapTimer(self):
timeold = 0
lap= 0
while self.cam.isOpened():
success, frame = self.cam.read()
if success:
# Analyse
results = self.model.predict(frame, classes=[2, 3, 7, 36], verbose=False)
# Einzeichnen Bounding Box
finalframe = results[0].plot()
if results[0].boxes:
t = time()
if timeold == 0:
timeold = t
else:
diff = t - timeold
if diff > 1:
lap+=1
diff = round(t - timeold, 2)
self.set_texts(str(lap), str(diff))
timeold = t
cv2.imshow("Laptimer", finalframe)
# press space to exit
if cv2.waitKey(1) == ord(" "):
break
else:
print("Something went wrong ...")
break
if __name__ == "__main__":
app = QApplication(sys.argv)
window = DoubleTextDisplay()
window.set_texts("00", "00.00")
window.show()
window.startlapTimer()
sys.exit(app.exec_())
Test
This video shows how the Laptimer works in practice.