Lassen Sie sprechen. Yandex-Bericht

Die Standardbibliotheken für Spracherkennung und Text-to-Speech in iOS bieten viele Möglichkeiten. Aus dem BerichtVolkovRomanSie lernen, wie Sie Ihrer Anwendung beibringen, Text auszusprechen und die Sprachausgabe mit minimalem Code anzupassen. Roma überprüfte die Spracherkennungs-API, ihre Einschränkungen und Funktionen, den Lebenszyklus einer Erkennungsanforderung und die Arbeitsmethoden im Offline-Modus. UX-Beispiele, Problemumgehungen vorhandener Fehler und Funktionen zum Arbeiten mit einer Audiositzung warten auf Sie.





- Hallo allerseits, mein Name ist Roman Volkov. Heute werden wir darüber sprechen, wie Sie Ihrer mobilen Anwendung die Kommunikation mit Ihren Benutzern beibringen können.



Bevor wir anfangen, kurz über mich. Vor der iOS-Entwicklung war ich an der Entwicklung von Integrationssystemen im Bankensektor und der Entwicklung von Analysesystemen im Ölsektor beteiligt. Ich weiß aus erster Hand, was der PCI-DSS-Standard ist und wie Ingenieure beispielsweise verstehen, was während des Bohrens in einem Bohrloch passiert, nur auf der Grundlage von Temperaturdaten.



Seit 2016 entwickle ich iOS. Ich habe Erfahrung sowohl in freiberuflicher als auch in Fernarbeit, Erfahrung in der Teilnahme am Start mehrerer Startups. Ich habe auch eine Markenanwendung für Rolls Royce gemacht.



2018 trat ich dem Prisma-Team bei, entwickelte die Prisma-App und war an der Entwicklung und Einführung von Lensa Photo Editor beteiligt. 2019 wechselte ich als iOS-Entwickler zu Yandex. Seit 2020 leite ich die mobile Entwicklungsgruppe Yandex.Translator. Die Übersetzer-App ist nicht mehr nur eine Anwendung zum Arbeiten mit Text. Wir haben viele coole Funktionen wie Fotoübersetzung, Dialogmodus, Spracheingabe, Sprachausgabe und mehr.



Als ich gerade anfing, mich mit dem Thema Sound in iOS zu beschäftigen, fand ich kein kompaktes Material, das die Arbeit mit einer Audiositzung, mit Synthese und mit Spracherkennung beinhalten würde. Deshalb habe ich beschlossen, diesen Vortrag zu halten.







Es wird in vier Teilen sein. Zunächst werden wir darüber sprechen, was eine Audiositzung ist, wie man richtig damit arbeitet und wie sich dies auf den Betrieb Ihrer Anwendung auswirkt. Als nächstes gehen wir zur Sprachsynthese über. Lassen Sie uns überlegen, wie Sie Text in wenigen Codezeilen direkt am Telefon an Personen senden können. Als nächstes wechseln wir zur Spracherkennung. Lassen Sie uns abschließend sehen, wie all diese Funktionen dem Benutzer im Offline-Modus zur Verfügung gestellt werden können und welche Funktionen er bietet.







Es gibt einige Optionen für die Verwendung von Sprachausgabe und Spracherkennung. Mein Favorit ist das Konvertieren der Audio-Nachrichten anderer Leute in Text. Und ich bin froh, dass zum Beispiel das Yandex Messenger-Team eine solche Funktion entwickelt hat. Hoffentlich holen andere Boten auf und tun es auch zu Hause.



Wir fahren reibungslos mit dem ersten Teil des Berichts fort, dies ist AVAudioSession.







Eine Audiositzung ist eine Schicht zwischen unserer Anwendung und dem Betriebssystem. Genauer gesagt zwischen Ihrer Anwendung und der Hardware für die Arbeit mit Sound: Lautsprecher und Mikrofon. Unter iOS, watchOS und tvOS verfügt jede App über eine vorkonfigurierte Standard-Audiositzung. Diese Voreinstellung variiert von Betriebssystem zu Betriebssystem.



Speziell für iOS unterstützt die Audiositzung standardmäßig die Audiowiedergabe, verbietet jedoch jegliche Aufnahme. Wenn der Schalter für den Silent-Modus auf den "Silent" -Modus eingestellt ist, werden absolut alle Sounds in Ihrer Anwendung stummgeschaltet. Und drittens verhindert das Sperren des Geräts, dass alle Sounds in Ihrer Anwendung abgespielt werden.







Das Einrichten einer Audiositzung besteht aus drei Punkten: Hier können Sie zwischen Kategorie, Modus und zusätzlichen Optionen wählen. Wir werden jeden Punkt einzeln betrachten.



Beginnen wir mit der Kategorie. Eine Kategorie ist eine Reihe von Einstellungen für das grundlegende Verhalten einer Audiositzung. Eine Kategorie ist eine Reihe von Parametern, mit denen das Betriebssystem so gut wie möglich mit dem Namen dieser Kategorie übereinstimmt. Daher empfiehlt Apple, eine Kategorie für Ihre Anwendung auszuwählen, die der verfügbaren Kategorie so nahe wie möglich kommt. Derzeit sind in iOS 13 sechs Kategorien verfügbar. Es gibt auch eine siebte Kategorie, die jedoch als veraltet markiert ist und nicht verwendet werden sollte.



In diesem Vortrag werden drei Kategorien betrachtet: Wiedergabe, Aufnahme und WiedergabeAndRecord. Mit diesem Modus können Sie die Funktionen der festgelegten Kategorie ergänzen, da einige Modi nur für bestimmte Kategorien verfügbar sind.







Auf der Folie sehen Sie beispielsweise den Filmwiedergabemodus, der nur für die Wiedergabekategorie festgelegt werden kann.



Durch Einstellen des MoviePlayback-Modus kann die Audiositzung die Wiedergabe-Klangqualität für die eingebauten Lautsprecher und die Kopfhörer automatisch verbessern. In diesem Vortrag verwenden wir nur den "Standard" -Modus. Ich möchte jedoch darauf hinweisen, dass der Standardmodus verwendet wird, wenn Sie ein inkompatibles Paar aus Kategorie und Modus verwenden.







Der dritte ist Optionen, Punkteinstellungen für die Audiositzung. Sie können beispielsweise anpassen, wie Audio aus Ihrer App mit Audio aus anderen Apps gemischt wird, und die richtige Deaktivierung der Audiositzung einrichten, damit andere Apps wissen, dass Ihre App nicht mehr mit Audio arbeitet.







Zunächst werden wir die Kategorie für die Wiedergabe festlegen, nämlich die Wiedergabe. Dies ist eine der Nur-Audio-Kategorien. Wenn es eingestellt ist, unterbricht die Aktivierung der Audiositzung andere wiedergegebene Audiodaten, z. B. von anderen Anwendungen.



Es ist auch wichtig, dass der Ton auch dann wiedergegeben wird, wenn der Stummschalter auf Stumm geschaltet ist.



Es gibt auch eine Option zum Abspielen im Hintergrundstatus für diese Kategorie. Dafür muss in Ihrer Anwendung jedoch Audio, AirPlay und Bild in Bild aktiviert sein.



Schauen wir uns zwei Optionen an, die auf der Folie sichtbar sind. Der erste ist mixWithOthers. Wenn Sie die Audiositzung mit dieser Option aktivieren, wird die Wiedergabe von Ton in Ihrer Anwendung mit dem aktuell wiedergegebenen Ton, z. B. mit Musik, mit einer Lautstärke gemischt. Wenn Sie jedoch möchten, dass Ihr Sound in Bezug auf die Lautstärke über die aktuelle Wiedergabe hinausgeht, können Sie die Option duckOthers verwenden. Es verringert die Lautstärke des im Hintergrund wiedergegebenen Sounds und gibt ihn zurück, wenn der Sound in Ihrer Anwendung beendet ist.



Dies kann beispielsweise in Navigationsanwendungen beobachtet werden: Bei der Routenansage wird das, was Sie gerade hören, stummgeschaltet, die Ansage abgespielt und dann kehrt alles in den ursprünglichen Zustand zurück.







Betrachten wir die Option, eine Audiositzung für die Erkennung über ein Mikrofon einzurichten. In der Kategorie "Aufnahme" werden alle wiedergegebenen Audiodaten stummgeschaltet, während eine Audiositzung mit dieser Kategorie in der Anwendung aktiv ist. Die Aufzeichnung kann keine Systemtöne wie Anrufe oder Alarme stummschalten - im Allgemeinen Standardtöne mit höherer Priorität.



Sie können auch die Option allowBluetoothA2DP hinzufügen. Auf diese Weise können Sie Headsets wie AirPods verwenden, um Ton von einem Mikrofon aufzunehmen und Ton darin abzuspielen. Hierfür gibt es eine ältere Option, die genau wie allowBluetooth klingt, aber die Klangqualität stark beeinträchtigt.



Früher haben wir die alte Option verwendet, und es gab Beschwerden von Benutzern, dass sie mit der Qualität des abgespielten und aufgenommenen Sounds in der Anwendung nicht zufrieden waren. Wir haben die Option geändert, alles wurde besser.



Wenn Sie gleichzeitig Spracherkennung und Sprachsynthese verwenden möchten, verwenden Sie die Kategorie playAndRecord. Innerhalb der aktivierten Audiositzung können Sie dann sowohl die Aufnahme als auch die Wiedergabe von Ton verwenden.



Die Option notifyOthersOnDeactivation sollte separat betrachtet werden. Es wird in der Methode zum Aktivieren der Audiositzung verwendet. Warum ist es so wichtig?







Wenn die Audiositzung mit dieser Option deaktiviert wurde, erhalten andere Anwendungen die Identifikation AVAudioSessionInterruptionNotification mit dem Parameter AVAudioSessionInterruptionTypeEnded mit dem Parameter, dass die Unterbrechung ihrer Audiositzung beendet wurde und sie mit dem Audio weiterarbeiten können, das vor dem Unterbrechen gestartet wurde.



Dieses Szenario ist möglich, wenn Sie die Wiedergabekategorie in einer Anwendung ohne die Option mixWithOthers verwenden, da Sie sonst den Sound einer anderen Anwendung nicht unterbrechen und Ihr Audio einfach mit einer anderen Anwendung gemischt wird.



Wenn Sie diese Option verwenden und die Änderung korrekt behandeln, können Sie Benutzern eine komfortable Benutzererfahrung bei der Arbeit mit Ihrer Anwendung bieten.







Auf der Folie sehen Sie ein Beispiel für die ordnungsgemäße Behandlung der Benachrichtigung, dass Ihre Anwendung von einer anderen innerhalb der Audiositzung unterbrochen wurde, und die Situation, in der die Unterbrechung beendet wurde. Das heißt, wir abonnieren eine bestimmte Benachrichtigung und möglicherweise zwei Arten: Wenn die Unterbrechung gerade erst begonnen hat und wenn sie endet.



Im ersten Fall können Sie den Status speichern und im zweiten Fall können Sie den Sound weiter abspielen, der von einer anderen Anwendung unterbrochen wurde.



Hier ist ein Beispiel, wie dies funktionieren könnte:



Das Video wird ab dem Moment



abgespielt, in dem das Beispiel gezeigt wird. In diesem Beispiel wurde die Musik in einer anderen Anwendung abgespielt, nämlich in VLC. Dann habe ich die Sprachausgabe in unserer Anwendung gestartet. Die Musik wurde unterbrochen, die synthetisierte Sprache wurde abgespielt, dann wurde die Wiedergabe der Musik automatisch fortgesetzt.



Ich möchte darauf hinweisen, dass nicht alle Anwendungen die Situation richtig behandeln, wenn ihr Sound unterbrochen wird. Beispielsweise setzen einige beliebte Instant Messenger die Tonwiedergabe nicht fort.







Fassen wir zusammen. Wir haben das Prinzip der Audiositzung analysiert. Wir haben die Möglichkeiten zur Konfiguration der Audiositzung gemäß den Anforderungen Ihrer Anwendungen untersucht und gelernt, wie Sie die Audiositzung für den Benutzer bequem aktivieren und deaktivieren können.



Mach weiter. Sprachsynthese.







Die Folie zeigt ein Diagramm der Klassen, die am Sprachsynthesevorgang beteiligt sind. Die Hauptklassen sind AVSpeechSynthesiser, AVSpeechUtterance und AVSpeechSynthesisVoice mit ihren Einstellungen.



Unabhängig davon stelle ich fest, dass es ein AVSpeechSynthesizerDelegate gibt, mit dem Sie Benachrichtigungen über den Lebenszyklus der gesamten Anforderung erhalten können. Da der Ton des Textes den Ton wiedergibt, ist die zuvor diskutierte AVAudioSession hier eine implizite Abhängigkeit.



Sie können eine Erkennungsanforderung stellen, ohne eine Audiositzung einzurichten. Für jede Produktionsanwendung ist es jedoch wichtig zu verstehen, wie sie eingerichtet wird. Wir haben früher darüber gesprochen.







Das kürzeste Beispiel dafür, wie Sie schnell eine Sprachsyntheseanforderung stellen können. Sie müssen ein Objekt der AVSpeechUtterance-Klasse erstellen, in dem Sie den zu sprechenden Text, die gewünschte Stimme und Sprache angeben. Wenn Sie beim Erstellen einer Stimme kein Sprachgebietsschema angeben, wird das Standardgebietsschema Ihres Telefons verwendet. In den nächsten Folien werden wir jedoch über die Auswahl der Stimmen und deren Verwendung sprechen.



