O CPqDASR é um framework para a criação de aplicações de voz que utilizam o servidor CPqD ASR para reconhecimento de fala.
Para maiores informações, consulte a documentação do projeto.
A aplicação de demonstração está no diretório sample-app.
Uma instância de CPqDASRSpeechRecognizer é obtida utilizando um Builder.
Crie uma instância de CPqDASRSpeechRecognizerBuilder
passando os parâmetros necessários para o reconhecimento de fala. A seguir está um exemplo de criação do Builder utilizando somente os parâmetros obrigatórios.
Swift:
var builder = CPqDASRSpeechRecognizerBuilder()
.serverUrl(wsURL)
.addRecognitionDelegate(self)
.userName(username, password: password)
Objective-C:
CPqDASRSpeechRecognizerBuilder * builder = [[[[[CPqDASRSpeechRecognizerBuilder alloc] init]
serverUrl: wsURL]
addRecognitionDelegate: self]
userName: username password: password];
É possível adicionar vários delegates de reconhecimento utilizando o método addRecognitionDelegate
de CPqDASRSpeechRecognizerBuilder
. Todas as instâncias devem implementar o protocolo CPqDASRRecognitionDelegate.
Por padrão, recognitionDelegate será invocado sempre na Main Thread. No entanto, é possível configurar a fila de despacho deste delegate utilizando o método recognizerDelegateDispatchQueue:
de CPqDASRSpeechRecognizerBuilder
.
Swift:
let recognizerDispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive);
builder = builder?.recognizerDelegateDispatchQueue(recognizerDelegateQueue);
Objective-C:
dispatch_queue_t recognizerDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
[builder recognizerDelegateDispatchQueue:recognizerDispatchQueue];
Após isso, basta criar uma instância de CPqDASRSpeechRecognizer
utilizando o método build
de CPqDASRSpeechRecognizerBuilder
.
Swift:
let recognizer = builder?.build()
Objective-C:
CPqDASRSpeechRecognizer * recognizer = [builder build];
Para que o ASR possa realizar um reconhecimento de fala é preciso fornecer uma fonte de áudio para a instância de CPqDASRSpeechRecognizer
. Uma fonte de áudio pode ser qualquer classe que implemente o protocolo CPqDASRAudioSource.
O framework CPqDASR já fornece três fontes de áudio que podem ser utilizadas pela aplicação para realizar um reconhecimento.
Fonte de áudio que utiliza o microfone do dispositivo para realizar a captura.
Crie uma instância de CPqDASRMicAudioSource
conforme exemplo:
Swift:
let audioSource = CPqDASRMicAudioSource(delegate: self, andSampleRate: captureSampleRate)
Objective-C:
[[CPqDASRMicAudioSource alloc] initWithDelegate:self andSampleRate: captureSampleRate];
Deve ser fornecido um delegate responsável por implementar o protocol CPqDASRMicAudioSourceDelegate.
Também deve ser fornecido a taxa de amostragem para captura de áudio, podendo ser 8 ou 16 KHz.
Fonte de áudio que utiliza um arquivo fornecido pela aplicação para realizar o reconhecimento.
Crie uma instância de CPqDASRFileAudioSource
conforme exemplo:
Swift:
let audioSource = CPqDASRFileAudioSource(filePath: audioPath)
Objective-C:
CPqDASRFileAudioSource * audioSource = [[CPqDASRFileAudioSource alloc] initWithFilePath: audioPath];
audioPath
é o caminho para o arquivo de áudio a ser reconhecido.
Fonte de áudio que utiliza amostras de áudio fornecidas pela aplicação para realizar o reconhecimento.
Crie uma instância de CPqDASRBufferAudioSource
conforme exemplo:
Swift:
let audioSource = CPqDASRBufferAudioSource();
Objective-C:
CPqDASRBufferAudioSource * audioSource = [[CPqDASRBufferAudioSource alloc] init];
Após iniciar o reconhecimento, a aplicação é responsável por fornecer amostras de áudio através do métodos write:
.
Swift:
audioSource.write(data);
Objective-C:
[audioSource write: data];
Para realizar um reconhecimento também é necessário fornecer um modelo de língua para o reconhecedor.
Swift:
let languageModelList = CPqDASRLanguageModelList();
languageModelList.addURI("builtin:slm/general")
Objective-C:
CPqDASRLanguageModelList * languageModelList = [[CPqDASRLanguageModelList alloc] init];
[languageModelList addURI: "builtin:slm/general"];
O exemplo acima define um modelo de fala livre interno.
Após criar um recognizer, uma fonte de áudio e definir o modelo de língua a ser utilizado, é possível iniciar uma sessão de reconhecimento.
Swift:
recognizer.recognize(audioSource, languageModel: languageModelList)
Objective-C:
[recognizer recognize:audioSource languageModel: languageModelList];
Opcionalmente, para cada novo reconhecimento pode ser fornecido um objeto com parâmetros a serem utilizados somente para aquele reconhecimento. O objeto a ser utilizado é uma instância de CPqDASRRecognitionConfig.
Swift:
let config = CPqDASRRecognitionConfig();
config.continuousMode = NSNumber(value: false);
config.maxSentences = NSNumber(value: 3);
recognizer.recognize(audioSource, languageModel: languageModelList, recogConfig: config)
Objective-C:
CPqDASRRecognitionConfig * config = [[CPqDASRRecognitionConfig alloc] init];
config.maxSentences = [NSNumber numberWithInteger: 3];
config.continuousMode = [NSNumber numberWithBool: NO];
[recognizer recognize:audioSource languageModel: languageModelList recogConfig: config];
Se tudo estiver correto, o resultado final do reconhecimento será informado através do método cpqdASRDidReturnFinalResult
do protocolo CPqDASRRecognitionDelegate
.
Swift:
func cpqdASRDidReturnFinalResult(_ result: CPqDASRRecognitionResult!) {
if result.status == .recognized {
var counter = 0;
for alternative in result.alternatives {
print("Alternativa [\(counter)] (score = \(alternative.score)): \(alternative.text)")
counter = counter+1;
}
}
}
Objective-C:
- (void)cpqdASRDidReturnFinalResult:(CPqDASRRecognitionResult *)result {
if (result.status == CPqDASRRecognitionStatusRecognized) {
int counter = 0;
for (CPqDASRRecognitionResultAlternative * alternative in result.alternatives) {
NSLog(@"Alternativa %d (score=%ld): %@", counter, alternative.score, alternative.text);
counter++;
}
}
}
Copyright (c) 2018 CPqD. Todos os direitos reservados.
Publicado sob a licença Apache Software 2.0, veja LICENSE.