Keeping Up With Camera Frame Rate In Tkinter Gui
My goal is to display a real time feed from a USB camera in a Tkinter Window. My problem is that I can't seem to update the GUI fast enough to keep up with the frame rate of the ca
Solution 1:
I'm posting this as an answer inspired by @stovfl's comment on the question, but I'm still curious to see how other people would approach this.
His comment pointed out that my frame_queue
probably cannot deliver frames when calling frame_queue.get()
within 1 millisecond, so I just removed the queue from the GUI update code entirely. Instead, I call the GUI updating code from the callback directly. Here is the new code:
import tkinter as tk
from PIL import ImageTk, Image
import uvclite
import io
user_check = Truedefframe_callback(in_frame, user):
global user_check
if user_check:
print("User id: %d" % user)
user_check = False
img = ImageTk.PhotoImage(Image.open(io.BytesIO(in_frame.data)))
panel.configure(image=img)
panel.image = img
if __name__ == "__main__":
with uvclite.UVCContext() as context:
cap_dev = context.find_device()
cap_dev.set_callback(frame_callback, 12345)
cap_dev.open()
cap_dev.start_streaming()
window = tk.Tk()
window.title("Join")
window.geometry("300x300")
window.configure(background="grey")
panel = tk.Label(window)
panel.pack(side="bottom", fill="both", expand="yes")
window.mainloop()
print("Exiting...")
cap_dev.stop_streaming()
print("Closing..")
cap_dev.close()
print("Clear Context")
This works quite well, and the GUI is very responsive and captures motion in real time. I'm not going to mark this as an answer just yet, I would like to see what other people come up with first.
Post a Comment for "Keeping Up With Camera Frame Rate In Tkinter Gui"