12 KiB
תרגום דיבור - התקן IoT וירטואלי
בחלק זה של השיעור, תכתבו קוד לתרגום דיבור בעת המרתו לטקסט באמצעות שירות הדיבור, ולאחר מכן תתרגמו את הטקסט באמצעות שירות התרגום לפני יצירת תגובה מדוברת.
שימוש בשירות הדיבור לתרגום דיבור
שירות הדיבור יכול לקחת דיבור ולהמיר אותו לא רק לטקסט באותה שפה, אלא גם לתרגם את הפלט לשפות אחרות.
משימה - שימוש בשירות הדיבור לתרגום דיבור
-
פתחו את פרויקט
smart-timer
ב-VS Code, וודאו שהסביבה הווירטואלית נטענה בטרמינל. -
הוסיפו את פקודות הייבוא הבאות מתחת לפקודות הייבוא הקיימות:
from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests
פקודות אלו מייבאות מחלקות המשמשות לתרגום דיבור, וספריית
requests
שתשמש לביצוע קריאה לשירות התרגום בהמשך השיעור. -
הטיימר החכם שלכם יוגדר עם שתי שפות - השפה של השרת ששימשה לאימון LUIS (אותה שפה משמשת גם לבניית ההודעות המדוברות למשתמש), והשפה המדוברת על ידי המשתמש. עדכנו את המשתנה
language
לשפה שתדובר על ידי המשתמש, והוסיפו משתנה חדש בשםserver_language
עבור השפה ששימשה לאימון LUIS:language = '<user language>' server_language = '<server language>'
החליפו את
<user language>
בשם האזור של השפה שבה תדברו, לדוגמהfr-FR
עבור צרפתית, אוzn-HK
עבור קנטונזית.החליפו את
<server language>
בשם האזור של השפה ששימשה לאימון LUIS.תוכלו למצוא רשימה של השפות הנתמכות ושמות האזורים שלהן בתיעוד Language and voice support באתר Microsoft Docs.
💁 אם אינכם דוברים מספר שפות, תוכלו להשתמש בשירות כמו Bing Translate או Google Translate כדי לתרגם מהשפה המועדפת עליכם לשפה אחרת. שירותים אלו יכולים גם להשמיע את הטקסט המתורגם. שימו לב שמזהה הדיבור עשוי להתעלם מחלק מהפלט הקולי של המכשיר שלכם, ולכן ייתכן שתצטרכו להשתמש במכשיר נוסף כדי להשמיע את הטקסט המתורגם.
לדוגמה, אם אימנתם את LUIS באנגלית, אך ברצונכם להשתמש בצרפתית כשפת המשתמש, תוכלו לתרגם משפטים כמו "הגדר טיימר של 2 דקות ו-27 שניות" מאנגלית לצרפתית באמצעות Bing Translate, ואז להשתמש בכפתור Listen translation כדי לדבר את התרגום למיקרופון שלכם.
-
החליפו את ההצהרות
recognizer_config
ו-recognizer
עם הבאות:translation_config = SpeechTranslationConfig(subscription=speech_api_key, region=location, speech_recognition_language=language, target_languages=(language, server_language)) recognizer = TranslationRecognizer(translation_config=translation_config)
קוד זה יוצר תצורת תרגום לזיהוי דיבור בשפת המשתמש, ויצירת תרגומים בשפת המשתמש ובשפת השרת. לאחר מכן, הוא משתמש בתצורה זו כדי ליצור מזהה תרגום - מזהה דיבור שיכול לתרגם את הפלט של זיהוי הדיבור לשפות מרובות.
💁 יש לציין את השפה המקורית ב-
target_languages
, אחרת לא תקבלו תרגומים. -
עדכנו את הפונקציה
recognized
, והחליפו את כל תוכן הפונקציה עם הבאות:if args.result.reason == speech.ResultReason.TranslatedSpeech: language_match = next(l for l in args.result.translations if server_language.lower().startswith(l.lower())) text = args.result.translations[language_match] if (len(text) > 0): print(f'Translated text: {text}') message = Message(json.dumps({ 'speech': text })) device_client.send_message(message)
קוד זה בודק אם האירוע של זיהוי הופעל בגלל שדיבור תורגם (אירוע זה יכול להיות מופעל בזמנים אחרים, כמו כאשר הדיבור זוהה אך לא תורגם). אם הדיבור תורגם, הוא מוצא את התרגום במילון
args.result.translations
שמתאים לשפת השרת.מילון
args.result.translations
מקודד לפי חלק השפה של הגדרת האזור, ולא לפי ההגדרה המלאה. לדוגמה, אם תבקשו תרגום ל-fr-FR
עבור צרפתית, המילון יכיל ערך עבורfr
, ולאfr-FR
.הטקסט המתורגם נשלח לאחר מכן ל-IoT Hub.
-
הריצו את הקוד כדי לבדוק את התרגומים. וודאו שהאפליקציה הפונקציונלית שלכם פועלת, ובקשו טיימר בשפת המשתמש, או על ידי דיבור בשפה זו בעצמכם, או באמצעות אפליקציית תרגום.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.
תרגום טקסט באמצעות שירות התרגום
שירות הדיבור אינו תומך בתרגום טקסט חזרה לדיבור, במקום זאת תוכלו להשתמש בשירות התרגום כדי לתרגם את הטקסט. לשירות זה יש ממשק API REST שתוכלו להשתמש בו לתרגום הטקסט.
משימה - שימוש במשאב התרגום לתרגום טקסט
-
הוסיפו את מפתח ה-API של שירות התרגום מתחת ל-
speech_api_key
:translator_api_key = '<key>'
החליפו את
<key>
במפתח ה-API של משאב שירות התרגום שלכם. -
מעל הפונקציה
say
, הגדירו פונקציה בשםtranslate_text
שתתרגם טקסט משפת השרת לשפת המשתמש:def translate_text(text):
-
בתוך הפונקציה הזו, הגדירו את ה-URL והכותרות לקריאת ה-API REST:
url = f'https://api.cognitive.microsofttranslator.com/translate?api-version=3.0' headers = { 'Ocp-Apim-Subscription-Key': translator_api_key, 'Ocp-Apim-Subscription-Region': location, 'Content-type': 'application/json' }
ה-URL עבור API זה אינו תלוי מיקום, במקום זאת המיקום מועבר ככותרת. מפתח ה-API משמש ישירות, ולכן בניגוד לשירות הדיבור אין צורך לקבל אסימון גישה מ-API מנפיק האסימונים.
-
מתחת לכך, הגדירו את הפרמטרים והגוף לקריאה:
params = { 'from': server_language, 'to': language } body = [{ 'text' : text }]
params
מגדיר את הפרמטרים שיש להעביר לקריאת ה-API, ומעביר את השפות המקורית והיעד. קריאה זו תתרגם טקסט בשפהfrom
לשפהto
.body
מכיל את הטקסט לתרגום. זהו מערך, שכן ניתן לתרגם מספר בלוקים של טקסט באותה קריאה. -
בצעו את הקריאה ל-API REST, וקבלו את התגובה:
response = requests.post(url, headers=headers, params=params, json=body)
התגובה שמתקבלת היא מערך JSON, עם פריט אחד שמכיל את התרגומים. פריט זה כולל מערך של תרגומים לכל הפריטים שהועברו בגוף הקריאה.
[ { "translations": [ { "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.", "to": "fr" } ] } ]
-
החזירו את המאפיין
text
מהתרגום הראשון מהפריט הראשון במערך:return response.json()[0]['translations'][0]['text']
-
עדכנו את הפונקציה
say
כדי לתרגם את הטקסט לפני יצירת ה-SSML:print('Original:', text) text = translate_text(text) print('Translated:', text)
קוד זה גם מדפיס את הגרסאות המקוריות והמתורגמות של הטקסט לקונסול.
-
הריצו את הקוד שלכם. וודאו שהאפליקציה הפונקציונלית שלכם פועלת, ובקשו טיימר בשפת המשתמש, או על ידי דיבור בשפה זו בעצמכם, או באמצעות אפליקציית תרגום.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds. Original: 2 minute 27 second timer started. Translated: 2 minute 27 seconde minute a commencé. Original: Times up on your 2 minute 27 second timer. Translated: Chronométrant votre minuterie de 2 minutes 27 secondes.
💁 בשל הדרכים השונות לומר דברים בשפות שונות, ייתכן שתקבלו תרגומים השונים מעט מהדוגמאות שנתתם ל-LUIS. אם זה המקרה, הוסיפו עוד דוגמאות ל-LUIS, אימנו מחדש ואז פרסמו את המודל מחדש.
💁 תוכלו למצוא את הקוד הזה בתיקיית code/virtual-iot-device.
😀 תוכנית הטיימר הרב-לשונית שלכם הייתה הצלחה!
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.