Rozpoznání hlasů ptáků pomocí umělé inteligence

OK AI, kdo nám zpívá v zahradě? Na zahradu jsem umístil malý počítač Raspberry Pi, připojil k němu mikrofon a díky umělé inteligenci a software BirdNet analyzuji hlasy ptáků, kteří v zahradě zpívají. Spolu se stovkami nadšenců z celého světa odesílám statistiky ptačích druhů do světové mapy. Pojďte se k nám přidat, je to opravdu jednoduché. A pokud budete chtít, můžete si detekce posílat do Home Assistanta a dál si je zobrazovat.

Potřebný materiál

Raspberry Pi 3B+, 4B, 400, 5 nebo 0W2
USB prodlužovací kabel + USB mikrofon nebo USB zvuková karta + mikrofon
MicoSD paměťová karta

Konfigurace, se kterou jsem spustil můj systém

Raspberry Pi 5
Elektretová mikrofonní vložka z šuplíkových zásob, neznámých parametrů
USB zvuková karta (UGREEN USB-A To 3.5mm External Stereo Sound Adaptor)
MicoSD paměťová karta 32GB
USB mikrofon

Také jsem zkoušel tento levný, všesměrový USB mikrofon, ale moc se mi s ním nedařilo. Spíš ho raději nedoporučuji.

Jak nainstalovat BirdNet-Pi

1. část – činnosti v počítači – Instalace Raspberry Pi OS Lite (64-bit)

  1. Stáhněte a nainstalujte Raspberry Pi Imager.
  2. Spusťte Raspberry Pi Imager a zvolte
    • „Raspberry Pi Device“ – zařízení, na které budete BirdNet-Pi provozovat
    • „Operating System“ – zvolte „Raspberry Pi OS Lite (64bitový)
    • „Storage“ – vyberte SD kartu
Průběh instalace Raspberry Pi OS
Průběh instalace Raspberry Pi OS
64bitový OS Lite naleznete pod ostatními operačními systémy
Průběh instalace Raspberry Pi OS
Zvolte verzi „Lite“ a 64-bit
  1. Po kliknutí na tlačítko „NEXT“ zvolte možnost vlastního nastavení „EDIT SETTINGS“
Průběh instalace Raspberry Pi OS
  1. Nastavte název hostitele, který chcete použít ke komunikaci s tímto BirdNET-Pi. Pokud budete provozovat více BirdNET-Pis ve stejné síti, nejspíš budete chtít dát každému jiný název – jméno hostitele. V tomto příkladu bude instalace dosažitelná na „http://birdnet-pi.local„, protože je to název hostitele, který jsem nastavil během tohoto kroku.
    Vyplňte uživatelské jméno a heslo, pomocí kterého se budete moci přihlásit do Raspberry Pi OS Lite.
    Nastavte přihlašovací údaje k Wi-Fi síti.
Průběh instalace Raspberry Pi OS, nastavení BirdNet-Pi
  1. Přepněte se na kartu „SERVICES“ a povolte přístup přes SSH.
Průběh instalace Raspberry Pi OS, nastavení BirdNet-Pi
  1. Klikněte na „SAVE“, pak na „YES“ a nakonec kliknutím na dalš „YES“ potvrďte, že chcete vymazat všechna data na SD kartě.
Průběh instalace Raspberry Pi OS
  1. Nechte proběhnout instalační proces a odeberte SD kartu z počítače.
Průběh instalace Raspberry Pi OS
Průběh zapisování na SD kartu
Průběh instalace Raspberry Pi OS
Průběh ověřování zapsaných dat
Průběh instalace Raspberry Pi OS
Operační systém Raspberry Pi OS Lite (64-bit) byl zapsán na SD kartu

2. část – činnosti v Raspberry PI – Instalace BirdNet-Pi

  1. Nyní můžete vložit SD kartu do Raspberry Pi. Nechte ji tam několik minut, než proběhne zavedení systému Raspberry Pi OS Lite. Po několika minutách můžete přistoupit k dalšímu kroku. Pokud k Raspberry Pi připojíte externí monitor, uvidíte, kdy je ta správná chvíle, ale zvládnete to i bez monitoru.
  2. Pokud pracujete bez externího monitoru, spusťte terminál / příkazový řádek / PowerShell a zadejte ssh uzivatelskejmeno@BirdNET-Pi.local, kde „uzivatelskejmeno“ je uživatelské jméno, které jste nastavili v kroku 4. předchozí části návodu. Stejně tak „BirdNET-Pi“ je jméno vašeho zařízení. Při prvním přihlášení nejspíš obdržíte upozorníte, že se připojujete k novému stroji. Zadejte „yes“ a pokračujte. Po odeslání příkazu budete vyzváni k zadání hesla (které jste taktéž nastavili v kroku 4.)
    Pokud máte připojený monitor a klávesnici přímo k Raspberry Pi, tento krok vynechejte, protože se jedná pouze o přihlášení ke vzdálenému stroji. Pokuste se ale použít vzdálený přístup, lépe se vám budou kopírovat příkazy a nemusíte je přepisovat.
ssh tomas@BirdNET-Pi.local
terminál PowerShell
  1. Na GitHub jsou připravené instalační skripty, které všechnu tvrdou práci odvedou za nás. Existují 2 úložiště projektu. V původním úložišti projektu je připravený skript pro instalaci na zařízeních Raspberry Pi 3B+, 4B, 400 nebo 0W2. Protože je tento repozitář už neudržovaný, instalační skript pro Raspberry Pi 5 vytvořil někdo jiný a naleznete ho v jiném úložišti. Ať použijete jedno nebo druhé úložiště, postup by měl být stejný. Zkopírujte a vložte níže uvedený příkaz do terminálu a stiskněte „Enter“.
    Poznámka: do terminálu se vkládá pomocí Ctrl + Shift + V nebo klepnutím pravým tlačítkem myši.

Instalace na zařízeních Raspberry Pi 3B+, 4B, 400 nebo 0W2:

curl -s https://raw.githubusercontent.com/mcguirepr89/BirdNET-Pi/main/newinstaller.sh | bash

Instalace na Raspberry Pi 5:

curl -s https://raw.githubusercontent.com/pddpauw/BirdPi/main/newinstaller.sh | bash
  1. Instalace je nyní spuštěna a nějakou dobu poběží. Bude to klidně trvat 20 – 30 minut.
Průběh instalace BirdNet-Pi v terminálu
Ukázka průběhu instalace z oficiálního instalačního návodu
  1. Až instalační skript dokončí svoji práci, se systém automaticky restartuje. Když je znovu spuštěn, můžete se přihlásit do webového rozhraní BirdNET-Pi, pomocí názvu hostitele, který jste nastavili v kroku 4. V tomto příkladu instalace to je http://birdnet-pi.local.
    Terminál zatím nezavírejte, ještě se nám bude hodit.
    Dokud systém nevytvoří první nahrávky, úvodní stránka zůstává celkem prázdná.
Okno BirdNet-Pi

3. část – nastavení BirdNet-Pi

  1. Ve webovém rozhraní zbývá nastavit už jen pár drobností. Všechny je najdete pod tlačítkem nástroje – „Tools“. Po kliknutí na toto tlačítko budete vyzvání k přihlášení. Výchozí uživatelské jméno je „birdnet“ a heslo je prázdné.
Okno BirdNet-Pi
  1. Vlevo klikněte na „Settings“
BirdNet-Pi menu
  1. Zkontrolujte, že je vybrán nejnovější BirdNet model, sloužící k analýze hlasů ptáků.
Nastavení BirdNet-Pi
  1. Zadejte název vašeho zařízení a vložte (dostatečně anonymizované) souřadnice umístění.
Nastavení BirdNet-Pi
  1. Nastavte jazyk detekovaných ptáků na češtinu, vyberte správnou časovou zónu a uložte pomocí „Update Settings“.
    Ostatní části nastaví můžete zatím ignorovat.
Nastavení BirdNet-Pi

Nastavení citlivosti mikrofonu

Když jsem BirdNet nainstaloval, neměl téměř žádné detekce. Až po chvilce hledání jsem zjistil, že to může způsobit nastavení mikrofonu.

  1. Pokud jste ještě přihlášení v terminálu, napište příkaz alsamixer -m a stiskněte enter.
alsamixer -m
Nastavení mikrofonu v BirdNet-Pi
  1. Otevře se rozhraní pro audio nastavení.
Nastavení mikrofonu v BirdNet-Pi
  1. Stiskněte klávesu F6, šipkami vyberte vaši zvukovou kartu a stiskněte enter
Nastavení mikrofonu v BirdNet-Pi
  1. Stiskněte F4, tak přejdete na nastavení vstupní úrovně zvukové karty USB. Pomocí šipek nahoru a dolů upravte vstupní úroveň mikrofonu. Když budete mít hotovo, stiskněte klávesu „ESC“
Nastavení mikrofonu v BirdNet-Pi

Jak sdílet pozorování s celým světem

Mapa části Evropy se zvýrazněnými stanicemi BirdWeather
Mapa ptačích pozorování z webu BirdWeather

Všichni uživatelé, kteří se rozhodli zveřejnit svá pozorování, odesílají záznamy do BirdWeather. Abyste mohli sdílet svá pozorování, potřebujete získat BirdWeather ID. To získáte tak, že napíšete e-mail Timovi. Jednoduše v Tools > Settings klikněte na odkaz Email Tim, to ve vašem poštovním klientovi vygeneruje e-mailovou zprávu, kam jen do předpřipravených políček doplníte souřadnice stanice, město, stát a zemi. A odešlete. Za pár dní vám přijde vygenerované BirdWeather ID, které vložíte do nastavení a dáte uložit. Další den už najdete svoji stanici na mapě (pokud zaznamenala nějaké ptačí zvuky).

Nastavení BirdNet-Pi

Krátký pohled do webového rozhraní BirdNet-Pi

Na úvodní stránce vidíte seznam všech dnes zaznamenaných druhů.

Na stránce „Species Stats“ můžete filtrovat všechny své záznamy a třeba zjišťovat, kdy jde který druh nejaktivnější.

Když si spustíte spectrogram, vidíte nejen grafické znázornění zaznamenaného zvuku, ale zároveň také určení druhu.

Odesílání informací do Home Assistant

Co by to bylo za chytré zařízení, kdybych z něj neudělal součást chytré domácnosti. A tvůrce BirdNet-Pi toho už dost připravil. V Tools > Settings se totiž nachází Apprise Notifications. Apprise je knihovna napsaná v jazyce Python, která umožňuje odesílat upozornění na různá zařízení a platformy, pomocí jednoduchého a jednotného rozhraní, a to prostřednictvím různých protokolů. Apprise v tuto chvíli podporuje téměř 100 různých komunikačních protokolů.

Vytvořte nového MQTT uživatele

Pokud používáte MQTT Mosquitto broker jako doplněk v Home Assistant, vytvořte si nového uživatele přímo v Home Assistant. Na správu uživatelů se dostanete kliknutím na následující tlačítko.

Otevře tvůj Home Assistant a zobrazí všechny uživatele.

Nastavte službu Apprise

V BirdNet-Pi > Tools > Settings jsem v části Notifications přidal službu mqtt. Formát připojovacího řetězce je následující: mqtt://{user}:{password}@{host}:{port}/{topic}

mqtt://mqtt-birdnet:heslo@192.168.1.108:1883/birdpi/apprise

Notification Title jsem nechal prázdný a Notification Body jsem nastavil na:

{"Common_Name": "$comname", "Scientific_Name": "$sciname", "Confidence_Score": "$confidence", "link": "$listenurl", "Date": "$date", "Time": "$time", "Week": "$week", "Latitude": "$latitude", "Longitude": "$longitude", "Minimum_Confidence": "$cutoff", "Sigmoid_Sensitivity": "$sens", "Overlap": "$overlap", "Image": "$flickrimage"}

Takže to celé vypadá následovně:

Kliknutím na tlačítko „Send Test Notification“ odešlete testovací zprávu. Pokud jste vše nastavili správně, zobrazí se potvrzovací zpráva a odeslanou zprávu také uvidíte v nějakém MQTT prohlížeči.

Vypadá to že zprávy chodí, ale mají jednu chybu. Nemají úplně správný a očekávaný JSON formát. Text zprávy začíná lomítkem. Navíc po uložení zůstává „Notification Body“ prázdné a žádná další testovací zpráva neodejde.

Oprava Notification Body

Pojďme nejprve opravit tělo zprávy. Otevřete terminál a připojte se přes SSH do BirdNet-Pi. Viz krok 9.

Veškerá nastavení jsou uložena v textovém souboru birdnet.conf, takže zkontrolujeme, že je zde opravdu uloženo to, co očekáváme. V terminálu zadejte:

nano /etc/birdnet/birdnet.conf

A v textovém souboru najděte řádek „APPRISE_NOTIFICATION_BODY“ a zkontrolujte, že obsahuje to, co očekáváte. U mě tomu tak nebylo a místo uvozovek, tam byly řetězce znaků "

Nahradil jsem všechny #&34; za uvozovky, stiskl „Ctrl+X“ pro opuštění editoru, pak jsem stiskl „Y“ jako souhlas s uložením změn a pak „Enter“. Vypadá to, že je tím problém vyřešen.

Oprava JSON formátu

Když už nám pravidelně chodí zprávy přes MQTT, pojďme opravit jejich formát. S tím nám pomůže jednoduchá automatizace v Home Assistant, která upraví přijatou zprávu. Automatizace bude poslouchat provoz v MQTT tématu „birdpi/apprise“, cokoliv se zde objeví, tomu sebereme zpětné lomítko a výsledek publikujeme do MQTT tématu „birdpi/last_detection“

Open your Home Assistant instance and show your automations.

YAML kód automatizace vypadá takto:

alias: BirdNet Apprise 2 JSON
description: "Odebere zpětné lomítko před JSON zprávou a výsledek opět publikuje"
trigger:
  - platform: mqtt
    topic: birdpi/apprise
condition: []
action:
  - service: mqtt.publish
    metadata: {}
    data:
      qos: 0
      retain: false
      topic: birdpi/last_detection
      payload_template: "{{ trigger.payload | replace('\\\\', '') }}"
mode: single

Automatizaci uložíme, vrátíme se do BirdNet-Pi > Tools >Settings a zkusíme odeslat testovací zprávu. V MQTT prohlížeči teď vidíme 2 zprávy, každou v jiném tématu. Jediný rozdíl mezi nimi je, že původní začíná zpětným lomítkem a nová je bez zpětného lomítka.

Zpracujte informace v Home Assistant

V tuto chvíli už zbývá jen vytvořit senzor, který získá hodnoty z MQTT tématu „birdpi/last_detection“ a uchová si je pro další využití. Do souboru configuration.yaml přidejte následující řádek:

mqtt: !include mqtt.yaml

Následně vytvořte soubor mqtt.yaml a vytvořte v něm nový senzor:

sensor:
  - name: "BirdNet Last detection"
    state_topic: "birdpi/last_detection"
    value_template: "{{ value_json.Common_Name }}"
    json_attributes_topic: "birdpi/last_detection"

Uložte upravené soubory, zkontrolujte validitu YAML konfiguračních souborů a znovu načtěte nastavení YAML. Když teď opět odešlete testovací notifikaci z BirdNet-Pi, váš nový sensor.birds už bude obsahovat informace o posledním detekovaném druhu.

Ještě jedna poznámka k hodnotě atributu Image, dokud si nenastavíte Flicker ID, tak je obrázek každého ptáka stejný. Jsou tam tučňáci.

Edit 14.2.2024 – tučnáci tam jsou, i když propojíte Flicker ID. Asi se jedná o další chybu tohoto systému. Až budu mít čas, pokusím se najít řešení.

Další data z BirdNet-Pi do Home Assistant

Všechny detekce ptáků jsou uložené v databázi SQLite3. A to znamená, že na cokoliv zvládnete napsat dotaz, to si také můžete odeslat do Home Assistant. V Raspberry Pi je vytvořená databáze birds.db, která obsahuje tabulku detections. Z této tabulky můžeme vydolovat cokoliv, co nás zajímá.

Vytvořte soubor s názvem detektion_sensors.sh v adresáři skriptů:

nano ~/BirdNET-Pi/scripts/detection_sensors.sh

Do tohoto souboru vložte:

# Provedeme potřebné dotazy na databázi a získáme hodnoty
var_detect_last_hour=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT COUNT(*) FROM detections WHERE Time > Time('now', 'localtime', '-1 hour') AND Date == DATE('now', 'localtime', '-1 hour');")
var_detect_today=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT COUNT(*) FROM detections WHERE date='$(date '+%Y-%m-%d')';")
var_unique_today=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT COUNT(DISTINCT Com_Name) FROM detections WHERE date='$(date '+%Y-%m-%d')';")
var_total_detections=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT COUNT(*) FROM detections;")
var_total_species=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT COUNT(DISTINCT Com_Name) FROM detections;")
var_detections_by_species=$(sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT Com_Name, COUNT(*) AS Total_Detections FROM detections WHERE Date = DATE('now') GROUP BY Com_Name ORDER BY Total_Detections DESC;")

# Změna tabulky na JSON formát
json_detections_by_species="{"
while IFS="|" read -r species detections; do
    json_detections_by_species+="\"${species}\": ${detections}, "
done < <(printf "%s\n" "$var_detections_by_species")
# Odstranění poslední čárky a mezery
json_detections_by_species="${json_detections_by_species%, }"
json_detections_by_species+="}"

# Vytvoření JSON k publikování
json_detections_today="{\"detect_last_hour\": ${var_detect_last_hour}, \"detect_today\": ${var_detect_today}, \"unique_today\": ${var_unique_today}}"
json_detections_total="{\"total_detections\": ${var_total_detections}, \"total_species\": ${var_total_species}}"

# Pomocí apprise publikujeme přes MQTT
$HOME/BirdNET-Pi/birdnet/bin/apprise -vv -b "${json_detections_by_species}" mqtt://homeassistant_ip/birdpi/detections_by_species
$HOME/BirdNET-Pi/birdnet/bin/apprise -vv -b "${json_detections_today}" mqtt://homeassistant_ip/birdpi/detections_today
$HOME/BirdNET-Pi/birdnet/bin/apprise -vv -b "${json_detections_total}" mqtt://homeassistant_ip/birdpi/detections_total

Změňte homeassistant_ip ve spodní části řádků na adresu ip vašeho MQTT brokera. Podle předchozího návodu je homeassistant_ip následující: mqtt-birdnet:heslo@192.168.1.108:1883 Poslední řádek tedy bude vypadat takhle:

$HOME/BirdNET-Pi/birdnet/bin/apprise -vv -b "${json_detections_total}" mqtt://mqtt-birdnet:heslo@192.168.1.108:1883/birdpi/detections_total

Uložte soubor a nastavte ho, aby byl spustitelný:

chmod +x ~/BirdNET-Pi/scripts/detection_sensors.sh

Poté nastavte pravidelné spouštění souboru pomocí cron:

crontab -e

Na konec souboru přidejte tento řádek:

0 * * * * /bin/bash ~/BirdNET-Pi/scripts/detection_sensors.sh

Soubor uložte, tím zajistíte, že se všechny dotazy na databázi vytvořené v souboru detection_sensors.sh spustí pravidelně každou hodinu.

Teď už jen chybí vytvořit další Home Assistant senzory, které budou přebírat hodnoty z nově vytvořeného MQTT tématu: MyBirdNetPi. Otevřete soubor mqtt.yaml a za aktuální senzor doplňte následující řádky:

  - name: BirdNet Detections Total
    state_topic: "birdpi/detections_total"
    json_attributes_topic: "birdpi/detections_total"

  - name: BirdNet Detections Today
    state_topic: "birdpi/detections_today"
    json_attributes_topic: "birdpi/detections_today"

  - name: BirdNet Detections by Species
    state_topic: "birdpi/detections_by_species"
    json_attributes_topic: "birdpi/detections_by_species"

V nejbližší celou hodinu senzory získají nové hodnoty.

To, jak tyto údaje v Home Assistant dále využijete, je na vás. Pochlubte se v komentářích nebo na sociálních sítích.

Aplikace do mobilu

Rozpoznávat hlasy ptáků můžete i pomocí mobilního telefonu.

BirdNet

Díky BirdNet můžete rozpoznávat hlasy ptáků i víky vašemu mobilnímu telefonu. Stačí si nainstalovat aplikaci BirdNet a další obsluha je už jednoduchá.

Aplikace nahrává okolní zvuky pomocí mikrofonu vašeho mobilního telefonu a na spektrogramu rovnou zobrazuje posledních 15 nahraných vteřin. Část nahraného záznamu můžete vybrat a odeslat k analýze. Během chvilky se vám vrátí výsledek. Váš výsledek se potom také zobrazí na BirdWeather mapě.

Merlin Bird ID

Aplikaci Merlin Bird ID nemám vyzkoušenou, ale v recenzích na Google play je to samá chvála, tak snad bude sloužit dobře.

Merlin Bird ID slibuje identifikaci ptáků 4 různými metodami. Odpovězte na několik jednoduchých otázek, nahrajte fotografii, nahrajte zpívajícího ptáka nebo prozkoumejte ptáky v regionu.

Odkazy a zdroje informací

Úpravy článku

10.2.2024 – upravil jsem kód pro cron, protože ten současný nefungoval. Specifikoval jsem typ shell. Dále jsem upravil kód pro soubor detektion_sensors.sh

12.2.2024 – znovu jsem pročítal článek a našel další chyby. Opravil jsem obrázky a části textů, popisující vytvoření automatizace, která vytváří správný JSON formát. Občas se tam vyskytovalo publikování do testovacího MQQT tématu „birdpi/json“, ale to jsem v průběhu psaní návodu změnil pro lepší čitelnost na „birdpi/last_detection“

16.2.2024 – vyměněn obrázek nastavení Apprise notifikací. Chybělo tam zaškrtnuté políčko „upozorňovat na každou novou detekci“

16.3.2024 – přesunul jsem BirdNet z rPi5 na rPi4 a po nové instalaci přestaly fungovat MQTT Apprise zprávy. Po odeslání testovací zprávy se objevuje chyba: „ERROR – Could not load MQTT Notification URL“. Řešení jsem nalezl v tomto příspěvku. Spustil jsem postupně následující příkazy a pak restartoval. Po té musíte ještě znovu zadat Apprise Notifications Configuration.

cd ~/BirdNET-Pi
python3 -m venv birdnet
source ./birdnet/bin/activate
pip3 install -U paho-mqtt==1.6.1

2 názory na “Rozpoznání hlasů ptáků pomocí umělé inteligence”

  1. Jakub Urbanec

    Mě picne. To je fakt prima projekt. I s tou HA automatizací. Jak to ale děláte člověče, když máte blízko silnici apod. ? Kolik je false positives?

    A co kdyby se ten senzor prdnul na ptačí pozorovatelnu Nový rybník – to je tak kilometřík od baráku,ne?

    P.S.
    Pěvuška modrá je prima, mnoho lidí si ji plete s vrabcem.

    1. Silnice k nám naštěstí tolik slyšet není. Ale i tak by to nevadilo, ptáci zpívají na vyšších frekvencích a takový ten běžný šum a ruch je nejvíc do 2kHz. Navíc ty souřadnice stanice jsou trochu „anonymizované“ nebydlím přímo u křižovatky. Nechtělo se mi úplně zveřejňovat přesné souřadnice. Ale koukám, že dnes ani na mapě nejsem, protože se BirdNet-Pi nějak zasekl a dnes nemám ani jednu detekci. Zkusil jsem restartovat a uvidím zítra.

      Nad stanicí u Nového Rybníku samozřejmě přemýšlím, ale potřebuji si zatím systém osahat doma. Pak můžu začít testovat nějaký akumulátor, solární panel a nějaký mobilní internet. On-line monitoring řeší tady, ale ještě to nemám nastudované https://github.com/pddpauw/BirdPi/wiki

      False positives tam určitě jsou. Co jsem koukal, tak je ohledně nastavení docela věda a jde tam nastavit spousta věcí, ve kterých se zatím nevyznám. Dost lidí psalo, že sousedův pes je detekován jako havran. Pak někdo psal, že to určuje sousedovo děti jako labutě zpěvné. 🙂 A nějak si u nás zatím nejsem jistý detekcemi vodních ptáků. Všechno to jsou druhy, které se v rezervaci vyskytují, takže klidně mohly letět kolem, ale na zvukovém záznamu toho moc nevidím a ani není nic slyšet.

Diskuze

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přejít nahoru