NXP-LOGO

NXP AN14270 Shtimi i mbështetjes zanore në Guider GUI

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-PRODUCT

Specifikimet

Emri i produktit: AN14270 – Shtimi i mbështetjes zanore në udhëzuesin GUI për i.MX 93

Rishikimi: 1.0

Data: 16 maj 2024

Informacioni i produktit

Abstrakt: Ky shënim aplikacioni eksploron integrimin e zërit duke bashkuar teknologjinë e njohjes së të folurit (VIT) me Udhëzuesin GUI.

Prodhuesi: NXP gjysmëpërçuesit

Mbiview

Udhëzues GUI: Një mjet për zhvillimin e ndërfaqes së përdoruesit nga NXP që përdor bibliotekën grafike LVGL për të krijuar ekrane me cilësi të lartë me miniaplikacione, animacione dhe stile të ndryshme.

Teknologjia inteligjente e zërit (VIT): Një mjet nga NXP për përcaktimin e fjalëve dhe komandave përmes mjeteve falas në internet dhe softuerit të kontrollit të zërit.

Radha e mesazheve (MQUEUE): Zbaton rradhët e mesazheve POSIX 1003.1b për komunikim ndër-procesor ndërmjet GUI Guider dhe VIT.

Kërkesat e harduerit, softuerit dhe hostit

Kategoria Përshkrimi
Hardware Sipas kërkesave të produktit
Software Sipas kërkesave të produktit
Pritësi Sipas kërkesave të produktit

Udhëzimet e përdorimit të produktit

Kërkesat paraprake

Version Linux ndezës

Për të ndezur EVK me versionin Linux:

$ ./uuu.exe -b emmc_all .sd-flash_evk imx-image-full-imx93evk.wic

Zinxhiri i mjeteve me projektin Yocto

  1. Krijo një dosje koshi: $ mkdir ~/bin
  2. Shkarko mjet repo: $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  3. Shto dosjen bin në variablin PATH: $ export PATH=~/bin:$PATH
  4. Receta për klonim: $ mkdir imx-yocto-bsp $ cd imx-yocto-bsp $ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-mickledore -m imx-6.1.55-2.2.0.xml $ repo sync
  5. Për të ndërtuar dhe konfiguruar: $ DISTRO=fsl-imx-fb MACHINE=imx93evk source imx-setup-release.sh -b deploy

Pyetjet e bëra më shpesh (FAQ)

Q: Çfarë është VIT?
A: VIT do të thotë Voice Intelligent Technology, një mjet nga NXP për përcaktimin e fjalëve dhe komandave duke përdorur mjete në internet dhe softuer të kontrollit të zërit.

Q: Çfarë është GUI Guider?
A: GUI Guider është një mjet për zhvillimin e ndërfaqes së përdoruesit nga NXP që përdor bibliotekën grafike LVGL për të krijuar ekrane me cilësi të lartë me miniaplikacione, animacione dhe stile të ndryshme.

Informacioni i dokumentit

Informacion përmbajtja
Fjalë kyçe AN14270, VIT, njohja e të folurit, komunikimi ndër-procesor (IPC), radha e mesazheve, udhëzuesi GUI
Abstrakt Ky shënim aplikacioni eksploron mundësinë e integrimit të zërit duke krijuar një urë lidhëse midis një teknologjie të njohjes së të folurit, si VIT, dhe Guider GUI të krijuesit të ndërfaqes.

Hyrje

Ndërfaqja e përdoruesit ka kufizuar përdorimin e mjetit GUI Guider. Marrja e një ndërveprimi vetëm përmes një miu ose ekrani me prekje mund të jetë i mjaftueshëm për disa raste përdorimi. Megjithatë, ndonjëherë rasti i përdorimit kërkon të shkojë përtej kufizimeve të tij. Ky dokument eksploron mundësinë e integrimit të zërit duke krijuar një urë lidhëse midis një teknologjie të njohjes së të folurit, si VIT, dhe Guider GUI të krijuesit të ndërfaqes. Ai përdor një mënyrë universale për të lidhur të gjitha komandat e njohjes së zërit dhe një fjalë alarmi me çdo ndërveprim të krijuar nga GUI Guider.

Mbiview

Për të vendosur komunikimin ndërmjet komandave të GUI Guider dhe teknologjisë VIT, referojuni seksionit 8. Komunikimi ndërtohet duke përdorur një kod të krijuar si mbajtës, i cili dëgjon dhe i mundëson asaj të simulojë ngjarjet në GUI për të krijuar ndërveprimin.

Udhëzues GUI
GUI Guider është një mjet për zhvillimin e ndërfaqes së përdoruesit nga NXP që ofron një opsion të shpejtë për të krijuar një ekran me cilësi të lartë duke përdorur bibliotekën grafike LVGL. Ai përdor një shumëllojshmëri të ndryshme miniaplikacionesh, animacionesh dhe stilesh, me konfigurime të ndryshme të aktivizimit dhe personalizim me mundësinë e moskodimit. Për më shumë informacion mbi Udhëzuesin GUI, referojuni Udhëzuesit të Përdoruesit GUI Guider v1.6.1 (dokument GUIGUIDERUG).

Teknologji inteligjente me zë
Teknologjia Inteligjente e Zërit (VIT) është një mjet i krijuar nga NXP për të përcaktuar fjalët zgjuese dhe komandat duke përdorur mjete online falas, bibliotekë dhe paketë softuerike të kontrollit të zërit. MCUXpresso mund ta përdorë atë për mikro-kontrollues ose Linux BSP mund ta përdorë atë për mikro-procesorë.

Radha e mesazheve
Radha e mesazheve (MQUEUE) është një menaxher që zbaton radhët e mesazheve të formatit POSIX 1003.1b. Përdoret si komunikim ndër-procesor (IPC) për të krijuar urën ndërmjet GUI Guider dhe VIT. Ai shkëmben të dhëna në formën e mesazheve, duke i dërguar ato përmes VIT dhe duke kryer menaxhimin me skriptin
komandues_trajtues.

