Merge branch 'bugfix#11_koneko' into develop

This commit is contained in:
misyaguziya
2023-06-28 02:04:42 +09:00
4 changed files with 331 additions and 49 deletions

12
VRCT.py
View File

@@ -33,17 +33,17 @@ class App(customtkinter.CTk):
self.FONT_FAMILY = "Yu Gothic UI"
## Translation
self.CHOICE_TRANSLATOR = "DeepL(web)"
self.INPUT_SOURCE_LANG = "JA"
self.INPUT_TARGET_LANG = "EN"
self.OUTPUT_SOURCE_LANG = "EN"
self.OUTPUT_TARGET_LANG = "JA"
self.INPUT_SOURCE_LANG = "Japanese"
self.INPUT_TARGET_LANG = "English"
self.OUTPUT_SOURCE_LANG = "English"
self.OUTPUT_TARGET_LANG = "Japanese"
## Transcription
self.CHOICE_MIC_DEVICE = self.vr.search_default_device()[0]
self.INPUT_MIC_VOICE_LANGUAGE = "ja-JP"
self.INPUT_MIC_VOICE_LANGUAGE = "Japanese Japan"
self.INPUT_MIC_IS_DYNAMIC = False
self.INPUT_MIC_THRESHOLD = 300
self.CHOICE_SPEAKER_DEVICE = self.vr.search_default_device()[1]
self.INPUT_SPEAKER_VOICE_LANGUAGE = "en-US"
self.INPUT_SPEAKER_VOICE_LANGUAGE = "English United States"
self.INPUT_SPEAKER_INTERVAL = 4
## Parameter

282
languages.py Normal file
View File

@@ -0,0 +1,282 @@
recognize_lang = {
"Japanese Japan":"ja-JP",
"English United States":"en-US",
"English United Kingdom":"en-GB",
"Afrikaans South Africa":"af-ZA",
"Arabic Algeria":"ar-DZ",
"Arabic Bahrain":"ar-BH",
"Arabic Egypt":"ar-EG",
"Arabic Israel":"ar-IL",
"Arabic Iraq":"ar-IQ",
"Arabic Jordan":"ar-JO",
"Arabic Kuwait":"ar-KW",
"Arabic Lebanon":"ar-LB",
"Arabic Morocco":"ar-MA",
"Arabic Oman":"ar-OM",
"Arabic Palestinian Territory":"ar-PS",
"Arabic Qatar":"ar-QA",
"Arabic Saudi Arabia":"ar-SA",
"Arabic Tunisia":"ar-TN",
"Arabic UAE":"ar-AE",
"Euskara Spain":"eu-ES",
"Bulgarian Bulgaria":"bg-BG",
"Catalan Spain":"ca-ES",
"Mongolian China (Simp.)":"cmn-Hans-CN",
"Mongolian Hong Kong SAR (Trad.)":"cmn-Hans-HK",
"Mongolian Taiwan (Trad.)":"cmn-Hant-TW",
"Cantonese Hong Kong":"yue-Hant-HK",
"Hrvatska Croatia":"hr_HR",
"Czech Republic":"cs-CZ",
"Danish Denmark":"da-DK",
"English Australia":"en-AU",
"English Canada":"en-CA",
"English India":"en-IN",
"English Ireland":"en-IE",
"English New Zealand":"en-NZ",
"English Philippines":"en-PH",
"English South Africa":"en-ZA",
"Persian Iran":"fa-IR",
"French France":"fr-FR",
"Filipino Philippines":"fil-PH",
"Galician Spain":"gl-ES",
"German Germany":"de-DE",
"Greek Greece":"el-GR",
"Finnish Finland":"fi-FI",
"Hebrew Israel":"he-IL",
"Hindi India":"hi-IN",
"Hungarian Hungary":"hu-HU",
"Indonesian Indonesia":"id-ID",
"Icelandic Iceland":"is-IS",
"Italian Italy":"it-IT",
"Italian Switzerland":"it-CH",
"Korean Korea":"ko-KR",
"Lithuanian Lithuania":"lt-LT",
"Malay Malaysia":"ms-MY",
"Nederlands Netherlands":"nl-NL",
"Bokmål Norway":"nb-NO",
"Polski Poland":"pl-PL",
"Português Brazil":"pt-BR",
"Português Portugal":"pt-PT",
"limba română Romania":"ro-RO",
"Russian Russia":"ru-RU",
"Serbian Serbia":"sr-RS",
"Slovak Slovakia":"sk-SK",
"Slovenian Slovenia":"sl-SI",
"Spanish Argentina":"es-AR",
"Spanish Bolivia":"es-BO",
"Spanish Chile":"es-CL",
"Spanish Colombia":"es-CO",
"Spanish Costa Rica":"es-CR",
"Spanish Dominican Republic":"es-DO",
"Spanish Ecuador":"es-EC",
"Spanish El Salvador":"es-SV",
"Spanish Guatemala":"es-GT",
"Spanish Honduras":"es-HN",
"Spanish México":"es-MX",
"Spanish Nicaragua":"es-NI",
"Spanish Panamá":"es-PA",
"Spanish Paraguay":"es-PY",
"Spanish Perú":"es-PE",
"Spanish Puerto Rico":"es-PR",
"Spanish Spain":"es-ES",
"Spanish Uruguay":"es-UY",
"Spanish United States":"es-US",
"Spanish Venezuela":"es-VE",
"Swedish Sweden":"sv-SE",
"Thai Thailand":"th-TH",
"Turkish Turkey":"tr-TR",
"Ukrainian Ukraine":"uk-UA",
"Vietnamese Viet Nam":"vi-VN",
"Zulu South Africa":"zu-ZA"
}
deepl_lang = {
"Japanese":"ja",
"English American":"en-US",
"English British":"en-GB",
"Bulgarian":"bg",
"Czech":"cs",
"Danish":"da",
"German":"de",
"Greek":"el",
"English":"en",
"Spanish":"es",
"Estonian":"et",
"Finnish":"fi",
"French":"fr",
"Hungarian":"hu",
"Indonesian":"id",
"Italian":"it",
"Korean":"ko",
"Lithuanian":"lt",
"Latvian":"lv",
"Norwegian":"nb",
"Dutch":"nl",
"Polish":"pl",
"Portuguese":"pt",
"Portuguese Brazilian":"pt-BR",
"Portuguese European":"pt-PT",
"Romanian":"ro",
"Russian":"ru",
"Slovak":"sk",
"Slovenian":"sl",
"Swedish":"sv",
"Turkish":"tr",
"Ukrainian":"uk",
"Chinese":"zh"
}
deepl_translate_lang = {
"Japanese":"JA",
"English":"EN",
"Bulgarian":"BG",
"Chinese":"ZH",
"Czech":"CS",
"Danish":"DA",
"Dutch":"NL",
"Estonian":"ET",
"Finnish":"FI",
"French":"FR",
"German":"DE",
"Greek":"EL",
"Hungarian":"HU",
"Italian":"IT",
"Latvian":"LV",
"Lithuanian":"LT",
"Polish":"PL",
"Portuguese":"PT",
"Romanian":"RO",
"Russian":"RU",
"Slovak":"SK",
"Slovenian":"SL",
"Spanish":"ES",
"Swedish":"SV"
}
translators_bing_lang = {
"japanese":"ja",
"english":"en",
"chinese":"zh",
"arabic":"ar",
"russian":"ru",
"french":"fr",
"german":"de",
"spanish":"es",
"portuguese":"pt",
"italian":"it",
"korean":"ko",
"greek":"el",
"dutch":"nl",
"hindi":"hi",
"turkish":"tr",
"malay":"ms",
"thai":"th",
"vietnamese":"vi",
"indonesian":"id",
"hebrew":"he",
"polish":"pl",
"czech":"cs",
"hungarian":"hu",
"estonian":"et",
"bulgarian":"bg",
"danish":"da",
"finnish":"fi",
"romanian":"ro",
"swedish":"sv",
"slovenian":"sl",
"persian/farsi":"fa",
"bosnian":"bs",
"serbian":"sr",
"fijian":"fj",
"filipino":"tl",
"haitiancreole":"ht",
"catalan":"ca",
"croatian":"hr",
"latvian":"lv",
"lithuanian":"lt",
"urdu":"ur",
"ukrainian":"uk",
"welsh":"cy",
"tahiti":"ty",
"tongan":"to",
"swahili":"sw",
"samoan":"sm",
"slovak":"sk",
"afrikaans":"af",
"norwegian":"no",
"bengali":"bn",
"malagasy":"mg",
"maltese":"mt",
"queretaro otomi":"otq",
"klingon/tlhingan hol":"tlh",
"gujarati":"gu",
"tamil":"ta",
"telugu":"te",
"punjabi":"pa",
"irish":"ga"
}
translators_google_lang = {
"japanese":"ja",
"english":"en",
"chinese":"zh",
"arabic":"ar",
"russian":"ru",
"french":"fr",
"german":"de",
"spanish":"es",
"portuguese":"pt",
"italian":"it",
"korean":"ko",
"greek":"el",
"dutch":"nl",
"hindi":"hi",
"turkish":"tr",
"malay":"ms",
"thai":"th",
"vietnamese":"vi",
"indonesian":"id",
"hebrew":"he",
"polish":"pl",
"mongolian":"mn",
"czech":"cs",
"hungarian":"hu",
"estonian":"et",
"bulgarian":"bg",
"danish":"da",
"finnish":"fi",
"romanian":"ro",
"swedish":"sv",
"slovenian":"sl",
"persian/farsi":"fa",
"bosnian":"bs",
"serbian":"sr",
"filipino":"tl",
"haitiancreole":"ht",
"catalan":"ca",
"croatian":"hr",
"latvian":"lv",
"lithuanian":"lt",
"urdu":"ur",
"ukrainian":"uk",
"welsh":"cy",
"swahili":"sw",
"samoan":"sm",
"slovak":"sk",
"afrikaans":"af",
"norwegian":"no",
"bengali":"bn",
"malagasy":"mg",
"maltese":"mt",
"gujarati":"gu",
"tamil":"ta",
"telugu":"te",
"punjabi":"pa",
"amharic":"am",
"azerbaijani":"az",
"belarusian":"be",
"cebuano":"ceb",
"esperanto":"eo",
"basque":"eu",
"irish":"ga"
}

View File

@@ -1,6 +1,7 @@
import queue
import speech_recognition as sr
import pyaudiowpatch as pyaudio
import languages
# VoiceRecognizer
class VoiceRecognizer():
@@ -8,25 +9,17 @@ class VoiceRecognizer():
self.r = sr.Recognizer()
self.p = pyaudio.PyAudio()
self.languages = [
"ja-JP","en-US","en-GB","af-ZA","ar-DZ","ar-BH","ar-EG","ar-IL","ar-IQ","ar-JO","ar-KW","ar-LB","ar-MA",
"ar-OM","ar-PS","ar-QA","ar-SA","ar-TN","ar-AE","eu-ES","bg-BG","ca-ES","cmn-Hans-CN","cmn-Hans-HK",
"cmn-Hant-TW","yue-Hant-HK","hr_HR","cs-CZ","da-DK","en-AU","en-CA","en-IN","en-IE","en-NZ","en-PH",
"en-ZA","fa-IR","fr-FR","fil-PH","gl-ES","de-DE","el-GR","fi-FI","he-IL","hi-IN","hu-HU","id-ID","is-IS",
"it-IT","it-CH","ko-KR","lt-LT","ms-MY","nl-NL","nb-NO","pl-PL","pt-BR","pt-PT","ro-RO","ru-RU","sr-RS",
"sk-SK","sl-SI","es-AR","es-BO","es-CL","es-CO","es-CR","es-DO","es-EC","es-SV","es-GT","es-HN","es-MX",
"es-NI","es-PA","es-PY","es-PE","es-PR","es-ES","es-UY","es-US","es-VE","sv-SE","th-TH","tr-TR","uk-UA",
"vi-VN","zu-ZA"
]
self.dict_languages = languages.recognize_lang
self.languages = list(self.dict_languages.keys())
self.mic_device_name = None
self.mic_threshold = 50
self.mic_is_dynamic = False
self.mic_language = "ja-JP"
self.mic_language = "Japanese Japan"
self.mic_queue = queue.Queue(10)
self.spk_device = None
self.spk_interval = 3
self.spk_language = "ja-JP"
self.spk_language = "Japanese Japan"
self.spk_stream = None
self.spk_queue = queue.Queue(10)
@@ -77,7 +70,7 @@ class VoiceRecognizer():
break
return name_mic, name_spk
def set_mic(self, device_name, threshold=50, is_dynamic=False, language="ja-JP"):
def set_mic(self, device_name, threshold=50, is_dynamic=False, language="Japanese Japan"):
input_device_list = self.search_input_device()
self.mic_device_name = [device["index"] for device in input_device_list if device["name"] == device_name][0]
self.mic_threshold = threshold
@@ -101,12 +94,12 @@ class VoiceRecognizer():
def recognize_mic(self):
try:
audio = self.mic_queue.get()
text = self.r.recognize_google(audio, language=self.mic_language)
text = self.r.recognize_google(audio, language=self.dict_languages[self.mic_language])
except:
text = ""
return text
def set_spk(self, device_name, interval, language):
def set_spk(self, device_name, interval=4, language="Japanese Japan"):
output_device_list = self.search_output_device()
self.spk_device = [device for device in output_device_list if device["name"] == device_name][0]
self.spk_interval = interval
@@ -147,7 +140,7 @@ class VoiceRecognizer():
try:
in_data = self.spk_queue.get()
audio_data = sr.AudioData(in_data, int(self.spk_device["defaultSampleRate"]), self.spk_interval)
text = self.r.recognize_google(audio_data, language=self.spk_language)
text = self.r.recognize_google(audio_data, language=self.dict_languages[self.spk_language])
except:
text = ""
return text