Als Nächstes erstellen Sie ein Objekt der AVSpeechSynthesizer-Klasse und rufen die speak-Methode auf. Alle. Danach wird der Text synthetisiert und abgespielt, Sie hören das Ergebnis.



Tatsächlich ist dies jedoch nur der Anfang. Die Sprachsynthese bietet viel mehr Möglichkeiten, über die wir jetzt sprechen werden.







Zunächst können Sie die Geschwindigkeit beim Empfang von Ton einstellen. Die Geschwindigkeit wird als reelle Zahl im Bereich von Null bis Eins angegeben. Die tatsächliche Rate reicht von null bis eins, wenn Sie die Rate-Eigenschaft auf einen Bereich von 0 bis 0,5 einstellen.



Wenn Sie den Ratenwert im Bereich von 0,5 bis 1 einstellen, ändert sich die Rate proportional in Werten von 1X bis 4X.



Ein Beispiel dafür, wie Sie schnell arbeiten können.







In AVFoundation gibt es einen konstanten AVSpeechUtteranceDefault, der tatsächlich 0,5 beträgt, was der normalen Geschwindigkeit der Audiowiedergabe entspricht.



Sie können auch eine Geschwindigkeit angeben, die halb so hoch ist wie die übliche Geschwindigkeit. Sie müssen einen Wert von 0,25 angeben. Wenn Sie 0,75 angeben, wird die Geschwindigkeit um das 2,5-fache der normalen Geschwindigkeit erhöht. Der Einfachheit halber gibt es auch Konstanten für die minimale und maximale Geschwindigkeit.



Ich werde jetzt einige Beispiele spielen:



Das Video wird ab dem Moment abgespielt, in dem das Beispiel gezeigt wird.



Dies war ein Beispiel dafür, wie ein Macintosh bei einer Apple-Präsentation zum ersten Mal mit seiner eigenen Stimme sprach. Und das war ein Beispiel für eine normale synthetisierte Sprachgeschwindigkeit.





Dies ist 2 mal langsamer.





Das ist 2,5 mal schneller.



Separat habe ich mit den letzten Zeilen die Eigenschaften preUtteranceDelay und postUtteranceDelay hervorgehoben. Dies ist die Verzögerung, bevor der Sound abgespielt wird, und die Verzögerung, nachdem er abgespielt wurde. Es ist praktisch, wenn Sie Ihre Anwendung mit dem Ton anderer Anwendungen mischen und möchten, dass die Lautstärke nach einer Weile abnimmt und Sie Ihr Ergebnis verlieren. Dann warteten sie noch einige Zeit und erst danach kehrte das Volume in einer anderen Anwendung an seine ursprüngliche Position zurück.







Sehen wir uns den nächsten Parameter an - die Sprachauswahl. Stimmen für die Sprachsynthese werden hauptsächlich nach Gebietsschema, Sprache und Qualität unterteilt. AVFoundation bietet verschiedene Möglichkeiten zum Erstellen oder Abrufen eines AVSpeechSynthesisVoice-Objekts. Der erste ist per Sprachausweis. Jede Stimme hat ihre eigene eindeutige ID. Eine Liste aller verfügbaren Stimmen finden Sie, indem Sie auf die statische SpeechVoice-Eigenschaft zugreifen. Das Erhalten dieser Eigenschaft hat einige Besonderheiten, wir werden weiter darüber sprechen.



Es ist zu beachten, dass der Konstruktor "no" zurückgibt, wenn Sie dem Konstruktor einen ungültigen Bezeichner übergeben.



Die zweite Möglichkeit besteht darin, es anhand des Sprach- oder Gebietsschemacodes abzurufen. Ich möchte auch darauf hinweisen, dass Apple sagt, dass Siri-Stimmen nicht verfügbar sind, aber dies ist nicht ganz richtig: Wir haben es geschafft, die IDs einiger der Stimmen zu erhalten, die in Siri auf einigen Geräten verwendet werden. Vielleicht ist das ein Fehler.



Stimmen haben zwei Eigenschaften - Standard und verbessert. Für einige Stimmen können Sie eine verbesserte Version herunterladen. Wir werden im letzten Abschnitt darüber sprechen. Wir werden diskutieren, wie Sie die erforderlichen Stimmen herunterladen können.







Ein Beispiel, wie Sie eine bestimmte Stimme auswählen können. Der erste Weg - durch eine bestimmte Kennung, der zweite - durch die Zeile, die den Sprachcode angibt, der dritte - durch ein bestimmtes Gebietsschema.



