
A porta-voz é uma solução tudo em um para interfaces de voz móvel no Android. Ele fornece todas as partes do quebra -cabeça de processamento de fala, incluindo detecção de atividades de voz, detecção de wakeword, reconhecimento de fala, entendimento da linguagem natural (NLU) e síntese de fala (TTS). Sob sua configuração padrão (em dispositivos Android mais recentes), tudo, exceto o TTS, acontece diretamente no dispositivo móvel - nenhuma comunicação com a nuvem significa resultados mais rápidos e melhor privacidade.
E o Android não é a única plataforma que suporta!
Criar uma conta gratuita no Spokestack.io permite treinar seus próprios modelos NLU e testar o TTS sem adicionar código ao seu aplicativo. Podemos até treinar uma voz personalizada e TTS Voice para você, garantindo que a voz do seu aplicativo seja única e memorável.
Para uma breve introdução, leia, mas para guias mais detalhados, consulte o seguinte:
Nota : A porta -voz costumava ser hospedada no JCenter, mas desde o anúncio de sua descontinuação, mudamos a distribuição para o Maven Central. Certifique-se de que o arquivo build.gradle no nível da raiz inclua mavenCentral() em seu bloco repositories para acessar versões> = 11.0.2.
A versão mínima do Android SDK listada no manifesto da Spokestack é 8, porque é tudo o que você precisa para executar a detecção de palavras e o reconhecimento de fala. Para usar outros recursos, é melhor atingir pelo menos o nível 21 da API.
Se você incluir a reprodução do ExoPlayer para TTS (veja abaixo), poderá ter problemas para executar em versões do Android mais antigo que o nível 24. Se você tiver esse problema, tente adicionar a seguinte linha ao seu arquivo gradle.properties :
android.enableDexingArtifactTransform=false
Adicione o seguinte à build.gradle do seu aplicativo.gradle:
android {
// ...
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
}
// ...
dependencies {
// ...
// make sure to check the badge above or "releases" on the right for the
// latest version!
implementation ' io.spokestack:spokestack-android:11.5.2 '
// for TensorFlow Lite-powered wakeword detection and/or NLU, add this one too
implementation ' org.tensorflow:tensorflow-lite:2.6.0 '
// for automatic playback of TTS audio
implementation ' androidx.media:media:1.3.0 '
implementation ' com.google.android.exoplayer:exoplayer-core:2.14.0 '
// if you plan to use Google ASR, include these
implementation ' com.google.cloud:google-cloud-speech:1.22.2 '
implementation ' io.grpc:grpc-okhttp:1.28.0 '
// if you plan to use Azure Speech Service, include these, and
// note that you'll also need to add the following to your top-level
// build.gradle's `repositories` block:
// maven { url 'https://csspeechstorage.blob.core.windows.net/maven/' }
implementation ' com.microsoft.cognitiveservices.speech:client-sdk:1.9.0 '
}Consulte o Guia do Quickstart para obter mais informações, mas aqui está a versão de 30 segundos do Setup:
RECORD_AUDIO em tempo de execução. Veja nosso projeto de esqueleto para um exemplo disso. A permissão INTERNET também é necessária, mas é incluída pelo manifesto da biblioteca por padrão.Activity se você estiver apenas começando: private lateinit var spokestack : Spokestack
// ...
spokestack = Spokestack . Builder ()
.setProperty( " wake-detect-path " , " $cacheDir /detect.tflite " )
.setProperty( " wake-encode-path " , " $cacheDir /encode.tflite " )
.setProperty( " wake-filter-path " , " $cacheDir /filter.tflite " )
.setProperty( " nlu-model-path " , " $cacheDir /nlu.tflite " )
.setProperty( " nlu-metadata-path " , " $cacheDir /metadata.json " )
.setProperty( " wordpiece-vocab-path " , " $cacheDir /vocab.txt " )
.setProperty( " spokestack-id " , " your-client-id " )
.setProperty( " spokestack-secret " , " your-secret-key " )
// `applicationContext` is available inside all `Activity`s
.withAndroidContext(applicationContext)
// see below; `listener` here inherits from `SpokestackAdapter`
.addListener(listener)
.build()
// ...
// starting the pipeline makes Spokestack listen for the wakeword
spokestack.start()Este exemplo pressupõe que você esteja armazenando modelos Wakeword e NLU no diretório de cache do seu aplicativo; Novamente, consulte o projeto Skeleton para um exemplo de descompressão desses arquivos do pacote de ativos nesse diretório.
Para usar a demonstração "Spokestack" Wakeword, faça o download dos modelos Tensorflow Lite: Detect | codificar | filtro
Se você ainda não quiser se preocupar com isso, apenas desative a detecção de wakeword e a NLU, e você pode deixar de fora todos os caminhos de arquivo acima:
spokestack = Spokestack . Builder ()
.withoutWakeword()
.withoutNlu()
// ...
.build() Nesse caso, você ainda precisará start() porta -voz como acima, mas também desejará criar um botão em algum lugar que chama spokestack.activate() quando pressionado; Isso inicia o ASR, que transcreve o discurso do usuário.
Como alternativa, você pode definir a porta-voz para iniciar o ASR sempre que detectar discurso usando um perfil de pipeline de fala não padrão, conforme descrito na documentação do pipeline de fala. Nesse caso, você deseja o perfil VADTriggerAndroidASR :
// replace
.withoutWakeword()
// with
.withPipelineProfile( " io.spokestack.spokestack.profile.VADTriggerAndroidASR " ) Observe também a linha addListener() durante a configuração. O processamento da fala acontece continuamente em um encadeamento de segundo plano, portanto, seu aplicativo precisa de uma maneira de descobrir quando o usuário falou com ele. Eventos importantes são entregues por meio de eventos a uma subclasse do SpokestackAdapter . Sua subclasse pode substituir quantos dos seguintes métodos de evento quiser. Optar por não implementar um não quebrará nada; Você simplesmente não receberá esses eventos.
speechEvent(SpeechContext.Event, SpeechContext) : Isso comunica eventos do pipeline de fala, incluindo tudo, desde notificações de que o ASR foi ativado/desativado a transcrições parciais e completas do discurso do usuário.nluResult(NLUResult) : Quando a NLU é ativada, o discurso do usuário é automaticamente enviado pela NLU para classificação. Você deseja que os resultados dessa classificação ajudem seu aplicativo a decidir o que fazer a seguir.ttsEvent(TTSEvent) : Se você está gerenciando a reprodução do TTS, você vai querer saber quando o discurso sintetizado estiver pronto para reproduzir (o evento AUDIO_AVAILABLE ); Mesmo se você não estiver, o evento PLAYBACK_COMPLETE pode ser útil se você deseja reativar automaticamente o microfone após o seu aplicativo ler uma resposta.trace(SpokestackModule, String) : Isso combina mensagens de log/rastreamento de todos os módulos de porta -voz. Alguns módulos incluem eventos de rastreamento em seus próprios métodos de eventos, mas cada um desses eventos também é enviado aqui.error(SpokestackModule, Throwable) : Isso combina erros de todos os módulos de porta -voz. Alguns módulos incluem eventos de erro em seus próprios métodos de eventos, mas cada um desses eventos também é enviado aqui.O Guia do Quickstart contém implementações de amostra da maioria desses métodos.
Como mencionamos, a classificação é tratada automaticamente se a NLU estiver ativada; portanto, os principais métodos que você precisa conhecer enquanto a porta -voz estiver em execução:
start()/stop() : inicia/interrompe o pipeline. Enquanto estiver em execução, a Spokestack usa o microfone para ouvir o Wakeword do seu aplicativo, a menos que o Wakeword esteja desativado; nesse caso, o ASR deve ser ativado de outra maneira. O oleoduto deve ser interrompido quando a porta -voz não for mais necessária (ou quando o aplicativo é suspenso) para liberar recursos.activate()/deactivate() : ativa/desativa o ASR, que ouve e transcreve o que o usuário diz.synthesize(SynthesisRequest) : envia texto para o serviço TTS de nuvem da Spokestack para ser sintetizado como áudio. Na configuração padrão, esse áudio será reproduzido automaticamente quando disponível. O MAVEN é usado para construção/implantação e o pacote é hospedado no Maven Central.
Este pacote exige que o Android NDK seja instalado e as variáveis ANDROID_HOME e ANDROID_NDK_HOME a serem definidas. No OSX, ANDROID_HOME geralmente é definido como ~/Library/Android/sdk e ANDROID_NDK_HOME geralmente é definido como ~/Library/Android/sdk/ndk/<version> .
ANDROID_NDK_HOME também pode ser especificado em seu arquivo local do settings.xml como a propriedade android.ndk.path .
mvn test jacoco:reportmvn checkstyle:check Certifique -se de que suas credenciais centrais sonatype/maven estejam em seu usuário settings.xml (geralmente ~/.m2/settings.xml ):
< servers >
< server >
< id >ossrh</ id >
< username >sonatype-username</ username >
< password >sonatype-password</ password >
</ server >
</ servers >Em uma filial não-mestre, execute o seguinte comando. Isso solicitará que você insira um número de versão e tag para a nova versão, empurre a tag para o GitHub e implante o pacote no repositório Sonatype.
mvn release:clean release:prepare release:performA meta do Maven pode falhar devido a um bug, onde tenta fazer upload dos arquivos duas vezes, mas a versão ainda aconteceu.
Conclua o processo criando e mesclando uma solicitação de tração para a nova filial no GitHub e atualizando as notas de lançamento editando a tag.
Para obter informações adicionais sobre a liberação, consulte http://maven.apache.org/maven-release/maven-release-plugin/
Copyright 2021 Spokestack, Inc.
Licenciado sob a licença Apache, versão 2.0 (a "licença"); Você não pode usar esse arquivo, exceto em conformidade com a licença. Você pode obter uma cópia da licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordada por escrito, o software distribuído pela licença é distribuído "como está", sem garantias ou condições de qualquer tipo, expressa ou implícita. Consulte a licença para o idioma específico que rege as permissões e limitações sob a licença.