Wir ersetzen den Google-Assistenten durch das neuronale Netz Porfirevich und den Troll Alice


Hast du schon gesehen, was Porfirievich macht? Sie hängt den Text an eine Ihrer Phrasen an. Und es kommen wirklich lustige Dinge heraus, weil sie in den Büchern von Dostojewski, Tolstoi, Puschkin, Bulgakow, Gogol und Pelewin geschult wurde.

"Das Ganze mit Levitans Stimme auszusprechen, wäre ein hervorragender Ersatz für den Google-Assistenten für das Neujahrsfest ...", dachte ich. Und ich habe beschlossen, dieses Ereignis nicht auf das neue Jahr zu verschieben (weil Sie es selbst verstehen).

Under the cut - der gesamte Prozess der Erstellung eines Open-Source-Sprachassistenten Porfirievich auf dem exklusiven Open-Source-Framework Aimybox und dessen Start anstelle des regulären Google-Assistenten. Nun, zur gleichen Zeit kannst du Alice trollen .

Wenn Sie dies alles sofort in der Praxis ausprobieren möchten, können Sie die neueste Version von hier aus installieren

Porfirievich API


Kürzlich wurde im Hub ein Artikel veröffentlicht, in dem erklärt wird, wie Mikhail Grankin dem GPT-2- Neuronalen Netzwerk beigebracht hat, „aussagekräftige“ Texte an beliebige Ausdrücke anzuhängen . Es ist lustig geworden. Darüber hinaus ist der Zugriff auf das neuronale Netzwerk über die reguläre HTTP-API möglich.

Wir gehen zu der Site, über die Sie Anfragen an Porfiryevich stellen können, öffnen den Inspektor und sehen, wohin die Anfragen gehen und in welchem ​​Format.



Es gibt keine Einschränkungen für diese API, aber der Entwickler empfiehlt dennoch , das Porfiryevich-Modell herunterzuladen und auf seinem Server bereitzustellen.


Aimybox sdk


Wir haben die Porfirievich API! Jetzt musste die eigentliche Sprachanwendung für Smartphones zerschnitten werden, mit der Sprache erkannt und synthetisiert werden konnte.

Eine hervorragende Lösung dafür ist das offene Aimbox-Framework , über das sie hier und hier bereits auf Habré geschrieben haben . Sie können damit schnell eine Sprachanwendung erstellen oder Sprachfunktionen in ein vorhandenes Projekt einbetten. Gleichzeitig gibt es bereits eine schöne GUI , die angepasst werden kann.

Sie können eine Beispielanwendung für sich selbst klonen und auf deren Basis ein Projekt erstellen.
Übrigens, die erste Version des iOS SDK ist kürzlich erschienen, so dass sie für iOS wiederholt werden kann.
Aimybox kann mit jeder Dialog-Engine, zum Beispiel Aimylogic, Rasa oder Dialogflow , zusammenarbeiten und Sie können auch eine Verbindung zu jeder anderen implementieren. In unserem Fall müssen wir Anfragen direkt an die Porfirevich-API senden und die Antworten analysieren. Dazu ist nichts erforderlich - um die entsprechenden Request- , Response- Klassen und die Implementierung von DialogAPI selbst zu schreiben, die tatsächlich Requests sendet und Antworten analysiert.

Erkennung und Synthese


Auf jedem Android-Gerät funktioniert die kostenlose Spracherkennung und Sprachsynthese von Google, sodass Sie sich darüber keine Gedanken machen müssen. Das ist natürlich nur die Stimme, die ich gegen etwas eintauschen wollte, das besser zu der literarischen Silbe von Porfirevich passt ...

Stimme von Levitan


Zuvor hatte Yandex Speechkit-a (Cloud-basierte Lösung zum Erkennen und Synthetisieren von Sprache) eine wunderbare levitanische Stimme, die perfekt zu unserem Projekt passte. Jetzt ist alles auf Yandex Cloud umgezogen, alles ist bezahlt (ohne 10.000 Testanforderungen), also musste ich nach Alternativen suchen.

Für Alice - station.aimylogic.com gibt es so einen tollen Skilltest - Service. Darauf können Sie die Stimme auswählen, die die Antworten synthetisiert, und Ihre Fähigkeiten direkt im Browser testen. Wir schauen in seiner API nach und finden den Endpunkt, an den Anforderungen für die Sprachsynthese gehen



Hier können Sie sehen, dass Sie das gewünschte Ergebnis erzielen , wenn Sie Levitan im Lautsprecherparameter in dieser URL einsetzen. Das brauchen wir!

Tatsächlich ersetzt die PorfirResponse- Klasse diese URL nur durch die erforderlichen Parameter, damit der Sprachsynthesizer die generierte MP3-Datei einfach wiedergibt, anstatt den Antworttext von Porfiryevich auszusprechen.

Ersetzen Sie Google Assistant durch Porfiryevich


Sie können unsere Stimme Porfiryevich starten, indem Sie einfach die Anwendung öffnen und auf die Mikrofontaste tippen. Es ist jedoch viel angenehmer, es anstelle des normalen Google-Assistenten auszuführen, da viele Smartphones über eine integrierte Assistentenunterstützung verfügen (auf meinem Oneplus 7 können Sie beispielsweise den Ein- / Ausschalter gedrückt halten, um den Assistenten von einem beliebigen Bildschirm aus zu aktivieren).

Dazu müssen Sie nur noch einen Absichtsfilter android.intent.action.ASSIST in AndroidManifest registrieren , das Flag android: launchMode = "singleTop" setzen und die Methode onNewIntent in MainActivity implementieren, um die Spracherkennung zu starten, wenn die Anwendung im Assistentenmodus aufgerufen wird.

override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) if (intent?.action == Intent.ACTION_ASSIST) { val aimybox = (application as PorfirApplication).aimybox val channel = aimybox.stateChannel.openSubscription() launch { channel.consume { aimybox.startRecognition() } }.invokeOnCompletion { channel.cancel() } } } 

In den Smartphone-Einstellungen müssen Sie Porfirevich als Standardassistenten auswählen. Einstellungen -> Anwendungen -> Standardanwendungen

Färbung


In den Dateien styles.xml und strings.xml können Sie die Farben der Standard-Aimybox-Benutzeroberfläche ändern und gleichzeitig die Startphrase angeben, die beim Start unseres Assistenten auf dem Bildschirm angezeigt wird.

Wir starten


Eigentlich alles! Nach dem Start können Sie diese Perlen beobachten



Wenn Sie mit Yandex Alice neben ein anderes Smartphone stellen und einen Chat darauf führen, können Sie einen "gesunden" Dialog zwischen zwei nicht ganz gesunden Menschen führen



Was weiter?


Dies sind die Ideen, die bisher in den Sinn kommen

  • Zeigen Sie auf dem Hauptbildschirm der Anwendung den Verlauf der Antworten von Porfirevich mit der Möglichkeit des Teilens an.
  • Erstellen Sie einen Bildschirm mit Einstellungen - Dialogmodus, Reaktionsdauer, Sprachauswahl usw.

Wenn Sie bessere Ideen haben oder einen Fehler gefunden haben, können Sie Github verwenden , in dem jetzt der gesamte Projektcode enthalten ist. Sie können auch spenden (Code schreiben).

Nützliche Links


Source: https://habr.com/ru/post/de482416/


All Articles