Kërkesat për harduer, softuer dhe host

Tabela 1 jep detaje të harduerit, softuerit dhe hostit të nevojshëm për të përdorur VIT dhe GUI Guider.

Tabela 1. Hardueri, softueri dhe hosti i përdorur

Kategoria Përshkrimi
Hardware • i.MX 93 EVK

• Furnizimi me energji elektrike: USB Type-C 45 W furnizimi me energji (5 V/3 A)

• Kabllo USB Type-C mashkull në USB Type-A mashkull: montim, në përputhje me USB 3.0

• Përshtatës LVDSL dhe kabllo HDMI ose panel LCD DY1212W-4856 LVCD

• Mikrofoni i brendshëm i.MX 93

Software • Versioni i Linux BSP: L6.1.55_2.2.0

• Versioni GUI Guider v1.6.1 e tutje

• Zinxhiri i veglave 6.1-Langdale

Pritësi • X86_64 Linux Ubuntu 20.04.6 LTS

Kërkesat paraprake

Ky seksion përshkruan instalimin e mjeteve të ndryshme të nevojshme.

Versioni Linux ndezës

Përpara se të ndiqni hapat e mëposhtëm, ndryshoni konfigurimin e nisjes në modalitetin e shkarkimit dhe lidhni një USB përmes hostit. Për më shumë informacion, referojuni Udhëzuesit të Përdoruesit të i.MX Linux (dokumenti IMXLUG).

Për të ndezur EVK, kryeni hapat e mëposhtëm:

  1. Shkarkoni versionin e fundit të imazhit NXP Linux BSP për i.MX 93 (L6.1.55_2.2.0 ose më i fundit).
  2. Për të ndezur EVK-në, shkarkoni UUU-në e fundit: https://github.com/nxp-imx/mfgtools/releases.
  3. Lidhni EVK me hostin duke përdorur portën EVK USB1.
  4. Duke përdorur imx-image-full, vendosni të dy programet në të njëjtën mënyrë file dhe ndezni EVK duke përdorur komandën e mëposhtme:

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (1)

Përndryshe, përdorni vetëm imazhin për të ndezur EVK-në:

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (2)

Shënim: Sigurohuni që të kontrolloni kunjat e boot.

Zinxhiri i mjeteve me projektin Yocto
Projekti Yocto është një bashkëpunim me burim të hapur që ndihmon në krijimin e sistemeve të personalizuara të bazuara në Linux. Yocto krijon imazhin e përdorur nga i.MX.
Sigurohuni që makina pritës të ketë një paketë mjetesh për zhvillimin e aplikacioneve (ADT) ose zinxhir mjetesh për të pasur të njëjtin mjedis si EVK. Sigurohuni që është në gjendje të përpilojë aplikacione për bordin e synuar. Për të marrë zinxhirin e duhur të veglave, referojuni "seksionit 4.5.12" në Udhëzuesin e Përdoruesve të i.MX Linux (dokumenti IMXLUG) dhe "seksionit 4" në Udhëzuesin e Përdoruesve të Projektit i.MX Yocto (dokumenti IMXLXYOCTOUG).

Për të marrë zinxhirin e veglave në makinën pritës nga mjedisi Yocto, kryeni hapat e mëposhtëm:

  1. Krijoni një dosje koshi në drejtorinë kryesore:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (3)
  2. Sigurohuni që dosja ~/bin të jetë në variablin PATH.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (4)
  3. Klononi recetat për t'u përdorur në depo:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (5)
  4. Për të ndërtuar, konfiguroni si më poshtë:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (6)
  5. Për të gjeneruar zinxhirin e veglave, konfiguroni një mjedis të pavarur pa Projektin Yocto si më poshtë:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (7)

Udhëzues GUI

Ky seksion shpjegon për Udhëzuesin GUI dhe si të përdorni bazat për të krijuar një projekt bazuar në këtë mjet. Ai gjithashtu shpjegon për karakteristikat e ndryshme për t'u përdorur dhe marrë advantage nga ato karakteristika.

Pajisje dhe ngjarje të Gui Guider
Kur përdoruesi krijon një projekt në GUI Guider, përdorimi i miniaplikacioneve të ndryshme caktohet si një objekt i gjeneruar automatikisht. Ky objekt ka veti të ndryshme; një prej tyre janë Ngjarjet. Në varësi të miniaplikacionit, ngjarjet mund të kenë shkaktarë të ndryshëm dhe çfarë ndodh varet nga objektivi. Për shembullampLe, Figura 1 tregon se çfarë ndodh nëse një buton synon ekranin të ketë vetëm veprimin "Ngarkimi i ekranit".

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (8)

Këto objekte mund të gjenden në shteg /generated/gui-guider.h. Script command_handler merr advantage nga ngjarjet e përdorura nga miniaplikacionet që simulojnë shkasin.
Për më shumë informacion mbi miniaplikacionet dhe ngjarjet, referojuni GUI Guider v1.6.1 Udhëzuesi i përdorimit (dokument GUIGUIDERUG).

Fillimi i shpejtë
Për të filluar punën, instaloni GUI Guider.

Në instalimin e hostit, kryeni hapat e mëposhtëm:

  1. Shkarkoni versionin më të fundit të GUI Guider (1.7.1 ose më i fundit).
  2. Ndiqni hapat për të shkarkuar.
    Këtu, përdoruesi mund të zgjedhë të krijojë një projekt me ish zyrtaramples apo projektet lokale.

Për të krijuar një projekt GUI, kryeni hapat e mëposhtëm:

  1. Hap udhëzuesin GUI 1.7.1.
  2. Krijo një projekt.
  3. Zgjidhni versionin LVGL.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (9)
  4. Për i.MX 93, zgjidhni procesorin i.MX.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (10)
  5. Zgjidhni një shabllon. Për këtë dokument, zgjidhni shabllonin "ScreenTransition".NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (11)
  6. Zgjidhni një emër projekti dhe për të krijuar një projekt, klikoni Krijo.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (12)
  7. Dritarja kryesore duhet të shfaqet, siç tregohet në figurën 6.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (13)

Krijimi i miniaplikacioneve, ngjarjeve dhe aktivizuesve

Për të krijuar miniaplikacione, ngjarje dhe aktivizues, kryeni hapat e mëposhtëm:

  1. Në anën e majtë të Udhëzuesit GUI, klikoni butonin, të theksuar me të kuqe, dy herë.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (14)
  2. Si rezultat, butoni zgjerohet për të shfaqur të gjitha miniaplikacionet e disponueshme.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (15)
    Mund të ketë pajisje të ndryshme me veti të ndryshme. Ky shënim aplikacioni fokusohet në butonin e llojit të miniaplikacionit. Megjithatë, mund të ketë lloje të tjera miniaplikacionesh me kufizimet e tyre. Për më shumë informacion, referojuni "Detajet e miniaplikacioneve" në Udhëzuesin e përdorimit të GUI Guider v1.6.1 (dokument GUIGUIDERUG).
  3. Shtoni miniaplikacionin Button duke e zvarritur në ndërfaqen e përdoruesit nga skeda e miniaplikacioneve.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (16)
  4. Klikoni me të djathtën në Butonin për vetitë dhe klikoni Shto ngjarje.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (17)
  5. Një dritare shfaqet që tregon të gjitha ngjarjet që mund të shkaktojë miniaplikacioni.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (18)
  6. Më pas, dritarja tregon të gjitha ngjarjet që mund të ndezë këmbëza. Këto ngjarje mund të aplikohen në ekrane, miniaplikacione të tjera ose në krijimin e ngjarjeve të personalizuara.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (19)
  7. Për këtë ishample, është ngarkuar një ekran i ri. Klikoni në ekranin e ngarkimit dhe zgjidhni ekranet që do të ngarkohen.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (20)
  8. Për të testuar aplikacionin, përdorni simulatorin e integruar me GUI Guider. Përdoret për të zgjedhur butonin tjetër dhe llojin e simulimit që do të përdoret. Për këtë rast, përdorni një simulator në C.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (21)
  9. Për të ngarkuar ekranin e ri, klikoni butonin.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (22)

Ndërtesa për i.MX 93

Për të ndërtuar i.MX 93, kryeni hapat e mëposhtëm:

  1. Sigurohuni që zinxhiri i veglave të përdorura nga GUI Guider të jetë instaluar saktë. Për të verifikuar kryqëzimin, kontrolloni shtegunNXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (23)
  2. Nga ish-i i mëparshëmample, për të krijuar aplikacionin dhe për ta ekzekutuar në i.MX 93, zgjidhni Project > Build > Yocto nga shiriti i sipërm.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (24)
  3. Për të kontrolluar statusin e projektit, madhësisë binare dhe regjistrit, zgjidhni skedën Informacion në fund të aplikacionit. Kontrolloni regjistrin duke zgjeruar skedën Informacion.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (25)
  4. Regjistri ofron informacion mbi ndërtesën duke përfshirë vendndodhjen e binarit file. Për këtë rast, binar është në rrugën / /ndërtoj/gui_guider.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (26)
  5. Gjeni terminalin pritës dhe dërgojeni atë në EVK duke përdorur komandën e mëposhtme:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (27)
    Shënim: Për të përdorur qasjen e mësipërme, është e nevojshme që të dy makinat, hosti dhe objektivi të jenë në të njëjtin rrjet dhe IP-ja e bordit të jetë e njohur.
  6. Ekzekutoni binarin file në EVK duke përdorur komandën e mëposhtme:NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (28)
    Për shembullample, duke përdorur një ekran LVDS, i cili tregon projektin e ndërtuar nga GUI Guider, siç tregohet në Figurën 19.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (29)

VIT

Ky seksion shpjegon se si të përdorni VIT të pavarur dhe të gjeneroni modelin për ta lidhur atë me Udhëzuesin GUI. Ai shpjegon se si të përdoret hosti për të gjeneruar një model me karakteristikat e dëshiruara. Për më shumë informacion, referojuni VOICE-INTELLIGENT-TECHNOLOGY.

Krijo modelin

Për të krijuar modelin, kryeni hapat e mëposhtëm:

  1. Hyni në VIT website: VIT Model Generation Tool
  2. Klikoni skedën GENERATE MODEL.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (30)
  3. Zgjidhni platformën dhe versionin SW si "Linux BSP" dhe "LF6.1.55_2.2.0". Gjithashtu, zgjidhni opsionet e aplikueshme për Pajisja si "i.MX93" dhe Gjuha si "Anglisht".NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (31)
  4. Shtoni fjalë zgjuese, të cilat veprojnë si një shkas që i tregon VIT-it se kur të fillojë të dëgjojë për një komandë zanore. Kur krijohet një fjalë e re ose komandë, ajo kërkon të vendoset vlera për "Ndjeshmëri". Ky parametër rrit shkallën e njohjes, që do të thotë nëse është një vlerë pozitive është më e lehtë për t'u zbuluar, por mund të rezultojë në më shumë zbulime false. Në vend të vlerës negative të përdorur për të shmangur konfuzionin midis fjalëve kyçe, ruajeni vlerën e ndjeshmërisë si 0. Për p.sh.ample, këtu shtohet shprehja “hej led”.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (32)
  5. Shtoni komandat zanore që do të përdoren dhe eliminoni ato që nuk përdoren.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (33)
  6. Klikoni butonin Generate model dhe prisni derisa të shkyçet butoni Shkarko modelin.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (34)
  7. Modeli dërgohet në skedën MODELET MIA. Për të shkarkuar modelin më të fundit, klikoni ikonën e shkarkimit.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (35)
  8. Ekstraktoni dosjen zip dhe ruajeni file VIT_Model_sq që përmban dosjen VIT_package.

Përpilimi i VIT voice_ui_app si i pavarur
Voice_ui_app është një ishample krijuar për depon imx-voiceui. Ky aplikacion përdor modelin për të zbuluar fjalët zgjuese dhe komandat. Një mjet i përdorur nga ky dokument është argumenti "notify". Ky argument kur zbulon një fjalë zgjimi ose komandë, hap një Python file WakeWordNotify ose WWCommandNotify me një argument të sistemit duke përdorur identifikuesin (ID). Kjo ID ndihmon për të bërë dallimin midis nxitësve.

Për të krijuar voice_ui_app në host dhe për të ndihmuar në caktimin e tij në modelin e mëparshëm të krijuar, kryeni hapat e mëposhtëm:

  1. Klononi depon e VIT duke përfshirë versionin e degës, duke përdorur komandën e mëposhtme:
    $ klon git https://github.com/nxp-imx/imx-voiceui -b lf-6.1.55-2.2.0
  2. Krijoni një kopje rezervë të origjinalit file, duke përdorur komandën e mëposhtme:
    $ cd /imx-voiceui
    $ mv ./vit/platforms/iMX9_CortexA55/lib/VIT_Model_en.h
  3. Konfiguro zinxhirin e veglave të instaluar më parë:
    burimi $ /opt/fsl-imx-xwayland/6.1-langdale/environment-setup-armv8a-poky-linux
    Shënim: Përdorni zinxhirin e veglave të krijuar nga Yocto.
  4. Ndërtoni projektin tuaj duke përdorur komandën e mëposhtme:
    $ bëj të gjitha VERSION=04_08_01 CURRENT_GCC_VERSION=10 BUILD_ARCH=CortexA55
  5. Pasi të ndërtohet projekti, ai gjeneron një direktori të quajtur release. Kopjoni file voice_ui_app në këtë direktori në EVK:
    $ scp version/voice_ui_app root@ :/shtëpi/rrënjë

Duke përdorur parametrin -notify
Skripti i thirrur nga voice_ui_app kur kalon flamurin “-notify”, duhet të jetë në shtegun /usr/bin/. Përdorni bashkëngjitur files në /usr/bin/ dhe kopjoni këto skripta në EVK.

$ scp WakeWordNotify root@ :/usr/bin/
$ scp WWCommandNotify root@ :/usr/bin/

Të files brenda, përdorni ID-në e fjalës/komandës dhe dërgojeni përmes radhës së mesazheve.
Pas kopjimit të këtyre files në EVK, përdorni parametrin "-notify" për të nënkuptuar se files WakeWordNotify dhe WWCommandNotify kanë lejet e nevojshme. Për ta shtuar atë në EVK, ekzekutoni komandën e mëposhtme:

root@imx93evk:~# chmod a+x /usr/bin/WakeWordNotify root@imx93evk:~# chmod a+x /usr/bin/WWCommandNotify

Pjesa e përparme e audios
Pjesa e përparme e audios (AFE) përdoret si furnizim për njohjen e zërit VIT. Ndihmon për të pastruar zhurmën dhe jehonën duke përdorur burimin dhe një referencë të altoparlantit. Prandaj, rezultati është një audio e pastër e mikrofonit me një kanal që mund të përdoret për përpunim. Për më shumë informacion, shihni VOICESEEKER.
AFE mund të gjendet brenda EVK në shtegun /unit_tests/nxp-afe.

Për të përgatitur dhe ekzekutuar programin, ndiqni hapat në file TODO.md në nxp-afe:

  1. Sigurohuni që DTB është imx93-11×11-evk.dtb.
  2. Instaloni modulin aloop për të mbështetur AFE:
    root@imx93evk:~# sudo modprobe snd-aloop
  3. Krijoni një kopje rezervë të asound.conf dhe përdorni asound.conf përkatës për tabelën:
    root@imx93evk:~# mv /etc/asound.conf /etc/asound-o.conf
    root@imx93evk:~# cp /unit_tests/nxp-afe/asound.conf_imx93 /etc/asound.conf
  4. Ndryshoni WakeWordEnginge për të përdorur saktë motorin e fjalëve VIT. Ky konfigurim është brenda file /unit_tests/nxp-afe/Config.ini.
  5. Modifiko veçorinë WakeWordEngine = VoiceSpot që përdor VoiceSpot si parazgjedhje në WakeWordEngine = VIT.
  6. Për të testuar AFE, ekzekutoni voice_ui_app:
    root@imx93evk:~# ./voice_ui_app &
    Shënim: Për këtë rast, nuk është e nevojshme të shtoni parametrin "-notify".
  7. Ekzekutoni AFE, duke përdorur komandën e mëposhtme:
    root@imx93evk:~# /unit_tests/nxp-afe/afe libvoiceseekerlight &
  8. Për të përcaktuar nëse AFE funksionon në sfond, përdorni komandën &. Për të ditur se cilat programe të tjera po ekzekutohen në sfond, përdorni komandën e mëposhtme:
    root@imx93evk:~# ps
  9. Për të mbyllur AFE ose voice_ui_app, përdorni komandën e mëposhtme:
    root@imx93evk:~# pkill afe
    root@imx93evk:~# pkill voice_ui_app

Duke ekzekutuar voice_ui_app pa -notify

  1. Pasi të keni ndjekur hapat në TODO.md file, ekzekutoni aplikacionin binar voice_ui_app nga terminali në EVK. Ai shfaq informacione se si funksionon VIT.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (36)
  2. Për të ushqyer aplikacionin voice_ui_, ekzekutoni AFE duke përdorur komandën e mëposhtme:
    root@imx93evk:~# /unit_tests/nxp-afe/afe libvoiceseekerlight &
  3. Thoni komandën wakeword dhe zanore dhe kontrolloni nëse po funksionon siç pritej. Ai tregon wakeword dhe komandën zanore në terminal si më poshtë:
    – U zbulua fjala zgjimi 1 HEY NXP StartOffset 16640
    – U zbulua komanda zanore 3 AKTIVE ON

Aplikacioni GUI Guider VIT

Siç u shpjegua më herët, aplikacioni/skripti command_handler përmes njoftimit VIT dërgon ID-në e komandës dhe ID-në e fjalës zgjuese në një radhë mesazhesh si IPC. Më pas i kap këto ID për të simuluar një ngjarje në një aplikacion GUI-Guider. Figura 26 tregon se si është ekzekutuar ky komunikim.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (37)

Shënim: Sigurohuni që të konfiguroni mbajtësin që të funksionojë siç duhet me modelin e personalizuar të krijuar. Këto modifikime duhet të zbatohen në host.

Përdor command_handler për të simuluar ngjarje

Për të përdorur command_handler për të simuluar ngjarjet, kryeni hapat e mëposhtëm:

  1. Shtoni files command_handler.h dhe command_handler.c te projekti GUI Guider në drejtori / /doganore/.
  2. Për të përputhur modelin aktual të përdorur, modifikoni command_handler.h duke ndryshuar voice_cmd_t dhe voice_ww_t.
    Shënim: Sigurohuni që të përdoret e njëjta renditje në model.
  3. Ndryshoni sasinë e fjalëve zgjuese dhe komandave në file / /custom/command_handler.h:
    #define VIT_WW_NUMBER 2
    #define VIT_CMD_NUMBER 5
  4. Inicializoni ndërfaqen e komandës në file / /custom/custom.c. GUI Guider e gjeneron këtë file automatikisht.
    #include "command_handler.h"
  5. Funksioni i përcaktuar si void custom_init(lv_ui *ui) është i disponueshëm në file /
    rrugë>/custom/custom.c. Ky funksion mund të modifikohet për të shtuar një kod dhe komandën fillestare start_command_handler() si më poshtë:
    void custom_init(lv_ui *ui)
    {
    /* Shtoni kodet tuaja këtu */
    start_command_handler();
    }
    Ku:
    Start_command_handler() përdoret për krijimin e një thread që funksionon si mbajtës, marrjen e mesazheve të dërguara nga VIT dhe ekzekutimin e komandave të caktuara nga command_handler_link().
  6. Për të lidhur fjalët zgjuese dhe komandën VIT me objektin dhe ngjarjen, përdorni komandën e mëposhtme:
    void command_handler_link(voice_ww_t WW_Id, voice_cmd_t CMD, lv_obj_t** obj, lv_event_code_t event);
    Ku:
    • Command_handler_link() përdoret për të ruajtur një ngjarje për të simuluar për ekzekutimin e VIT.
    • Inputet, voice_ww_t dhe voice_cmd_t, janë krijuar në hapin 2, lidhen drejtpërdrejt me modelin VIT.
    • Argumenti i tretë, lv_obj_t**, lidhet me krijimin e objektit GUI Guider. Së pari, gjeni objektin që do të lidhet. Emri përputhet me strukturën tjetër _ . Për të gjetur se ku është përcaktuar, kontrolloni file gjeneruar nga GUI Guider në generated/gui_guider.h. Këtu mund të gjeni strukturën tjetër me të gjitha objektet e mundshme për t'u lidhur.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (39)

Funksioni custom_init(lv_ui *ui) përdoret për të inicializuar në fillim të ekzekutimit të GUI Guider. Kjo strukturë mund të përdoret për ta lidhur atë me një objekt, duke ditur se si ta përdorni atë saktë. Treguesi i strukturës së dhënë është *ui, dhe treguesi për të kërkuar është lv_obj_t**. Prandaj, është e nevojshme të përdoret kjo strukturë me formatin vijues:

&ui->shpejtësia_btn_1

  • Argumenti i katërt, ngjarja lv_event_code_t, lidhet me ngjarjen që do të shkaktohet. Zakonisht ka një strukturë si kjo: LV_EVENT_ . Ai përcakton se çfarë të bëhet me ngjarjen e shkaktuar përmes kodit viewer në file ngjarje_fillimi.c.
    Për shembullampLe, btn_1 krijuar në shpejtësinë e ekranit kanë këto ngjarje të gjeneruara nga GUI Guider.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (40)

