Daftar Isi:

CribSense: Monitor Bayi Berbasis Video Tanpa Kontak: 9 Langkah (dengan Gambar)
CribSense: Monitor Bayi Berbasis Video Tanpa Kontak: 9 Langkah (dengan Gambar)

Video: CribSense: Monitor Bayi Berbasis Video Tanpa Kontak: 9 Langkah (dengan Gambar)

Video: CribSense: Monitor Bayi Berbasis Video Tanpa Kontak: 9 Langkah (dengan Gambar)
Video: Позвольте мне дать вам Raspberry Pi [Обновление для создателя № 13] 2024, November
Anonim
CribSense: Monitor Bayi Berbasis Video Tanpa Kontak
CribSense: Monitor Bayi Berbasis Video Tanpa Kontak
CribSense: Monitor Bayi Berbasis Video Tanpa Kontak
CribSense: Monitor Bayi Berbasis Video Tanpa Kontak

CribSense adalah monitor bayi tanpa kontak berbasis video yang dapat Anda buat sendiri tanpa menguras kantong

CribSense adalah implementasi C++ dari Pembesaran Video yang disetel untuk dijalankan pada Raspberry Pi 3 Model B. Selama akhir pekan, Anda dapat mengatur monitor bayi boks bayi Anda sendiri yang membunyikan alarm jika bayi Anda berhenti bergerak. Sebagai bonus, semua perangkat lunak bebas digunakan untuk tujuan non-komersial dan mudah dikembangkan.

Repositori lengkap yang berisi file sumber dan dokumentasi dapat ditemukan di

Meskipun menurut kami CribSense cukup menyenangkan, penting untuk diingat bahwa ini sebenarnya bukan perangkat keamanan yang bersertifikat dan sangat mudah. Artinya, perlu dikonfigurasi dengan benar dan memiliki lingkungan yang terkontrol dengan baik agar dapat bekerja. Misalnya, jika tidak dikalibrasi dengan baik dan/atau lingkungan dalam video tidak kondusif untuk pembesaran video, Anda mungkin tidak dapat menggunakannya. Kami menjadikan ini sebagai proyek yang menyenangkan untuk melihat seberapa baik kami dapat menjalankan perangkat lunak komputasi berat seperti pembesaran video pada perangkat keras komputasi terbatas seperti Raspberry Pi. Setiap produk nyata akan membutuhkan lebih banyak pengujian daripada yang telah kami lakukan. Jadi, jika Anda menggunakan proyek ini, ambillah apa adanya: eksplorasi singkat tentang pembesaran video pada Pi.

Apa yang Anda perlukan:

Raspberry Pi + Kamera + Alat Konfigurasi:

  • Raspberry Pi 3 Model B
  • Catu Daya USB Mikro 5V 2.5A
  • Modul Kamera Raspberry Pi NoIR V2
  • Kartu MicroSD (kami menggunakan Kartu Kelas 10 16GB)
  • Kabel Fleksibel untuk Kamera Raspberry Pi (12")
  • Speaker dengan input 3.5mm
  • monitor HDMI
  • Keyboard USB
  • Mouse USB
  • [opsional] Raspberry Pi Heatsink (jika Anda khawatir tentang panas, Anda dapat menempelkan salah satunya ke Pi Anda)

Sirkuit LED IR untuk operasi cahaya rendah:

  • [3x] Dioda 1N4001
  • 1 Ohm, Resistor 1W
  • 1W IR LED
  • 2 kabel untuk menghubungkan LED ke Pi
  • Besi solder

Casis:

  • Akses ke printer 3D (volume build minimum = 9,9" L x 7,8" W x 5,9" H) untuk mencetak sasis kami. Namun, jangan ragu untuk membuatnya sendiri.
  • Lem (semua jenis lem bisa digunakan, tetapi lem panas direkomendasikan untuk pembuatan prototipe).

Langkah 1: Prasyarat

Sebelum Anda memulai panduan langkah demi langkah kami, Anda seharusnya sudah menginstal versi terbaru Raspbian pada kartu SD Anda dan memastikan bahwa Pi Anda berfungsi. Anda juga harus mengaktifkan modul kamera sebelum dapat mengakses kamera.

Langkah 2: Menginstal Perangkat Lunak CribSense

CribSense bergantung pada autoconf, libtool, OpenCV, dan libcanberra, serta perangkat lunak umum.

  • autoconf dan libtool digunakan untuk mengonfigurasi makefile secara otomatis dan membuat skrip untuk CribSense di banyak platform (seperti Linux, OSX, dan Raspberry Pi).
  • OpenCV adalah paket visi komputer yang kuat yang digunakan untuk melakukan pemrosesan gambar dan merupakan dasar dari perbesaran video dan kode deteksi gerakan. Ini memiliki dukungan yang hebat, mudah digunakan, dan memiliki kinerja yang baik.
  • libcanberra adalah perpustakaan sederhana untuk memutar suara acara. Ini digunakan untuk memutar suara alarm untuk CribSense.

Kunjungi halaman masing-masing untuk mendapatkan detail lengkap.

Instal ini dengan membuka terminal di Pi Anda dan menjalankan:

sudo apt-get install git build-essential autoconf libtool libopencv-dev libcanberra-dev

Selanjutnya Anda perlu mengatur driver kamera ke autoload dengan menambahkan bcm2835-v4l2 ke `/etc/modules-load.d/modules.conf`. Modules.conf Anda akan terlihat seperti ini:

# /etc/modules: modul kernel dimuat saat boot.

# # File berisi nama-nama modul kernel yang harus dimuat # pada saat booting, satu per baris. Baris yang dimulai dengan "#" diabaikan. i2c-dev bcm2835-v4l2

Setelah file diedit, Anda harus me-reboot Pi Anda. Driver ini digunakan oleh CribSense untuk langsung menarik frame dari NoIR Camera.

Kemudian, Anda dapat mengkloning repositori dengan menjalankan:

git clone

Selanjutnya, pindah ke repositori dan bangun perangkat lunak dengan menjalankan

cd CribSense

./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug make sudo make install sudo systemctl daemon-reload

Selamat, Anda telah menginstal semua perangkat lunak yang diperlukan!

Konfigurasi

CribSense dapat disesuaikan melalui file konfigurasi INI sederhana. Setelah menjalankan `make install`, file konfigurasi berada di /etc/cribsense/config.ini. Anda dapat melihat dan mengedit parameter ini dengan menjalankan

sudo nano /etc/cribsense/config.ini

Penjelasan singkat dari setiap parameter diberikan dalam konfigurasi default, tetapi detail lebih lanjut tersedia di https://lukehsiao.github.io/CribSense/setup/config/. Kami juga akan membahas kalibrasi dan konfigurasi di akhir panduan ini.

Menjalankan CribSense

CribSense dirancang untuk dijalankan saat startup dengan menggunakan layanan systemd. Saat Anda terhubung ke Raspberry Pi Anda dengan keyboard dan mouse, Anda harus memastikan bahwa parameter konfigurasi berfungsi untuk boks Anda. Anda mungkin perlu menyetel ulang parameter ini jika Anda memindahkannya.

Saat Anda menyetel parameter, Anda dapat menjalankan cribsense sesuka hati dari baris perintah dengan menjalankan

cribsense --config /etc/cribsense/config.ini

Setelah Anda puas, Anda dapat mengaktifkan autorun dengan menjalankan

sudo systemctl aktifkan cribsense

Anda dapat menghentikan cribsense agar tidak berjalan secara otomatis dengan menjalankan

sudo systemctl nonaktifkan cribsense

Ikhtisar Perangkat Lunak

Perangkat lunak CribSense adalah jantung dan jiwa dari proyek ini. Kami melihat beberapa demo besar pembesaran video dari MIT, dan ingin mencoba dan menjalankan algoritme serupa pada Raspberry Pi. Ini membutuhkan lebih dari 10x percepatan dari pekerjaan tbl3rd pada implementasi C++ pembesaran video agar dapat berjalan secara real-time di Pi. Pengoptimalan yang diperlukan memandu desain perangkat lunak kami.

Pada tingkat tinggi, CribSense berulang kali berputar melalui mesin status perangkat lunak. Pertama, ia membagi setiap bingkai video skala abu-abu 640x480 menjadi 3 bagian horizontal (640x160) untuk lokalitas cache yang lebih baik. Kemudian memperbesar setiap pita di utas terpisah, dan memantau gerakan yang terlihat dalam bingkai. Setelah memantau gerakan selama beberapa detik, ini menentukan area utama gerakan dan memotong bingkai ke sana. Ini mengurangi jumlah piksel yang perlu diproses oleh algoritme. Kemudian, CribSense memantau jumlah gerakan dalam aliran yang dipangkas dan membunyikan alarm jika tidak ada gerakan yang dirasakan untuk waktu yang dapat dikonfigurasi. Secara berkala, CribSense akan membuka tampilannya lagi untuk memantau bingkai penuh jika bayi telah bergerak dan memotong ulang di sekitar area gerak utama yang baru.

Pembesaran video digunakan untuk meningkatkan rasio sinyal terhadap kebisingan dari gerakan halus seperti pernapasan bayi. Ini tidak akan diperlukan untuk gerakan yang lebih besar, tetapi dapat membantu untuk gerakan yang sangat halus. Perhatikan bahwa implementasi kami secara longgar didasarkan pada algoritme yang dijelaskan dalam makalah MIT, dan tidak berfungsi sebaik kode kepemilikannya.

Pengoptimalan seperti multithreading, cropping adaptif, dan pengoptimalan compiler memberi kami kecepatan masing-masing sekitar 3x, 3x, dan 1,2x. Ini memungkinkan kami untuk mencapai 10x percepatan yang diperlukan untuk berjalan secara real-time di Pi.

Rincian lengkap dapat ditemukan di halaman Arsitektur Perangkat Lunak dari repositori CribSense.

Jika Anda tertarik dengan perbesaran video, silakan kunjungi halaman MIT.

Langkah 3: Mempersiapkan Perangkat Keras Anda: Hubungkan Kamera Anda

Mempersiapkan Perangkat Keras Anda: Hubungkan Kamera Anda
Mempersiapkan Perangkat Keras Anda: Hubungkan Kamera Anda

Pertama, Anda menukar kabel 6" yang disertakan dengan kamera dengan kabel 12". Untuk melakukan ini, Anda cukup mengikuti tutorial ini tentang cara mengganti kabel kamera.

Singkatnya, Anda akan melihat tab push/pull di bagian belakang kamera yang dapat Anda tarik untuk melepaskan kabel fleksibel. Ganti kabel pendek dengan yang lebih panjang dan dorong tab kembali.

Anda akan melihat bahwa kami memiliki kabel 24" dalam gambar kami. Itu terlalu panjang. Kabel 12" pada daftar bahan adalah panjang yang jauh lebih masuk akal.

Langkah 4: Mempersiapkan Perangkat Keras Anda: IR LED

Mempersiapkan Perangkat Keras Anda: IR LED
Mempersiapkan Perangkat Keras Anda: IR LED
Mempersiapkan Perangkat Keras Anda: IR LED
Mempersiapkan Perangkat Keras Anda: IR LED
Mempersiapkan Perangkat Keras Anda: IR LED
Mempersiapkan Perangkat Keras Anda: IR LED

CribSense relatif mudah dibuat, dan sebagian besar terdiri dari suku cadang yang tersedia secara komersial. Seperti yang terlihat pada gambar di atas, ada 5 komponen perangkat keras utama, hanya 2 yang dibuat khusus. Halaman ini akan membahas cara membuat sirkuit LED IR, dan halaman berikutnya akan membahas cara membuat sasis.

Untuk bagian ini, Anda perlu mendapatkan besi solder, kabel, dioda, LED IR, dan resistor. Kami akan membangun sirkuit yang ditunjukkan pada gambar ke-2. Jika Anda baru dalam menyolder, berikut adalah panduan bagus yang akan membantu Anda. Sementara panduan ini membahas penyolderan melalui lubang, Anda dapat menggunakan teknik dasar yang sama untuk menyambungkan komponen-komponen ini bersama-sama seperti yang ditunjukkan pada gambar ke-3.

Untuk memberikan pencahayaan yang memadai di malam hari, kami menggunakan LED IR, yang tidak terlihat oleh mata manusia tetapi terlihat oleh kamera NoIR. LED IR tidak mengkonsumsi banyak daya dibandingkan dengan Raspberry Pi, jadi kami membiarkan LED IR menyala demi kesederhanaan.

Pada versi Pi sebelumnya, keluaran arus maksimum dari pin ini adalah 50mA. Raspberry Pi B+ meningkatkan ini menjadi 500mA. Namun, kami hanya menggunakan pin daya 5V untuk kesederhanaan, yang dapat memasok hingga 1,5A. Tegangan maju LED IR adalah sekitar 1,7 ~ 1,9V menurut pengukuran kami. Meskipun LED IR dapat menarik 500mA tanpa merusak dirinya sendiri, kami mengurangi arus menjadi sekitar 200mA untuk mengurangi panas dan konsumsi daya secara keseluruhan. Hasil percobaan juga menunjukkan bahwa LED IR cukup terang dengan arus input 200mA. Untuk menjembatani kesenjangan antara 5V dan 1.9V, kami menggunakan tiga dioda 1N4001 dan resistor 1 Ohm secara seri dengan LED IR. Penurunan tegangan pada kabel, dioda, dan resistor masing-masing sekitar 0,2V, 0,9V (untuk masing-masing) dan 0,2V. Dengan demikian, tegangan pada LED IR adalah 5V - 0,2V - (3 * 0,9V) - 0,2V = 1,9V. Disipasi panas di atas LED adalah 0,18W dan 0,2W di atas resistor, semuanya baik dalam peringkat maksimumnya.

Tapi kita belum selesai! Agar lebih pas dengan sasis cetak 3D, kami ingin lensa LED IR menonjol dari sasis kami dan papan PCB rata dengan lubangnya. Fotodioda kecil di kanan bawah akan menghalangi. Untuk memperbaikinya, kami melepas soldernya dan membaliknya ke sisi berlawanan dari papan seperti yang ditunjukkan pada dua foto terakhir. Fotodioda tidak diperlukan karena kita ingin LED selalu menyala. Cukup beralih ke sisi yang berlawanan meninggalkan sirkuit LED asli tidak berubah.

Saat menyolder ke kabel, pastikan panjang kabel setidaknya 12 inci dan memiliki pin header yang dapat tergelincir di atas GPIO Pi.

Langkah 5: Mempersiapkan Perangkat Keras Anda: Sasis

Mempersiapkan Perangkat Keras Anda: Sasis
Mempersiapkan Perangkat Keras Anda: Sasis
Mempersiapkan Perangkat Keras Anda: Sasis
Mempersiapkan Perangkat Keras Anda: Sasis
Mempersiapkan Perangkat Keras Anda: Sasis
Mempersiapkan Perangkat Keras Anda: Sasis

File Sumber:

  • Kasus STL
  • Pembuat Kasus
  • Sampul STL
  • Cover Makerbot

Kami menggunakan sasis cetak 3D sederhana untuk menampung Pi, kamera, dan LED. Menggunakan sasis kami adalah opsional, meskipun disarankan untuk mencegah anak kecil menyentuh sirkuit elektronik yang terbuka. Setiap boks berbeda, jadi sasis kami tidak termasuk braket pemasangan. Beberapa opsi pemasangan dapat mencakup:

  • Pengikat kabel
  • Kunci Ganda 3M
  • Velcro
  • Tape

Jika Anda memiliki akses ke MakerBot Replicator (Generasi ke-5), Anda cukup mengunduh file.makerbot untuk kasing dan menutupinya ke Replicator MakerBot Anda dan mencetaknya. Dibutuhkan sekitar 6 jam untuk mencetak kasing dan 3 jam untuk mencetak sampul. Jika Anda menggunakan jenis printer 3D yang berbeda, silakan terus membaca.

Volume build minimum 9,9" (L) x 7,8" (W) x 5,9" (H) diperlukan untuk mencetak CribSense. Jika Anda tidak memiliki akses ke printer 3D dengan volume build ini, Anda dapat menggunakan pencetakan 3D online layanan (seperti Shapeways atau Sculpteo) untuk mencetak CribSense. Resolusi cetak minimum adalah 0,015". Jika Anda menggunakan printer 3D tipe fabrikasi filamen fusi, ini berarti diameter nozzle Anda harus 0,015" atau lebih kecil. Printer dengan resolusi cetak yang lebih rendah (diameter nozzle yang lebih besar) dapat berfungsi, tetapi Raspberry Pi mungkin tidak sesuai dengan sasis. Kami merekomendasikan PLA (asam polilaktat) sebagai bahan cetak yang disukai. Plastik lain dapat digunakan, tetapi Raspberry Pi mungkin tidak cocok jika koefisien ekspansi termal dari plastik yang dipilih lebih besar daripada PLA. Jika printer 3D Anda memiliki pelat build yang dipanaskan, matikan pemanas sebelum melanjutkan.

Mengorientasikan model pada pelat pembuatan printer Anda sangat penting untuk pencetakan yang sukses. Model-model ini dirancang dengan cermat sehingga tidak perlu dicetak dengan bahan pendukung, sehingga menghemat plastik dan meningkatkan kualitas cetak. Sebelum melanjutkan, unduh file 3D untuk kasing dan sampul. Saat mencetak model ini, leher CribSense harus diletakkan rata pada pelat pembuatan. Ini memastikan bahwa semua sudut menjorok pada model tidak melebihi 45 derajat, sehingga menghilangkan kebutuhan akan material pendukung. Untuk instruksi tentang orientasi model 3D dalam volume build printer Anda, silakan merujuk ke instruksi manual yang disertakan dengan printer 3D Anda. Contoh untuk orientasi pembuatan casing dan penutup ditunjukkan di atas.

Selain menempatkan leher CribSense rata pada pelat build, Anda mungkin memperhatikan bahwa model diputar di sekitar sumbu vertikal. Ini mungkin diperlukan agar sesuai dengan model di dalam volume pembuatan printer 3D Anda. Rotasi ini opsional jika panjang volume build Anda cukup panjang untuk mengakomodasi CribSense.

Langkah 6: Mempersiapkan Perangkat Keras Anda: Perakitan

Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan
Mempersiapkan Perangkat Keras Anda: Perakitan

Setelah semua perangkat keras siap, Anda dapat mulai merakit. Lem apa pun dapat digunakan dalam proses ini, tetapi kami merekomendasikan lem panas karena dua alasan utama. Lem panas cepat kering, jadi tidak perlu menunggu lama sampai lem mengering. Selain itu, lem panas dapat dilepas jika Anda melakukan kesalahan. Untuk menghilangkan lem panas kering, rendam lem panas dalam alkohol gosok (isopropil). Kami merekomendasikan konsentrasi 90% atau lebih tinggi, tetapi konsentrasi 70% masih akan berfungsi. Merendam lem panas kering dalam alkohol isopropil akan melemahkan ikatan antara lem dan permukaan di bawahnya, sehingga Anda dapat mengelupas lem dengan bersih. Saat merendam lem dalam alkohol isopropil, Raspberry Pi harus dimatikan dan dicabut. Pastikan untuk membiarkan semuanya kering sebelum mengoleskan kembali lem panas dan mem-boot Raspberry Pi.

Semua gambar untuk langkah-langkah ini berurutan dan mengikuti langkah-langkah teks.

  1. Masukkan Raspberry Pi ke dalam sasis. Anda perlu sedikit melenturkannya untuk memasukkan port audio, tetapi begitu masuk, jack audio akan tetap di tempatnya. Setelah terpasang, pastikan semua port masih dapat diakses (mis. Anda dapat mencolokkan kabel daya).
  2. Selanjutnya, gunakan lem panas untuk menempelkan Pi ke tempatnya dan menempelkan kamera ke Pi. Ada lubang sekrup juga jika Anda lebih suka menggunakannya.
  3. Sekarang, rekatkan LED dan kamera ke sampul depan (foto). Mulailah dengan menempelkan kamera NoIR ke lubang kamera. Pastikan kamera pas dan sejajar dengan sasis. Jangan menggunakan terlalu banyak lem; jika tidak, Anda tidak akan dapat memasukkan kamera ke dalam casing utama. Pastikan untuk menyalakan Pi dan lihat kamera (`raspistill -v`, misalnya) untuk memastikan sudutnya bagus dan memiliki bidang pandang yang bagus. Jika tidak, lepaskan lem panas dan posisikan ulang.
  4. Selanjutnya, rekatkan LED IR ke lubang di leher penutup. Leher berada pada sudut 45 derajat ke sisi lampu tempat tidur bayi, yang menghasilkan lebih banyak bayangan dalam situasi cahaya redup. Ini menambahkan lebih banyak kontras pada gambar, membuatnya lebih mudah untuk mendeteksi gerakan.
  5. Pasang kabel LED IR ke pin header Raspberry Pi seperti yang ditunjukkan pada gambar skema.
  6. Kemas kabel ke dalam sasis agar tidak kusut atau tegang. Kami akhirnya melipat gaya akordeon kabel karena kabel fleksibel kamera kami terlalu panjang.
  7. Dengan semuanya terselip, lem panas di sekitar tepi tempat kedua bagian bertemu, menyegelnya di tempatnya.

Langkah 7: Kalibrasi

Image
Image
Kalibrasi
Kalibrasi

Detail tentang parameter konfigurasi dapat ditemukan di dokumentasi repositori CribSense. Lihat juga video untuk melihat contoh bagaimana Anda dapat mengkalibrasi CribSense setelah Anda menyiapkan semuanya.

Berikut adalah contoh file konfigurasi:

[io]; Konfigurasi I/O

; masukan = path_to_file; Masukan file yang akan digunakan input_fps = 15; fps input (40 maks, 15 disarankan jika menggunakan kamera) full_fps = 4,5; fps di mana bingkai penuh dapat diproses crop_fps = 15; fps di mana bingkai yang dipotong dapat diproses kamera = 0; Kamera yang digunakan lebar = 640; Lebar masukan video tinggi = 480; Tinggi masukan video time_to_alarm = 10; Berapa detik menunggu tanpa gerakan sebelum alarm. [memotong]; Pengaturan Pemotongan Adaptif crop = true; Apakah atau tidak untuk memotong frames_to_settle = 10; # frame untuk menunggu setelah reset sebelum memproses roi_update_interval = 800; # bingkai antara penghitungan ulang ROI roi_window = 50; # frame untuk dipantau sebelum memilih ROI [motion]; Pengaturan Deteksi Gerakan erode_dim = 4; dimensi kernel erode dilate_dim = 60; dimensi kernel melebar diff_threshold = 8; perbedaan abs diperlukan sebelum mengenali durasi perubahan = 1; # bingkai untuk mempertahankan gerakan sebelum menandai true pixel_threshold = 5; # piksel yang harus berbeda untuk ditandai sebagai motion show_diff = false; tampilkan perbedaan antara 3 frame [perbesaran]; Pengaturan Pembesaran Video memperkuat = 25; % amplifikasi yang diinginkan cutoff rendah = 0,5; Frekuensi rendah dari bandpass. batas tinggi = 1,0; Frekuensi tinggi bandpass. ambang = 50; Ambang fase sebagai % pi. show_magnification = false; Tampilkan bingkai keluaran dari setiap perbesaran [debug] print_times = false; Cetak waktu analisis

Kalibrasi algoritma adalah upaya berulang, tanpa solusi yang tepat. Kami mendorong Anda untuk bereksperimen dengan berbagai nilai, menggabungkannya dengan fitur debug, untuk menemukan kombinasi parameter yang paling sesuai dengan lingkungan Anda. Sebelum Anda memulai kalibrasi, pastikan show_diff dan show_magnification disetel ke true.

Sebagai pedoman, meningkatkan amplifikasi dan nilai phase_threshold meningkatkan jumlah pembesaran yang diterapkan ke video input. Anda harus mengubah nilai ini sampai Anda melihat dengan jelas gerakan yang ingin Anda lacak dalam bingkai video. Jika Anda melihat artefak, mengurangi phase_threshold sambil mempertahankan amplifikasi yang sama mungkin membantu.

Parameter deteksi gerakan membantu mengkompensasi kebisingan. Saat mendeteksi daerah gerakan, erode_dim dan dilate_dim digunakan untuk mengukur dimensi kernel OpenCV yang digunakan untuk mengikis dan melebarkan gerakan sehingga noise pertama kali terkikis, kemudian sinyal gerakan yang tersisa didilatasikan secara signifikan untuk membuat daerah gerakan terlihat jelas. Parameter ini mungkin juga perlu disetel jika boks Anda berada dalam pengaturan kontras yang sangat tinggi. Secara umum, Anda memerlukan erode_dim yang lebih tinggi untuk pengaturan kontras tinggi, dan erode_dim yang lebih rendah untuk kontras rendah.

Jika Anda menjalankan CribSense dengan show_diff = true dan Anda melihat bahwa terlalu banyak keluaran akumulator berwarna putih, atau beberapa bagian video yang sama sekali tidak terkait terdeteksi sebagai gerakan (misalnya lampu yang berkedip-kedip), tingkatkan erode_dim hingga hanya sebagian dari video sesuai dengan bayi Anda adalah bagian terbesar dari putih. Gambar pertama menunjukkan contoh di mana dimensi erosi terlalu rendah untuk jumlah gerakan dalam bingkai, sedangkan yang berikutnya menunjukkan bingkai yang dikalibrasi dengan baik.

Setelah ini dikalibrasi, pastikan bahwa pixel_threshold diatur ke nilai sedemikian rupa sehingga "Pergerakan Piksel" hanya melaporkan nilai puncak pergerakan piksel, dan tidak semuanya (yang berarti Anda harus menghilangkan noise). Idealnya, Anda akan melihat output seperti ini di terminal Anda, di mana ada pola periodik yang jelas terkait dengan gerakan:

[info] Gerakan Piksel: 0 [info] Perkiraan Gerakan: 1,219812 Hz

[info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 44 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 161 [info] Perkiraan Gerak: 1.219812 Hz [info] Pergerakan Piksel: 121 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 86 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel ent: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 97 [info] Perkiraan Gerak: 0.841416 Hz [info] Pergerakan Piksel: 74 [info] Perkiraan Gerak: 0.839298 Hz [info] Piksel Pergerakan: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 60 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 48 [info] Gerak Perkiraan: 0.839298 Hz [info] Pergerakan Piksel: 38 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 29 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 28 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 22 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0.839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz [info] Pergerakan Piksel: 0 [info] Perkiraan Gerak: 0,839298 Hz

Jika output Anda terlihat lebih seperti ini:

[info] Gerakan Piksel: 921 [info] Perkiraan Gerakan: 1,352046 Hz

[info] Pergerakan Piksel: 736 [info] Perkiraan Gerak: 1,352046 Hz [info] Pergerakan Piksel: 666 [info] Perkiraan Gerak: 1,352046 Hz [info] Pergerakan Piksel: 663 [info] Perkiraan Gerak: 1,352046 Hz [info] Pergerakan Piksel: 1196 [info] Perkiraan Gerak: 1,352046 Hz [info] Pergerakan Piksel: 1235 [info] Perkiraan Gerak: 1,352046 Hz [info] Pergerakan Piksel: 1187 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 1115 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 959 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 744 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 611 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 468 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 371 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 307 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 270 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 234 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 197 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 179 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 164 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 239 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 733 [info] Perkiraan Gerak: 1.456389 Hz [info] Pergerakan Piksel: 686 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 667 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 607 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 544 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 499 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 434 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 396 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 375 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 389 [info] Perkiraan Gerak: 1.229389 Hz [info] Pergerakan Piksel: 305 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 269 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 1382 [info] Gerak E perkiraan: 1.312346 Hz [info] Pergerakan Piksel: 1086 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 1049 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 811 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 601 [info] Perkiraan Gerak: 1.312346 Hz [info] Pergerakan Piksel: 456 [info] Perkiraan Gerak: 1.312346 Hz

Sesuaikan pixel_threshold dan diff_threshold hingga hanya puncak yang terlihat, dan pergerakan piksel adalah 0 sebaliknya.

Langkah 8: Demonstrasi

Image
Image

Berikut adalah sedikit demo tentang cara kerja CribSense. Anda harus membayangkan bahwa ini melekat pada sisi tempat tidur bayi.

Saat Anda memposisikan CribSense di atas boks Anda, Anda perlu mengoptimalkan jarak antara bayi dan kamera. Idealnya, dada bayi Anda akan mengisi kurang dari 1/3 bingkai. Anak tidak boleh terlalu jauh, atau video beresolusi rendah akan kesulitan menemukan detail yang cukup untuk diperbesar. Jika kamera terlalu dekat, kamera mungkin tidak dapat melihat anak Anda jika mereka berguling atau keluar dari bingkai. Demikian pula, jika anak berada di bawah selimut "bertenda", di mana ada kontak terbatas antara selimut dan dada anak, mungkin sulit untuk mendeteksi gerakan. Selipkan mereka dengan baik!

Anda juga ingin mempertimbangkan situasi pencahayaan di sekitar tempat tidur bayi Anda. Jika tempat tidur bayi Anda tepat di sebelah jendela, Anda mungkin mendapatkan bayangan bergerak atau mengubah nilai cahaya karena matahari terhalang oleh awan, atau gerakan terjadi di luar jendela. Tempat dengan pencahayaan yang konsisten adalah yang terbaik.

Dengan beberapa pekerjaan lagi, kami pikir seseorang dapat meningkatkan perangkat lunak kami sehingga kalibrasi menjadi proses yang jauh lebih lancar. Di masa mendatang, fitur tambahan seperti pemberitahuan push juga dapat ditambahkan.

Langkah 9: Pemecahan Masalah

Anda mungkin mengalami beberapa masalah umum saat menyiapkan CribSense. Misalnya, mengalami kesulitan membangun/menjalankan program, atau tidak mendengar audio apa pun. Ingat, CribSense bukanlah monitor bayi yang sangat andal. Kami akan menyambut kontribusi di repositori GitHub kami saat Anda melakukan peningkatan!

Berikut adalah beberapa tips pemecahan masalah yang kami kumpulkan saat membuat CribSense.

Tidak ada alarm yang diputar

  • Apakah speaker Anda berfungsi?
  • Bisakah Anda memutar suara lain dari Pi di luar alarm CribSense?
  • Jika Pi Anda mencoba memutar audio melalui HDMI daripada port audio? Periksa halaman Konfigurasi Audio Raspberry Pi untuk memastikan bahwa Anda telah memilih output yang benar.
  • Apakah perangkat lunak CribSense mendeteksi gerakan? Jika CribSense berjalan di latar belakang, Anda dapat memeriksa dengan journalctl -f di terminal.
  • Jika CribSense merasakan banyak gerakan, Anda mungkin perlu mengkalibrasi CribSense.

LED IR tidak berfungsi

  • Dapatkah Anda melihat warna merah samar ketika Anda melihat LED IR? Cincin merah samar akan terlihat saat LED menyala.
  • Periksa polaritas koneksi. Jika +5V dan GND dibalik, itu tidak akan berfungsi.
  • Hubungkan LED ke catu daya dengan batas tegangan/arus 5V/0.5A. Biasanya, itu harus mengkonsumsi 0,2A pada 5V. Jika tidak, LED Anda mungkin tidak berfungsi.

CribSense mendeteksi gerakan meskipun tidak ada bayi

  • Sudahkah Anda mengkalibrasi CribSense dengan benar?
  • Ingat, CribSense hanya mencari perubahan nilai piksel

    • Apakah ada bayangan yang bergerak di dalam bingkai?
    • Apakah ada kedipan atau perubahan pencahayaan?
    • Apakah CribSense dipasang ke permukaan yang stabil (yaitu sesuatu yang tidak akan bergetar jika orang berjalan melewatinya)?
    • Apakah ada sumber gerakan lain dalam bingkai (cermin menangkap pantulan, dll)?

CribSense TIDAK mendeteksi gerakan meskipun ada gerakan

  • Sudahkah Anda mengkalibrasi CribSense dengan benar?
  • Apakah ada sesuatu yang menghalangi kamera?
  • Apakah Anda dapat terhubung ke kamera dari Raspberry Pi sama sekali? Periksa dengan menjalankan raspistill -v di terminal untuk membuka kamera di Pi selama beberapa detik.
  • Jika Anda melihat Sudo systemctl status cribsense, apakah CribSense benar-benar berjalan?
  • Apakah bayi Anda berada di bawah selimut yang "berkemah" sehingga tidak melakukan kontak dengan anak? Jika ada celah udara yang signifikan antara selimut dan anak, selimut dapat menutupi gerakan.
  • Bisakah Anda melihat gerakannya jika Anda memperkuat video lebih banyak?
  • Dapatkah Anda melihat gerakan jika Anda menyetel cutoff frekuensi rendah dan tinggi?
  • Jika ini terjadi hanya dalam cahaya redup, apakah Anda memastikan kalibrasi berfungsi dalam cahaya redup?

CribSense tidak membangun

Apakah Anda menginstal semua dependensi?

Saya tidak bisa menjalankan cribsense dari commandline

  • Apakah Anda secara tidak sengaja salah mengetik sesuatu saat menjalankan./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug selama pembuatan perangkat lunak?
  • Apakah cribsense ada di /usr/bin ?
  • Jalur apa yang disediakan jika Anda menjalankan "yang cribsense"?

Direkomendasikan: