mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
Added ability to recenter / recalibrate eyes through OSC
This commit is contained in:
parent
5d8d4dcaec
commit
4a77fd6043
@ -35,6 +35,8 @@ class EyeTrackSettingsConfig:
|
||||
gui_osc_address: "str" = "127.0.0.1"
|
||||
gui_osc_port: "str" = "9000"
|
||||
gui_osc_receiver_port: "str" = "9001"
|
||||
gui_osc_recenter_address: "str" = "/avatar/parameters/etvr_recenter"
|
||||
gui_osc_recalibrate_address: "str" = "/avatar/parameters/etvr_recalibrate"
|
||||
gui_blob_maxsize: "float" = 25
|
||||
gui_blob_minsize: "float" = 10
|
||||
gui_recenter_eyes: "bool" = False
|
||||
|
||||
@ -37,11 +37,8 @@ def main():
|
||||
osc_queue: "queue.Queue[tuple[bool, int, int]]" = queue.Queue()
|
||||
osc = VRChatOSC(cancellation_event, osc_queue, config)
|
||||
osc_thread = threading.Thread(target=osc.run)
|
||||
osc_receiver = VRChatOSCReceiver(cancellation_event, config)
|
||||
osc_receiver_thread = threading.Thread(target=osc_receiver.run)
|
||||
# start worker threads
|
||||
osc_thread.start()
|
||||
osc_receiver_thread.start()
|
||||
|
||||
# t2s_queue: "queue.Queue[str | None]" = queue.Queue()
|
||||
# t2s_engine = SpeechEngine(t2s_queue)
|
||||
@ -54,7 +51,7 @@ def main():
|
||||
CameraWidget(EyeId.LEFT, config, osc_queue),
|
||||
# CameraWidget(EyeId.SETTINGS, config, osc_queue),
|
||||
]
|
||||
|
||||
|
||||
settings = [
|
||||
SettingsWidget(EyeId.SETTINGS, config, osc_queue),
|
||||
]
|
||||
@ -117,12 +114,18 @@ def main():
|
||||
|
||||
if config.eye_display_id in [EyeId.LEFT, EyeId.BOTH]:
|
||||
eyes[1].start()
|
||||
eyes[0].ransac.calibration_frame_counter
|
||||
if config.eye_display_id in [EyeId.RIGHT, EyeId.BOTH]:
|
||||
eyes[0].start()
|
||||
|
||||
if config.eye_display_id in [EyeId.SETTINGS, EyeId.BOTH]:
|
||||
settings[0].start()
|
||||
|
||||
# the eye's needs to be running before it is passed to the OSC
|
||||
osc_receiver = VRChatOSCReceiver(cancellation_event, config, eyes)
|
||||
osc_receiver_thread = threading.Thread(target=osc_receiver.run)
|
||||
osc_receiver_thread.start()
|
||||
|
||||
# Create the window
|
||||
window = sg.Window("EyeTrackVR v0.1.7", layout, icon='Images/logo.ico', background_color='#292929')
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
from pythonosc import udp_client
|
||||
from pythonosc import osc_server
|
||||
from pythonosc import dispatcher
|
||||
from winsound import PlaySound, SND_FILENAME, SND_ASYNC
|
||||
import queue
|
||||
import threading
|
||||
from enum import IntEnum
|
||||
@ -127,24 +128,32 @@ class VRChatOSC:
|
||||
last_blink = time.time()
|
||||
|
||||
class VRChatOSCReceiver:
|
||||
def __init__(self, cancellation_event: "threading.Event", main_config: EyeTrackConfig):
|
||||
def __init__(self, cancellation_event: "threading.Event", main_config: EyeTrackConfig, eyes: []):
|
||||
self.config = main_config.settings
|
||||
self.cancellation_event = cancellation_event
|
||||
self.dispatcher = dispatcher.Dispatcher()
|
||||
self.eyes = eyes # we cant import CameraWidget so any type it is
|
||||
self.server = osc_server.OSCUDPServer((self.config.gui_osc_address, int(self.config.gui_osc_receiver_port)), self.dispatcher)
|
||||
|
||||
def shutdown(self):
|
||||
print("Shutting down OSC receiver")
|
||||
self.server.shutdown()
|
||||
|
||||
def testOSC(self, address, value):
|
||||
print(address, value)
|
||||
def recenter_eyes(self, address, value):
|
||||
if value == True:
|
||||
for eye in self.eyes:
|
||||
eye.settings.gui_recenter_eyes
|
||||
|
||||
def recalibrate_eyes(self, address, value):
|
||||
if value == True:
|
||||
for eye in self.eyes:
|
||||
eye.ransac.calibration_frame_counter = 300
|
||||
PlaySound('Audio/start.wav', SND_FILENAME | SND_ASYNC)
|
||||
|
||||
def run(self):
|
||||
print("VRChatOSCReceiver serving on {}".format(self.server.server_address))
|
||||
# bind what function to run when specified OSC message is received
|
||||
self.dispatcher.map("/avatar/parameters/VelocityX", self.testOSC)
|
||||
self.dispatcher.map("/avatar/parameters/VelocityZ", self.testOSC)
|
||||
self.dispatcher.map("/avatar/parameters/VelocityY", self.testOSC)
|
||||
self.dispatcher.map(self.config.gui_osc_recalibrate_address, self.recalibrate_eyes)
|
||||
self.dispatcher.map(self.config.gui_osc_recenter_address, self.recenter_eyes)
|
||||
# start the server
|
||||
self.server.serve_forever()
|
||||
|
||||
@ -39,7 +39,9 @@ class SettingsWidget:
|
||||
|
||||
self.gui_osc_address = f"-OSCADDRESS{widget_id}-"
|
||||
self.gui_osc_port = f"-OSCPORT{widget_id}-"
|
||||
self.gui_osc_receiver_port = f"OSCRECEIVERPORTsgf{widget_id}-"
|
||||
self.gui_osc_receiver_port = f"OSCRECEIVERPORT{widget_id}-"
|
||||
self.gui_osc_recenter_address = f"OSCRECENTERADDRESS{widget_id}-"
|
||||
self.gui_osc_recalibrate_address = f"OSCRECALIBRATEADDRESS{widget_id}-"
|
||||
# self.gui_algo_settings_layout = f"-ALGOSETTINGSLAYOUT{widget_id}-"
|
||||
|
||||
self.gui_blob_fallback = f"-BLOBFALLBACK{widget_id}-"
|
||||
@ -170,6 +172,14 @@ class SettingsWidget:
|
||||
[
|
||||
sg.Text("OSC Receiver Port:", background_color='#424042'),
|
||||
sg.InputText(self.config.gui_osc_receiver_port, key=self.gui_osc_receiver_port),
|
||||
],
|
||||
[
|
||||
sg.Text("OSC Recenter Address:", background_color='#424042'),
|
||||
sg.InputText(self.config.gui_osc_recenter_address, key=self.gui_osc_recenter_address),
|
||||
],
|
||||
[
|
||||
sg.Text("OSC Recalibrate Address:", background_color='#424042'),
|
||||
sg.InputText(self.config.gui_osc_recalibrate_address, key=self.gui_osc_recalibrate_address),
|
||||
]
|
||||
|
||||
|
||||
@ -272,6 +282,14 @@ class SettingsWidget:
|
||||
self.config.gui_osc_address = values[self.gui_osc_address]
|
||||
changed = True
|
||||
|
||||
if self.config.gui_osc_recenter_address != values[self.gui_osc_recenter_address]:
|
||||
self.config.gui_osc_recenter_address = values[self.gui_osc_recenter_address]
|
||||
changed = True
|
||||
|
||||
if self.config.gui_osc_recalibrate_address != values[self.gui_osc_recalibrate_address]:
|
||||
self.config.gui_osc_recalibrate_address = values[self.gui_osc_recalibrate_address]
|
||||
changed = True
|
||||
|
||||
if self.config.gui_min_cutoff != values[self.gui_min_cutoff]:
|
||||
self.config.gui_min_cutoff = values[self.gui_min_cutoff]
|
||||
changed = True
|
||||
|
||||
Loading…
Reference in New Issue
Block a user