Jetzt möchte ich zwei Beispiele für das Überspielen desselben Textes mit unterschiedlichen Gebietsschemas spielen.



Das Video wird ab dem Moment abgespielt, in dem das Beispiel demonstriert wird. Die



zweite Option scheint mir näher an der russischen Aussprache zu liegen.







Geschlecht erschien auch in iOS 13. Diese Eigenschaft ist nur für iOS 13 und höher verfügbar. Sie funktioniert nur für Stimmen, die in iOS 13 hinzugefügt wurden. Daher ist Geschlecht als Aufzählung festgelegt und verfügt über drei Eigenschaften: Weiblich, Männlich und Nicht angegeben.



In unserer Anwendung können Sie das Geschlecht der Stimme auswählen, mit der der Text gelesen werden soll. Für die alten Stimmen haben wir selbst eine Liste erstellt und diese in unserer Bewerbung behalten. Trennen Sie, welche Stimme wir als männlich und welche weiblich betrachten, für diejenigen Stimmen, für die das System nicht spezifiziert zurückgibt.







In iOS 13.1 kann die Liste der Stimmen beim ersten Anruf eine leere Liste zurückgeben. Lösung: Sie können die gesamte Liste einmal in einer bestimmten Anzahl von Sekunden erneut abfragen. Sobald es nicht leer zurückkommt, glauben wir, dass wir endlich eine aktuelle Stimmenliste erhalten haben.



Dieser Fehler wurde in nachfolgenden Versionen von iOS behoben. Seien Sie jedoch nicht überrascht, wenn Sie dies in Ihren Apps sehen.



Ein interessanter Punkt, auf den ich bei der Recherche der Dokumentation gestoßen bin: Es gibt eine statische Eigenschaft AVSpeechSynthesisVoiceAlexIdentifier. Dies ist eine sehr interessante Kennung, da erstens nicht alle Geräte mit dieser Kennung eine Stimme erzeugen können. Zweitens ist mir nicht klar, warum es sich separat befindet. Drittens, wenn Sie eine Stimme mit dieser Kennung erhalten, hat diese Stimme eine eindeutige und eindeutige Klasse.



Gleichzeitig brachte mir das Studium der Framework-Header nichts Nützliches und Interessantes. Wenn Sie Informationen zu dieser Kennung kennen - warum wird sie benötigt, warum erscheint sie? Bitte sagen Sie es mir. Ich konnte keine Antwort auf diese Frage finden.







Hier sehen Sie ein Beispiel dafür, wie wir die Auswahl der Stimme basierend auf dem Gebietsschema und dem Geschlecht in der Benutzeroberfläche getroffen haben und wie wir die Geschwindigkeit der Sprachausgabe für eine bestimmte Sprache festlegen können.







Ich werde kurz auf das System der Zeichen für die Aufzeichnung der Transkription in lateinischer Sprache eingehen. Wenn Sie einen Text für die Sprachausgabe angeben, können Sie die Aussprache bestimmter Wörter darin angeben. Unter iOS erfolgt dies über NSAttributedString mit einem speziellen Schlüssel. Die Generierung dieser Aussprache ist direkt auf dem iOS-Gerät im Abschnitt Eingabehilfen verfügbar. Für große Mengen halte ich dies jedoch für sehr unpraktisch, und Sie können die Erzeugung der phonetischen Transkription auf andere Weise automatisieren.



Hier ist beispielsweise ein Repository für Englisch mit einem großen Wörterbuch für Wortkorrelation und Aussprache.







Die Folie zeigt ein Beispiel dafür, wie Sie die Aussprache eines bestimmten Wortes für ein Gebietsschema ersetzen können. In diesem Fall handelt es sich um | təˈmːtəʊ |, Tomate.



Das Video wird ab dem Moment abgespielt, in dem das Beispiel demonstriert wird.



Jetzt wurde die Option mit und ohne Aussprache abgespielt.







Insgesamt haben wir nach Möglichkeiten gesucht, eine Sprachsyntheseanforderung zu erstellen. Ich habe gelernt, mit Stimmen zu arbeiten. Wir haben uns eine Problemumgehung für einen der Fehler angesehen, auf die Sie möglicherweise stoßen, und uns die phonetische Transkription angesehen, wie Sie sie verwenden können.







Fahren wir mit der Spracherkennung fort. Es wird in iOS in Form eines Frameworks namens Speech präsentiert und ermöglicht die Spracherkennung direkt auf Ihren Geräten.



