diff --git a/BabbleApp/Locale/Dansk/locale.json b/BabbleApp/Locale/Dansk/locale.json index 42ae38a..81008a6 100644 --- a/BabbleApp/Locale/Dansk/locale.json +++ b/BabbleApp/Locale/Dansk/locale.json @@ -2,6 +2,8 @@ "general.header": "Generelle Indstillinger", "general.checkForUpdates": "Tjek For Opdateringer", "general.toolTip": "Slå opdateringstjek ved start til eller fra", + "general.logging": "Aktiver logning", + "general.loggingTooltip": "Gem logfil til fejlfinding. (Genstart nødvendig)", "general.oscSettings": "OSC Indstillinger", "general.locationPrefix": "Stedpræfiks", "general.locationTooltip": "Præfiks for OSC adresse", @@ -35,6 +37,7 @@ "error.frame": "Problem while getting frame", "error.size": "Size of frames to display are of unequal sizes", "error.capture": "Frame capture issue detected", + "error.modelLoad": "Kunne ikke indlæse", "warn.frameDrop": "Frame drop. Corrupted JPEG", "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installed. Please update to", "babble.needUpdateThree": "for the newest features", "babble.name": "Babble App", - "babble.updatePresent": "New Update Available", - "babble.updateTo": "Please update to", - "babble.downloadPage": "Download Page", - "babble.noToast": "Toast notifications not supported", "babble.noInternet": "Internet connection failed, no update check occured", "babble.camPage": "Cam", "babble.settingsPage": "Settings", diff --git a/BabbleApp/Locale/Deutsch/locale.json b/BabbleApp/Locale/Deutsch/locale.json index 82db9c6..09f9388 100644 --- a/BabbleApp/Locale/Deutsch/locale.json +++ b/BabbleApp/Locale/Deutsch/locale.json @@ -2,6 +2,8 @@ "general.header": "Allgemeine Einstellungen", "general.checkForUpdates": "Nach Updates suchen", "general.toolTip": "Beim Start nach Updates suchen", + "general.logging": "Protokollierung aktivieren", + "general.loggingTooltip": "Protokolldatei zum debuggen speichern. (Neustart erforderlich)", "general.oscSettings": "OSC Einstellungen", "general.locationPrefix": "Sprache Präfix", "general.locationTooltip": "OSC Adressen-Präfix", @@ -35,6 +37,7 @@ "error.frame": "Problem beim Abrufen des Bildes", "error.size": "Die Größe der anzuzeigenden Frames ist ungleich", "error.capture": "Problem bei der Bilderfassung erkannt", + "error.modelLoad": "Fehler beim Laden", "warn.frameDrop": "Frame-Drop. Beschädigtes JPEG", "warn.captureProblem": "Problem mit der Aufnahmequelle. Kamera wurde getrennt, warte auf erneute Verbindung", "warn.serialCapture": "Problem mit der seriellen Aufnahmequelle. Kamera wurde getrennt, warte auf erneute Verbindung", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installiert. Bitte aktualisieren Sie auf", "babble.needUpdateThree": "für die neuesten Funktionen", "babble.name": "Babble App", - "babble.updatePresent": "Neues Update verfügbar", - "babble.updateTo": "Bitte aktualisieren Sie auf", - "babble.downloadPage": "Download-Seite", - "babble.noToast": "Toast-Benachrichtigungen werden nicht unterstützt", "babble.noInternet": "Konnte keine Verbindung zum Internet herstellen, Update-Suche übersprungen", "babble.camPage": "Kamera", "babble.settingsPage": "Einstellungen", diff --git a/BabbleApp/Locale/English/locale.json b/BabbleApp/Locale/English/locale.json index 59939c4..9261132 100644 --- a/BabbleApp/Locale/English/locale.json +++ b/BabbleApp/Locale/English/locale.json @@ -2,6 +2,8 @@ "general.header": "General Settings", "general.checkForUpdates": "Check For Updates", "general.toolTip": "Toggle update check on launch", + "general.logging": "Enable Logging", + "general.loggingTooltip": "Save log file for debugging. (Restart needed)", "general.oscSettings": "OSC Settings", "general.locationPrefix": "Location Prefix", "general.locationTooltip": "Prefix for OSC address", @@ -35,6 +37,7 @@ "error.frame": "Problem while getting frame", "error.size": "Size of frames to display are of unequal sizes", "error.capture": "Frame capture issue detected", + "error.modelLoad": "Failed to load", "warn.frameDrop": "Frame drop. Corrupted JPEG", "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting to reconnect", "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting to reconnect", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "Installed. Please update to", "babble.needUpdateThree": "For the newest features", "babble.name": "Babble App", - "babble.updatePresent": "New Update Available", - "babble.updateTo": "Please update to", - "babble.downloadPage": "Download Page", - "babble.noToast": "Toast notifications not supported", "babble.noInternet": "Internet connection failed, no update check occurred", "babble.camPage": "Cam", "babble.settingsPage": "Settings", diff --git "a/BabbleApp/Locale/Espa\303\261ol/locale.json" "b/BabbleApp/Locale/Espa\303\261ol/locale.json" index a8eb782..dc335f4 100644 --- "a/BabbleApp/Locale/Espa\303\261ol/locale.json" +++ "b/BabbleApp/Locale/Espa\303\261ol/locale.json" @@ -2,6 +2,8 @@ "general.header": "Ajustes Generales", "general.checkForUpdates": "Buscar actualizaciones", "general.toolTip": "Elige buscar actualizaciones al arrancar", + "general.logging": "Habilitar registro", + "general.loggingTooltip": "Guardar archivo de registro para depuración. (Reinicio necesario)", "general.oscSettings": "Ajustes de OSC", "general.locationPrefix": "Prefijo de dirección", "general.locationTooltip": "Prefijo para la dirección OSC", @@ -35,6 +37,7 @@ "error.frame": "Problema al obtener fotogramas", "error.size": "Los tamaños de los fotogramas para mostrar son de dimensiones desiguales", "error.capture": "Detectado problema en la captura de fotogramas", + "error.modelLoad": "Error al cargar", "warn.frameDrop": "Pérdida de fotogramas. JPEG dañado", "warn.captureProblem": "Problema con la fuente de captura, se asume que la cámara está desconectada, esperando reconexión", "warn.serialCapture": "Problema con la fuente de captura en serie, se asume que la cámara está desconectada, esperando reconexión", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "instalada. Por favor actualiza a", "babble.needUpdateThree": "para tener las últimas funciones", "babble.name": "App Babble", - "babble.updatePresent": "Nueva Actualización Disponible", - "babble.updateTo": "Por favor actualiza a", - "babble.downloadPage": "Página de Descarga", - "babble.noToast": "Notificaciones Toast no soportadas", "babble.noInternet": "Error de conexión a Internet, no se buscaron actualizaciones", "babble.camPage": "Cámara", "babble.settingsPage": "Ajustes", diff --git "a/BabbleApp/Locale/Fran\303\247aise/locale.json" "b/BabbleApp/Locale/Fran\303\247aise/locale.json" index c2a4744..55edbf8 100644 --- "a/BabbleApp/Locale/Fran\303\247aise/locale.json" +++ "b/BabbleApp/Locale/Fran\303\247aise/locale.json" @@ -2,6 +2,8 @@ "general.header": "Paramètres généraux", "general.checkForUpdates": "Vérifier les mises à jour", "general.toolTip": "Activer la vérification des mises à jour au démarrage", + "general.logging": "Activer l'enregistrement", + "general.loggingTooltip": "Enregistrer le fichier journal pour le débogage. (Redémarrage nécessaire)", "general.oscSettings": "Paramètres OSC", "general.locationPrefix": "Préfixe de localisation", "general.locationTooltip": "Préfixe de l'adresse OSC", @@ -34,7 +36,8 @@ "error.improperTabValue": "", "error.frame": "Problème lors de récupération des images", "error.size": "La taille des images à afficher est inégale", - "error.capture": "", + "error.capture": "Problème de capture d'image détecté", + "error.modelLoad": "Échec du chargement", "warn.frameDrop": "Perte d'image. JPEG corrompu", "warn.captureProblem": "Problème de source de capture, la caméra doit être déconnectée ou en attente de reconnexion", "warn.serialCapture": "", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installé. Mettez à jour vers", "babble.needUpdateThree": "pour les nouvelles fonctions", "babble.name": "Application Babble", - "babble.updatePresent": "Nouvelle mise à jour disponible", - "babble.updateTo": "Mettez à jour vers", - "babble.downloadPage": "Page de téléchargement", - "babble.noToast": "Les notifications flottantes ne sont pas supportées", "babble.noInternet": "Échec de la connexion à internet, aucune vérification effectuée", "babble.camPage": "Caméra", "babble.settingsPage": "Options", diff --git a/BabbleApp/Locale/Indonesian/locale.json b/BabbleApp/Locale/Indonesian/locale.json index 7db87a5..6c81d9d 100644 --- a/BabbleApp/Locale/Indonesian/locale.json +++ b/BabbleApp/Locale/Indonesian/locale.json @@ -2,6 +2,8 @@ "general.header": "Pengaturan Umum", "general.checkForUpdates": "Periksa Pembaruan", "general.toolTip": "Aktifkan Memeriksa perbaruan saat buka aplikasi", + "general.logging": "Aktifkan Pencatatan", + "general.loggingTooltip": "Simpan berkas log untuk debugging. (Memulai ulang diperlukan)", "general.oscSettings": "Pengaturan OSC", "general.locationPrefix": "Awalan Lokasi", "general.locationTooltip": "Awalan untuk OSC address", @@ -35,6 +37,7 @@ "error.frame": "Masalah saat mendapatkan frame", "error.size": "Ukuran bingkai untuk menampilkan gambar tidak setara", "error.capture": "Terdeteksi masalah pada frame capture", + "error.modelLoad": "Gagal memuat", "warn.frameDrop": "Frame drop. JPEG korup", "warn.captureProblem": "Masalah sumber rekaman, perkiraan koneksi kamera terputus, menunggu koneksi ulang", "warn.serialCapture": "Masalah sumber serial rekaman, perkiraan koneksi kamera terputus, menunggu koneksi ulang", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "terinstall. Silakan Perbarui ke", "babble.needUpdateThree": "untuk fitur terbaru", "babble.name": "Aplikasi Babble", - "babble.updatePresent": "Pembaruaan Tersedia", - "babble.updateTo": "Silakan perbarui ke", - "babble.downloadPage": "Halaman Unduh", - "babble.noToast": "Toast notifikasi tidak mendukung", "babble.noInternet": "Koneksi internet gagal, tidak ada perbaruan yang terjadi", "babble.camPage": "Kamera", "babble.settingsPage": "Pengaturan", diff --git a/BabbleApp/Locale/Italiano/locale.json b/BabbleApp/Locale/Italiano/locale.json index 0299a18..05911b1 100644 --- a/BabbleApp/Locale/Italiano/locale.json +++ b/BabbleApp/Locale/Italiano/locale.json @@ -2,6 +2,8 @@ "general.header": "Impostazioni Generali", "general.checkForUpdates": "Verifica Disponibilità Aggiornamenti", "general.toolTip": "Attiva/Disattiva Controllo Aggiornamenti all'Avvio", + "general.logging": "Attiva logging", + "general.loggingTooltip": "Salva il file di log per il debug. (Riavvio necessario)", "general.oscSettings": "Impostazioni OSC", "general.locationPrefix": "Prefisso Posizione", "general.locationTooltip": "Prefisso per l'indirizzo OSC", @@ -35,6 +37,7 @@ "error.frame": "Problema durante l'acquisizione del fotogramma", "error.size": "Le dimensioni dei fotogrammi da visualizzare sono di dimensioni diverse", "error.capture": "Rilevato problema nella cattura del fotogramma", + "error.modelLoad": "Caricamento fallito", "warn.frameDrop": "Fotogramma perso. JPEG corrotto", "warn.captureProblem": "Problema di acquisizione sorgente, supponendo che la telecamera sia disconnessa, in attesa di riconnessione", "warn.serialCapture": "Problema di acquisizione da sorgente seriale, supponendo che la telecamera sia disconnessa, in attesa di riconnessione", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installata. Si prega di aggiornare a", "babble.needUpdateThree": "per le funzioni più recenti", "babble.name": "App Babble", - "babble.updatePresent": "Nuovo Aggiornamento Disponibile", - "babble.updateTo": "Si prega di aggiornare a", - "babble.downloadPage": "Pagina Di Download", - "babble.noToast": "Notifiche toast non supportate", "babble.noInternet": "Connessione a Internet non riuscita, non è stato possibile verificare la presenza di nuovi aggiornamenti", "babble.camPage": "Cam", "babble.settingsPage": "Impostazioni", diff --git a/BabbleApp/Locale/Nederlands/locale.json b/BabbleApp/Locale/Nederlands/locale.json index 7a75833..2da8284 100644 --- a/BabbleApp/Locale/Nederlands/locale.json +++ b/BabbleApp/Locale/Nederlands/locale.json @@ -2,6 +2,8 @@ "general.header": "Algemene Instellingen", "general.checkForUpdates": "Checken Voor Updates", "general.toolTip": "Update check bij opstarten inschakelen", + "general.logging": "Logging inschakelen", + "general.loggingTooltip": "Logbestand opslaan voor debugging. (Herstart nodig)", "general.oscSettings": "OSC Instellingen", "general.locationPrefix": "Voorvoegsel voor locatie", "general.locationTooltip": "Voorvoegsel voor OSC-adres", @@ -35,6 +37,7 @@ "error.frame": "Probleem bij het verkrijgen van beeld", "error.size": "Formaat van de frames voor weergave zijn ongelijk", "error.capture": "Probleem met frame opname gedetecteerd", + "error.modelLoad": "Laden mislukt", "warn.frameDrop": "Framedaling. Corrupte JPEG", "warn.captureProblem": "Probleem met opnamebron, verwacht losgekoppelde camera, wachten op nieuwe verbinding", "warn.serialCapture": "Probleem met serieel opname bron, verwacht losgekoppelde camera, wachten op nieuwe verbinding", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "geïnstalleerd. Update A.U.B naar", "babble.needUpdateThree": "voor de nieuwste functies", "babble.name": "Babble App", - "babble.updatePresent": "Nieuwe Update Beschikbaar", - "babble.updateTo": "Update A.U.B naar", - "babble.downloadPage": "Download Pagina", - "babble.noToast": "Toast notificaties niet ondersteund", "babble.noInternet": "Internetverbinding mislukt, er heeft geen updatecontrole plaatsgevonden", "babble.camPage": "Cam", "babble.settingsPage": "Instellingen", diff --git a/BabbleApp/Locale/OwO/locale.json b/BabbleApp/Locale/OwO/locale.json index 109c698..2263d55 100644 --- a/BabbleApp/Locale/OwO/locale.json +++ b/BabbleApp/Locale/OwO/locale.json @@ -2,6 +2,8 @@ "general.header": "genewaw settings OwO", "general.checkForUpdates": "check fow updates UwU", "general.toolTip": "toggwe update check on waunch >w<", + "general.logging": "Enabwe Wogging", + "general.loggingTooltip": "Save wog fiwe fow debugging. (Westawt needed)", "general.oscSettings": "OSC sewtings nya~", "general.locationPrefix": "wocation pwefix", "general.locationTooltip": "pwefix fow OSC addwess OwO", @@ -35,6 +37,7 @@ "error.frame": "Pwobwem while getting fwame >3<", "error.size": "Size of fwames to dispway awe of uneqwuaw sizes", "error.capture": "Fwame captuwe issue detecwed ;n;", + "error.modelLoad": "Faiwed to woad", "warn.frameDrop": "Fwame dwop. Cowwupted JPEG >.<", "warn.captureProblem": "Captuwe souwce pwobwem, assuwming camewa disconnetwed, waiting fow weconnect", "warn.serialCapture": "sewiaw captuwe sawse pwoblem, asswuming camewa diwsconnected, waiting fow weconnect", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "instawwed. Please update to", "babble.needUpdateThree": "fow the newest featuwes", "babble.name": "babbwe app UwU", - "babble.updatePresent": "new update avaiwabwe >w<", - "babble.updateTo": "pwease update to nya~", - "babble.downloadPage": "downwoad page :3", - "babble.noToast": "toast notifications not suppowted OwO", "babble.noInternet": "intewnet connection faiwed, no update check occuwwed UwU", "babble.camPage": "cam >w<", "babble.settingsPage": "settings nya~", diff --git a/BabbleApp/Locale/Pirate Speak/locale.json b/BabbleApp/Locale/Pirate Speak/locale.json index 5db64c3..8916d54 100644 --- a/BabbleApp/Locale/Pirate Speak/locale.json +++ b/BabbleApp/Locale/Pirate Speak/locale.json @@ -2,6 +2,8 @@ "general.header": "Cap'n's Quarters", "general.checkForUpdates": "Scour fer Booty Updates", "general.toolTip": "Toggle update check when ye set sail", + "general.logging": "Commence Loggin'", + "general.loggingTooltip": "Stow log file fer fixin! (Needin' restart)", "general.oscSettings": "OSC Riggin's", "general.locationPrefix": "Treasure Map Prefix", "general.locationTooltip": "Prefix fer yer OSC coordinates", @@ -35,6 +37,7 @@ "error.frame": "Problem while getting frame", "error.size": "Size of frames to display are of unequal sizes", "error.capture": "Frame capture issue detected", + "error.modelLoad": "Failed t' hoist", "warn.frameDrop": "Frame drop. Corrupted JPEG", "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installed. Please update to", "babble.needUpdateThree": "for the newest features", "babble.name": "Babble Ship", - "babble.updatePresent": "New Booty Available", - "babble.updateTo": "Please update to", - "babble.downloadPage": "Plunder Page", - "babble.noToast": "Toast notifications not supported, ye scurvy dog", "babble.noInternet": "Internet connection failed, no update check occurred", "babble.camPage": "Spyglass", "babble.settingsPage": "Ship's Riggin's", diff --git a/BabbleApp/Locale/Polski/locale.json b/BabbleApp/Locale/Polski/locale.json index 2ad6644..077a718 100644 --- a/BabbleApp/Locale/Polski/locale.json +++ b/BabbleApp/Locale/Polski/locale.json @@ -2,6 +2,8 @@ "general.header": "Ustawienia główne", "general.checkForUpdates": "Sprawdź aktualizacje", "general.toolTip": "Automatyczne sprawdzanie aktualizacji przy włączeniu", + "general.logging": "Włącz logowanie", + "general.loggingTooltip": "Zapisz plik dziennika do debugowania. (Wymagany restart)", "general.oscSettings": "Ustawienia OSC", "general.locationPrefix": "Location Prefix", "general.locationTooltip": "Prefix for OSC address", @@ -35,6 +37,7 @@ "error.frame": "Problem while getting frame", "error.size": "Size of frames to display are of unequal sizes", "error.capture": "Frame capture issue detected", + "error.modelLoad": "Nie udało się załadować", "warn.frameDrop": "Frame drop. Corrupted JPEG", "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "zainstalowano. Proszę zaktualizować do", "babble.needUpdateThree": "po najnowsze funkcje", "babble.name": "Apka Babble", - "babble.updatePresent": "Nowa aktualizacja dostępna", - "babble.updateTo": "Proszę zaktualizuj do", - "babble.downloadPage": "Strona pobierania", - "babble.noToast": "Powiadomienia Toast nie są obsługiwane", "babble.noInternet": "Brak dostępu do internetu, sprawdzenie nowej aktualizacji nieudane", "babble.camPage": "Ustawienia kamery", "babble.settingsPage": "Ustawienia", diff --git "a/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" "b/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" index f51248c..502a8a0 100644 --- "a/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" +++ "b/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" @@ -2,6 +2,8 @@ "general.header": "Общие настройки", "general.checkForUpdates": "Проверить обновления", "general.toolTip": "Включить проверку обновлений при запуске", + "general.logging": "Включить ведение журнала", + "general.loggingTooltip": "Сохранить файл журнала для отладки. (Необходим перезапуск)", "general.oscSettings": "Настройки OSC", "general.locationPrefix": "Префикс местоположения", "general.locationTooltip": "Префикс для адреса OSC", @@ -35,6 +37,7 @@ "error.frame": "Проблема при получении кадра", "error.size": "Размеры отображаемых кадров не равны", "error.capture": "Обнаружена проблема захвата кадров", + "error.modelLoad": "Ошибка загрузки", "warn.frameDrop": "Пропуск кадра. Поврежденный JPEG", "warn.captureProblem": "Проблема с источником захвата, предполагается отключение камеры, ожидается повторное подключение", "warn.serialCapture": "Проблема с последовательным источником захвата, предполагается отключение камеры, ожидается повторное подключение", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": ". Пожалуйста, обновитесь до версии", "babble.needUpdateThree": ", чтобы получить новые функции", "babble.name": "Приложение Babble", - "babble.updatePresent": "Доступно новое обновление", - "babble.updateTo": "Пожалуйста, обновитесь до", - "babble.downloadPage": "Страница загрузок", - "babble.noToast": "Тост-уведомления не поддерживаются", "babble.noInternet": "Сбой подключения к Интернету, проверка обновлений не выполнена", "babble.camPage": "Камера", "babble.settingsPage": "Настройки", diff --git a/BabbleApp/Locale/Svenska/locale.json b/BabbleApp/Locale/Svenska/locale.json index f922f57..5a4840a 100644 --- a/BabbleApp/Locale/Svenska/locale.json +++ b/BabbleApp/Locale/Svenska/locale.json @@ -2,6 +2,8 @@ "general.header": "Allmänna Inställningar", "general.checkForUpdates": "Sök Efter Uppdateringar", "general.toolTip": "Sök efter uppdateringar vid uppstart", + "general.logging": "Aktivera loggning", + "general.loggingTooltip": "Spara loggfil för felsökning. (Omstart behövs)", "general.oscSettings": "OSC Inställningar", "general.locationPrefix": "Plats Prefix", "general.locationTooltip": "Prefix för OSC adress", @@ -35,6 +37,7 @@ "error.frame": "Problem vid avläsning", "error.size": "Bildrutornas storlek till displayen är ojämna", "error.capture": "Problem med bildrutsavläsningen har upptäckts", + "error.modelLoad": "Kunde inte läsa in", "warn.frameDrop": "Bildrutor tappas. Korrupt JPEG", "warn.captureProblem": "Problem med bildkälla, Antar att kameran är frånkopplad, Inväntar återkoppling", "warn.serialCapture": "Problem med serial avbildningskälla, Antar att kameran är frånkopplad, inväntar återkoppling", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "installerad. Vänligen uppdatera till", "babble.needUpdateThree": "den senaste funktionerna", "babble.name": "Babble Appen", - "babble.updatePresent": "Uppdatering Tillgänglig", - "babble.updateTo": "Vänlig uppdatera till", - "babble.downloadPage": "Nedladdningssida", - "babble.noToast": "Toast notifieringsstöd saknas", "babble.noInternet": "Internetuppkoppling saknas, uppdateringssökning misslyckades", "babble.camPage": "Kamera", "babble.settingsPage": "Inställningar", diff --git "a/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" "b/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" index 3731e3b..28819f6 100644 --- "a/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" +++ "b/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" @@ -2,6 +2,8 @@ "general.header": "常规设置", "general.checkForUpdates": "检查更新", "general.toolTip": "启动时检查更新", + "general.logging": "启用日志记录", + "general.loggingTooltip": "保存日志文件以进行调试。(需要重启)", "general.oscSettings": "OSC设置", "general.locationPrefix": "位置前缀", "general.locationTooltip": "OSC地址前缀", @@ -35,6 +37,7 @@ "error.frame": "获取帧时出现问题", "error.size": "要显示的帧大小不相等", "error.capture": "检测到帧捕获问题", + "error.modelLoad": "加载失败", "warn.frameDrop": "丢弃帧:损坏的JPEG", "warn.captureProblem": "捕获源问题,假设相机已断开连接,正在等待重新连接", "warn.serialCapture": "串行捕获源问题,假设相机已断开连接,正在等待重新连接", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "已被安装,请升级到", "babble.needUpdateThree": "为了最新的特色", "babble.name": "Babble应用", - "babble.updatePresent": "新的升级可用", - "babble.updateTo": "请升级到", - "babble.downloadPage": "下载页面", - "babble.noToast": "不支持Toast通知", "babble.noInternet": "网络连接失败,未进行更新检查", "babble.camPage": "相机", "babble.settingsPage": "设定", diff --git "a/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" "b/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" index c15db25..c650bc2 100644 --- "a/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" +++ "b/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" @@ -2,6 +2,8 @@ "general.header": "一般設定", "general.checkForUpdates": "檢查更新", "general.toolTip": "開啟時檢查更新", + "general.logging": "啟用日誌記錄", + "general.loggingTooltip": "保存日誌文件以進行除錯。(需要重啟)", "general.oscSettings": "OSC 設定", "general.locationPrefix": "位置前綴", "general.locationTooltip": "OSC 位址的前綴", @@ -35,6 +37,7 @@ "error.frame": "取得畫面時發生問題", "error.size": "顯示畫面大小不一致", "error.capture": "偵測到畫面擷取問題", + "error.modelLoad": "載入失敗", "warn.frameDrop": "畫面遺失,JPEG 檔案損毀", "warn.captureProblem": "擷取來源問題,假設攝影機已斷線,等待重新連線", "warn.serialCapture": "序列埠擷取來源問題,假設攝影機已斷線,等待重新連線", @@ -120,10 +123,6 @@ "babble.needUpdateTwo": "請更新至", "babble.needUpdateThree": "以使用最新功能", "babble.name": "Babble App", - "babble.updatePresent": "有新版本可用", - "babble.updateTo": "請更新至", - "babble.downloadPage": "下載頁面", - "babble.noToast": "不支援快顯通知", "babble.noInternet": "網路連線失敗,無法檢查更新", "babble.camPage": "攝影機", "babble.settingsPage": "設定", diff --git a/BabbleApp/babble_model_loader.py b/BabbleApp/babble_model_loader.py index e4d85af..388b71f 100644 --- a/BabbleApp/babble_model_loader.py +++ b/BabbleApp/babble_model_loader.py @@ -28,4 +28,4 @@ def run_model(self): # output[i] = max(min(output[i], 1), 0) ## Clip values between 0 - 1 output = np.clip(output, 0, 1) - self.output = output + self.output = output diff --git a/BabbleApp/babble_processor.py b/BabbleApp/babble_processor.py index a6c9ab8..b51780b 100644 --- a/BabbleApp/babble_processor.py +++ b/BabbleApp/babble_processor.py @@ -119,8 +119,8 @@ def __init__( self.sess = ort.InferenceSession( f"{self.default_model}/onnx/model.onnx", self.opts, - providers=[provider], - provider_options=[{"device_id": self.gpu_index}], + providers=provider, + provider_options=[{"device_id": self.gpu_index}, {"device_id": self.gpu_index}, {}], # We need a dict entry for each EP in our providers list ) self.input_name = self.sess.get_inputs()[0].name self.output_name = self.sess.get_outputs()[0].name diff --git a/BabbleApp/babbleapp.py b/BabbleApp/babbleapp.py index 5c43076..58cfd37 100644 --- a/BabbleApp/babbleapp.py +++ b/BabbleApp/babbleapp.py @@ -23,7 +23,6 @@ import threading import asyncio import logging -from ctypes import c_int from babble_model_loader import * from camera_widget import CameraWidget from config import BabbleConfig @@ -41,8 +40,7 @@ if os_type == "Windows": try: - from ctypes import windll - + from ctypes import windll, c_int winmm = windll.winmm except OSError: print( @@ -171,10 +169,13 @@ def shutdown_all(self, timeout=5.0): async def async_main(): ensurePath() - setup_logging() # Get Configuration config: BabbleConfig = BabbleConfig.load() + + # Init logging. TODO: Initiate before "BabbleConfig.load()"? + if config.settings.gui_logging: + setup_logging() # Init locale manager lang("Locale", config.settings.gui_language) diff --git a/BabbleApp/camera.py b/BabbleApp/camera.py index 7a0dfa6..db5857f 100644 --- a/BabbleApp/camera.py +++ b/BabbleApp/camera.py @@ -95,13 +95,8 @@ def run(self): should_push = True # If things aren't open, retry until they are. Don't let read requests come in any earlier # than this, otherwise we can deadlock (valve reference) ourselves. - if ( - self.config.capture_source is not None - and self.config.capture_source != "" - ): - self.current_capture_source = self.config.capture_source + if self.config.capture_source not in (None, ""): isSerial = any(x in str(self.config.capture_source) for x in PORTS) - if isSerial: if self.cv2_camera is not None: self.cv2_camera.release() @@ -116,7 +111,9 @@ def run(self): ): port = self.config.capture_source self.current_capture_source = port - self.start_serial_connection(port) + if self.start_serial_connection(port): + time.sleep(0.3) + continue elif ViveTracker.is_device_vive_tracker(self.config.capture_source): if self.cv2_camera is not None: self.cv2_camera.release() @@ -146,13 +143,12 @@ def run(self): self.cv2_camera is None or not self.cv2_camera.isOpened() or self.camera_status == CameraState.DISCONNECTED - #or get_camera_index_by_name(self.config.capture_source) != self.current_capture_source - or self.config.capture_source != self.current_capture_source + or get_camera_index_by_name(self.config.capture_source) != self.current_capture_source ): if self.vft_camera is not None: self.vft_camera.close() self.device_is_vft = False - + print(self.error_message.format(self.config.capture_source)) # This requires a wait, otherwise we can error and possible screw up the camera # firmware. Fickle things. @@ -224,7 +220,7 @@ def get_camera_picture(self, should_push): return self.frame_number = self.frame_number + 1 elif self.cv2_camera is not None and self.cv2_camera.isOpened(): - ret, image = self.cv2_camera.read() # MJPEG Stream reconnects are currently limited by the hard coded 30 second timeout time on VideoCapture.read(). We can get around this by recompiling OpenCV or using a custom MJPEG stream imp. + ret, image = self.cv2_camera.read() # MJPEG Stream reconnects are currently limited by the hard coded 30 second timeout time on VideoCapture.read(). We can get around this by recompiling OpenCV or using a custom MJPEG stream imp. if ret and image is not None: if not ret: if not self.http: @@ -323,13 +319,13 @@ def start_serial_connection(self, port): if self.serial_connection is not None and self.serial_connection.is_open: # Do nothing. The connection is already open on this port. if self.serial_connection.port == port: - return + return False # Otherwise, close the connection before trying to reopen. self.serial_connection.close() com_ports = [tuple(p) for p in list(serial.tools.list_ports.comports())] # Do not try connecting if no such port i.e. device was unplugged. if not any(p for p in com_ports if port in p): - return + return True try: rate = 115200 if sys.platform == "darwin" else 3000000 # Higher baud rate not working on macOS conn = serial.Serial(baudrate=rate, port=port, xonxoff=False, dsrdtr=False, rtscts=False) @@ -337,17 +333,15 @@ def start_serial_connection(self, port): if os_type == 'Windows': conn.set_buffer_size(rx_size=BUFFER_SIZE, tx_size=BUFFER_SIZE) - print( - f'{Fore.CYAN}[{lang._instance.get_string("log.info")}] {lang._instance.get_string("info.ETVRConnected")} {port}{Fore.RESET}' - ) + print(f'{Fore.CYAN}[{lang._instance.get_string("log.info")}] {lang._instance.get_string("info.ETVRConnected")} {port}{Fore.RESET}') self.serial_connection = conn self.camera_status = CameraState.CONNECTED + return False except Exception as e: - print( - f'{Fore.CYAN}[{lang._instance.get_string("log.info")}] {lang._instance.get_string("info.ETVRFailiure")} {port}{Fore.RESET}' - ) + print(f'{Fore.CYAN}[{lang._instance.get_string("log.info")}] {lang._instance.get_string("info.ETVRFailiure")} {port}{Fore.RESET}') print(e) self.camera_status = CameraState.DISCONNECTED + return True def clamp_max_res(self, image: MatLike) -> MatLike: shape = image.shape @@ -371,4 +365,4 @@ def push_image_to_queue(self, image, frame_number, fps): f'{Fore.YELLOW}[{lang._instance.get_string("log.warn")}] {lang._instance.get_string("warn.backpressure1")} {qsize}. {lang._instance.get_string("warn.backpressure2")}{Fore.RESET}' ) self.camera_output_outgoing.put((self.clamp_max_res(image), frame_number, fps)) - self.capture_event.clear() \ No newline at end of file + self.capture_event.clear() diff --git a/BabbleApp/camera_widget.py b/BabbleApp/camera_widget.py index 73a89c0..478bc45 100644 --- a/BabbleApp/camera_widget.py +++ b/BabbleApp/camera_widget.py @@ -60,7 +60,7 @@ def __init__(self, widget_id: Tab, main_config: BabbleConfig, osc_queue: Queue): self.capture_event = Event() self.capture_queue = Queue(maxsize=2) self.roi_queue = Queue(maxsize=2) - self.image_queue = Queue(maxsize=500) # This is needed to prevent the UI from freezing during widget changes. + self.image_queue = Queue(maxsize=500) # This is needed to prevent the UI from freezing during widget changes. self.babble_cnn = BabbleProcessor( self.config, @@ -267,7 +267,7 @@ def start(self): # self.babble_landmark_thread.start() self.camera_thread = Thread(target=self.camera.run) self.camera_thread.start() - + def stop(self): # If we're not running yet, bail @@ -304,7 +304,7 @@ def render(self, window, event, values): if any(x in str(value) for x in ports): self.config.capture_source = value else: - if is_valid_int_input(value): + if is_valid_int_input(value): self.config.capture_source = int(value) else: self.config.capture_source = value @@ -405,7 +405,7 @@ def render(self, window, event, values): if self.maybe_image is None: # Skip rendering or use a default/placeholder image return # Or handle appropriately - + output = self.maybe_image[0].shape self.config.roi_window_x = 0 self.config.roi_window_y = 0 diff --git a/BabbleApp/config.py b/BabbleApp/config.py index eb78397..dacf716 100644 --- a/BabbleApp/config.py +++ b/BabbleApp/config.py @@ -36,6 +36,7 @@ class BabbleSettingsConfig(BaseModel): gui_osc_delay_enable: bool = False gui_osc_delay_seconds: float = 0.01 gui_update_check: bool = True + gui_logging: bool = True #Prefer "False" for stable release? gui_ROSC: bool = False gui_osc_location: str = "" gui_multiply: float = 1 diff --git a/BabbleApp/general_settings_widget.py b/BabbleApp/general_settings_widget.py index 67a6dec..fa08800 100644 --- a/BabbleApp/general_settings_widget.py +++ b/BabbleApp/general_settings_widget.py @@ -22,6 +22,7 @@ def __init__( self.gui_min_cutoff = f"-MINCUTOFF{widget_id}-" self.gui_ROSC = f"-ROSC{widget_id}-" self.gui_update_check = f"-UPDATECHECK{widget_id}-" + self.gui_logging = f"-LOGGING{widget_id}-" self.gui_osc_location = f"-OSCLOCATION{widget_id}-" self.gui_cam_resolution_x = f"-CAMRESX{widget_id}-" self.gui_cam_resolution_y = f"-CAMRESY{widget_id}-" @@ -45,6 +46,13 @@ def __init__( background_color=bg_color_highlight, tooltip=lang._instance.get_string("general.toolTip"), ), + sg.Checkbox( + lang._instance.get_string("general.logging"), + default=self.config.gui_logging, + key=self.gui_logging, + background_color=bg_color_highlight, + tooltip=lang._instance.get_string("general.loggingTooltip"), + ), ], [ sg.Text( @@ -332,6 +340,11 @@ def render(self, window, event, values): if self.config.gui_update_check != values[self.gui_update_check]: self.config.gui_update_check = values[self.gui_update_check] changed = True + + # Logging option + if self.config.gui_logging != values[self.gui_logging]: + self.config.gui_logging = values[self.gui_logging] + changed = True # Update disable camera preview option value = values[self.gui_disable_camera_preview] diff --git a/BabbleApp/logger.py b/BabbleApp/logger.py index d94f1e5..f1fbebe 100644 --- a/BabbleApp/logger.py +++ b/BabbleApp/logger.py @@ -4,6 +4,7 @@ import sys import platform import psutil +from logging.handlers import RotatingFileHandler def strip_ansi_codes(text): """Remove ANSI color codes from a string.""" @@ -37,20 +38,23 @@ def log_system_info(logger): except Exception as e: logger.error(f"Failed to log system information: {e}") +class _RotatingFileHandler(RotatingFileHandler): + def doRollover(self): + super().doRollover() + # Include system info after rollover + log_system_info(logging.getLogger("debug_logger")) def setup_logging(): - # Determine the user's Documents directory - #documents_dir = os.path.join(os.path.expanduser("~"), "Documents") - documents_dir = "./Logs" - log_dir = os.path.join(documents_dir, "ProjectBabble") + # Log to program directory + log_dir = "./Logs" os.makedirs(log_dir, exist_ok=True) - log_file = os.path.join(log_dir, "latest.log") + log_file = os.path.join(log_dir, "ProjectBabble.log") # Set up logging logger = logging.getLogger("debug_logger") logger.setLevel(logging.DEBUG) - file_handler = logging.FileHandler(log_file, mode='w', encoding='utf-8') + file_handler = _RotatingFileHandler(log_file, mode='w', maxBytes=2000000, backupCount=1, encoding='utf-8') file_handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') file_handler.setFormatter(formatter) @@ -64,14 +68,22 @@ def __init__(self, stream, log_level): self.log_level = log_level def write(self, message): - message = strip_ansi_codes(message) - if message.strip(): - logger.log(self.log_level, message.strip()) - self.stream.write(message) - self.stream.flush() + if self.stream: + message = strip_ansi_codes(message) + if message.strip(): + logger.log(self.log_level, message.strip()) + try: + self.stream.write(message) + self.stream.flush() + except AttributeError: + pass def flush(self): - self.stream.flush() + if self.stream: + try: + self.stream.flush() + except AttributeError: + pass sys.stdout = StreamToLogger(sys.stdout, logging.INFO) sys.stderr = StreamToLogger(sys.stderr, logging.ERROR) diff --git a/BabbleApp/one_euro_filter.py b/BabbleApp/one_euro_filter.py index 30fa923..2c2421d 100644 --- a/BabbleApp/one_euro_filter.py +++ b/BabbleApp/one_euro_filter.py @@ -50,3 +50,6 @@ def __call__(self, x): self.t_prev = t return x_hat + else: + self.x_prev = x + return x diff --git a/BabbleApp/requirements.txt b/BabbleApp/requirements.txt index 514038f..e30de0f 100644 --- a/BabbleApp/requirements.txt +++ b/BabbleApp/requirements.txt @@ -10,7 +10,6 @@ python_osc==1.9.0; pydantic==2.10.6; pyserial==3.5; colorama==0.4.6; -desktop-notifier==6.0.0; comtypes==1.4.8; pygrabber==0.2; psutil==7.0.0; diff --git a/BabbleApp/utils/misc_utils.py b/BabbleApp/utils/misc_utils.py index e4a663f..a9d9189 100644 --- a/BabbleApp/utils/misc_utils.py +++ b/BabbleApp/utils/misc_utils.py @@ -1,5 +1,5 @@ -import typing import serial +import serial.tools.list_ports import sys import glob import os @@ -9,6 +9,7 @@ import subprocess import sounddevice as sd import soundfile as sf +import contextlib bg_color_highlight = "#424042" bg_color_clear = "#242224" @@ -16,6 +17,7 @@ onnx_providers = [ "DmlExecutionProvider", "CUDAExecutionProvider", + "CoreMLExecutionProvider", "CPUExecutionProvider", ] @@ -33,7 +35,7 @@ def is_valid_float_input(value): def is_valid_int_input(value): # Allow empty string, negative sign, or an integer number return bool(re.match(r"^-?\d*$", value)) - + def list_camera_names(): cam_list = graph.get_input_devices() cam_names = [] @@ -42,21 +44,34 @@ def list_camera_names(): cam_names = cam_names + list_serial_ports() return cam_names +@contextlib.contextmanager +def suppress_stderr(): + """Context manager to suppress stderr (used for OpenCV warnings).""" + with open(os.devnull, 'w') as devnull: + old_stderr_fd = os.dup(2) + os.dup2(devnull.fileno(), 2) + try: + yield + finally: + os.dup2(old_stderr_fd, 2) + os.close(old_stderr_fd) + def list_cameras_opencv(): """Use OpenCV to check available cameras by index (fallback for Linux/macOS)""" index = 0 arr = [] - while True: - cap = cv2.VideoCapture(index) - if not cap.read()[0]: - break - else: - arr.append(f"/dev/video{index}") - cap.release() - index += 1 + with suppress_stderr(): # tell OpenCV not to throw "cannot find camera" while we probe for cameras + while True: + cap = cv2.VideoCapture(index) + if not cap.read()[0]: + cap.release() + break + else: + arr.append(f"/dev/video{index}") + cap.release() + index += 1 return arr - def is_uvc_device(device): """Check if the device is a UVC video device (not metadata)""" try: @@ -124,25 +139,16 @@ def list_serial_ports(): :returns: A list of the serial ports available on the system """ - if sys.platform.startswith("win"): - ports = ["COM%s" % (i + 1) for i in range(256)] - elif sys.platform.startswith("linux") or sys.platform.startswith("cygwin"): - # this excludes your current terminal "/dev/tty" - ports = glob.glob("/dev/tty[A-Za-z]*") - elif sys.platform.startswith("darwin"): - ports = glob.glob("/dev/tty.*") - else: + if not sys.platform.startswith(("win", "linux", "cygwin", "darwin")): raise EnvironmentError("Unsupported platform") - result = [] - for port in ports: - try: - s = serial.Serial(port) - s.close() - result.append(port) - except (OSError, serial.SerialException): - pass - return result + ports = [] + try: + for s in serial.tools.list_ports.comports(): + ports.append(s.device) + except (AttributeError, OSError, serial.SerialException): + pass + return sorted(ports) def get_camera_index_by_name(name): @@ -182,4 +188,3 @@ def playSound(file): def ensurePath(): if os.path.exists(os.path.join(os.getcwd(), "BabbleApp")): os.chdir(os.path.join(os.getcwd(), "BabbleApp")) - diff --git a/README.md b/README.md index 0c856f3..3fdea7e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Project Babble is a source first mouth tracking project designed to work with an ## Interested in selling babble hardware? -By defualt Project Babble is under a non-commerical license! Please contact us at projectbabblevr@gmail.com to obtain a commercial license! +By default Project Babble is under a non-commerical license! Please contact us at projectbabblevr@gmail.com to obtain a commercial license! ## Table of Contents - [Features](#features) @@ -24,7 +24,7 @@ By defualt Project Babble is under a non-commerical license! Please contact us a Head to the releases section and [download the latest installer](https://github.com/Project-Babble/ProjectBabble/releases/latest). ### MacOS and Linux -Install `git`, `curl` and a version of `python` (between `3.8` and `3.12`) for your distro. +Install `git`, `curl` and a version of `python` (between `3.10` and `3.12`) for your distro. Then, copy paste and run the following script into the terminal of your choice: