12 KiB
Μετάφραση ομιλίας - Raspberry Pi
Σε αυτό το μέρος του μαθήματος, θα γράψετε κώδικα για να μεταφράσετε κείμενο χρησιμοποιώντας την υπηρεσία μεταφραστή.
Μετατροπή κειμένου σε ομιλία χρησιμοποιώντας την υπηρεσία μεταφραστή
Το REST API της υπηρεσίας ομιλίας δεν υποστηρίζει άμεσες μεταφράσεις. Αντίθετα, μπορείτε να χρησιμοποιήσετε την υπηρεσία Translator για να μεταφράσετε το κείμενο που δημιουργείται από την υπηρεσία μετατροπής ομιλίας σε κείμενο, καθώς και το κείμενο της απάντησης που θα ακουστεί. Αυτή η υπηρεσία διαθέτει REST API που μπορείτε να χρησιμοποιήσετε για να μεταφράσετε το κείμενο.
Εργασία - χρήση του πόρου μεταφραστή για μετάφραση κειμένου
-
Ο έξυπνος χρονοδιακόπτης σας θα έχει ρυθμιστεί σε 2 γλώσσες - τη γλώσσα του διακομιστή που χρησιμοποιήθηκε για την εκπαίδευση του LUIS (η ίδια γλώσσα χρησιμοποιείται επίσης για τη δημιουργία των μηνυμάτων που θα μιλήσουν στον χρήστη) και τη γλώσσα που μιλά ο χρήστης. Ενημερώστε τη μεταβλητή
language
ώστε να είναι η γλώσσα που θα μιλήσει ο χρήστης και προσθέστε μια νέα μεταβλητή που ονομάζεταιserver_language
για τη γλώσσα που χρησιμοποιήθηκε για την εκπαίδευση του LUIS:language = '<user language>' server_language = '<server language>'
Αντικαταστήστε το
<user language>
με το όνομα τοπικής ρύθμισης για τη γλώσσα που θα μιλήσετε, για παράδειγμαfr-FR
για τα Γαλλικά ήzn-HK
για τα Καντονέζικα.Αντικαταστήστε το
<server language>
με το όνομα τοπικής ρύθμισης για τη γλώσσα που χρησιμοποιήθηκε για την εκπαίδευση του LUIS.Μπορείτε να βρείτε μια λίστα με τις υποστηριζόμενες γλώσσες και τα ονόματα τοπικών ρυθμίσεών τους στην τεκμηρίωση υποστήριξης γλωσσών και φωνών στη Microsoft.
💁 Αν δεν μιλάτε πολλές γλώσσες, μπορείτε να χρησιμοποιήσετε μια υπηρεσία όπως Bing Translate ή Google Translate για να μεταφράσετε από την προτιμώμενη γλώσσα σας σε μια άλλη γλώσσα της επιλογής σας. Αυτές οι υπηρεσίες μπορούν επίσης να αναπαράγουν ήχο του μεταφρασμένου κειμένου.
Για παράδειγμα, αν εκπαιδεύσετε το LUIS στα Αγγλικά αλλά θέλετε να χρησιμοποιήσετε τα Γαλλικά ως γλώσσα χρήστη, μπορείτε να μεταφράσετε προτάσεις όπως "set a 2 minute and 27 second timer" από τα Αγγλικά στα Γαλλικά χρησιμοποιώντας το Bing Translate και στη συνέχεια να χρησιμοποιήσετε το κουμπί Listen translation για να μιλήσετε τη μετάφραση στο μικρόφωνό σας.
-
Προσθέστε το κλειδί API του μεταφραστή κάτω από το
speech_api_key
:translator_api_key = '<key>'
Αντικαταστήστε το
<key>
με το κλειδί API για τον πόρο της υπηρεσίας μεταφραστή σας. -
Πάνω από τη συνάρτηση
say
, ορίστε μια συνάρτησηtranslate_text
που θα μεταφράζει κείμενο από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη:def translate_text(text, from_language, to_language):
Οι γλώσσες
from
καιto
περνούν σε αυτή τη συνάρτηση - η εφαρμογή σας πρέπει να μετατρέπει από τη γλώσσα του χρήστη στη γλώσσα του διακομιστή όταν αναγνωρίζει ομιλία και από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη όταν παρέχει προφορική ανατροφοδότηση. -
Μέσα σε αυτή τη συνάρτηση, ορίστε το URL και τις κεφαλίδες για την κλήση του REST API:
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': from_language, 'to': to_language } body = [{ 'text' : text }]
Το
params
ορίζει τις παραμέτρους που θα περάσουν στην κλήση API, περνώντας τις γλώσσεςfrom
καιto
. Αυτή η κλήση θα μεταφράσει το κείμενο από τη γλώσσαfrom
στη γλώσσαto
.Το
body
περιέχει το κείμενο προς μετάφραση. Αυτό είναι ένας πίνακας, καθώς πολλαπλά μπλοκ κειμένου μπορούν να μεταφραστούν στην ίδια κλήση. -
Κάντε την κλήση στο REST API και λάβετε την απάντηση:
response = requests.post(url, headers=headers, params=params, json=body)
Η απάντηση που επιστρέφεται είναι ένας πίνακας JSON, με ένα στοιχείο που περιέχει τις μεταφράσεις. Αυτό το στοιχείο έχει έναν πίνακα για τις μεταφράσεις όλων των στοιχείων που περάστηκαν στο σώμα.
[ { "translations": [ { "text": "Set a 2 minute 27 second timer.", "to": "en" } ] } ]
-
Επιστρέψτε την ιδιότητα
test
από την πρώτη μετάφραση του πρώτου στοιχείου στον πίνακα:return response.json()[0]['translations'][0]['text']
-
Ενημερώστε τον βρόχο
while True
για να μεταφράσει το κείμενο από την κλήσηconvert_speech_to_text
από τη γλώσσα του χρήστη στη γλώσσα του διακομιστή:if len(text) > 0: print('Original:', text) text = translate_text(text, language, server_language) print('Translated:', text) message = Message(json.dumps({ 'speech': text })) device_client.send_message(message)
Αυτός ο κώδικας εκτυπώνει επίσης τις αρχικές και μεταφρασμένες εκδόσεις του κειμένου στην κονσόλα.
-
Ενημερώστε τη συνάρτηση
say
για να μεταφράσει το κείμενο που θα ειπωθεί από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη:def say(text): print('Original:', text) text = translate_text(text, server_language, language) print('Translated:', text) speech = get_speech(text) play_speech(speech)
Αυτός ο κώδικας εκτυπώνει επίσης τις αρχικές και μεταφρασμένες εκδόσεις του κειμένου στην κονσόλα.
-
Εκτελέστε τον κώδικά σας. Βεβαιωθείτε ότι η εφαρμογή λειτουργιών σας εκτελείται και ζητήστε έναν χρονοδιακόπτη στη γλώσσα του χρήστη, είτε μιλώντας αυτή τη γλώσσα είτε χρησιμοποιώντας μια εφαρμογή μετάφρασης.
pi@raspberrypi:~/smart-timer $ python3 app.py Connecting Connected Using voice fr-FR-DeniseNeural Original: Définir une minuterie de 2 minutes et 27 secondes. Translated: 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/pi.
😀 Το πολυγλωσσικό πρόγραμμα χρονοδιακόπτη σας ήταν επιτυχία!
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.