Scripts test liveview : pygame, pyqt6, opencv, tkinter - mesure FPS et premiere image

This commit is contained in:
2026-04-09 12:42:50 +02:00
parent 19d1998704
commit a1a0ce0503
4 changed files with 257 additions and 0 deletions

93
scripts/test_pyqt6.py Normal file
View File

@@ -0,0 +1,93 @@
#!/usr/bin/env python3
"""Test liveview avec PyQt6. Lance: python3 scripts/test_pyqt6.py"""
import sys
import time
import io
import gphoto2 as gp
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PyQt6.QtCore import QThread, pyqtSignal, Qt
from PyQt6.QtGui import QPixmap, QImage
class PreviewThread(QThread):
frame_ready = pyqtSignal(bytes, float)
premier_frame_signal = pyqtSignal(float)
def __init__(self, cam):
super().__init__()
self.cam = cam
self._running = True
self._premier = False
def run(self):
t_start = time.time()
while self._running:
try:
t0 = time.time()
f = self.cam.capture_preview()
data = bytes(f.get_data_and_size())
dt = time.time() - t0
if not self._premier:
self._premier = True
self.premier_frame_signal.emit(time.time() - t_start)
self.frame_ready.emit(data, dt)
except Exception as e:
print(f"Erreur preview: {e}")
break
def stop(self):
self._running = False
class MainWindow(QMainWindow):
def __init__(self, cam):
super().__init__()
self.setWindowTitle("Test liveview PyQt6")
self.resize(960, 640)
self.t_start = time.time()
self.frame_count = 0
self.label_img = QLabel()
self.label_img.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.label_info = QLabel("Attente premiere image...")
self.label_info.setStyleSheet("color: yellow; background: black; font-size: 18px; padding: 5px;")
layout = QVBoxLayout()
layout.addWidget(self.label_img)
layout.addWidget(self.label_info)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.thread = PreviewThread(cam)
self.thread.frame_ready.connect(self.on_frame)
self.thread.premier_frame_signal.connect(self.on_premier)
self.thread.start()
def on_premier(self, t):
print(f"1ere image en : {t:.2f}s")
def on_frame(self, data, dt):
self.frame_count += 1
img = QImage.fromData(data)
pix = QPixmap.fromImage(img).scaled(960, 600, Qt.AspectRatioMode.KeepAspectRatio)
self.label_img.setPixmap(pix)
fps = self.frame_count / (time.time() - self.t_start)
self.label_info.setText(f"FPS: {fps:.1f} frame: {dt*1000:.0f}ms total frames: {self.frame_count}")
def closeEvent(self, e):
self.thread.stop()
self.thread.wait()
super().closeEvent(e)
cam = gp.Camera()
cam.init()
print("Camera connectee")
app = QApplication(sys.argv)
win = MainWindow(cam)
win.show()
ret = app.exec()
cam.exit()
sys.exit(ret)