Isi kandungan:

Pengesan Burung Hummingbird / Pengambil Gambar: 12 Langkah (dengan Gambar)
Pengesan Burung Hummingbird / Pengambil Gambar: 12 Langkah (dengan Gambar)

Video: Pengesan Burung Hummingbird / Pengambil Gambar: 12 Langkah (dengan Gambar)

Video: Pengesan Burung Hummingbird / Pengambil Gambar: 12 Langkah (dengan Gambar)
Video: Sarang burung murai di alam liar, cara indukan murai hutan meloloh anaknya #muraibatu 2024, November
Anonim
Pengesan Burung Burung / Pengambil Gambar
Pengesan Burung Burung / Pengambil Gambar

Kami mempunyai pengumpan burung kolibri di geladak belakang kami dan sejak beberapa tahun kebelakangan ini saya mengambil gambarnya. Burung kolibri adalah makhluk kecil yang luar biasa, sangat wilayah dan perkelahian mereka boleh menjadi lucu dan luar biasa. Tetapi saya bosan berdiri seperti patung di belakang rumah saya untuk mengambil gambar mereka. Saya memerlukan cara untuk merakam gambar tanpa perlu berdiri di belakang rumah untuk jangka masa yang lama. Saya tahu bahawa saya mungkin menggunakan shutter kawalan jauh tetapi saya mahu gambar diambil secara automatik tanpa saya harus berada di sana. Oleh itu, saya memutuskan untuk membuat peranti untuk mengesan burung kolibri dan mengambil gambar secara automatik.

Saya selalu bermaksud menggunakan mikrokontroler untuk melakukan ini. Mikrokontroler dapat mendorong pengatup kamera di bawah kawalan perisian. Tetapi sensor untuk mengesan burung kolibri kecil adalah perkara lain. Saya mungkin menggunakan sensor gerakan tetapi saya ingin mencuba sesuatu yang unik. Saya memutuskan untuk menggunakan bunyi sebagai pencetus.

Langkah 1: Memilih Pengawal Mikro

Memilih Pengawal Mikro
Memilih Pengawal Mikro

Mikrokontroler yang saya pilih adalah PJRC Teensy. The Teensy menggunakan mikrokontroler ARM, khususnya, ARM Cortex M4. Cortex M4 mengandungi perkakasan untuk melakukan FFT (Fast Fourier Transform) yang akan melakukan pengesanan. PJRC juga menjual papan audio yang membolehkan anda menggunakan Teensy untuk memainkan muzik serta merakam audio dengan input luaran, atau, mikrofon kecil yang dapat anda tambahkan ke papan. Rancangan saya adalah agar Teensy melakukan FFT pada audio dari mikrofon.

Langkah 2: FFT?

FFT?
FFT?

FFT adalah formula / algoritma matematik yang mengubah isyarat dari domain masa ke domain frekuensi. Maksudnya adalah bahawa ia mengambil audio sampel masa dari mikrofon dan mengubahnya menjadi besarnya frekuensi yang terdapat dalam gelombang asal. Anda lihat, sebarang gelombang berterusan yang sewenang-wenang dapat dibuat dari rangkaian gelombang sinus atau kosinus yang merupakan gandaan bilangan bulat dari beberapa frekuensi asas. FFT melakukan sebaliknya: ia mengambil gelombang sewenang-wenang dan mengubahnya menjadi besar gelombang yang akan, jika dijumlahkan bersama, membuat gelombang sewenang-wenangnya yang asal. Cara yang lebih sederhana untuk mengatakan ini adalah, saya merancang untuk menggunakan perisian dan perkakasan FFT di Teensy untuk menentukan apakah ia 'mendengar' sayap burung kolibri pada frekuensi kepak sayap berlaku. Sekiranya ia 'mendengar' burung kolibri, saya akan menghantar arahan ke kamera untuk mengambil gambar.

Ianya berhasil! Jadi, bagaimana saya melakukannya, bagaimana anda boleh melakukannya dan bagaimana anda dapat menjadikannya lebih baik?

Langkah 3: Seperti apa Suara Burung Kolibri Berlegar?

Seperti apa Suara Burung Hummingbird?
Seperti apa Suara Burung Hummingbird?

