Home » Smart hjem » Guide: Opret din egen digitale assistent
Guide: Opret din egen digitale assistent

Guide: Opret din egen digitale assistent

Share
2 Udliciter opgaverne

Du kan overlade bearbejdelsen af audiodata til Google og gå direkte til API-’et over HTTP ved at sende dine audiodata til den relevante URL. Først skal du installere Python-modulet SpeechRecognition:
pip install SpeechRecognition

>> Opret nu en forekomst af Recognizer-objektet. Et Helper-objekt ved navn WavFile tager en audiofil og forbereder den på brug med Google API’et. Så bearbejder det den med funktionen record() og sender den bearbejdede audio til funktionen recognize() . Når den kommer tilbage, får du en liste over mulige tekstpar plus et procentdels-tillidsniveau for hver mulig tekst-dekoder. Vær opmærksom på, at dette modul bruger en uofficiel API-nøgle til at stå for afkodningen. Når det gælder alt andet end beskeden personlig test, skal du derfor hente din egen API-nøgle.

>> Vi har set, hvordan vi kan få vores Raspberry Pi til at lytte til verden omkring den, og nu skal vi finde ud af, hvad det er, den lige har hørt. Det er det, man nomalt kalder stemmegenkendelse, og det er et meget stort og aktivt forskningsområde. Alle de vigtige smartphone-operatisystemer har applikationer, der prøver at udnytte denne form for menneskelig interaktion. Der findes også adskillige forskellige Python-moduler, der kan udføre dette oversættelsestrin (speech-to-text, STT). I denne del af vores projekt ser vi på brugen af Pocket Sphinx til at klare alt det tunge arbejde. Sphinx blev udviklet af Carnegie Mellon University, og det er licenseret under en BSD-licens. Det betyder, at man frit kan tilføje ekstra funktionalitet, som man måtte have brug for til specifikke opgaver. På grund af aktiviteten på dette felt er det en god ide at holde rede på alle opdateringerne og forbedringer i ydelsen.

>> Man kan downloade kildekoden til alle disse moduler og bygge det hele fra grunden, men vi antager, at du bruger en af de Debian-baserede distributioner såsom Raspbian. Her kan man simpelthen bruge det følgende for at skaffe alle de fornødne filer:
sudo apt-get install python-pocketsphinx

>> Du skal også bruge audiomodel-filer og sprogmodel-filer for at få en oversættelse til dit foretrukne sprog. Hvis du vil have filerne til engelsk, kan du installere denne pakke:
sudo apt-get install pocketsphinx-hmm-wsj1
pocketsphinx-lm-wsj

>> Du kan være nødt til at gå uden for det regulære pakke-managementsystem, hvis du vil bruge andre sprog. Så kan du simpelthen begynde at skrive og bruge din kode uden videre. Når du begynder at bruge disse moduler, skal du importere både Pocket Sphinx og Sphinx Base med de følgende kommandoer:

Se også:  Guide: Windows 10 gør det selv-manual

import pocketphinx as ps
import sphinxbase

Disse moduler er i virkeligheden Python-wrappers om den C-kode, der håndterer det egentlige computerarbejde med at oversætte lyde til tekst. Det mest grundlæggende arbejde består i at oprette et Decoder-objekt fra Pocket Sphinx-modulet. Decoder-objektet bruger adskillige input-parametre til at definere de sprogfiler, som det har lov til at bruge. De omfatter hmm , lm og dict . Hvis du bruger de ovennævnte pakker til håndtering af engelsk, kan du finde de nødvendige filer i mapperne “/usr/share/pocketsphinx/model/hmm/wsj1” og
“/usr/share/pocketsphinx/model/lm/wsj.”

Hvis du ikke angiver disse parametre, prøver det at bruge fornuftige standardfiler, der som regel virker udmærket til engelsk tale. Nu kan man give dette nyoprettede Decoder-objekt >WAV-filer med data, der skal bearbejdes. Som du erindrer, har vi tidligere gemt den optagede tale som WAV-fil. Når du skal få denne lyd optaget i det rigtige format, skal du redigere koden fra første trin og sikre dig, at du optager i mono (ved for eksempel at bruge én kanal) og optager ved 16 kHz med 16 bit-kvalitet. For at læse den rigtigt kan du bruge et filobjekt og indlæse det som binær fil med læserettigheder. WAV-filer har en stump header-data i begyndelsen, og den skal du springe over.

Det gør du ved at bruge funktionen seek til at springe over de første 44 bytes. Nu er din filpointer i den korrekte position, og du kan videregive filobjektet til Decoder-objektets decode_raw() -function. Nu foretager det en masse dataknusning for at prøve at finde ud af, hvad der er blevet sagt. For at få resultaterne, skal du bruge funktionskaldet get_hyp() . Du får nu en liste med tre elementer fra denne funktion: en streng, der indeholder det bedste gæt på en talt tekst, en streng, der indeholder ytrings-id og et tal, der indeholder scoren for dette gæt.

>> Indtil nu har vi set på, hvordan man bruger det generiske sprog og audiomodeller til et bestemt sprog. Men Pocket Sphinx er et sprogsystem på forskningsniveau, og det har derfor redskaber, som du kan bruge til at bygge dine egne modeller [Billede  A]. På denne måde kan du træne din kode til at forstå din egen stemme med alle dens særpræg og betoninger. Det er en langvarig proces, og det er kun de færreste, der orker at gøre noget så intensivt. Men hvis du er interesseret, kan du finde information på det centrale website (http://cmusphinx.sourceforge.net). Du kan også definere dine egne modeller og grammatik og dermed fortælle Pocket Sphinx, hvordan det skal tolke de lyde, det arbejder med. Hvis du vil løse disse opgaver, kræver det en hel del læsning af dig.

Se også:  Google Home + Google Home Mini [TEST]: Den nemme vej til et stemmestyret hjem

>> Hvis du vil arbejde mere direkte med audio, kan du bede Pocket Sphinx om at begynde processen med funktionen
start_utt() . Så kan du begynde at læse audio fra din mikrofon. Du er nødt til at indlæse datablokke af passende størrelse, før du giver dem til Pocket Sphinx – specifikt til funktionen process_raw() – og du skal stadig bruge funktionen get_hyp() for at få fat i den oversatte tekst. Og fordi din kode ikke kan vide, når nogle har afsluttet en komplet ytring, skal man gøre det fra en løkke. Ved hver af løkkens omgange skal du læse en anden stump audio og videregive den til Pocket Sphinx. Dernæst skal du kalde get_hyp() igen for at se, om du kan få noget forståeligt ud af dine data. Når du er færdig med dette realtids-arbejde, kan du bruge funktionen end_utt() .

udliciter opgaver: komplet kodeoversigt

# Først skal man importere de nødvendige moduler
import pocketsphinx as ps
import sphinxbase

# Dernæst skal du oprette et Decoder-objekt
hmmd = ‘/usr/share/pocketsphinx/model/hmm/wsj1’
lmd = ‘/usr/share/pocketsphinx/lm/wsj/wlist5o.3e-7.vp.tg.lm.DMP’
dictd = ‘/usr/share/pocketsphinx/lm/wsj/wlist5o.dic’
d = ps.Decoder(hmm=hmmd, lm=lmd, dict=dictd)

# Du skal springe over header.informationen i din WAV-fil
wavFile = file(‘my_file.wav’, ‘rb’)
wavFile.seek(44)

# Nu kan du afkode din audio
d.decode_raw(wavFile)
results = d.get_hyp()

# Det mest oplagte gæt er det første
decoded_speech = results[0] print “I said “, decoded_speech[0], “ with a confidence of ”, decoded_speech[1]

# Før du laver live-afkodning, skal du have PyAudio-modulet
import pyaudio
p = pyaudio.PyAudio()

# Nu kan du åbne en input-stream
in_stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000,input=True, frames_per_buffer=1024)
in_stream.start_stream()

# Nu kan du begynde at afkode
d.start_utt()
while True:
buf = in_stream.read(1024)
d.process_raw(buf, False, False)
results = d.get_hyp()
# Her vil du gøre noget, der bygger på den afkodede tale
# Når du er færdig, kan du lukke for det hele
break
d.end_utt()

TAGS
digital assistent
gør det selv
Raspberry Pi

DEL DENNE
Share

Seneste Tech test
Seneste konkurrencer

Mest populære
Populære
Nyeste
Tags

Find os på de sociale medier

Modtag dagligt IT-nyhedsbrev

Få gratis tech-nyheder i din mail-indbakke alle hverdage. Læs mere om IT-UPDATE her

Find os på FaceBook

Alt om DATA

Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
redaktion@altomdata.dk

Datatid TechLife

Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
redaktion@datatid.dk

Audio Media A/S

CVR nr. 16315648,
Lautrupsgade 7,
DK-2100 København Ø
Telefon: 33 91 28 33
info@audio.dk
Annoncesalg / Prislister:
Lars Bo Jensen: lbj@audio.dk Telefon: 40 80 44 53
Annoncer: Medieinformation


Alt om DATA, Datatid TechLife  © 2019
Privatlivspolitik og cookie information - Audio Media A/S