mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
Divide out utilities from main algorithm, set utilities on their own threads. Reference binaries in original directory so we don't have to duplicate them in the repo.
73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
from osc import VRChatOSC
|
|
from config import RansacConfig
|
|
from speech_engine import SpeechEngine
|
|
from ransac import Ransac
|
|
import queue
|
|
import threading
|
|
import cv2
|
|
|
|
WINDOW_NAME = "RANSACApp"
|
|
|
|
def main():
|
|
# Get Configuration
|
|
config = RansacConfig()
|
|
config.load()
|
|
|
|
# Set up basic cv2 window with our GUI
|
|
def update_threshold(val: "int"):
|
|
config.threshhold = val
|
|
|
|
def update_rot(val: "int"):
|
|
config.rotation_angle = val
|
|
|
|
cv2.namedWindow(WINDOW_NAME)
|
|
cv2.createTrackbar("Threshold", WINDOW_NAME, 0, 100, update_threshold)
|
|
cv2.createTrackbar("Rotation", WINDOW_NAME, 0, 360, update_rot)
|
|
|
|
# Spawn worker threads
|
|
osc_queue: "queue.Queue[tuple[bool, int, int] | None]" = queue.Queue()
|
|
osc = VRChatOSC(osc_queue)
|
|
osc_thread = threading.Thread(target=osc.run)
|
|
osc_thread.start()
|
|
|
|
# t2s_queue: "queue.Queue[str | None]" = queue.Queue()
|
|
# t2s_engine = SpeechEngine(t2s_queue)
|
|
# t2s_thread = threading.Thread(target=t2s_engine.run)
|
|
# t2s_thread.start()
|
|
# t2s_queue.put("App Starting")
|
|
|
|
ransac_queue = queue.Queue()
|
|
image_queue = queue.Queue()
|
|
ransac = Ransac(config, ransac_queue, image_queue)
|
|
ransac_thread = threading.Thread(target=ransac.run)
|
|
ransac_thread.start()
|
|
|
|
|
|
# GUI Render loop
|
|
|
|
while True:
|
|
# If we're in ROI mode, show current video and allow markup.
|
|
|
|
# If we're in tracking mode, bring up the tracking thread, let it do all of its work, then
|
|
# update ourselves whenever it pushes out an image into its buffer.
|
|
try:
|
|
maybe_image = image_queue.get(block = False)
|
|
cv2.imshow(WINDOW_NAME, maybe_image)
|
|
except queue.Empty:
|
|
pass
|
|
|
|
# If we're in either mode and someone hits q, quit immediately
|
|
if cv2.waitKey(10) & 0xFF == ord("q"):
|
|
cv2.destroyAllWindows()
|
|
osc_queue.put(None)
|
|
osc_thread.join()
|
|
ransac_queue.put(None)
|
|
ransac_thread.join()
|
|
# t2s_engine.force_stop()
|
|
# t2s_queue.put(None)
|
|
# t2s_thread.join()
|
|
print("Exiting RANSAC App")
|
|
return
|
|
|
|
if __name__ == "__main__":
|
|
main() |