Perkara pertama yang pertama, saya perlu mengetahui frekuensi apa yang akan saya dengar dari sayap burung kolibri. Untuk menentukan ini, saya menggunakan iPhone saya. Saya melekatkan iPhone ke tripod dan memilikinya merakam video gerakan perlahan tepat di hadapan feeder burung kolibri di dek kami. Setelah beberapa lama saya mengeluarkan kamera dan saya memuat turun videonya. Saya kemudian menonton video mencari burung kolibri di hadapan pengumpan. Ketika saya menjumpai urutan yang bagus, saya menghitung jumlah bingkai individu yang diperlukan untuk burung kolibri untuk mengepakkan sayapnya dari satu posisi sehingga kembali ke posisi yang sama. Pergerakan perlahan pada iPhone sekitar 240 bingkai sesaat. Saya melihat seekor burung kolibri melayang di hadapan pengumpan dan saya mengira 5 bingkai untuk menggerakkan sayapnya dari kedudukan ke hadapan ke posisi belakang dan kemudian kembali ke posisi depan. Ini adalah 5 bingkai dari 240. Ingat, kita mendengar suara pada setiap pukulan sayap burung kolibri (satu pada pukulan ke depan dan satu pada pukulan ke belakang). Untuk 5 bingkai untuk satu kitaran atau tempoh, kita dapat mengira frekuensi sebagai satu dibahagi dengan jangka masa iaitu 1 / (5/240) atau 48 Hz. Ini bermaksud bahawa ketika burung kolibri ini melayang, suara yang kita dengar mestilah dua kali lipat atau sekitar 96 Hz. Kekerapannya mungkin lebih tinggi ketika mereka terbang dan tidak melayang. Mungkin juga dipengaruhi oleh jisimnya tetapi saya rasa kita dapat menganggap bahawa kebanyakan burung dari spesies yang sama mempunyai jisim yang sama.

Langkah 4: Seri Fourier dan Teensy

Seri Fourier dan Teensy
Seri Fourier dan Teensy

The Teensy (saya menggunakan Teensy 3.2) dibuat oleh PJRC (www.pjrc.com). FFT akan dikira pada sampel bunyi. Untuk memperoleh suaranya, PJRC menjual papan penyesuai audio untuk Teensy (TEENSY3_AUDIO - $ 14.25). Mereka juga menjual mikrofon kecil yang dapat disolder ke papan penyesuai audio (MICROPHONE - $ 1,25). Papan penyesuai audio menggunakan cip (SGTL5000) yang boleh dibincangkan oleh Teensy melalui bas bersiri (I2S). The Teensy menggunakan SGTL5000 untuk mengambil sampel audio dari mikrofon dan mendigitalkannya, iaitu membuat sekumpulan angka yang mewakili suara yang didengar mikrofon.

FFT hanyalah versi pantas dari apa yang disebut Discrete Fourier Transform (DFT). DFT dapat dilakukan pada sebilangan sampel yang sewenang-wenangnya, namun FFT perlu menyimpan sampel dalam set yang berlipat ganda. Perkakasan Teensy dapat melakukan FFT pada sekumpulan 1024 sampel (1024 = 2 ^ 10) jadi itulah yang akan kami gunakan.

FFT biasanya menghasilkan, sebagai outputnya, besarnya dan hubungan fasa antara pelbagai gelombang yang diwakili. Untuk aplikasi ini kita tidak mementingkan hubungan fasa, tetapi kita berminat dengan besarnya dan frekuensi mereka.

Papan audio Teensy mengambil sampel audio pada frekuensi 44, 100 Hz. Jadi, 1024 sampel pada frekuensi ini mewakili selang waktu 1024/44100 atau sekitar 23.2 milisaat. Dalam kes ini, FFT akan menghasilkan sebagai output, magnitud yang merupakan gandaan bilangan bulat bagi tempoh sampel 43 Hz (sekali lagi, 1 / 0,0232 sama dengan kira-kira 43 Hz). Kami ingin mencari magnitud sekitar dua kali frekuensi ini: 86 Hz. Ini bukan kekerapan kepak sayap burung kolibri kita yang dikira tetapi, ia cukup dekat seperti yang akan kita lihat.

Langkah 5: Menggunakan Data Fourier

Menggunakan Data Fourier
Menggunakan Data Fourier

Perpustakaan PJRC menyediakan untuk Teensy akan memproses sampel dan mengembalikan pelbagai nilai magnitud. Kami akan merujuk kepada setiap magnitud dalam array yang dikembalikan sebagai tong sampah. Tong pertama (pada jarak sifar dalam susunan data yang kita dapat kembali) adalah arus DC gelombang. Kita boleh mengabaikan nilai ini dengan selamat. Tong kedua (pada ofset 1) akan mewakili magnitud komponen 43 Hz. Ini adalah tempoh asas kami. Tong seterusnya (pada ofset 2) akan mewakili magnitud komponen 86 Hz, dan seterusnya. Setiap tong berikutnya adalah bilangan bulat bilangan bulat dari tempoh asas (43 Hz).

Sekarang di sinilah agak pelik. Sekiranya kita menggunakan FFT untuk menganalisis bunyi 43 Hz yang sempurna maka FFT akan mengembalikan tong sampah pertama pada skala besar dan semua tong sampah yang lain akan sama dengan sifar (sekali lagi, dalam dunia yang sempurna). Sekiranya suara yang kami rakam dan dianalisis adalah 86 Hz maka tong sampah pada ofset satu akan menjadi sifar dan tong sampah pada ofset 2 (harmonik kedua) akan berukuran besar dan tong sampah selebihnya adalah sifar, dan seterusnya. Tetapi jika kita menangkap suara burung kolibri dan ia adalah 96 Hz (semasa saya mengukur pada satu burung saya), maka ofset 2 bin @ 86 Hz akan mempunyai magnitud nilai yang sedikit lebih rendah (daripada gelombang 86 Hz yang sempurna) dan tong sampah di sekelilingnya (satu yang lebih rendah dan beberapa yang lebih tinggi) masing-masing mempunyai nilai bukan sifar yang semakin berkurang.

Sekiranya ukuran sampel untuk FFT kami lebih besar daripada 1024 atau jika frekuensi pensampelan audio kami lebih rendah, kami dapat menjadikan resolusi tong sampah kami lebih baik (iaitu lebih kecil). Tetapi walaupun kita mengubah perkara ini untuk menjadikan tong FFT kita 1 Hz gandakan tempoh asas, kita masih harus menangani 'tumpahan' tong sampah ini. Ini kerana kita tidak akan pernah mendapat frekuensi sayap yang mendarat, selalu dan tepat, pada satu tong sampah. Ini bermaksud kita tidak boleh hanya mendasarkan pengesanan burung kolibri pada nilai di tong sampah yang mengimbangi dan mengabaikan yang lain. Kami memerlukan kaedah untuk menganalisis data dalam beberapa tong sampah untuk mencuba dan memahaminya. Lebih lanjut mengenai ini kemudian.

Langkah 6: Mulakan Pembinaan

Mulakan Pembinaan
Mulakan Pembinaan
Mulakan Pembinaan
Mulakan Pembinaan

Untuk pengesan prototaip burung kolibri saya, saya menggunakan pin lelaki-lelaki ekstra panjang yang disolder ke pin di Teensy. Saya melakukan ini supaya saya dapat memasangkan Teensy ke papan roti kecil tanpa pateri. Saya melakukan ini kerana saya menganggap saya akan membuat banyak perubahan dalam prototaip dan dengan papan roti, saya dapat mengubahnya dan hanya kabel jumper di mana sahaja saya memerlukan. Saya memateri jalur wanita ke bahagian bawah papan audio yang membolehkannya dipasang di bahagian atas Teensy. Mikrofon disolder ke bahagian atas papan audio (lihat gambar). Maklumat lebih terperinci mengenai pemasangan boleh didapati di laman PJRC:

