You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/el/6-consumer/lessons/4-multiple-language-support/pi-translate-speech.md

12 KiB

Μετάφραση ομιλίας - Raspberry Pi

Σε αυτό το μέρος του μαθήματος, θα γράψετε κώδικα για να μεταφράσετε κείμενο χρησιμοποιώντας την υπηρεσία μεταφραστή.

Μετατροπή κειμένου σε ομιλία χρησιμοποιώντας την υπηρεσία μεταφραστή

Το REST API της υπηρεσίας ομιλίας δεν υποστηρίζει άμεσες μεταφράσεις. Αντίθετα, μπορείτε να χρησιμοποιήσετε την υπηρεσία Translator για να μεταφράσετε το κείμενο που δημιουργείται από την υπηρεσία μετατροπής ομιλίας σε κείμενο, καθώς και το κείμενο της απάντησης που θα ακουστεί. Αυτή η υπηρεσία διαθέτει REST API που μπορείτε να χρησιμοποιήσετε για να μεταφράσετε το κείμενο.

Εργασία - χρήση του πόρου μεταφραστή για μετάφραση κειμένου

  1. Ο έξυπνος χρονοδιακόπτης σας θα έχει ρυθμιστεί σε 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 για να μιλήσετε τη μετάφραση στο μικρόφωνό σας.

    Το κουμπί listen translation στο Bing Translate

  2. Προσθέστε το κλειδί API του μεταφραστή κάτω από το speech_api_key:

    translator_api_key = '<key>'
    

    Αντικαταστήστε το <key> με το κλειδί API για τον πόρο της υπηρεσίας μεταφραστή σας.

  3. Πάνω από τη συνάρτηση say, ορίστε μια συνάρτηση translate_text που θα μεταφράζει κείμενο από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη:

    def translate_text(text, from_language, to_language):
    

    Οι γλώσσες from και to περνούν σε αυτή τη συνάρτηση - η εφαρμογή σας πρέπει να μετατρέπει από τη γλώσσα του χρήστη στη γλώσσα του διακομιστή όταν αναγνωρίζει ομιλία και από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη όταν παρέχει προφορική ανατροφοδότηση.

  4. Μέσα σε αυτή τη συνάρτηση, ορίστε το 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 έκδοσης διακριτικών.

  5. Κάτω από αυτό, ορίστε τις παραμέτρους και το σώμα για την κλήση:

    params = {
        'from': from_language,
        'to': to_language
    }
    
    body = [{
        'text' : text
    }]
    

    Το params ορίζει τις παραμέτρους που θα περάσουν στην κλήση API, περνώντας τις γλώσσες from και to. Αυτή η κλήση θα μεταφράσει το κείμενο από τη γλώσσα from στη γλώσσα to.

    Το body περιέχει το κείμενο προς μετάφραση. Αυτό είναι ένας πίνακας, καθώς πολλαπλά μπλοκ κειμένου μπορούν να μεταφραστούν στην ίδια κλήση.

  6. Κάντε την κλήση στο REST API και λάβετε την απάντηση:

    response = requests.post(url, headers=headers, params=params, json=body)
    

    Η απάντηση που επιστρέφεται είναι ένας πίνακας JSON, με ένα στοιχείο που περιέχει τις μεταφράσεις. Αυτό το στοιχείο έχει έναν πίνακα για τις μεταφράσεις όλων των στοιχείων που περάστηκαν στο σώμα.

    [
        {
            "translations": [
                {
                    "text": "Set a 2 minute 27 second timer.",
                    "to": "en"
                }
            ]
        }
    ]
    
  7. Επιστρέψτε την ιδιότητα test από την πρώτη μετάφραση του πρώτου στοιχείου στον πίνακα:

    return response.json()[0]['translations'][0]['text']
    
  8. Ενημερώστε τον βρόχο 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)
    

    Αυτός ο κώδικας εκτυπώνει επίσης τις αρχικές και μεταφρασμένες εκδόσεις του κειμένου στην κονσόλα.

  9. Ενημερώστε τη συνάρτηση say για να μεταφράσει το κείμενο που θα ειπωθεί από τη γλώσσα του διακομιστή στη γλώσσα του χρήστη:

    def say(text):
        print('Original:', text)
        text = translate_text(text, server_language, language)
        print('Translated:', text)
        speech = get_speech(text)
        play_speech(speech)
    

    Αυτός ο κώδικας εκτυπώνει επίσης τις αρχικές και μεταφρασμένες εκδόσεις του κειμένου στην κονσόλα.

  10. Εκτελέστε τον κώδικά σας. Βεβαιωθείτε ότι η εφαρμογή λειτουργιών σας εκτελείται και ζητήστε έναν χρονοδιακόπτη στη γλώσσα του χρήστη, είτε μιλώντας αυτή τη γλώσσα είτε χρησιμοποιώντας μια εφαρμογή μετάφρασης.

    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. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.