Es werden ca. 50 Sprachen und Dialekte unterstützt, die ab iOS 10 verfügbar sind. Für die Spracherkennung ist normalerweise eine Internetverbindung erforderlich. Bei einigen Geräten und Sprachen kann die Erkennung jedoch offline funktionieren. Wir werden im vierten Teil meines Vortrags darüber sprechen.



Die Spracherkennung ist sowohl über das Mikrofon als auch über die Audiodatei verfügbar. Wenn Sie dem Benutzer die Möglichkeit geben möchten, Sprache vom Mikrofon zu erkennen, muss er zwei Berechtigungen erteilen. Der erste ist für den Zugriff auf das Mikrofon, der zweite für die Tatsache, dass seine Sprache zur Erkennung an Apple-Server übertragen wird.



Wenn Sie nur die Offline-Erkennung verwenden können, ist es leider nicht möglich, diese Berechtigung nicht anzufordern. Es muss trotzdem angefordert werden.







Die Liste stammt von der Apple-Website. Dies sind die Sprachen und Gebietsschemas, die für die Spracherkennung verfügbar sind. Tatsächlich ist dies jedoch eine Liste von Sprachen und Gebietsschemas, die zum Diktieren auf einer Standardtastatur verfügbar sind. Und die Speech Framework API unter der Haube bezieht sich auf die Implementierung des Diktats von der Standardtastatur.







Die Spracherkennung ist für uns als Entwickler kostenlos, hat jedoch eine Nutzungsbeschränkung. Das erste ist das Limit für Geräte und Anforderungen pro Tag. Das zweite ist das Gesamtlimit für die Anwendung. Und drittens - Sie können maximal eine Minute erkennen. Die einzige Ausnahme ist der Offline-Modus. Darin können Sie lange aufgezeichnete Audio-Nachrichten erkennen.



Apple gibt natürlich keine spezifischen Zahlen für die Grenzwerte an, und wie im WWDC-Bericht geschrieben oder angegeben, müssen Sie darauf vorbereitet sein, Fehler zu behandeln und an sie zu schreiben, wenn Sie beispielsweise häufig auf diese Grenzwerte stoßen. Aber wir haben kein solches Problem. Für die russische Sprache verwenden wir SpeechKit als Spracherkennungs-Engine. Und die meisten unserer Benutzer sprechen Russisch, sodass wir nicht an die Grenzen gestoßen sind.



Denken Sie auch an die Privatsphäre. Erlauben Sie keine Sprachausgabe auf Daten - Passwörter, Kreditkartendaten. Vertrauliche oder private Informationen sollten nicht zur Erkennung verfügbar sein.







Auf der Folie sehen Sie ein bedingtes Diagramm der am Spracherkennungsprozess beteiligten Klassen. Ähnlich wie bei der Synthese arbeitet das Arbeiten mit Erkennung mit einem Audio-Eisen, daher ist AVAudioSession auch hier eine explizite Abhängigkeit.







Unterstützung. Um einen Satz aller unterstützten Gebietsschemas abzurufen, müssen Sie auf die Seiteneigenschaft supportLocales zugreifen. Die Unterstützung für ein bestimmtes Gebietsschema garantiert im Allgemeinen nicht, dass die Spracherkennung derzeit für dieses Gebietsschema verfügbar ist. Beispielsweise kann eine dauerhafte Verbindung zu Apple-Servern erforderlich sein.



Die Unterstützung für die Erkennung von Gebietsschemas entspricht der Liste der Gebietsschemas für das Diktieren auf der Tastatur unter iOS. Hier ist eine vollständige Liste . Um sicherzustellen, dass ein bestimmtes Gebietsschema jetzt verarbeitet werden kann, können Sie die Eigenschaft isAvailable verwenden.







Bei der Spracherkennung unter iOS gibt es im Gegensatz zur Synthese keine Gebietsschema-Priorität für jede Sprache. Wenn wir daher das erste Gebietsschema einer bestimmten Sprache aus der Liste aller Gebietsschemas nehmen, gibt es möglicherweise einige, die nicht das beliebteste Gebietsschema sind. Daher haben wir für einige Sprachen in Translator eine bestimmte Gebietsschema-Priorität für eine bestimmte Sprache festgelegt.



Zum Beispiel verwenden wir für Englisch en-US. Wenn ein Benutzer zum ersten Mal versucht, etwas auf Englisch zu erkennen, verwenden wir das amerikanische Gebietsschema.