Example
Ky seksion demonstron një ishampnga ky implementim për të shtuar mbështetje zanore në Udhëzuesin GUI, duke ndërruar miniaplikacionin LED dhe duke ndryshuar midis ekraneve GUI.

  1. Duke përdorur shabllonin GUI të krijuar me butonin, shtoni miniaplikacionet. Për shembullample, shtoni një widget LED.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (41)
  2. Shtoni ngjarjen e shtypur në btn_1 dhe për të ndryshuar sfondin shtoni konfigurimin e ngjarjes. Për këtë rast, sfondi duhet të zgjidhet si i zi për të "fikur" miniaplikacionin LED. Prandaj, ngjarja e përdorur shtypet > led_1 > Sfondi i zi (#000000).NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (42)
  3. Duke përdorur të njëjtin buton, konfiguroni një ngjarje për ta caktuar atë të "ndizet". Për këtë rast, shtoni ngjarjen e lëshuar në btn_1 dhe shtoni të kuqe në sfond. Prandaj, ngjarja e përdorur lëshohet > led_1 > Sfondi i kuq (#ff0000).NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (43)
  4. Pasi të krijohet GUI, shtoni command_handler.c dhe command_handler.h në custom/folder.
  5. Për të krijuar lidhjen midis ngjarjeve dhe VIT, shtoni rreshtat e mëposhtëm në custom_init() brenda file në porosi/zakone.c. Për të ndryshuar ndërmjet ekraneve, shtoni dy ngjarje të tjera duke lidhur btn_1 për të kaluar në ekranin 2.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (44)NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (45)
    Ku:
    • Kombinimi i fjalës zgjuese HEY_LED dhe komanda TURN_OFF është caktuar për të fikur LED. Me fjalë të tjera, ndryshoni sfondin në të zezë.
    • Kombinimi i fjalës zgjuese HEY_LED dhe komandës TURN_ON është caktuar për ta kthyer LED-in në të kuqe.
    • Kombinimi i fjalës zgjuese HEY_NXP dhe komandës NEXT caktohet për të ndryshuar midis ekraneve duke përdorur ngjarjen e caktuar të gjitha në btn_1 dhe duke përdorur btn_before në ekranin 2.
    • Kombinimi i fjalës zgjuese HEY_NXP dhe komandës RETURN caktohet për t'u kthyer në ekranin 1.
  6. Zgjidhni Projekt > Ndërtoni > Yocto dhe ndërtoni projektin.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (46)
  7. Dërgoi binarin e ri në EVK.
    Shënim: Regjistri i informacionit siguron vendndodhjen binare.
    scp rrënjë@ :/shtëpi/rrënjë

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (47)

Testimi dhe konfigurimi
Pasi të ketë përfunduar shkarkimi, kryeni hapat e mëposhtëm në EVK:

  1. Verifikoni që moduli snd-aloop është i ngarkuar tashmë duke ekzekutuar lsmod. Nëse moduli nuk gjendet, ngarkojeni duke përdorur komandën e mëposhtme:
    root@imx93evk:~# sudo modprobe snd-aloop
  2. Drejtoni voice_ui_app duke përdorur komandën e mëposhtme:
    root@imx93evk:~# ./voice_ui_app -notify &
    Ku:
    • -notify përdoret për të dërguar një njoftim te WakeWordNtfy dhe WWCommandNtfy.
      Shënim: Mos harroni të kopjoni WakeWordNtfy dhe WWCommandNtfy në usr/bin.
    • & përdoret për të ekzekutuar në sfond.
  3. Verifikoni që motori VIT është vendosur në Config.ini.
  4. Ekzekutoni AFE me libvoiceseekerlight në sfond:
    root@imx93evk:~# cd /unit_tests/nxp-afe/
    root@imx93evk:~# ./afe libvoiceseekerlight &
  5. Hapni aplikacionin GUI Guider duke përdorur komandën e mëposhtme:
    root@imx93evk:~# ./gui_guider
    Deri në këtë hap, ekrani LVDS ose HDMI shfaq GUI-në e krijuar.NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (48)
  6. Provoni të përdorni një komandë zanore dhe të caktuar më parë, për shembullample, thoni "Hej NXP" dhe "Turn off". Pas thënies së komandës për fikje, në varësi të kthimit të thirrjes së caktuar, GUI Guider kryen një veprim. Për këtë ishampLe, GUI Guider ndryshon ngjyrën e sfondit për miniaplikacionin LED.

NXP-AN14270-Adding-Voice-Support-to-GUI-Guider-FIG- (49)

Burimet e ndërlidhura

Tabela 2 liston disa burime shtesë të përdorura për të plotësuar këtë dokument.

Tabela 2. Burimet e ndërlidhura

Burim Lidhja/si të merrni
Familja e procesorëve të aplikacioneve i.MX 93 - Arm Cortex-A55, Përshpejtimi ML, MPUNXP i.MX 93 A1 (i. MX93) me efikasitet të energjisë. https://www.nxp.com/products/processors-and- mikrokontrolluesit/arm-procesorët/i-mx-applications- procesorë/i-mx-9-procesorë/i-mx-93-aplikacione- processor-family-arm-cortex-a55-ml-acceleration-power- efikas-mpu:i.MX93
Linux i integruar për procesorët e aplikacioneve i.MX (IMXLINUX) http://www.nxp.com/IMXLINUX
Udhëzuesi i përdorimit GUI Guider v1.6.1 (GUIGUIDERUG) https://www.nxp.com/docs/en/user-guide/ GUIGUIDERUG-1.6.1.pdf
Depo VIT i.MX voiceUI https://github.com/nxp-imx/imx-voiceui

Shënim për kodin burimor në dokument

ExampKodi le i treguar në këtë dokument ka të drejtën e autorit dhe licencën e mëposhtme BSD-3-Clause:
E drejta e autorit 2023-2024 NXP Rishpërndarja dhe përdorimi në forma burimore dhe binare, me ose pa modifikim, lejohen me kusht që të plotësohen kushtet e mëposhtme:

  1. Rishpërndarja e kodit burimor duhet të ruajë njoftimin e mësipërm për të drejtën e autorit, këtë listë të kushteve dhe mohimin e mëposhtëm.
  2. Rishpërndarjet në formë binare duhet të riprodhojnë njoftimin e mësipërm për të drejtën e autorit, kjo listë e kushteve dhe mohimi i mëposhtëm në dokumentacion dhe/ose materiale të tjera duhet të sigurohen me shpërndarjen.
  3. As emri i mbajtësit të së drejtës së autorit dhe as emrat e kontribuesve të tij nuk mund të përdoren për të miratuar ose promovuar produkte që rrjedhin nga ky program pa leje specifike paraprake me shkrim.
    KY Softuer OFROHET NGA MBAJTËSIT DHE KONTRIBUESIT E TË DREJTAVE TË AUTORIT "SIÇ ËSHTË" DHE ÇDO GARANCI TË SHPREHTA APO TË ËSHTRUARA, PËRFSHIRË, POR JO KUFIZUARA NË, GARANCITË E KUFIZUARA TË KUFIZIMIT TË PARAQITURËS TË TREGTISË . NË ASNJË RAST TË DREJTAT E TË DREJTAVE TË AUTORIT APO KONTRIBUESIT DUHET PËRGJEGJËS PËR NDONJË DËM TË DIREKT, TË INDIREKT, TË VEÇANTË, SHEMBULL APO PAJISË (POR JO TË KUFIZUARA TË KUFIZUARA; PËRDORIMI, TË DHËNAT APO FITIMET; OSE NDËRPRERJE TË BIZNESIT) SIDO TË SHKAKTUAR DHE PËR ÇDO TEORI PËRGJEGJËSORE NË KONTRATË, PËRGJEGJËSI TË RRETË, OSE DETYRIMI (përfshirë neglizhencën APO TË NDRYSHME) QË NDRYSHET NË GJITHË MËNYRË NË KONTRATË, PËRGJEGJËSIA E RRETË, OSE F MUNDËSIA E DËMIMIT TË TIJ.

Historia e rishikimit
Tabela 3 përmbledh rishikimet e këtij dokumenti.

ID e dokumentit Data e lëshimit Përshkrimi
AN14270 v.1.0 16 maj 2024 Publikimi fillestar publik

Informacion ligjor

Përkufizimet
Draft - Një status i draftit në një dokument tregon se përmbajtja është ende nën rishikim të brendshëmview dhe subjekt i miratimit zyrtar, i cili mund të rezultojë në modifikime ose shtesa. NXP Semiconductors nuk jep asnjë përfaqësim ose garanci për saktësinë ose plotësinë e informacionit të përfshirë në një version draft të një dokumenti dhe nuk ka asnjë përgjegjësi për pasojat e përdorimit të një informacioni të tillë.

Mohim përgjegjësish
Garancia dhe përgjegjësia e kufizuar — Informacioni në këtë dokument besohet të jetë i saktë dhe i besueshëm. Megjithatë, NXP Semiconductors nuk jep asnjë përfaqësim ose garanci, të shprehur ose të nënkuptuar, në lidhje me saktësinë ose plotësinë e një informacioni të tillë dhe nuk do të ketë asnjë përgjegjësi për pasojat e përdorimit të këtij informacioni. NXP Semiconductors nuk mban asnjë përgjegjësi për përmbajtjen në këtë dokument nëse ofrohet nga një burim informacioni jashtë NXP Semiconductors.
Në asnjë rast, gjysmëpërçuesit NXP nuk do të jenë përgjegjës për ndonjë dëm të tërthortë, të rastësishëm, ndëshkues, të veçantë ose pasues (duke përfshirë – pa kufizim – fitimet e humbura, kursimet e humbura, ndërprerjen e biznesit, kostot që lidhen me heqjen ose zëvendësimin e ndonjë produkti ose tarifat e ripërpunimit) pavarësisht nëse ose jo, këto dëme bazohen në dëmshpërblim (përfshirë neglizhencën), garanci, shkelje të kontratës ose ndonjë teori tjetër ligjore.
Pavarësisht nga dëmtimet që mund të pësojë klienti për çfarëdo arsye, përgjegjësia totale dhe kumulative e NXP Semiconductors ndaj klientit për produktet e përshkruara këtu do të kufizohet në përputhje me Termat dhe kushtet e shitjes komerciale të NXP Semiconductors.

E drejta për të bërë ndryshime — NXP Semiconductors rezervon të drejtën të bëjë ndryshime në informacionin e publikuar në këtë dokument, duke përfshirë pa kufizim specifikimet dhe përshkrimet e produktit, në çdo kohë dhe pa paralajmërim. Ky dokument zëvendëson dhe zëvendëson të gjithë informacionin e dhënë përpara publikimit të tij.
Përshtatshmëria për përdorim — Produktet NXP Semiconductors nuk janë të dizajnuara, të autorizuara ose të garantuara që të jenë të përshtatshme për përdorim në mbështetje të jetës, sisteme ose pajisje kritike për jetën ose sigurinë, as në aplikacione ku mund të pritet në mënyrë të arsyeshme dështimi ose mosfunksionimi i një produkti NXP Semiconductors të rezultojë në lëndime personale, vdekje ose dëmtime të rënda pronësore ose mjedisore. NXP Semiconductors dhe furnitorët e tij nuk pranojnë asnjë përgjegjësi për përfshirjen dhe/ose përdorimin e produkteve NXP Semiconductors në pajisje ose aplikacione të tilla dhe për këtë arsye përfshirja dhe/ose përdorimi i tillë është në rrezikun e klientit.

Aplikacionet — Aplikacionet që përshkruhen këtu për cilindo prej këtyre produkteve janë vetëm për qëllime ilustruese. NXP Semiconductors nuk jep asnjë përfaqësim ose garanci që aplikacione të tilla do të jenë të përshtatshme për përdorimin e specifikuar pa testime ose modifikime të mëtejshme.

Klientët janë përgjegjës për projektimin dhe funksionimin e aplikacioneve dhe produkteve të tyre duke përdorur produktet NXP Semiconductors dhe NXP Semiconductors nuk pranon asnjë përgjegjësi për asnjë ndihmë me aplikacionet ose dizajnimin e produktit të klientit. Është përgjegjësi e vetme e klientit të përcaktojë nëse produkti NXP Semiconductors është i përshtatshëm dhe i përshtatshëm për aplikacionet e klientit dhe produktet e planifikuara, si dhe për aplikimin dhe përdorimin e planifikuar të klientëve të palëve të treta të klientit. Konsumatorët duhet të ofrojnë masa mbrojtëse të përshtatshme për dizajnin dhe funksionimin për të minimizuar rreziqet që lidhen me aplikacionet dhe produktet e tyre.

NXP Semiconductors nuk pranon asnjë përgjegjësi në lidhje me ndonjë parazgjedhje, dëmtim, kosto ose problem që bazohet në ndonjë dobësi ose parazgjedhje në aplikacionet ose produktet e klientit, ose aplikacionin ose përdorimin nga klientët e palëve të treta të klientit. Klienti është përgjegjës për kryerjen e të gjitha testeve të nevojshme për aplikacionet dhe produktet e klientit duke përdorur produktet NXP Semiconductors në mënyrë që të shmanget një parazgjedhje e aplikacioneve dhe produkteve ose e aplikacionit ose përdorimi nga klientët e palës së tretë të klientit. NXP nuk pranon asnjë përgjegjësi në këtë drejtim.

Termat dhe kushtet e shitjes komerciale — Produktet e NXP Semiconductors shiten duke iu nënshtruar kushteve të përgjithshme të shitjes komerciale, të publikuara në https://www.nxp.com/profile/terms, përveç nëse është rënë dakord ndryshe në një marrëveshje të vlefshme individuale me shkrim. Në rast të lidhjes së një marrëveshjeje individuale do të zbatohen vetëm termat dhe kushtet e marrëveshjes përkatëse. NXP Semiconductors shprehimisht kundërshton zbatimin e termave dhe kushteve të përgjithshme të klientit në lidhje me blerjen e produkteve të NXP Semiconductors nga klienti.

Kontrolli i eksportit — Ky dokument si dhe artikujt e përshkruar këtu mund t'i nënshtrohen rregulloreve të kontrollit të eksportit. Eksporti mund të kërkojë një autorizim paraprak nga autoritetet kompetente.
Përshtatshmëria për t'u përdorur në produkte jo të kualifikuara për automobila — Nëse ky dokument nuk thotë shprehimisht se ky produkt specifik NXP Semiconductors është i kualifikuar për automobila, produkti nuk është i përshtatshëm për përdorim automobilistik. Nuk është as i kualifikuar dhe as i testuar në përputhje me kërkesat e testimit të automobilave ose aplikimit. NXP Semiconductors nuk pranon asnjë përgjegjësi për përfshirjen dhe/ose përdorimin e produkteve jo të kualifikuara për automobila në pajisjet ose aplikacionet e automobilave.

Në rast se klienti e përdor produktin për dizajnim dhe përdorim në aplikacionet e automobilave sipas specifikimeve dhe standardeve të automobilave, klienti (a) do të përdorë produktin pa garancinë e produktit nga NXP Semiconductors për aplikime, përdorim dhe specifikime të tilla automobilistike, dhe (a) b) sa herë që klienti përdor produktin për aplikime automobilistike përtej specifikimeve të NXP Semiconductors, ky përdorim do të jetë vetëm në rrezik të klientit dhe (c) klienti dëmshpërblen plotësisht NXP Semiconductors për çdo përgjegjësi, dëmtim ose pretendim të dështuar të produktit që rezulton nga dizajni i klientit dhe përdorimi i produkti për aplikimet e automobilave përtej garancisë standarde të NXP Semiconductors dhe specifikimeve të produktit të NXP Semiconductors.

Përkthime - Një version jo-anglisht (i përkthyer) i një dokumenti, duke përfshirë informacionin ligjor në atë dokument, është vetëm për referencë. Versioni në anglisht do të mbizotërojë në rast të ndonjë mospërputhjeje midis versionit të përkthyer dhe atij në anglisht.

Siguria — Klienti e kupton që të gjitha produktet NXP mund t'i nënshtrohen dobësive të paidentifikuara ose mund të mbështesin standardet ose specifikimet e vendosura të sigurisë me kufizime të njohura. Klienti është përgjegjës për projektimin dhe funksionimin e aplikacioneve dhe produkteve të tij gjatë gjithë ciklit të jetës së tij për të zvogëluar efektin e këtyre dobësive në aplikacionet dhe produktet e klientit. Përgjegjësia e klientit shtrihet edhe në teknologji të tjera të hapura dhe/ose të pronarit të mbështetura nga produktet NXP për përdorim në aplikacionet e klientit. NXP nuk pranon asnjë përgjegjësi për ndonjë cenueshmëri. Klienti duhet të kontrollojë rregullisht përditësimet e sigurisë nga NXP dhe të ndjekë siç duhet.
Klienti duhet të zgjedhë produkte me karakteristika sigurie që plotësojnë më së miri rregullat, rregulloret dhe standardet e aplikacionit të synuar dhe të marrë vendimet përfundimtare të projektimit në lidhje me produktet e tij dhe është i vetëm përgjegjës për pajtueshmërinë me të gjitha kërkesat ligjore, rregullatore dhe të sigurisë në lidhje me produktet e tij, pavarësisht për çdo informacion ose mbështetje që mund të ofrohet nga NXP.

NXP ka një ekip të reagimit ndaj incidentit të sigurisë së produktit (PSIRT) (i arritshëm në PSIRT@nxp.com) që menaxhon hetimin, raportimin dhe lëshimin e zgjidhjeve për dobësitë e sigurisë të produkteve NXP.
NXP B.V. — NXP B.V. nuk është një kompani operuese dhe nuk shpërndan apo shet produkte.

Markat tregtare

Njoftim: Të gjitha markat e referuara, emrat e produkteve, emrat e shërbimeve dhe markat tregtare janë pronë e pronarëve të tyre përkatës.

NXP — marka e fjalës dhe logoja janë marka tregtare të NXP BV
i.MX — është një markë tregtare e NXP BV

Ju lutemi, kini parasysh se njoftime të rëndësishme në lidhje me këtë dokument dhe produktin(ët) e përshkruar këtu, janë përfshirë në seksionin "Informacion ligjor".
© 2024 NXP BV Të gjitha të drejtat e rezervuara.
Për më shumë informacion, ju lutemi vizitoni: https://www.nxp.com

Data e publikimit: 16 maj 2024
Identifikuesi i dokumentit: AN14270

Dokumentet / Burimet

NXP AN14270 Shtimi i mbështetjes zanore në Guider GUI [pdfUdhëzuesi i përdoruesit
AN14270 Shtimi i mbështetjes zanore në udhëzuesin GUI, AN14270, Shtimi i mbështetjes zanore te udhëzuesi GUI, te Udhëzuesi GUI, Udhëzuesi GUI, Guider

Referencat

Lini një koment

Adresa juaj e emailit nuk do të publikohet. Fushat e kërkuara janë shënuar *