View File

@@ -1,6 +1,7 @@
import deepl
import deepl_translate
import translators as ts
import languages
# Translator
class Translator():
@@ -11,30 +12,18 @@ class Translator():
"Google(web)": False,
"Bing(web)": False,
}
self.dict_languages = {}
self.dict_languages["DeepL(web)"] = languages.deepl_translate_lang
self.dict_languages["DeepL(auth)"] = languages.deepl_lang
self.dict_languages["Google(web)"] = languages.translators_google_lang
self.dict_languages["Bing(web)"] = languages.translators_bing_lang
self.languages = {}
self.languages["DeepL(web)"] = [
"JA","EN","BG","ZH","CS","DA","NL","ET","FI","FR","DE","EL","HU","IT",
"LV","LT","PL","PT","RO","RU","SK","SL","ES","SV",
]
self.languages["DeepL(auth)"] = [
"JA","EN-US","EN-GB","BG","CS","DA","DE","EL","ES","ET","FI","FR","HU",
"ID","IT","KO","LT","LV","NB","NL","PL","PT","PT-BR","PT-PT","RO","RU",
"SK","SL","SV","TR","UK","ZH",
]
self.languages["Google(web)"] = [
"ja","en","zh","ar","ru","fr","de","es","pt","it","ko","el","nl","hi",
"tr","ms","th","vi","id","he","pl","mn","cs","hu","et","bg","da","fi",
"ro","sv","sl","fa","bs","sr","tl","ht","ca","hr","lv","lt","ur","uk",
"cy","sw","sm","sk","af","no","bn","mg","mt","gu","ta","te","pa","am",
"az","be","ceb","eo","eu","ga"
]
self.languages["Bing(web)"] = [
"ja","en","zh","ar","ru","fr","de","es","pt","it","ko","el","nl","hi",
"tr","ms","th","vi","id","he","pl","cs","hu","et","bg","da","fi","ro",
"sv","sl","fa","bs","sr","fj","tl","ht","ca","hr","lv","lt","ur","uk",
"cy","ty","to","sw","sm","sk","af","no","bn","mg","mt","otq","tlh","gu",
"ta","te","pa","ga"
]
self.languages["DeepL(web)"] = list(self.dict_languages["DeepL(web)"].keys())
self.languages["DeepL(auth)"] = list(self.dict_languages["DeepL(auth)"].keys())
self.languages["Google(web)"] = list(self.dict_languages["Google(web)"].keys())
self.languages["Bing(web)"] = list(self.dict_languages["Bing(web)"].keys())
self.deepl_client = None
def authentication(self, translator_name, authkey=None):
@@ -62,13 +51,31 @@ class Translator():
result = False
try:
if translator_name == "DeepL(web)":
result = deepl_translate.translate(source_language=source_language, target_language=target_language, text=message)
result = deepl_translate.translate(
source_language=self.dict_languages["DeepL(web)"][source_language],
target_language=self.dict_languages["DeepL(web)"][target_language],
text=message
)
elif translator_name == "DeepL(auth)":
result = self.deepl_client.translate_text(message, source_lang=source_language, target_lang=target_language).text
result = self.deepl_client.translate_text(
message,
source_lang=self.dict_languages["DeepL(auth)"][source_language],
target_lang=self.dict_languages["DeepL(auth)"][target_language],
).text
elif translator_name == "Google(web)":
result = ts.translate_text(query_text=message, translator="google", from_language=source_language, to_language=target_language)
result = ts.translate_text(
query_text=message,
translator="google",
from_language=self.dict_languages["Google(web)"][source_language],
to_language=self.dict_languages["Google(web)"][target_language],
)
elif translator_name == "Bing(web)":
result = ts.translate_text(query_text=message, translator="bing", from_language=source_language, to_language=target_language)
result = ts.translate_text(
query_text=message,
translator="bing",
from_language=self.dict_languages["Bing(web)"][source_language],
to_language=self.dict_languages["Bing(web)"][target_language],
)
except:
pass
return result