Erkennungsanforderung aus Datei. Hier ist alles einfach. Sie müssen die Datei abrufen und mit ihr verknüpfen und ein SFSpeechRecognizer-Objekt erstellen, das das Gebietsschema angibt, das Sie verwenden möchten. Überprüfen Sie, ob die Erkennung derzeit verfügbar ist. Erstellen Sie SFSpeechURLRecognitionRequest mithilfe von Konstrukten, bei denen Sie den Dateipfad übergeben. Und starten Sie die Erkennungsaufgabe.



Als Ergebnis erhalten Sie entweder einen Erkennungsfehler oder ein Ergebnis. Das Ergebnis hat eine isFinal-Eigenschaft, was bedeutet, dass dieses Ergebnis endgültig ist und weiter verwendet werden kann.







Hier ist ein etwas komplexeres Beispiel - eine Anforderung zur Erkennung von einem Mikrofon. Dazu benötigen wir auch ein AVAudioEngine-Objekt, das für die Arbeit mit dem Mikrofon verantwortlich ist. Wir werden nicht näher darauf eingehen, wie dies funktioniert. Sie legen die gewünschte Kategorie fest - entweder .record oder .playRecord. Schalten Sie die Audiositzung ein. Konfigurieren Sie AudioEngine und abonnieren Sie, um Audiopuffer vom Mikrofon zu empfangen. Sie fügen sie der Erkennungsanforderung hinzu, und wenn Sie mit dem Erkennen fertig sind, können Sie das Mikrofon verlassen.



Es ist anzumerken, dass die Eigenschaft shouldReportPartialResults, die für die Ausgabe temporärer Erkennungsergebnisse verantwortlich ist, auf true gesetzt ist. Werfen wir einen Blick auf die Optionen: Wie eine Anwendung mit und ohne das Flag shouldReportPartialResults aussehen könnte.



Das Video wird ab dem Moment abgespielt, in dem das Beispiel gezeigt wird.



Im Beispiel links habe ich die Reaktion des Mikrofons auf Ton und die Änderung der Lautstärke verlassen. Es ist zu sehen, dass ich etwas sage. Aber bis ich fertig bin, siehst du nichts. Es dauert lange, bis der Benutzer das Ergebnis dessen erhält, was er diktiert hat.



Wenn Sie shouldReportPartialResults auf true setzen und korrekt damit umgehen, sieht der Benutzer, was er sagt, während er spricht. Dies ist sehr praktisch und der richtige Weg, um die Benutzeroberfläche in Bezug auf das Diktat zu erstellen.







Hier ist ein Beispiel, wie wir die Arbeit mit einer Audiositzung erledigen. Im Übersetzer arbeiten wir nicht nur mit dem von uns geschriebenen Sound, sondern auch mit anderen Frameworks, die etwas mit der Audiositzung tun können.



Wir haben einen Controller geschrieben, der zum einen überprüft, ob die Einstellungen und Kategorien diejenigen sind, die wir benötigen, und zum anderen nicht das tut, was die Audiositzung ständig ein- und ausschaltet.



Noch vor der Entwicklung des Dialogmodus, der Spracheingabe und des Überspielens haben wir die Audiositzung selbst ein- und ausgeschaltet. Als wir mit dem Dialogmodus begannen, stellte sich heraus, dass diese Ein-Aus-Modi eine zusätzliche Verzögerung zwischen dem Zeitpunkt, zu dem Sie etwas sagen, und der Sprachausgabe hinzufügen.







Für eine Spracherkennungsanforderung können Sie einen Hinweis angeben - die Art der zu erkennenden Sprache. Dies kann nicht spezifiziert sein, Diktat, Suche oder kurze Bestätigung. Meistens ist das Diktat besser, wenn Ihr Benutzer etwas Langes sagt.







Ab iOS 13 steht uns Audioanalyse zur Verfügung. Die Folie zeigt die Parameter, die als Ergebnis einer erkannten Sprache erhalten werden können. Das heißt, Sie erhalten als Ergebnis nicht nur das, was der Benutzer gesagt hat, sondern auch die Stimme, in der er es gesagt hat.







Wir werden nicht lange darauf eingehen. Hier ist ein Beispiel dafür, wie Sie Analysen als Ergebnis von erkanntem Text erhalten können.







Insgesamt haben wir die Funktionen des Sprachrahmens für die Spracherkennung untersucht, gelernt, wie Hinweise für die Spracherkennung gegeben werden können, und uns schnell mit den Funktionen der Analyse befasst.



