61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Test liveview avec Tkinter. Lance: DISPLAY=:0 python3 scripts/test_tkinter.py"""
|
|
import time
|
|
import io
|
|
import tkinter as tk
|
|
from PIL import Image, ImageTk
|
|
import gphoto2 as gp
|
|
|
|
cam = gp.Camera()
|
|
cam.init()
|
|
print("Camera connectee")
|
|
|
|
root = tk.Tk()
|
|
root.title("Test liveview Tkinter")
|
|
root.geometry("960x680")
|
|
root.configure(bg="black")
|
|
|
|
label_img = tk.Label(root, bg="black")
|
|
label_img.pack()
|
|
label_info = tk.Label(root, text="Attente...", fg="yellow", bg="black", font=("Arial", 16))
|
|
label_info.pack()
|
|
|
|
t_start = time.time()
|
|
frame_count = 0
|
|
premier_frame = None
|
|
|
|
|
|
def update():
|
|
global frame_count, premier_frame
|
|
try:
|
|
t0 = time.time()
|
|
f = cam.capture_preview()
|
|
data = bytes(f.get_data_and_size())
|
|
dt = time.time() - t0
|
|
|
|
if premier_frame is None:
|
|
premier_frame = time.time() - t_start
|
|
print(f"1ere image en : {premier_frame:.2f}s")
|
|
|
|
img = Image.open(io.BytesIO(data)).resize((960, 640))
|
|
photo = ImageTk.PhotoImage(img)
|
|
label_img.config(image=photo)
|
|
label_img.image = photo
|
|
|
|
frame_count += 1
|
|
fps = frame_count / (time.time() - t_start)
|
|
label_info.config(text=f"FPS: {fps:.1f} frame: {dt*1000:.0f}ms frames: {frame_count}")
|
|
|
|
except Exception as e:
|
|
print(f"Erreur: {e}")
|
|
root.quit()
|
|
return
|
|
|
|
root.after(33, update) # ~30fps
|
|
|
|
|
|
root.after(100, update)
|
|
root.mainloop()
|
|
cam.exit()
|
|
print(f"Total: {frame_count} frames")
|