(https://www.pjrc.com/store/teensy3_audio.html).

Langkah 7: Perkakasan untuk Menangkap Gambar

Perkakasan untuk Merakam Gambar
Perkakasan untuk Merakam Gambar
Perkakasan untuk Merakam Gambar
Perkakasan untuk Merakam Gambar

Saya mempunyai (baik, isteri saya) sebuah Kamera Digital Canon Rebel. Terdapat bicu pada kamera yang membolehkan anda menyambungkan kawalan rana jarak jauh manual. Saya membeli alat kawalan jauh manual dari B&H Photo. Kabel mempunyai soket yang betul untuk memasang kamera di satu hujungnya dan panjangnya sekitar 6 kaki. Saya memotong kabel di hujung berhampiran kotak kawalan butang dan saya menanggalkan kembali wayar dan menyoldernya ke tiga pin header yang boleh saya pasangkan ke papan roti. Terdapat wayar telanjang yang dibumikan dan dua isyarat lain: hujungnya memicu (merah jambu) dan cincin (putih) menjadi fokus (lihat gambar). Memendekkan hujung dan / atau cincin ke tanah mengoperasikan pengatup dan fokus pada kamera.

Dengan menggunakan jumper wire, saya menggunakan jalan umum dari Teensy ke kawasan di mana saya boleh menggunakannya di papan roti. Saya juga menghubungkan anod LED ke pin 2 pada Teensy dan katod LED ke perintang (100-220 ohm) ke tanah. Saya juga menyambungkan pin 2 Teensy ke perintang 10K dan sisi lain perintang yang saya sambungkan ke pangkal transistor NPN (2N3904 terdapat di mana-mana). Saya menyambungkan pemancar transistor ke tanah dan pengumpul yang saya sambungkan ke wayar putih dan merah jambu dari kabel yang masuk ke kamera. Kawat telanjang sekali lagi disambungkan ke tanah. Setiap kali LED dihidupkan oleh Teensy, transistor NPN juga akan menyala dan ia akan mencetuskan kamera (dan fokus). Lihat skema.

Langkah 8: Reka Bentuk Sistem

Reka Bentuk Sistem
Reka Bentuk Sistem

Oleh kerana frekuensi mengepakkan sayap Hummingbird kemungkinan tidak melebihi beberapa ratus Hz, maka kita tidak perlu merakam frekuensi suara di atas, katakanlah, beberapa ratus Hz. Apa yang kita perlukan adalah cara untuk menyaring hanya frekuensi yang kita mahukan. Jalur jalur atau penapis jalan rendah juga bagus. Secara tradisinya kami akan melaksanakan penapis dalam perkakasan menggunakan penapis OpAmps atau kapasitor suis. Tetapi berkat pemprosesan isyarat digital dan perpustakaan perisian Teensy, kami dapat menggunakan penapis digital (tidak diperlukan pematerian … hanya perisian).

PJRC mempunyai GUI yang hebat yang memungkinkan anda menyeret dan melepaskan sistem audio anda untuk Teensy dan papan audio. Anda boleh menemuinya di sini:

www.pjrc.com/teensy/gui/

Saya memutuskan untuk menggunakan salah satu penapis dua arah kuadratik yang disediakan PJRC untuk menyekat frekuensi bunyi dari mikrofon (penapis). Saya melancarkan tiga penapis tersebut dan menetapkannya untuk operasi jalur lebar pada 100 Hz. Penapis ini akan membenarkan masuk ke frekuensi sistem di atas dan sedikit di bawah frekuensi yang kita minati.

Dalam rajah blok (lihat gambar) i2s1 adalah input audio ke papan audio. Saya menyambungkan kedua saluran audio ke pengadun dan kemudian ke penapis (mikrofon hanya satu saluran tetapi, saya mencampurkan kedua-duanya jadi saya tidak perlu memikirkan saluran mana… panggil saya malas). Saya menjalankan output penapis ke output audio (jadi saya dapat mendengar audio jika saya mahu). Saya juga menyambungkan audio dari penapis ke blok FFT. Dalam gambarajah blok, blok berlabel sgtl5000_1 adalah cip pengawal audio. Ia tidak memerlukan sambungan dalam rajah.

Selepas anda melakukan semua pembinaan blok ini, anda klik pada Eksport. Ini memunculkan kotak dialog di mana anda boleh menyalin kod yang dihasilkan dari rajah blok dan menampalnya ke aplikasi Teensy anda. Sekiranya anda melihat kodnya, anda dapat melihatnya adalah contoh setiap kawalan bersama dengan 'sambungan' antara komponen.

Langkah 9: Kod

Kod
Kod

Perisian ini memerlukan terlalu banyak ruang untuk meneliti perisian secara terperinci. Apa yang akan saya cuba lakukan ialah menyerlahkan beberapa kod penting. Tetapi ini bukan aplikasi yang sangat besar. PJRC mempunyai tutorial video hebat mengenai penggunaan Teensy dan perpustakaan / alat audio (https://www.youtube.com/embed/wqt55OAabVs).

Saya mulakan dengan beberapa contoh kod FFT dari PJRC. Saya menampal apa yang saya dapat dari alat reka bentuk sistem audio ke bahagian atas kod. Sekiranya anda melihat kodnya selepas ini, anda akan melihat beberapa inisialisasi dan kemudian sistem mula mendigitalkan audio dari mikrofon. Perisian memasuki gelung 'selamanya' () dan menunggu data FFT tersedia menggunakan panggilan ke fungsi fft1024_1. Tersedia (). Apabila data FFT tersedia, saya mengambil salinan data dan memprosesnya. Perhatikan bahawa, saya hanya mengambil data jika besarnya tong sampah melebihi nilai yang ditetapkan. Nilai ini adalah bagaimana saya menetapkan kepekaan sistem. Sekiranya tong sampah berada di atas nilai yang ditetapkan maka saya menormalkan gelombang dan memindahkannya ke array sementara untuk diproses, jika tidak, saya mengabaikannya dan terus menunggu FFT lain. Saya harus menyebutkan bahawa saya juga menggunakan fungsi kawalan keuntungan mikrofon untuk menyesuaikan kepekaan litar (sgtl5000_1.micGain (50)).

Menormalkan gelombang bermaksud saya menyesuaikan semua tong sampah sehingga tong sampah dengan nilai terbesar ditetapkan sama dengan satu. Semua tong sampah ditimbang mengikut perkadaran yang sama. Ini menjadikan data lebih mudah dianalisis.

Saya menggunakan beberapa algoritma untuk menganalisis data tetapi, saya hanya menggunakan dua. Satu algoritma mengira kawasan di bawah lengkung yang dibentuk oleh tong sampah. Ini adalah pengiraan mudah yang hanya menambah nilai tong sampah di seluruh kawasan yang diminati. Saya membandingkan kawasan ini untuk menentukan sama ada kawasan itu melebihi ambang.

Algoritma lain menggunakan susunan nilai tetap yang mewakili FFT yang dinormalisasi. Data ini adalah hasil tandatangan burung kolibri yang nyata (optimum). Saya menyebutnya sebagai lindung nilai. Saya membandingkan data lindung nilai dengan data FFT yang dinormalisasi untuk melihat sama ada tong yang sesuai berada dalam jarak 20% antara satu sama lain. Saya memilih 20% tetapi, nilai ini dapat disesuaikan dengan mudah.

Saya juga mengira berapa kali algoritma individu berpendapat bahawa mereka mempunyai padanan, yang bermaksud, mereka menganggap burung kolibri. Saya menggunakan kiraan ini sebagai bagian dari penentuan burung kolibri kerana, pemicu palsu dapat terjadi. Contohnya, apabila ada suara yang kuat atau mengandungi frekuensi sayap burung, seperti bertepuk tangan, anda mungkin mendapat pencetus. Tetapi jika jumlahnya melebihi nombor tertentu (nombor yang saya pilih) saya katakan itu burung kolibri. Apabila ini berlaku, saya menyalakan LED untuk menunjukkan bahawa kita mempunyai hit dan litar yang sama ini mencetuskan kamera melalui transistor NPN. Dalam perisian saya menetapkan masa pencetus kamera menjadi 2 saat (masa LED dan transistor menyala).

Langkah 10: Pemasangan

Pemasangan
Pemasangan

Anda dapat melihat dalam gambar bagaimana saya (tanpa henti) memasang elektronik. Saya telah memasukkan Teensy ke papan roti yang dilekatkan pada papan pembawa bersama-sama dengan Arduino yang lain (tidak digunakan) yang sesuai (saya rasa Arduino Zero). Saya mengikat keseluruhan wayar ke tiang awning logam di dek saya (saya juga menambah pelepasan regangan pada kabel yang berjalan ke kamera). Tiang itu betul-betul di sebelah pengumpan burung kolibri. Saya menghidupkan elektronik dengan bata elektrik LiPo kecil yang mungkin anda gunakan untuk mengisi semula telefon bimbit yang mati. Kuasa bata mempunyai penyambung USB di atasnya yang saya gunakan untuk mengalihkan kuasa ke Teensy. Saya membawa kabel pemicu jarak jauh ke Kamera dan memasangnya. Saya sudah bersedia untuk melakukan aksi burung!

Langkah 11: Hasil

Keputusan
Keputusan

Saya memasang kamera pada tripod berhampiran pengumpan. Kamera saya memfokuskan pada bahagian depan feeder dan saya menetapkannya ke Sport Mode yang mengambil beberapa gambar pantas semasa shutter ditekan. Dengan masa tutup 2 saat, saya merakam sekitar 5 foto setiap peristiwa pencetus.

Saya menghabiskan beberapa jam bermain-main dengan perisian pada kali pertama saya mencuba ini. Saya terpaksa menyesuaikan kepekaan dan hitungan algoritma berturut-turut. Saya akhirnya berjaya mengubahnya dan saya sudah bersedia.

Gambar pertama yang diambil adalah seekor burung yang terbang ke kerangka seolah-olah mengambil belokan berkelajuan tinggi seperti jet pejuang (lihat di atas). Saya tidak dapat memberitahu anda betapa teruja saya. Saya duduk diam di seberang geladak sebentar dan membiarkan sistem berfungsi. Saya berjaya merakam banyak gambar tetapi, saya membuang beberapa gambar. Ternyata, kadang-kadang anda hanya mendapat kepala burung atau ekor. Juga, saya mendapat pencetus palsu, yang boleh berlaku. Secara keseluruhan saya rasa saya menyimpan 39 gambar. Burung memerlukan beberapa perjalanan ke pengumpan untuk membiasakan diri dengan suara rana dari kamera tetapi mereka akhirnya seolah-olah mengabaikannya.

Langkah 12: Pemikiran Akhir

Pemikiran Akhir
Pemikiran Akhir

Ini adalah projek yang menyeronokkan dan, ia berjaya. Tetapi, seperti kebanyakan perkara, ada banyak ruang untuk diperbaiki. Penapis tentu boleh berbeza (seperti penapis lulus rendah atau perubahan pada susunan dan / atau parameter) dan mungkin itu dapat membuatnya berfungsi lebih baik. Saya juga yakin bahawa ada algoritma yang lebih baik untuk dicuba. Saya akan mencuba sebilangan ini pada musim panas.

Saya diberitahu ada kod pembelajaran mesin sumber terbuka di luar sana … mungkin sistem itu boleh 'dilatih' untuk mengenal pasti burung kolibri! Saya tidak pasti saya akan mencuba ini tetapi, mungkin.

Apa perkara lain yang boleh ditambahkan pada projek ini? Sekiranya kamera mempunyai stamper tarikh / waktu, anda boleh menambahkan maklumat tersebut pada gambar. Perkara lain yang boleh anda lakukan ialah merakam audio dan menyimpannya ke kad uSD (papan audio PJRC mempunyai slot untuk satu). Audio yang disimpan mungkin dapat digunakan untuk melatih algoritma pembelajaran.

Mungkin di suatu tempat sekolah Ornitologi boleh menggunakan alat seperti ini? Mereka mungkin dapat mengumpulkan maklumat seperti waktu makan, kekerapan makan dan, dengan gambar, anda mungkin dapat mengenal pasti burung tertentu yang kembali makan.

Harapan saya ialah orang lain memperluaskan projek ini dan berkongsi apa yang mereka buat dengan orang lain. Sebilangan orang telah memberitahu saya bahawa karya ini yang telah saya lakukan harus diubah menjadi produk. Saya tidak begitu yakin tetapi, saya lebih suka melihatnya digunakan sebagai platform pembelajaran dan sains.

Terima kasih untuk membaca!

Untuk menggunakan kod yang telah saya hantar, anda memerlukan Arduino IDE (https://www.arduino.cc/en/Main/Software). Anda juga memerlukan kod Teensyduino dari PJRC (https://www.pjrc.com/teensy/td_download.html).

Disyorkan: