Isi kandungan:

CribSense: Monitor Bayi berasaskan video tanpa sentuhan: 9 Langkah (dengan Gambar)
CribSense: Monitor Bayi berasaskan video tanpa sentuhan: 9 Langkah (dengan Gambar)

Video: CribSense: Monitor Bayi berasaskan video tanpa sentuhan: 9 Langkah (dengan Gambar)

Video: CribSense: Monitor Bayi berasaskan video tanpa sentuhan: 9 Langkah (dengan Gambar)
Video: Your Doctor Is Wrong About Cholesterol 2024, November
Anonim
CribSense: Monitor Bayi berasaskan video tanpa sentuhan
CribSense: Monitor Bayi berasaskan video tanpa sentuhan
CribSense: Monitor Bayi berasaskan Video tanpa Kontak
CribSense: Monitor Bayi berasaskan Video tanpa Kontak

CribSense adalah monitor bayi tanpa sentuhan video yang boleh anda buat sendiri tanpa melanggar bank

CribSense adalah pelaksanaan C ++ Pembesaran Video yang diselaraskan untuk dijalankan pada Raspberry Pi 3 Model B. Sepanjang hujung minggu, anda dapat menyiapkan monitor bayi dengan buaian sendiri yang menimbulkan penggera jika bayi anda berhenti bergerak. Sebagai bonus, semua perisian bebas digunakan untuk tujuan bukan komersial dan mudah dilanjutkan.

Repositori lengkap yang mengandungi fail sumber dan dokumentasi boleh didapati di

Walaupun kami berpendapat bahawa CribSense cukup menyeronokkan, penting untuk diingat bahawa ini sebenarnya bukan alat keselamatan yang diperakui dan sangat mudah. Iaitu, perlu dikonfigurasikan dengan betul dan mempunyai persekitaran yang terkawal dengan baik agar dapat berfungsi. Contohnya, jika tidak dikalibrasi dengan baik dan / atau persekitaran dalam video tidak kondusif untuk pembesaran video, anda mungkin tidak dapat menggunakannya. Kami menjadikannya sebagai projek yang menyeronokkan untuk melihat seberapa baik perisian perisian berat seperti pembesaran video dijalankan pada perkakasan terhad komputasi seperti Raspberry Pi. Sebarang produk sebenar memerlukan lebih banyak ujian daripada yang telah kita lakukan. Oleh itu, jika anda menggunakan projek ini, ambil apa sebenarnya: penerokaan ringkas pembesaran video pada Pi.

Apa yang anda perlukan:

Raspberry Pi + Kamera + Alat Konfigurasi:

  • Raspberry Pi 3 Model B
  • Bekalan Kuasa USB Mikro 5V 2.5A
  • Modul Kamera Raspberry Pi NoIR V2
  • Kad MicroSD (kami menggunakan Kad Kelas 10GB 16GB)
  • Kabel Flex untuk Kamera Raspberry Pi (12 ")
  • Pembesar suara dengan input 3.5mm
  • Monitor HDMI
  • Papan Kekunci USB
  • Tetikus USB
  • [pilihan] Raspberry Pi Heatsink (jika anda bimbang akan panas, anda boleh memasukkan salah satu dari ini ke Pi anda)

Litar LED IR untuk operasi cahaya rendah:

  • [3x] 1N4001 Diod
  • 1 Ohm, Perintang 1W
  • LED IR 1W
  • 2 wayar untuk menyambungkan LED ke Pi
  • Besi pematerian

Casis:

  • Akses ke pencetak 3D (kelantangan minimum = 9,9 "L x 7,8" W x 5,9 "H) untuk mencetak casis kami. Walau bagaimanapun, jangan ragu untuk membuat sendiri.
  • Lem (sebarang jenis gam akan berfungsi, tetapi gam panas disyorkan untuk membuat prototaip).

Langkah 1: Prasyarat

Sebelum anda memulakan panduan langkah demi langkah kami, anda semestinya sudah memasang versi terbaru Raspbian pada kad SD anda dan memastikan Pi anda berfungsi. Anda juga perlu mengaktifkan modul kamera sebelum dapat mengakses kamera.

Langkah 2: Memasang Perisian CribSense

CribSense bergantung pada autoconf, libtool, OpenCV, dan libcanberra, serta alat perisian biasa.

  • autoconf dan libtool digunakan untuk secara automatik mengkonfigurasi makefiles dan membina skrip untuk CribSense pada banyak platform (seperti Linux, OSX, dan Raspberry Pi).
  • OpenCV adalah pakej penglihatan komputer yang kuat yang digunakan untuk melakukan pemprosesan gambar dan merupakan asas kod pembesaran video dan pengesanan gerakan. Ia mempunyai sokongan hebat, mudah digunakan, dan mempunyai prestasi yang baik.
  • libcanberra adalah perpustakaan mudah untuk memainkan bunyi acara. Ini digunakan untuk memainkan suara penggera untuk CribSense.

Lawati halaman masing-masing untuk mendapatkan maklumat lengkap.

Pasang ini dengan membuka terminal pada Pi anda dan jalankan:

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

Seterusnya anda perlu menetapkan pemacu kamera untuk memuatkan automatik dengan menambahkan bcm2835-v4l2 ke `/ etc / modules-load.d / modules.conf`. Modules.conf anda akan kelihatan seperti ini:

# / etc / modules: modul kernel untuk dimuat pada waktu boot.

# # Fail mengandungi nama-nama modul kernel yang harus dimuat # pada waktu boot, satu per baris. Garis yang diawali dengan "#" tidak dihiraukan. i2c-dev bcm2835-v4l2

Setelah fail diedit, anda mesti menghidupkan semula Pi anda. Pemacu ini digunakan oleh CribSense untuk langsung menarik bingkai dari Kamera NoIR.

Kemudian, anda boleh mengklon repositori dengan menjalankan:

klon git

Seterusnya, pindah ke repositori dan bina perisian dengan menjalankan

cd CribSense

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

Tahniah, anda telah memasang semua perisian yang diperlukan!

Konfigurasi

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

sudo nano /etc/cribsense/config.ini

Penjelasan ringkas setiap parameter diberikan dalam konfigurasi lalai, tetapi lebih banyak butiran tersedia di https://lukehsiao.github.io/CribSense/setup/config/. Kami juga akan membincangkan penentukuran dan konfigurasi pada akhir panduan ini.

Menjalankan CribSense

CribSense dirancang untuk dijalankan pada permulaan dengan menggunakan perkhidmatan systemd. Semasa anda menyambung ke Raspberry Pi anda dengan papan kekunci dan tetikus, anda harus memastikan bahawa parameter konfigurasi berfungsi untuk buaian anda. Anda mungkin perlu menyesuaikan semula parameter ini jika anda memindahkannya.

Semasa anda menyesuaikan parameter, anda dapat menjalankan cribsense sesuka hati dari baris perintah dengan menjalankan

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

Setelah berpuas hati, anda boleh mengaktifkan autorun dengan menjalankan

sudo systemctl mengaktifkan cribsense

Anda boleh menghentikan cribsense daripada berjalan secara automatik dengan menjalankan

sudo systemctl lumpuhkan cribsense

Gambaran Keseluruhan Perisian

Perisian CribSense adalah nadi dan nadi projek ini. Kami melihat beberapa demo pembesaran video hebat dari MIT, dan ingin mencuba dan menjalankan algoritma yang serupa pada Raspberry Pi. Ini memerlukan lebih dari 10x kepantasan dari kerja tbl3rd pada pelaksanaan C ++ pembesaran video untuk berjalan dalam masa nyata pada Pi. Pengoptimuman yang diperlukan membimbing reka bentuk perisian kami.

Pada tahap tinggi, CribSense berulang kali melalui mesin keadaan perisian. Pertama, ia membahagikan setiap bingkai video skala abu-abu 640x480 menjadi 3 bahagian mendatar (640x160) untuk lokasi cache yang lebih baik. Kemudian membesarkan setiap jalur dalam utas yang terpisah, dan memantau pergerakan yang dilihat dalam bingkai. Setelah memantau pergerakan selama beberapa saat, ia menentukan kawasan utama pergerakan dan memotong bingkai ke dalamnya. Ini mengurangkan jumlah piksel yang perlu diproses oleh algoritma. Kemudian, CribSense memantau jumlah gerakan dalam aliran yang dipangkas dan membunyikan penggera jika tidak ada gerakan yang dirasakan untuk jangka waktu yang dapat dikonfigurasi. Secara berkala, CribSense akan membuka paparannya sekali lagi untuk memantau bingkai penuh sekiranya bayi bergerak dan memotong kembali di sekitar kawasan gerakan utama yang baru.

Pembesaran video digunakan untuk meningkatkan nisbah isyarat kepada bunyi pergerakan halus seperti pernafasan bayi. Tidak diperlukan pergerakan yang lebih besar, tetapi dapat membantu pergerakan yang sangat halus. Perhatikan bahawa pelaksanaan kami secara longgar berdasarkan algoritma yang dijelaskan dalam makalah MIT, dan tidak berfungsi sama seperti kod proprietari mereka.

Pengoptimuman seperti multithreading, pemangkasan adaptif, dan pengoptimuman penyusun memberi kami kira-kira 3x, 3x, dan 1.2x speedup, masing-masing. Ini membolehkan kami mencapai kepantasan 10x yang diperlukan untuk menjalankan masa nyata pada Pi.

Maklumat lengkap boleh didapati di halaman Perisian Perisian di repositori CribSense.

Sekiranya anda berminat dengan pembesaran video, sila lawati halaman MIT.

Langkah 3: Menyiapkan Perkakasan Anda: Sambungkan Kamera Anda

Menyiapkan Perkakasan Anda: Sambungkan Kamera Anda
Menyiapkan Perkakasan Anda: Sambungkan Kamera Anda

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

Ringkasnya, anda akan melihat tab tekan / tarik di bahagian belakang kamera yang boleh anda tarik keluar untuk melepaskan kabel flex. Ganti kabel pendek dengan yang lebih panjang dan tekan tab kembali.

Anda akan melihat bahawa kami mempunyai kabel 24 "dalam gambar kami. Itu terlalu panjang. Kabel 12" pada senarai bahan adalah panjang yang lebih masuk akal.

Langkah 4: Menyiapkan Perkakasan Anda: LED IR

Menyiapkan Perkakasan Anda: LED IR
Menyiapkan Perkakasan Anda: LED IR
Menyiapkan Perkakasan Anda: LED IR
Menyiapkan Perkakasan Anda: LED IR
Menyiapkan Perkakasan Anda: LED IR
Menyiapkan Perkakasan Anda: LED IR

CribSense agak mudah dibina, dan sebahagian besarnya terdiri daripada bahagian yang tersedia secara komersial. Seperti yang dilihat pada gambar di atas, terdapat 5 komponen perkakasan utama, hanya 2 daripadanya yang dibuat khas. Halaman ini akan membincangkan cara membina litar LED IR, dan halaman seterusnya akan membincangkan cara membina casis.

Untuk bahagian ini, anda perlu mendapatkan besi pematerian, wayar, dioda, LED IR, dan perintang. Kami akan membina litar yang ditunjukkan dalam rajah ke-2. Sekiranya anda baru menggunakan solder, berikut adalah panduan bagus yang akan membantu anda. Walaupun panduan ini membincangkan pematerian melalui lubang, anda boleh menggunakan teknik asas yang sama untuk menghubungkan komponen ini bersama-sama seperti yang ditunjukkan pada gambar ke-3.

Untuk memberikan pencahayaan yang mencukupi pada waktu malam, kami menggunakan LED IR, yang tidak dapat dilihat oleh mata manusia tetapi dapat dilihat oleh kamera NoIR. LED IR tidak menggunakan banyak tenaga berbanding dengan Raspberry Pi, jadi kami membiarkan LED IR dihidupkan demi kesederhanaan.

Pada versi sebelumnya Pi, output maksimum pin ini ialah 50mA. Raspberry Pi B + meningkatkannya kepada 500mA. Walau bagaimanapun, kami hanya menggunakan pin kuasa 5V untuk kesederhanaan, yang dapat membekalkan hingga 1.5A. Voltan hadapan LED IR adalah sekitar 1.7 ~ 1.9V mengikut ukuran kami. Walaupun LED IR dapat menarik 500mA tanpa merosakkan dirinya sendiri, kita mengurangkan arus menjadi sekitar 200mA untuk mengurangkan haba dan penggunaan tenaga secara keseluruhan. Hasil eksperimen juga menunjukkan bahawa LED IR cukup terang dengan arus input 200mA. Untuk merapatkan jurang antara 5V dan 1.9V, kami menggunakan tiga dioda 1N4001 dan perintang 1 Ohm secara bersiri dengan LED IR. Kejatuhan voltan pada wayar, diod, dan perintang masing-masing sekitar 0.2V, 0.9V (untuk masing-masing) dan 0.2V. Oleh itu, voltan di atas LED IR ialah 5V - 0.2V - (3 * 0.9V) - 0.2V = 1.9V. Pelesapan haba di atas LED adalah 0.18W dan 0.2W di atas perintang, semuanya berada dalam penilaian maksimum.

Tetapi kita belum selesai! Untuk mendapatkan casis 3D yang lebih baik, kami ingin lensa IR LED menonjol dari casis kami dan papan PCB disiram dengan lubang. Fotodiod kecil di bahagian bawah kanan akan menghalang. Untuk mengatasinya, kami melepaskannya dan membalikkannya ke seberang papan seperti yang ditunjukkan dalam dua foto terakhir. Fotodiod tidak diperlukan kerana kami mahu LED sentiasa menyala. Dengan menukarnya ke bahagian yang bertentangan, litar LED asal tidak akan berubah.

Semasa menyolder wayar, pastikan wayar panjangnya sekurang-kurangnya 12 inci dan mempunyai header pin yang dapat tergelincir di atas GPIO Pi.

Langkah 5: Menyiapkan Perkakasan Anda: Casis

Menyiapkan Perkakasan Anda: Casis
Menyiapkan Perkakasan Anda: Casis
Menyiapkan Perkakasan Anda: Casis
Menyiapkan Perkakasan Anda: Casis
Menyiapkan Perkakasan Anda: Casis
Menyiapkan Perkakasan Anda: Casis

Fail Sumber:

  • Kes STL
  • Kes Makerbot
  • Tutup STL
  • Tutup Makerbot

Kami menggunakan casis 3D yang mudah dicetak untuk menempatkan Pi, kamera, dan LED. Menggunakan casis kami adalah pilihan, walaupun disyorkan untuk mengelakkan anak kecil menyentuh litar elektronik yang terdedah. Setiap buaian berbeza, jadi casis kami tidak termasuk pendakap pemasangan. Beberapa pilihan pemasangan boleh merangkumi:

  • Ikatan Kabel
  • Kunci Dual 3M
  • Velcro
  • Pita

Sekiranya anda mempunyai akses ke MakerBot Replicator (Generasi ke-5), anda boleh memuat turun fail.makerbot untuk casing tersebut dan tutup ke MakerBot Replicator anda dan cetak. Diperlukan sekitar 6 jam untuk mencetak casing dan 3 jam untuk mencetak penutupnya. Sekiranya anda menggunakan jenis pencetak 3D yang lain, teruskan membaca.

Volume binaan minimum 9.9 "(L) x 7.8" (W) x 5.9 "(H) diperlukan untuk mencetak CribSense. Jika anda tidak mempunyai akses ke pencetak 3D dengan volume binaan ini, anda boleh menggunakan pencetakan 3D dalam talian perkhidmatan (seperti Shapeways atau Sculpteo) untuk mencetak CribSense. Resolusi cetakan minimum ialah 0.015 ". Sekiranya anda menggunakan pencetak 3D jenis fabrikasi filamen bersatu, ini bermaksud diameter muncung anda mestilah 0,015 "atau lebih kecil. Pencetak dengan resolusi cetakan yang lebih rendah (diameter muncung yang lebih besar) mungkin berfungsi, tetapi Raspberry Pi mungkin tidak sesuai dengan casis. Kami mengesyorkan PLA (polylactic acid) sebagai bahan percetakan pilihan. Plastik lain mungkin berfungsi, tetapi Raspberry Pi mungkin tidak sesuai sekiranya pekali pengembangan haba plastik yang dipilih lebih besar daripada PLA. Sekiranya pencetak 3D anda mempunyai plat binaan yang dipanaskan, matikan pemanas sebelum meneruskan.

Mengorientasikan model pada plat pencetak anda sangat penting untuk berjaya mencetak. Model-model ini dirancang dengan teliti sehingga tidak perlu dicetak dengan bahan sokongan, sehingga dapat menjimatkan plastik dan meningkatkan kualiti cetak. Sebelum meneruskan, muat turun fail 3D untuk sarung dan penutupnya. Semasa mencetak model-model ini, leher CribSense mesti diletakkan rata di atas plat binaan. Ini memastikan bahawa semua sudut overhang pada model tidak melebihi 45 darjah, sehingga menghilangkan keperluan untuk bahan sokongan. Untuk arahan mengenai mengorientasikan model 3D pada jumlah pencetak anda, rujuk manual arahan yang disertakan dengan pencetak 3D anda. Contoh untuk orientasi binaan casing dan penutup ditunjukkan di atas.

Selain meletakkan leher CribSense rata di atas plat binaan, anda mungkin melihat bahawa model-model tersebut diputar di sekitar paksi menegak. Ini mungkin diperlukan untuk menyesuaikan model di dalam jumlah binaan pencetak 3D anda. Putaran ini adalah pilihan sekiranya panjang isipadu bangunan anda cukup panjang untuk menampung CribSense.

Langkah 6: Menyiapkan Perkakasan Anda: Pemasangan

Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan
Menyiapkan Perkakasan Anda: Pemasangan

Setelah anda menyediakan semua perkakasan, anda boleh memulakan pemasangan. Sebarang gam boleh digunakan dalam proses ini, tetapi kami mengesyorkan lem panas untuk dua sebab utama. Lem panas kering dengan cepat, jadi anda tidak perlu menunggu lama sehingga lem kering. Di samping itu, lem panas boleh ditanggalkan sekiranya anda melakukan kesalahan. Untuk mengeluarkan lem panas kering, rendam lem panas ke dalam alkohol gosok (isopropil). Kami mengesyorkan kepekatan 90% atau lebih tinggi, tetapi kepekatan 70% akan tetap berfungsi. Merendam gam panas kering dalam alkohol isopropil akan melemahkan ikatan antara gam dan permukaan yang mendasari, membolehkan anda mengupas gam dengan bersih. Semasa merendam gam dalam alkohol isopropil, Raspberry Pi harus dimatikan dan dicabut. Pastikan untuk membiarkan semuanya kering sebelum menggunakan semula gam panas dan boot Raspberry Pi.

Semua gambar untuk langkah-langkah ini teratur dan ikuti langkah teksnya.

  1. Masukkan Raspberry Pi ke dalam casis. Anda perlu melenturkannya sedikit untuk memasukkan port audio, tetapi setelah masuk, bicu audio akan tetap berada di tempatnya. Setelah berada di tempatnya, pastikan semua port masih dapat diakses (mis. Anda boleh memasang kabel kuasa).
  2. Seterusnya, gunakan lem panas untuk memasang Pi ke tempatnya dan pasangkan kamera ke Pi. Terdapat lubang skru juga jika anda lebih suka menggunakannya.
  3. Sekarang, lekatkan LED dan kamera ke penutup depan (gambar). Mulakan dengan melekatkan panas kamera NoIR ke lubang kamera. Pastikan kamera sesuai dan diselaraskan dengan casis. Jangan gunakan gam yang terlalu banyak; jika tidak, anda tidak akan dapat memasukkan kamera ke dalam casing utama. Pastikan anda menghidupkan Pi dan lihatlah kamera (`` raspistill -v`, misalnya) untuk memastikan bahawa kamera tersebut bersudut baik dan mempunyai bidang pandangan yang baik. Sekiranya tidak, keluarkan lem panas dan letakkan semula.
  4. Seterusnya, lekatkan LED IR ke lubang di leher penutup. Leher berada pada sudut 45 darjah untuk menyalakan buaian, yang menghasilkan lebih banyak bayangan dalam keadaan cahaya rendah. Ini menambahkan lebih banyak kontras pada gambar, menjadikannya lebih mudah untuk mengesan gerakan.
  5. Pasang wayar LED IR ke pin header Raspberry Pi seperti yang ditunjukkan dalam gambar skematik.
  6. Masukkan kabel ke dalam casis dengan cara yang tidak melipat atau meregangkannya. Kami akhirnya melipat gaya akordeon kabel kerana kabel flex kamera kami terlalu panjang.
  7. Dengan segalanya tersisip, gam panas di sekitar tepian di mana kedua-dua bahagian itu bertemu, menutupnya di tempat.

Langkah 7: Penentukuran

Image
Image
Penentukuran
Penentukuran

Perincian mengenai parameter konfigurasi boleh didapati dalam dokumentasi repositori CribSense. Lihat juga video untuk melihat contoh bagaimana anda boleh menentukur CribSense setelah anda siapkan semuanya.

Berikut adalah contoh fail konfigurasi:

[io]; Konfigurasi I / O

; input = path_to_file; Fail input untuk menggunakan input_fps = 15; fps input (maksimum 40, disyorkan 15 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 untuk menggunakan lebar = 640; Lebar tinggi input video = 480; Ketinggian masa input video_to_alarm = 10; Berapa saat untuk menunggu tanpa gerakan sebelum penggera. [tanaman]; Pangkasan Tetapan Tanaman Adaptive = true; Sama ada mahu memangkas frame_to_settle = 10; # bingkai untuk menunggu selepas diset semula sebelum memproses roi_update_interval = 800; # bingkai antara pengiraan semula ROI roi_window = 50; # bingkai untuk dipantau sebelum memilih ROI [gerakan]; Tetapan Pengesanan Gerak erode_dim = 4; dimensi kernel erosi dilate_dim = 60; dimensi kernel dilate diff_threshold = 8; perbezaan abs diperlukan sebelum mengenali tempoh perubahan = 1; # bingkai untuk mengekalkan gerakan sebelum menandakan pixel_threshold sebenar = 5; # piksel yang mesti berbeza untuk ditandakan sebagai gerakan tunjuk_diff = false; paparkan perbezaan antara 3 bingkai [pembesaran]; Tetapan Pembesaran Video menguat = 25; Penguatan% yang diinginkan adalah potongan rendah = 0.5; Frekuensi rendah jalur lebar. cutoff tinggi = 1.0; Frekuensi tinggi jalur lebar. ambang = 50; Ambang fasa sebagai% pi. show_magnification = salah; Tunjukkan bingkai output setiap pembesaran [debug] print_times = false; Masa analisis cetak

Kalibrasi algoritma adalah usaha berulang, tanpa penyelesaian yang tepat. Kami mendorong anda untuk bereksperimen dengan pelbagai nilai, menggabungkannya dengan ciri penyahpepijatan, untuk mencari kombinasi parameter yang paling sesuai dengan persekitaran anda. Sebelum anda memulakan penentukuran, pastikan show_diff dan show_magnification diset ke true.

Sebagai garis panduan, peningkatan penguatan dan nilai phase_threshold meningkatkan jumlah pembesaran yang berlaku pada video input. Anda harus mengubah nilai-nilai ini sehingga anda dapat melihat pergerakan yang ingin anda lacak dengan jelas dalam bingkai video. Sekiranya anda melihat artifak, mengurangkan tahap_fasa sementara mengekalkan penguatan yang sama mungkin akan membantu.

Parameter pengesanan gerakan membantu mengimbangi bunyi. Semasa mengesan kawasan pergerakan, erode_dim dan dilate_dim digunakan untuk mengukur dimensi kernel OpenCV yang digunakan untuk mengikis dan melebarkan gerakan sehingga bunyi pertama terhakis, kemudian isyarat gerakan yang tersisa diluaskan dengan ketara untuk menjadikan kawasan pergerakan jelas. Parameter ini mungkin juga perlu disetel jika buaian anda berada dalam keadaan kontras yang sangat tinggi. Secara amnya, anda memerlukan erode_dim yang lebih tinggi untuk tetapan kontras tinggi, dan erode_dim yang lebih rendah untuk kontras rendah.

Sekiranya anda menjalankan CribSense dengan show_diff = true dan anda menyedari bahawa terlalu banyak output penumpuk berwarna putih, atau sebahagian video yang sama sekali tidak berkaitan dikesan sebagai gerakan (contohnya lampu berkedip), tingkatkan erode_dim sehingga hanya bahagian video sesuai dengan bayi anda adalah bahagian putih terbesar. Angka pertama menunjukkan contoh di mana dimensi erosi terlalu rendah untuk jumlah gerakan dalam bingkai, sementara yang berikutnya menunjukkan bingkai yang dikalibrasi dengan baik.

Setelah ini dikalibrasi, pastikan pixel_threshold disetel ke nilai sehingga "Pixel Movement" hanya melaporkan nilai puncak pergerakan piksel, dan tidak semuanya (yang bermaksud Anda perlu mengurangi kebisingan). Sebaik-baiknya, anda akan melihat output seperti ini di terminal anda, di mana terdapat corak berkala yang jelas yang sesuai dengan gerakan:

[info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 1.219812 Hz

[info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 44 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 161 [info] Anggaran Gerakan: 1.219812 Hz [info] Pergerakan Pixel: 121 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 86 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pixel Movem ent: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 97 [info] Anggaran Gerakan: 0.841416 Hz [info] Pergerakan Pixel: 74 [info] Anggaran Gerakan: 0.839298 Hz [info] Pixel Pergerakan: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 60 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 48 [info] Gerakan Anggaran: 0.839298 Hz [info] Pergerakan Pixel: 38 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 29 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 28 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 22 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz [info] Pergerakan Pixel: 0 [info] Anggaran Gerakan: 0.839298 Hz

Sekiranya output anda kelihatan seperti ini:

[info] Pergerakan Pixel: 921 [info] Anggaran Gerakan: 1.352046 Hz

[info] Pergerakan Pixel: 736 [info] Anggaran Gerakan: 1.352046 Hz [info] Pergerakan Pixel: 666 [info] Anggaran Gerakan: 1.352046 Hz [info] Pergerakan Pixel: 663 [info] Anggaran Gerakan: 1.352046 Hz [info] Pergerakan Pixel: 1196 [info] Anggaran Gerakan: 1.352046 Hz [info] Pergerakan Pixel: 1235 [info] Anggaran Gerakan: 1.352046 Hz [info] Pergerakan Pixel: 1187 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 1115 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 959 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 744 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 611 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 468 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 371 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 307 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 270 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 234 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 197 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 179 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 164 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 239 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 733 [info] Anggaran Gerakan: 1.456389 Hz [info] Pergerakan Pixel: 686 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 667 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 607 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 544 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 499 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 434 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 396 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 375 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 389 [info] Anggaran Gerakan: 1.229389 Hz [info] Pergerakan Pixel: 305 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 269 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 1382 [info] Gerakan E stimate: 1.312346 Hz [info] Pergerakan Pixel: 1086 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 1049 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 811 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 601 [info] Anggaran Gerakan: 1.312346 Hz [info] Pergerakan Pixel: 456 [info] Anggaran Gerakan: 1.312346 Hz

Laraskan pixel_threshold dan diff_threshold sehingga hanya puncak yang dilihat, dan pergerakan piksel adalah 0 sebaliknya.

Langkah 8: Demonstrasi

Image
Image

Berikut adalah sedikit demo bagaimana CribSense berfungsi. Anda harus membayangkan bahawa ini melekat di sebelah buaian.

Apabila anda meletakkan CribSense di atas buaian anda, anda perlu mengoptimumkan jarak antara bayi dan kamera. Sebaik-baiknya, dada bayi anda akan memenuhi kurang dari 1/3 bingkai. Anak itu tidak boleh berada terlalu jauh, jika tidak, video beresolusi rendah akan berusaha mencari maklumat yang cukup untuk membesar. Sekiranya kamera terlalu dekat, kamera mungkin tidak dapat melihat anak anda jika mereka berguling atau bergerak keluar dari bingkai. Begitu juga, jika anak berada di bawah selimut "khemah", di mana terdapat hubungan terhad antara selimut dan dada anak, mungkin sukar untuk mengesan pergerakan. Masukkan mereka dengan baik!

Anda juga ingin mempertimbangkan keadaan pencahayaan di sekitar katil bayi anda. Sekiranya buaian anda betul-betul di sebelah tingkap, anda mungkin akan mengalami bayang-bayang bergerak atau mengubah nilai cahaya kerana matahari disekat oleh awan, atau pergerakan berlaku di luar tingkap. Di tempat dengan pencahayaan yang konsisten adalah yang terbaik.

Dengan beberapa kerja lagi, kami berpendapat bahawa seseorang dapat memperbaiki perisian kami sehingga penentukuran adalah proses yang lebih lancar. Di masa depan, fitur tambahan seperti pemberitahuan push juga dapat ditambahkan.

Langkah 9: Penyelesaian masalah

Anda mungkin menghadapi beberapa masalah umum semasa menyiapkan CribSense. Contohnya, menghadapi masalah membina / menjalankan program, atau tidak mendengar audio. Ingat, CribSense bukanlah monitor bayi yang boleh dipercayai. Kami mengalu-alukan sumbangan di repositori GitHub kami semasa anda membuat penambahbaikan!

Berikut adalah beberapa petua penyelesaian masalah yang kami kumpulkan semasa membuat CribSense.

Tiada penggera sedang dimainkan

  • Adakah pembesar suara anda berfungsi?
  • Bolehkah anda memainkan bunyi lain dari Pi di luar penggera CribSense?
  • Sekiranya Pi anda cuba memainkan audio melalui HDMI dan bukannya port audio? Periksa halaman Konfigurasi Audio Raspberry Pi untuk memastikan bahawa anda telah memilih output yang betul.
  • Adakah perisian CribSense mengesan pergerakan? Sekiranya CribSense berjalan di latar belakang, anda boleh menyemak dengan journalctl -f di terminal.
  • Sekiranya CribSense merasakan banyak gerakan, anda mungkin perlu menentukur CribSense.

LED IR tidak berfungsi

  • Bolehkah anda melihat warna merah samar ketika melihat LED IR? Cincin merah samar mesti kelihatan semasa LED menyala.
  • Periksa kekutuban sambungan. Sekiranya + 5V dan GND dibalikkan, ia tidak akan berfungsi.
  • Sambungkan LED ke bekalan kuasa dengan had voltan / arus 5V / 0.5A. Biasanya, ia mesti menggunakan 0.2A pada 5V. Sekiranya tidak, LED anda mungkin tidak berfungsi.

CribSense mengesan pergerakan walaupun tidak ada bayi

  • Adakah anda telah menentukur CribSense dengan betul?
  • Ingat, CribSense hanya mencari perubahan dalam nilai piksel

    • Adakah bayangan bergerak di dalam bingkai?
    • Adakah lampu berkelip atau berubah?
    • Adakah CribSense dipasang ke permukaan yang stabil (iaitu sesuatu yang tidak akan goyah jika orang berjalan di situ)?
    • Adakah sumber pergerakan lain di bingkai (cermin menangkap pantulan, dll)?

CribSense TIDAK mengesan pergerakan walaupun ada gerakan

  • Adakah anda telah menentukur CribSense dengan betul?
  • Adakah terdapat apa-apa cara kamera?
  • Adakah anda dapat menyambung ke kamera dari Raspberry Pi sama sekali? Periksa dengan menjalankan raspistill -v di terminal untuk membuka kamera pada Pi selama beberapa saat.
  • Sekiranya anda melihat status sudo systemctl cribsense, adakah CribSense sebenarnya berjalan?
  • Adakah bayi anda di bawah selimut yang "berkhemah" sehingga tidak bersentuhan dengan anak? Sekiranya terdapat jurang udara yang ketara antara selimut dan anak, selimut mungkin menutupi pergerakan.
  • Bolehkah anda melihat gerakannya jika anda mengukuhkan video lebih banyak?
  • Bolehkah anda melihat pergerakannya jika anda menyesuaikan potongan frekuensi rendah dan tinggi?
  • Sekiranya ini hanya berlaku pada cahaya rendah, adakah anda memastikan penentukuran anda berfungsi dalam cahaya rendah?

CribSense tidak membina

Adakah anda memasang semua pergantungan?

Saya tidak dapat menjalankan cribsense dari baris perintah

  • Adakah anda tidak sengaja menaip sesuatu semasa anda menjalankan./autogen.sh --prefix = / usr --sysconfdir = / etc --disable-debug semasa pembuatan perisian anda?
  • Adakah cribsense ada di / usr / bin?
  • Laluan apa yang disediakan jika anda menjalankan "cribsense mana"?

Disyorkan: