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
Konfigurace, se kterou jsem spustil můj systém
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)
- Stáhněte a nainstalujte Raspberry Pi Imager.
- 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
- Po kliknutí na tlačítko „NEXT“ zvolte možnost vlastního nastavení „EDIT SETTINGS“
- 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.
- Přepněte se na kartu „SERVICES“ a povolte přístup přes SSH.
- 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ě.
- Nechte proběhnout instalační proces a odeberte SD kartu z počítače.
2. část – činnosti v Raspberry PI – Instalace BirdNet-Pi
- 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.
- 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
- 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
- Instalace je nyní spuštěna a nějakou dobu poběží. Bude to klidně trvat 20 – 30 minut.
- 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á.
3. část – nastavení BirdNet-Pi
- 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é.
- Vlevo klikněte na „Settings“
- Zkontrolujte, že je vybrán nejnovější BirdNet model, sloužící k analýze hlasů ptáků.
- Zadejte název vašeho zařízení a vložte (dostatečně anonymizované) souřadnice umístění.
- 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í 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.
- Pokud jste ještě přihlášení v terminálu, napište příkaz alsamixer -m a stiskněte enter.
alsamixer -m
- Otevře se rozhraní pro audio nastavení.
- Stiskněte klávesu F6, šipkami vyberte vaši zvukovou kartu a stiskněte enter
- 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“
Jak sdílet pozorování s celým světem
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).
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.
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“
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í
- První verze projektu na GitHub – https://github.com/mcguirepr89/BirdNET-Pi
- Oficiální Wiki projektu, některé informace, jako postup instalace a nastavení citlivosti mikrofonu jsem přeložil do tohoto návodu – https://github.com/mcguirepr89/BirdNET-Pi/wiki
- Fork instalačního skriptu přizpůsobený pro instalaci na Raspberry Pi 5 – https://github.com/pddpauw/BirdPi
- Publikování do Home Assistant – https://github.com/mcguirepr89/BirdNET-Pi/discussions/342
- Spousta informací ohledně pozorování ptáků je k dispozici na webu Ábíčka – https://www.abicko.cz/kategorie/6748
- Po vydání tohoto článku a ladění nějakých dalších chyb jsem v diskuzích narazil na další fork, pojmenovaný BirdNet-GO, možná bude užitečné ho prozkoumat dříve, než se pustíte do instalace BirdNet-Pi – https://github.com/tphakala/birdnet-go
- 13.2.2024, tedy po vydání tohoto článku řeším nějaké chyby v BirdNet a objevil jsem další fork, který vypadá, že je udržovaný a aktuální. Podívejte se na něj dřív, než se pustíte do instalace podle mého návodu. Třeba se vyhnete spoustě problémů, které mě teď se systémem potkávají. https://github.com/kahst/BirdNET-Analyzer
- Diskuze ohledně zabezpečení a ochraně osobních údajů – https://github.com/mcguirepr89/BirdNET-Pi/discussions/166
Ú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
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.
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.