Gramáticas pré-compiladas

O CPqD ASR permite que gramáticas sejam compiladas antes de serem carregadas para reconhecimento. Uma gramática pré-compilada leva menos tempo para ser carregada pelo motor de reconhecimento, e pode apresentar um tempo de reconhecimento menor, mas isso não é garantido.

Recomenda-se o uso de gramáticas pré-compiladas em casos nos quais a gramática a ser usada é muito grande e apresenta um tempo de compilação mais alto que o desejado pelo desenvolvedor da aplicação.

A ferramenta usada para compilação de gramáticas é o programa grammar-compile, localizada em /opt/cpqd/asr/tools/grammar. Para sua maior comodidade durante o desenvolvimento de gramáticas, recomenda-se adicionar esse caminho ao PATH de seu shell:

$ export PATH=${PATH}:/opt/cpqd/asr/tools/grammar

Como exemplo, vamos compilar a gramática pizza.gram da seção anterior. Isso pode ser feito com o seguinte comando:

$ grammar-compile pizza.gram

Esse comando criará o diretório local pizza, e colocará nele os arquivos correspondentes à gramática compilada. O diretório de saída pode ser alterado por meio da opção --out.

A ferramenta grammar-compile também aceita gramáticas no formato XML. A compilação de gramáticas XML é feita do mesmo modo que a compilação de gramáticas ABNF:

$ grammar-compile pizza.grxml

Igualmente, a gramática compilada será armazenada no novo diretório pizza.

Para utilizar uma gramática pré-compilada no reconhecimento de fala, basta indicar o caminho do diretório da gramática, gerado pela ferramenta grammar-compile. Ainda utilizando o exemplo da seção anterior, modifique o arquivo script.txt para apontar para a gramática pré-compilada:

SETENGINE
SETLM file:///opt/grammar/pizza
WAVE /opt/cpqd/asr/tools/audio/pizza-veg-8k.wav
PRINTMODE ALL
RECOGNIZE

Execute asr-cmd e deve obter um resultado similar ao seguinte:

$ /opt/cpqd/asr/tools/engine/asr-cmd script.asr
Creating engine... (config: /opt/cpqd/asr/config/engine/engine.conf)
 Create engine TIME 2823 ms
 Create session 1 TIME: 1 ms
Setting LM... (URI: file:///opt/grammar/pizza/)
 Load LM TIME: 6 ms
Loading wave... (/opt/cpqd/asr/tools/audio/pizza-veg-8k.wav)
Recognizing queued 1 audios...
Recognizing with 1 threads
==============================================================================
=== TIMESTAMP: Tue Aug  8 11:30:57 2017
=== AUDIO: pizza-veg-8k
=== LM: file:///opt/grammar/pizza/
=== LM TIME: 0 ms
=== SEND TIME: 6 ms
=== RECOG TIME: 527 ms
==============================================================================
= RESULT 1
=   CONFIDENCE: 100
=   INTERPRETATION: "vegetariana" |
=   TEXT: eu  | quero | uma | pizza | vegetariana | por | favor |
=   CONF: 100 |  100  | 100 |  100  |     100     | 100 |  100  |
==============================================================================
===== THREAD (1/1)
=====   TOTAL LM TIME: 0 ms
=====   TOTAL SEND TIME: 6 ms
=====   TOTAL RECOG TIME: 527 ms
=====   AVERAGE RECOG TIME: 527 ms
==============================================================================
results
Finishing...
 Release session (1/1) TIME: 2 ms
 Release engine TIME: 1011 ms

Note que o tempo de carregamento da gramática será menor (indicado na saída por Load LM TIME).