sábado, 1 de agosto de 2015

Voĉa Rekono kun Pocketsphinx en Python

originala fonto: https://mattze96.safe-ws.de/blog/?p=640

Saluton ĉiuj!Mi volas prezenti al vi mian lastan projekton:
"Germana Kontinua Parolada Rekono". Mi uzas Archlinux, do iuj ordonoj estos "Arch-specifaj". Ne foriros se vi abonas aliajn distron, ĉio estas la sama. En la proksimaj paŝoj ni instalos sphinxbase kaj pocketsphinx.Komencante, mi bezonas kompili kaj instali iun programaron. Mi havis grandan demandon, ĉar python3 estas la normo python sub ArchLinux do mi kreis ekstran PKGBUILDs por la du programoj (ili ne estas pretaj, sed funkcias, se vi interesiĝas preni rigardi la fundon de la paĝo). La ĉefa aspekto estis, ke mi povas poste forigi aŭ ĝisdatigi tiujn pakojn normale kiel aliaj programoj instalitaj tra la repositorios.

Ni krei laborante dosierujo: 

mkdir voice_recognition; cd voice_recognition 
Se vi uzas la PKGBUILDs vi povas treti la jenajn kompili kaj instali instrukciojn.Unue ni bezonas instali Sphinxbase. Mi uzas la lastan version de la GitHub-Repository.Ni klonas la foran dosieraron kun:

git clon git://github.com/cmusphinx/sphinxbase.git 

dosierujo nomita sphinxbase devus esti kreitaj. Eniri ĉi dosierujo kun:cd sphinxbase

Nun vi estas en la dosierujo. Voku la autogen.sh dosiero por krei la Muntodosieroj kaj aŭtomate kuras

./configure
kun ĝi../autogenSe vi ĉiuj dependecoj instalitaj, ni povas daŭrigi kaj kompili la fontkodojn:farasPoste instalu sphinxbase kun:sudo make installNun ni devas iri returne en la laborante dosierujo:cd ..Faru la samajn paŝojn por pocketsphinx:git clon git: //github.com/cmusphinx/pocketsphinx.git 
Entajpu la dosierujo:cd pocketsphinx 
Kuri autogen.sh./autogen 
Kompili la fontkodojn: 
farasInstali pocketsphinx: 
sudo make install 
Reiru al la laborantaj dosierujo:cd .. 
Nun la du necesaj programoj estas instalitaj. Sed la Languagemodel, Vortaro kaj HiddenMarkovModel Dosieroj mankas. <- Ĉu tio estas justa?

Por mia rekono Mi uzas la modelon de: http://goofy.zamia.org/voxforge/de/Elŝuti ĝin kuri: 

wget http://goofy.zamia.org/voxforge/de/voxforge-de-r20140813.tgz 
Nun ĉerpi ĝin:tar xvzf voxforge-de-r20140813.tgz 
En la kreita dosierujo nomita voxforge ... vi trovos sh dosiero nomita run-pocketsphinx.sh. Vi devas redaktis:cd voxforge-de-r20140813; nano run-pocketsphinx.sh 
Ŝanĝi la enhavon al la jenaj: 
#!/bin/bash
pocketsphinx_continuous \
    -hmm model_parameters/voxforge.cd_cont_3000 \
    -lw 10 -feat 1s_c_d_dd -beam 1e-80 -wbeam 1e-40 \
    -dict etc/voxforge.dic \
    -wip 0.2 \
    -agc none -varnorm no -cmn current -inmic yes \
    -lm etc/voxforge.lm.DMP
 
 

A -inmic parametro estis en la nova pocketsphinx versio aldonis, sed la voxforge dosiero ne uptodate. 

Se vi volas testi ĉiu povos simple kuras:./run-pocketsphinx.shVi devus preni iom da rezultoj. Se ne checkout la freenode kanalo #cmusphinx. Tiuj infanoj helpis min multege. (Danke alnshm kaj vklimkov)——————————————————————————————————————Se vi venis ĉi tien Mi volas prezenti vin mian python-Programm: Mi laboras sur styled-stacio versio, sed ĝi estas ankoraŭ ne estas preta. 
#!/usr/bin/env python2
from pocketsphinx import *

hmm = 'voxforge-de-r20140813/model_parameters/voxforge.cd_cont_3000'
dic = 'voxforge-de-r20140813/etc/voxforge.dic'
lm= 'voxforge-de-r20140813/etc/voxforge.lm.DMP'

config = Decoder.default_config()
config.set_string('-hmm', hmm)
config.set_string('-lm', lm)
config.set_string('-dict', dic)
config.set_string('-logfn', '/dev/null')

decoder = Decoder(config)

p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=1024)
stream.start_stream()
in_speech_bf = True
decoder.start_utt('')
while True:
    buf = stream.read(1024)
    if buf:
        decoder.process_raw(buf, False, False)
        try:
            if  decoder.hyp().hypstr != '':
                print 'Partial decoding result:', decoder.hyp().hypstr
        except AttributeError:
            pass
        if decoder.get_in_speech():
            sys.stdout.write('.')
            sys.stdout.flush()
        if decoder.get_in_speech() != in_speech_bf:
            in_speech_bf = decoder.get_in_speech()
            if not in_speech_bf:
                decoder.end_utt()
                try:
                    if  decoder.hyp().hypstr != '':
                        print 'Stream decoding result:', decoder.hyp().hypstr
                except AttributeError:
                    pass
                decoder.start_utt('')
    else:
        break
decoder.end_utt()
print 'An Error occured/okazis eraron:', decoder.hyp().hypstr

Jen alfa Versio de Gtk GUI i disvolvis:https://github.com/mattze96/pocketsphinx-python

Nenhum comentário:

Postar um comentário