Und zu guter Letzt: Offline-Arbeit. Das erste, worüber ich sprechen möchte, ist eine Liste von Offline-Sprachen für die Sprachsynthese. Nirgendwo in der Dokumentation wurde erwähnt, wie Sie Stimmen explizit herunterladen können, um offline zu arbeiten. Sowohl in den Berichten als auch in der Dokumentation heißt es, dass diese Stimmen heruntergeladen werden können, aber nicht geschrieben sind.



Ich habe das System durchsucht und festgestellt, dass, wenn Sie zu Einstellungen, zum Abschnitt Barrierefreiheit, dann zu "Mündlicher Inhalt" und "Stimmen" gehen, zunächst eine Liste der Sprachen angezeigt wird, für die es verfügbar ist. Zweitens können Sie durch Umschalten auf eine bestimmte Sprache neue Stimmen herunterladen.



Und diese Liste stimmt eindeutig mit dem überein, was AVSpeechSynthesisVoice.speechVoices in der Anwendung zurückgibt. Dies bedeutet, dass Sie Ihren Benutzern beibringen können, dass sie die Sprachen herunterladen können, die sie für die Offline-Verwendung von Text-to-Speech benötigen.







Liste der Offline-Sprachen zur Erkennung. Es wird an keiner Stelle in der Dokumentation explizit angegeben, aber nach verschiedenen Foren und dem, was uns begegnet ist, ist dies die Liste der Sprachen und Gebietsschemas für sie, die offline ohne Zugriff auf das Internet arbeiten können.



Es ist zu beachten, dass die Offline-Erkennung auf Geräten mit einem A9-Chip und älter verfügbar ist.







Jetzt kommt der lustige Teil. Liste der Offline-Sprachen für die Spracherkennung. Im Gegensatz zur Synthese gibt es im Allgemeinen keine Möglichkeit, Sprachen explizit für sich selbst herunterzuladen. Wenn Sie der Standardtastatur eine Sprache hinzufügen, kann ein Offline-Paket dafür heruntergeladen werden. Dies ist leider nicht deterministisch. Gehen wir zu Einstellungen> Allgemein> Tastatur> Diktat. Zum Beispiel habe ich Spanisch hinzugefügt. Danach erscheint unter "Diktat" ein kleiner Hinweis, dass Diktat für diese Sprachen verfügbar sein könnte. Dort erschien Spanisch.



Dann ging ich zu unserer Bewerbung, schaltete das Internet aus und zu meiner Freude funktionierte die Offline-Erkennung auf Spanisch.



Leider kann dies nur indirekt beeinflusst werden. Die einzige Möglichkeit besteht darin, die Sprache zur Standardtastatur hinzuzufügen. Dies garantiert jedoch nicht, dass das Offline-Erkennungspaket heruntergeladen wird.







Unter iOS können Sie das Gerät auch dann mit Strom versorgen, wenn Sie auf Ihrem Telefon Zugriff auf das Internet haben, und Spracherkennung durchführen, sofern eine Erkennung verfügbar ist.



Es gibt eine supportOnDeviceRecognition-Eigenschaft, die seit iOS 13 verfügbar ist. Diese Eigenschaft funktioniert jedoch nicht ordnungsgemäß. Ich habe unten rechts einen Screenshot des Fehlers angezeigt. Der Fehler wurde erst in 13.2 behoben. Die Eigenschaft gibt bei der ersten Anforderung immer false zurück. Laut Apple wird nach einigen Sekunden der richtige Wert zurückgegeben.



Darüber hinaus kann diese Eigenschaft false angeben, aber gleichzeitig das Setzen des Flags requireOnDeviceRecognition auf true funktioniert erfolgreich. Dies bedeutet, dass die Erkennung auf dem Gerät vollständig funktioniert, auch wenn dieses Testflag false zurückgibt.



Hier kann es mehrere Lösungen geben. Erstens können Sie die Offline-Erkennung nur unter iOS 13.2 durchführen. Zweitens können Sie eine bestimmte Anzahl von Sekunden auswählen, um diese Eigenschaft erneut anzufordern und die Benutzeroberfläche zu aktualisieren. Und drittens können Sie diese Eigenschaft vergessen: Versuchen Sie, die Stimme offline zu erkennen, und zeigen Sie sie im Fehlerfall einfach dem Benutzer.







Wir haben untersucht, wie Sie Offline-Sprachsynthesepakete explizit herunterladen können, und eine Möglichkeit gefunden, iOS zum Herunterladen von Offline-Spracherkennungspaketen zu zwingen.



Jetzt wissen Sie, wie Sie Ihren Anwendungen schnell Sprachsynthese und -erkennung hinzufügen können. Ich habe alles, danke für deine Aufmerksamkeit.



All Articles