Refine VRC OSC project architecture

This commit is contained in:
messypy
2026-06-03 22:04:22 +09:00
committed by every_holiday
parent 6a2c9bb39c
commit 66f94eaa9e
10 changed files with 37 additions and 275 deletions

View File

@@ -0,0 +1,114 @@
import os
from pathlib import Path
import sys
os.environ["FLAGS_enable_pir_api"] = "0"
os.environ["FLAGS_use_onednn"] = "0"
os.environ["FLAGS_use_mkldnn"] = "0"
os.environ["FLAGS_use_onednn_bfloat16"] = "0"
os.environ["ONEDNN_VERBOSE"] = "0"
SRC_DIR = Path(__file__).resolve().parents[1]
if str(SRC_DIR) not in sys.path:
sys.path.insert(0, str(SRC_DIR))
from osc.gateway import VrcOscGateway
from discord_control.actions import setDiscordMute
from ocr.ocr_actions import runOcrFromScreen
from translate.translate_actions import saveTranslationText
from translate.translate_actions import translateTextToJapanese
from vrc_log.log_actions import collectVrchatLog
from vrc_log.log_actions import startSelfMonitor
from vrc_log.log_actions import startVrcLogMonitor
from vrc_log.log_actions import stopSelfMonitor
from vrc_log.log_actions import stopVrcLogMonitor
PARAM_DISCORD_MUTE = "DiscordSend"
PARAM_LOG_GREP = "vrc_log"
PARAM_OCR = "ocrEnabled"
PARAM_TRANSLATE_OCR = "translation"
def create_gateway():
gateway = VrcOscGateway(host="127.0.0.1", port=9001)
def on_discord_mute(address, *args):
if not args:
gateway.log("ERROR", "DiscordSend args empty")
return
if gateway.is_rising_edge(address, args[0]):
gateway.log("INFO", f"received {address} args={args}")
setDiscordMute()
vrc_log_enabled = False
def on_log_grep(address, *args):
nonlocal vrc_log_enabled
if not args:
gateway.log("ERROR", "vrc_log args empty")
return
if gateway.is_rising_edge(address, args[0]):
vrc_log_enabled = not vrc_log_enabled
gateway.log("INFO", f"received {address} args={args} enabled={vrc_log_enabled}")
if vrc_log_enabled:
collectVrchatLog(notify_changed=True)
startVrcLogMonitor()
else:
stopVrcLogMonitor()
def on_ocr(address, *args):
if not args:
gateway.log("ERROR", "ocrEnabled args empty")
return
if gateway.is_rising_edge(address, args[0]):
gateway.log("INFO", f"received {address} args={args}")
runOcrFromScreen()
def on_translate_ocr(address, *args):
if not args:
gateway.log("ERROR", "translateOcr args empty")
return
if gateway.is_rising_edge(address, args[0]):
gateway.log("INFO", f"received {address} args={args}")
result = runOcrFromScreen()
if not result:
gateway.log("ERROR", "OCR result is None")
return
text = result.get("text", "")
if not text.strip():
gateway.log("INFO", "OCR text is empty. translation skipped")
return
translated = translateTextToJapanese(text)
if not translated.strip():
gateway.log("INFO", "translation result is empty")
return
image_path = result.get("image_path")
stem = image_path.stem if image_path else "translation"
saved = saveTranslationText(stem, translated)
gateway.log("INFO", f"translation saved={saved}")
gateway.map(PARAM_DISCORD_MUTE, on_discord_mute)
gateway.map(PARAM_LOG_GREP, on_log_grep)
gateway.map(PARAM_OCR, on_ocr)
gateway.map(PARAM_TRANSLATE_OCR, on_translate_ocr)
gateway.set_default_debug(enabled=False)
return gateway
def main():
gateway = create_gateway()
startSelfMonitor()
gateway.serve_forever()
if __name__ == "__main__":
main()