Quésako ?
Comme tu dit, c’est pas faute de le dire d’utiliser Vosk au lieu de whisper et d’utiliser Snowboy ou porcupine a la place de openwakeword.
Sisi j utilise vosk et porcupine et piper
Bah il me comprends mal et les delais de reponses sont catastrophique
Mais je pense pas que cela viennent d eux spécialements
C est pour cela que je demande si je peux les installer sur un autre support plus performant.
Et je crois que vosk il ya des modèles d entraînement ?
Si tu avais parcouru les sujets, tu verrais que vosk répond en moins de 2 secondes avec un RPI4, et ce avec sa configuration de base.
Donc dans ton cas, le pb ne vient pas d’un manque de ressources.
Je confirme 2-4sec pour répondre avec Vosk sur un RPI4.
Peut-etre du ce cote la . Je ne suis pas sous raspi.
Je l etait mais je me suis retrouver avec un shuttle xs35v4
https://global.shuttle.com/news/productsSpec?pn=XS35V4
Avec un proc celeron j1900 etv8gb
Mon install est docker supervised.
Voila si ca peut aider.
Je lis pas mal de truc sur plusieurs forum mais il y a pas de tuto tres claire. Il faut glaner a doite et à gauche.
Je crois qu il faut aussi que j’utilise un modele
Une doute que ca soit ta machine.
celeron J1900:
Nb. de cœurs 4
Nb. de threads 4
Fréquence de rafale 2.42 GHz
Fréquence de base 2.00 GHz
RPI4:
4 x 1.8 Ghz
J’ai regarder un comparatif des deux oui le celeron est au-dessus normalement.
Mais ça explique ma latence
bon en partie résolue test ce soir et le delais est normal, peut etre etait-ce due a la construction de la base ou je ne sais quoi, trop préssé d’essayer.
Mais il me comprends pas toujours bien la j’upload le model fr linto , on verra
Ouah quel différence avec le modèle. tout est bon je vais pouvoir poursuivre mon travail.
ah savoir lancer de la musique sur mon serveur mopidy , je commence les recherches
any Idea ?
Bonsoir,
ESP32-S3-Korvo1 v5.0 reçu. Je vais pouvoir me remettre au travail en espérant que ce sera plus concluant !
Bon alors il y a du mieux !!!
Je suis parvenu à flasher ce nouveau korvo. Les led, les micros, le haut-parleur fonctionnent. J’ai testé avec un pipeline chatgpt et il répond. Par contre je n’ai pas encore accès à mes devices home assistant, ni obtenir leur statut, ni les commander. J’ai essayé de remettre le pipeline standard mais il ne semble pas comprendre mes requêtes.
J’ai quand même l’impression que le plus compliqué est fait.
A suivre…
Matt.
Et le code qui va bien, j’allais oublier :
logger:
ota:
password: "lemotdepassesupersecret"
captive_portal:
substitutions:
friendly_name: ESP32 S3 Korvo1
esphome:
name: esp32-s3-korvo-1
friendly_name: ${friendly_name}
name_add_mac_suffix: true
platformio_options:
board_build.flash_mode: dio
upload_speed: 460800
project:
name: esphome.voice-assistant
version: "1.0"
min_version: 2023.11.1
on_boot:
- priority: 600
then:
- light.turn_on:
id: led_ring
brightness: 70%
effect: connecting
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
CONFIG_AUDIO_BOARD_CUSTOM: "y"
CONFIG_ESP32_S3_KORVO1_BOARD: "y"
components:
- name: esp32_s3_korvo1_board
source: github://abmantis/esphome_custom_audio_boards@main
refresh: 0s
psram:
mode: octal
speed: 80MHz
external_components:
- source: github://pr#5230
components: esp_adf
refresh: 0s
api:
encryption:
key: "lacleapisupersecrete"
on_client_connected:
then:
- if:
condition:
switch.is_on: use_wake_word
then:
- delay: 1s
- voice_assistant.start_continuous:
- delay: 1s
- voice_assistant.stop:
- delay: 2s
- voice_assistant.start_continuous:
- script.execute: reset_led
on_client_disconnected:
then:
- light.turn_on:
id: led_ring
blue: 0%
red: 100%
green: 100%
brightness: 50%
effect: connecting
dashboard_import:
package_import_url: github://esphome/firmware/voice-assistant/esp32-s3-korvo1.yaml@main
wifi:
ap:
ssid: "Esp32-S3-Korvo-1"
password: "passwordsupersecret"
on_connect:
then:
- delay: 5s # Gives time for improv results to be transmitted
- ble.disable:
on_disconnect:
then:
- ble.enable:
ssid: !secret wifi_ssid
password: !secret wifi_password
improv_serial:
esp32_improv:
authorizer: none
button:
- platform: factory_reset
id: factory_reset_btn
name: Factory reset
esp_adf:
board: esp32s3korvo1
microphone:
- platform: esp_adf
id: korvo_mic
speaker:
- platform: esp_adf
id: korvo_speaker
voice_assistant:
id: voice_asst
microphone: korvo_mic
speaker: korvo_speaker
noise_suppression_level: 4
auto_gain: 10dBFS
volume_multiplier: 1
use_wake_word: false
on_listening:
- light.turn_on:
id: led_ring
blue: 100%
red: 0%
green: 0%
brightness: 100%
effect: wakeword
on_tts_start:
- light.turn_on:
id: led_ring
blue: 0%
red: 0%
green: 100%
brightness: 50%
effect: pulse
on_end:
- delay: 100ms
- wait_until:
not:
speaker.is_playing:
- script.execute: reset_led
on_error:
- light.turn_on:
id: led_ring
blue: 0%
red: 100%
green: 0%
brightness: 100%
effect: none
- delay: 1s
- script.execute: reset_led
- script.wait: reset_led
- lambda: |-
if (code == "wake-provider-missing" || code == "wake-engine-missing") {
id(use_wake_word).turn_off();
}
script:
- id: reset_led
then:
- if:
condition:
switch.is_on: use_wake_word
then:
- light.turn_on:
id: led_ring
blue: 100%
red: 0%
green: 0%
brightness: 30%
effect: none
else:
- light.turn_off: led_ring
switch:
- platform: gpio
id: pa_ctrl
pin: GPIO38
name: "${friendly_name} Speaker Mute"
restore_mode: ALWAYS_ON
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(voice_asst).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
- script.execute: reset_led
on_turn_off:
- voice_assistant.stop
- script.execute: reset_led
light:
- platform: esp32_rmt_led_strip
id: led_ring
name: "${friendly_name} Light"
pin: GPIO19
num_leds: 12
rmt_channel: 0
rgb_order: GRB
chipset: ws2812
default_transition_length: 0s
effects:
- pulse:
name: "Pulse"
transition_length: 0.5s
update_interval: 0.5s
- addressable_twinkle:
name: "Working"
twinkle_probability: 5%
progress_interval: 4ms
- addressable_color_wipe:
name: "Wakeword"
colors:
- red: 0%
green: 50%
blue: 0%
num_leds: 12
add_led_interval: 20ms
reverse: false
- addressable_color_wipe:
name: "Connecting"
colors:
- red: 60%
green: 60%
blue: 60%
num_leds: 12
- red: 60%
green: 60%
blue: 0%
num_leds: 12
add_led_interval: 100ms
reverse: true
binary_sensor:
- platform: template
name: "${friendly_name} Volume Up"
id: btn_volume_up
- platform: template
name: "${friendly_name} Volume Down"
id: btn_volume_down
- platform: template
name: "${friendly_name} Set"
id: btn_set
- platform: template
name: "${friendly_name} Play"
id: btn_play
- platform: template
name: "${friendly_name} Mode"
id: btn_mode
on_multi_click:
- timing:
- ON for at least 10s
then:
- button.press: factory_reset_btn
- platform: template
name: "${friendly_name} Record"
id: btn_record
on_press:
- voice_assistant.start:
- light.turn_on:
id: led_ring
brightness: 100%
effect: "Wakeword"
on_release:
- voice_assistant.stop:
- light.turn_off:
id: led_ring
sensor:
- id: button_adc
platform: adc
internal: true
pin: 8
attenuation: 11db
update_interval: 15ms
filters:
- median:
window_size: 5
send_every: 5
send_first_at: 1
- delta: 0.1
on_value_range:
- below: 0.55
then:
- binary_sensor.template.publish:
id: btn_volume_up
state: ON
- above: 0.65
below: 0.92
then:
- binary_sensor.template.publish:
id: btn_volume_down
state: ON
- above: 1.02
below: 1.33
then:
- binary_sensor.template.publish:
id: btn_set
state: ON
- above: 1.43
below: 1.77
then:
- binary_sensor.template.publish:
id: btn_play
state: ON
- above: 1.87
below: 2.15
then:
- binary_sensor.template.publish:
id: btn_mode
state: ON
- above: 2.25
below: 2.56
then:
- binary_sensor.template.publish:
id: btn_record
state: ON
- above: 2.8
then:
- binary_sensor.template.publish:
id: btn_volume_up
state: OFF
- binary_sensor.template.publish:
id: btn_volume_down
state: OFF
- binary_sensor.template.publish:
id: btn_set
state: OFF
- binary_sensor.template.publish:
id: btn_play
state: OFF
- binary_sensor.template.publish:
id: btn_mode
state: OFF
- binary_sensor.template.publish:
id: btn_record
state: OFF
Salut @WarC0zes ,
Oui, j’utilise bien Vosk, piper et snowboy.
Le Korvo réagit bien au wakeword, je pense que le speech to text Vosk fonctionne bien puisque, quand choisi comme Agent de conversation, gpt me répond correctement et la synthèse vocale fonctionne bien aussi puisque j’ai le retour audio sur le HP.
Le souci, mais j’ai dû passer à côté de quelque chose, se situe je pense, dans l’interface entre agent de conversation et entités home assistant. En même temps je n’ai pas beaucoup testé pour le moment…
Tu peu utiliser Alias dans les paramètres d’une entité pour choisir un nom plus simple.
Pour les commandes regarde les sentences en FR intents/sentences/fr at main · home-assistant/intents · GitHub
Exemple:
Allumer cuisine
éteins (ou éteindre) cuisine
Quel est la température du salon
Quel temps fait il
Salut,
tout marche maintenant nickel du point de vue assist du wakeword jusqu’à l’action et la réponse sur le haut parleur. Merci aux contributeurs !
Je suis gourmand du coup j’aimerais que l’ESP fasse aussi media player.
Le problème est que j’utilise le speaker de la platform esp-adf alors que le media_player est fourni par la platform i2s_audio.
Je n’arrive pas à faire cohabiter les 2.
Savez-vous si esp-adf serait en mesure de streamer du flux et d’être vu comme un media player d’une manière ou d’une autre ?
Où faut-il que je reprenne tout le code pour travailler en i2s-audio auquel cas je risque de ne pas profiter de tout ce que propose le esp32-s3-korvo1 et que j’identifie tous les GPIOs ?
Merci pour votre aide.
Matt.
Mon code pour mémoire :
Bonjour @MattG,
Je suis avec un INMP441 et un MAX98357.
J’ai désactivé le Speaker pour utiliser le media_player :
#speaker:
# - platform: i2s_audio
# id: my_speaker
# dac_type: external
# i2s_dout_pin: GPIO27 #DIN
# mode: mono
# i2s_audio_id: i2s_in
media_player:
- platform: i2s_audio
id: media_sat2
name: "media_sat2"
i2s_dout_pin: GPIO27
dac_type: external
mode: mono
Et pour l’envoi sur le media_player :
on_tts_end:
- homeassistant.service:
service: media_player.play_media
data:
entity_id: media_player.esp32_psram_voice_control_2_media_sat2 #denon_avc_x3700h mibox3
media_content_id: !lambda 'return x;'
media_content_type: music
announce: "true"
- delay : 10s
- homeassistant.service:
service: tts.clear_cache
Bob
Salut Bob,
Merci pour ta réponse.
C’était ce que je pensais faire aussi mais mon code utilise la platform esp-adf qui ne propose pas media_player.
Si j’ajouter i2s_audio, c’est incompatible.
D’où mon souci de faire cohabiter les 2…
Tu pourrais mettre un media_player sur un autre ESP non ?
Bob
Oui j’y ai pensé mais c’est vachement moins drôle !!