Daftar Isi:

Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi: 7 Langkah (dengan Gambar)
Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi: 7 Langkah (dengan Gambar)

Video: Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi: 7 Langkah (dengan Gambar)

Video: Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi: 7 Langkah (dengan Gambar)
Video: 3000+ Common English Words with British Pronunciation 2024, Juli
Anonim
Image
Image
Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi
Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi
Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi
Sistem Keamanan Pengenalan Wajah untuk Kulkas Dengan Raspberry Pi

Menjelajahi internet Saya telah menemukan bahwa harga untuk sistem keamanan bervariasi dari $150 hingga $600 ke atas, tetapi tidak semua solusi (bahkan yang sangat mahal) dapat diintegrasikan dengan alat pintar lain di rumah Anda! Misalnya, Anda tidak dapat memasang kamera keamanan di pintu depan Anda sehingga secara otomatis membuka pintu untuk Anda atau teman Anda!

Saya telah memutuskan untuk membuat solusi sederhana, murah dan kuat, yang dapat Anda gunakan di mana saja! Ada banyak manual tentang cara membuat sistem keamanan yang murah dan buatan sendiri, namun saya ingin menunjukkan aplikasi yang benar-benar tidak sepele – sistem keamanan untuk lemari es dengan pengenalan wajah!

Bagaimana cara kerjanya? Kamera IP diletakkan di atas lemari es, sensor (dua tombol) mendeteksi ketika seseorang membuka pintu lemari es, setelah itu Raspberry Pi mengambil gambar orang tersebut (dengan kamera IP), kemudian mengirimkannya ke Microsoft Face API untuk menganalisis gambar dan menerima nama orang tersebut. Dengan informasi ini Raspberry Pi memindai "daftar akses": jika orang tersebut tidak memiliki izin untuk mengakses lemari es, Raspberry memberi tahu pemiliknya melalui email, pesan teks, dan twitter! (Lihat gambar di atas)

Mengapa? Sistem ini memungkinkan Anda untuk mengontrol anggota keluarga Anda, terutama ketika mereka sedang diet, atau berjuang untuk tidak makan setelah tengah malam! Atau gunakan hanya untuk bersenang-senang!

Selain itu, Anda benar-benar dapat mengatur kamera di pintu depan Anda dan mengkonfigurasi sistem untuk membuka pintu ketika Anda, anggota keluarga atau teman Anda mendekat. Dan ini bukan akhir! Kemungkinan aplikasi tidak terbatas!

Mari kita mulai!

Langkah 1: Persiapan

Persiapan
Persiapan

Anda akan perlu:

  • Raspberry Pi 3 (Anda dapat menggunakan versi lama, tetapi generasi ketiga memiliki Wi-Fi, jadi sangat nyaman)
  • Tombol
  • kabel
  • Smartphone lama atau kamera Raspberry Pi

Hal pertama yang harus Anda lakukan adalah mengkonfigurasi Raspberry Pi Anda. Petunjuk terperinci tentang cara melakukannya dapat Anda temukan di sini dan di sini, tetapi kami akan membahas langkah-langkah terpenting dalam manual ini.

  1. Unduh Win32 DiskImager dari sini (jika Anda menggunakan Windows)
  2. Unduh SD Formatter dari sini
  3. Masukkan kartu SD ke komputer Anda dan format dengan SD Formatter
  4. Unduh Gambar Raspbian dari sini (Pilih "Raspbian Jessie dengan piksel")
  5. Jalankan Win32 DiskImager, pilih kartu SD Anda, tentukan jalur ke gambar Raspbian, klik "Tulis"
  6. Masukkan kartu SD ke Raspberry Pi Anda dan nyalakan!

Selain itu, Anda perlu mengonfigurasi Raspberry Pi Anda untuk memiliki akses ke sistem melalui SSH. Ada banyak instruksi di internet, Anda dapat menggunakan ini, misalnya, atau Anda dapat memasang monitor dan keyboard.

Sekarang Pi Anda dikonfigurasi dan Anda siap untuk melanjutkan!

Langkah 2: Membuat Sensor

Membuat Sensor
Membuat Sensor
Membuat Sensor
Membuat Sensor
Membuat Sensor
Membuat Sensor

Deskripsi Langkah: Pada langkah ini kita akan membuat sensor yang mendeteksi ketika seseorang membuka pintu lemari es dan mengaktifkan Raspberry Pi.

Untuk mengaturnya, Anda memerlukan 2 tombol yang telah Anda siapkan sebelumnya. Tombol pertama akan mendeteksi saat pintu dibuka, tombol kedua akan mendeteksi saat pintu dibuka hingga titik saat kita mengambil foto seseorang.

  1. Solder kabel ke tombol.
  2. Pasang kancing pertama pada pintu kulkas agar terdorong saat pintu tertutup (lihat gambar di atas)
  3. Pasang kancing kedua pada pintu lemari es seperti terlihat pada foto di atas. Tombol ini harus dilepaskan setiap saat, kecuali saat pintu mencapai titik saat sistem mengambil gambar. Untuk memasangnya, Anda perlu menempelkan sesuatu ke lemari es Anda sehingga tombol ini ditekan saat pintu dibuka sampai batas yang diinginkan (lihat foto di atas).
  4. Pasang kabel dari tombol ke Raspberry Pi: tombol pertama ke GPIO 23 dan ground, tombol kedua ke GPIO 24 dan ground (Lihat diagram fritzing).

Catatan: Saya menggunakan pinout BCM (bukan Board), lebih lanjut tentang perbedaannya baca di sini.

Setelah terhubung ke Raspberry Pi Anda melalui SSH, untuk menjalankan shell python, ketik terminal:

python3

Jika Anda memasang monitor dan keyboard ke Raspberry Pi, jalankan saja "Python 3 IDLE" dari menu.

Langkah selanjutnya adalah membuat Raspberry Pi berfungsi dengan tombol. Kami akan melampirkan listener khusus pada pin GPIO 23 dan 24, yang akan mendengarkan event “rising edge” dan event “falling edge” pada pin tersebut. Jika terjadi peristiwa, pendengar akan memanggil fungsi yang telah kita definisikan. “Rising edge” berarti tombol ditekan dan sekarang dilepaskan (tombol pertama – pintu dibuka), “falling edge” berarti tombol dilepaskan dan sekarang ditekan (tombol kedua – pintu telah mencapai titik tertentu). Lebih lanjut tentang fungsi tombol - di sini.

Pertama, impor library yang memberi kita akses ke pin:

impor RPi. GPIO sebagai GPIO

Sekarang tentukan fungsi khusus yang akan dipanggil saat peristiwa dipicu:

def sensor1(channel): print("sensor 1 dipicu")def sensor2(channel): print("sensor 2 dipicu)

Setel jenis pinout:

GPIO.setmode(GPIO. BCM)

Konfigurasikan pin:

GPIO.setup(23, GPIO. IN, pull_up_down=GPIO. PUD_UP)GPIO.setup(24, GPIO. IN, pull_up_down=GPIO. PUD_UP)

Lampirkan pendengar:

GPIO.add_event_detect(23, GPIO. RISING, callback=sensor1, bouncetime=300)GPIO.add_event_detect(24, GPIO. FALLING, callback=sensor2, bouncetime=300)

Sekarang Anda dapat mengujinya! Jika Anda menekan tombol 1 Anda akan melihat pesan di terminal "sensor 1 dipicu", tombol 2 memberi Anda pesan "sensor 2 dipicu".

Catatan: Setelah selesai bereksperimen jangan lupa untuk memanggil fungsi berikut: GPIO.cleanup().

Mari kita siapkan satu lagi fungsi yang dipanggil saat pintu mencapai titik di mana kita mengambil foto! Anda dapat melakukannya sendiri atau menggunakan implementasi saya yang telah saya lampirkan di sini (sensor.py)

Catatan: sensor.py hanya digunakan untuk tujuan pengujian, file dengan fungsionalitas penuh telah saya lampirkan pada langkah terakhir.

Langkah 3: Konfigurasikan Kamera IP

Konfigurasikan Kamera IP
Konfigurasikan Kamera IP
Konfigurasikan Kamera IP
Konfigurasikan Kamera IP
Konfigurasikan Kamera IP
Konfigurasikan Kamera IP

Deskripsi langkah: Sekarang kita akan mengkonfigurasi smartphone lama sebagai kamera IP.

Menggunakan smartphone sebagai kamera IP dilakukan melalui aplikasi. Ada berbagai aplikasi untuk Android, iOS, Windows Phone yang dapat Anda gunakan. Saya memilih yang disebut "IP Webcam" untuk Android. Ini adalah aplikasi gratis dan mudah dikonfigurasi.

Jalankan aplikasi, buka "Preferensi video" untuk mengatur resolusi foto yang akan disediakan aplikasi. Kemudian ketuk "Mulai server" (Gambar pertama di atas). Di bagian bawah layar Anda harus melihat alamat ip cam (Lihat gambar kedua di atas). Di browser Anda dapat mengetik https://cam_ip_address/photo-j.webp

Terakhir, pasang kamera ke kulkas (Gambar terakhir di atas).

Langkah 4: API Wajah

API Wajah
API Wajah

Deskripsi Langkah: Pada langkah ini kita akan berbicara tentang API Wajah Microsoft yang melakukan pengenalan wajah dan mengidentifikasi orang.

API Wajah Microsoft adalah layanan pengenalan wajah, yang melaluinya kami dapat menganalisis foto dan mengidentifikasi orang-orang di dalamnya.

Pertama, Anda memerlukan Akun Microsoft Azure. Jika Anda tidak memilikinya, Anda dapat membuatnya secara gratis di sini.

Kedua, buka https://portal.azure.com, klik "Baru" di sisi kiri, ketik formulir "API Layanan Kognitif", pilih dan klik "Buat". Atau Anda dapat membuka tautan ini. Sekarang Anda perlu memasukkan Nama layanan Anda, pilih jenis langganan, jenis API yang Anda butuhkan (dalam kasus kami ini adalah API Wajah), lokasi, tingkat harga, grup sumber daya, dan setujui Persyaratan Hukum (lihat tangkapan layar ditambahkan ke langkah ini).

Ketiga, klik "Semua sumber daya", pilih layanan API Wajah Anda dan lihat statistik penggunaan, kredensial, dll.

Detail Face API dapat ditemukan di sini, contoh dalam bahasa pemrograman yang berbeda disediakan. Untuk proyek ini kami menggunakan python. Anda dapat membaca dokumentasi dan membuat set fungsionalitas Anda sendiri atau Anda dapat menggunakan yang disediakan di sini (ini bukan set fungsionalitas lengkap yang disediakan oleh Microsoft, hanya poin yang diperlukan untuk proyek ini). File python saya dilampirkan ke langkah ini.

Mari beralih ke struktur kerja dengan Face API. Untuk menggunakan fungsi "Identifikasi" kita harus membuat perpustakaan orang-orang yang menggunakan layanan Face API yang akan mengenali foto yang diambil oleh aplikasi. Untuk mengaturnya, ikuti langkah-langkahnya:

  1. Buat Grup
  2. Tambahkan Orang ke Grup ini
  3. Tambahkan wajah ke orang-orang ini
  4. Grup kereta api
  5. Kirim foto dengan orang yang ingin Anda identifikasi (Anda harus memberikan foto dan id grup di mana layanan akan mencari kandidat)
  6. Hasil: Sebagai tanggapan, Anda akan mendapatkan daftar kandidat yang dapat ada di foto yang Anda kirimkan.

Saya telah membuat tiga file dengan fungsi khusus yang memungkinkan untuk bekerja dengan grup, satu orang, dan satu foto:

  • PersonGroup.py - berisi fitur yang memungkinkan: buat grup, dapatkan informasi tentang grup, dapatkan daftar semua grup Anda, latih grup, dan dapatkan status pelatihan
  • Person.py - berisi fitur yang memungkinkan: buat orang, dapatkan informasi orang, daftar semua orang dalam grup tertentu, tambahkan wajah ke orang tertentu
  • Face.py - berisi fitur yang memungkinkan: mendeteksi wajah pada gambar, mengidentifikasi orang, mendapatkan nama orang yang diidentifikasi

Dalam file bernama "recognition.py" saya menyediakan fitur yang memungkinkan Anda untuk memeriksa apakah gambar berisi wajah dan menambahkan wajah ke orang tertentu (secara otomatis menambahkan wajah dari banyak gambar dari folder tertentu).

Unduh file yang dilampirkan pada langkah ini, buka kemasannya, ubah variabel global 'KEY' dalam tiga file ini: PersonGroup.py, Person.py dan Face.py menjadi kunci Anda sendiri yang dapat Anda temukan: portal.azure.com > semua sumber daya > layanan api wajah (atau bagaimana Anda menyebutnya) > tab kunci. Anda dapat menggunakan salah satu dari dua kunci tersebut.

Catatan: di sini kita akan melatih layanan Face API untuk mengenali orang, sehingga tindakan berikut dapat dilakukan dari komputer mana pun (Raspberry Pi tidak diperlukan untuk itu) - perubahan disimpan di server Microsoft.

Setelah mengubah KEY, jalankan recognition.py dan masukkan perintah berikut di python shell:

PersonGroup.create("family", 'fff-fff')) // Anda dapat menggunakan nama dan id Anda sendiri untuk

grup printResJson(PersonGroup.getPersonGroup('fff-fff'))

Anda harus melihat data tentang grup yang baru saja Anda buat. Sekarang masukkan:

printResJson(Person.createPerson('fff-fff', 'nama orang'))

Sekarang Anda mendapatkan ID orang. Buat folder dengan gambar orang ini sehingga semua gambar berisi wajah orang ini. Anda dapat menggunakan fungsi detectFaceOnImages di recognition.py yang menunjukkan wajah foto mana yang terdeteksi. Sekarang, jalankan perintah:

addFacesToPerson('folder dengan gambar', 'ID orang yang Anda dapatkan setelah perintah sebelumnya', 'fff-fff')

Kemudian kita harus melatih layanan kita dengan memasukkan yang berikut ini:

PersonGroup.trainPersonGroup('fff-fff')printResJson(PersonGroup.getPersonGroupTrainingStatus('fff-fff'))

Sekarang kelompok kami sudah terlatih dan siap untuk mengidentifikasi seseorang.

Untuk memeriksa orang pada gambar, Anda dapat:

Face.checkPerson(gambar, 'fff-fff')

Sebagai tanggapan Anda akan mendapatkan daftar kandidat dan kemungkinan siapa yang ada di foto.

Catatan: setiap kali Anda menambahkan wajah ke seseorang atau orang ke grup, Anda harus melatih grup!

Langkah 5: Konfigurasi Node-Merah

Konfigurasi Node-Merah
Konfigurasi Node-Merah

Deskripsi Langkah: Pada langkah ini, kami akan membuat aliran Node-Red yang akan memberi tahu Anda tentang pelanggaran akses ke kulkas Anda =)

Jika Raspberry Pi Anda berjalan di Raspbian Jessie November 2015 atau versi yang lebih baru, Anda tidak perlu menginstal Node-Red, karena sudah diinstal sebelumnya. Anda hanya perlu memperbaruinya. Silakan gunakan manual di sini.

Sekarang, kita harus menginstal node Twilio ke Node-Red, sehingga kita dapat memicu pesan teks. Buka terminal dan ketik:

cd ~/.node-rednpm instal node-red-node-twilio

Lebih lanjut tentang simpul Twilio di sini. Setelah itu, jalankan Node-Red dengan mengetik di terminal:

simpul-merah

Lalu pergi ke: https://127.0.0.1:1880/ - jika Anda membuka browser di Raspberry Pi Andahttps://{raspberry_pi_ip}:1880/ - jika Anda ingin membuka editor Node-Red dari komputer lain

Untuk mengetahui alamat ip raspberry pi gunakan instruksi ini.

Sekarang Anda harus menemukan simpul Twilio dalam daftar simpul di editor Node-Red Anda (biasanya muncul setelah grup 'sosial').

Saatnya untuk membuat aliran!

Catatan: Anda dapat menggunakan alur saya yang terlampir pada langkah ini, tetapi jangan lupa untuk mengonfigurasi node: email, twitter, dan twilio. Baca tentang itu nanti.

Alur kami dimulai dengan node "notify" yang menerima permintaan POST dari program utama kami dengan beberapa data tentang pelanggaran akses (contoh data dapat ditemukan di node komentar "tentang objek penerima"). Node ini segera merespon dengan pesan "Ok", sehingga program utama mengetahui bahwa data telah diterima (Flow: /notify > response with Ok > response). Node hijau di bagian bawah dengan nama msg.payload ada untuk keperluan debugging: jika ada yang tidak berfungsi, Anda dapat menggunakannya.

Dari node pertama (/notify) data disebarkan ke "Topik Data" dan "Topik Gambar" di mana topik "data" dan "gambar" ditambahkan masing-masing.

Di simpul "kompilasi" kami menerima data (yang kami dapatkan selama langkah pertama) dengan topik "data" dan gambar dengan topik "gambar" (gambar diambil dari /home/pi/image.jpg). Kedua pesan ini harus dikompilasi menjadi satu objek, tetapi kedua objek tersebut diterima pada waktu yang berbeda! Untuk menangani ini, kita akan menggunakan fitur "konteks" yang memungkinkan kita menyimpan data di antara pemanggilan fungsi.

Langkah selanjutnya adalah memeriksa apakah orang dari daftar akses kami atau orang asing (node checkConditions). Terdapat kolom "TrustedPerson" pada data yang kami terima: "true" berarti kami mengenal orang ini, tetapi dia melanggar izin akses, "false" berarti orang tersebut adalah orang asing.

Ketika hasilnya "benar" kami mengirimkan pemberitahuan ke twitter, twilio dan email; ketika hasilnya "salah" - hanya email dan twilio. Kami membuat objek untuk email dengan pesan, gambar terlampir dan subjek email, objek untuk twilio dengan pesan. Untuk twitter kami menambahkan data ke objek jika "trustedPerson" benar. Kemudian kirim ketiga objek ini ke tiga node yang berbeda.

Catatan: Jika node berikut tidak menerima pesan, kami hanya mengirim "null" padanya.

Saatnya mengonfigurasi node untuk notifikasi!

Twitter Tambahkan simpul "twitter" ke aliran. Buka dengan klik dua kali. Klik pensil di sebelah "Twitter ID". Kemudian klik "Klik di sini untuk mengautentikasi dengan Twitter". Masuk ke akun twitter Anda dan berikan izin yang diperlukan Node-Red.

EmailTambahkan simpul "email" ke alur. Jika Anda tidak menggunakan Gmail, Anda perlu mengubah data di bidang berikut - "Server" dan "Port" (Anda dapat menemukan server dan port mana yang harus Anda gunakan di Halaman Bantuan agen email Anda) jika tidak, jangan ubah ini bidang.

  • Ke > alamat email ke mana pesan akan dikirim
  • Userid > login dari email Anda (mungkin sama dengan kolom "To")
  • Kata sandi > kata sandi dari akun email Anda
  • Nama > nama untuk simpul ini

Twilio Buka https://www.twilio.com/try-twilio dan daftarkan akun. Verifikasi. Buka https://www.twilio.com/console. Klik "Nomor Telepon" (ikon # besar) dan buat nomor gratis. Jika Anda berada di luar AS, Anda harus menambahkan izin GEO, buka https://www.twilio.com/console/sms/settings/geo-pe… dan tambahkan negara Anda.

Sekarang, buka editor Node-Red, tambahkan node Twilio, klik dua kali untuk mengkonfigurasi dan mengisi semua bidang:

  • Kredensial > Gunakan Kredensial lokal
  • Twilio > edit

    • SID Akun > ambil dari sini
    • Dari > ketik nomor virtual yang Anda buat
    • Token > ambil dari sini
    • Nama > Twilio
  • Keluaran > SMS
  • Ke > nomor telepon Anda
  • Nama > nama untuk simpul ini.

Klik Terapkan

Sekarang aliran Anda sudah siap! Anda dapat mengujinya dengan mengirimkan permintaan POST dengan objek yang ditentukan!

Langkah 6: Mengkompilasi Seluruh Proyek

Mengkompilasi Seluruh Proyek
Mengkompilasi Seluruh Proyek
Mengkompilasi Seluruh Proyek
Mengkompilasi Seluruh Proyek

Deskripsi Langkah: Pada langkah ini kita akan menyatukan semua bagian dan membuatnya bekerja sebagai sistem yang terpisah.

Dengan langkah ini Anda harus:

  1. Konfigurasikan smartphone lama sebagai kamera ip
  2. Memiliki sensor yang berfungsi
  3. API Wajah Microsoft yang terlatih
  4. Aliran Node-Red yang Dikonfigurasi

Sekarang kita harus memperbaiki kode yang kita tulis di langkah 2. Lebih khusus lagi fungsi process() yang dipanggil ketika orang membuka pintu. Dalam fungsi ini kita akan melakukan hal berikut:

  1. Ambil gambar dari ip camera dan simpan di “/home/pi/” dengan nama “image.jpg” (fungsi “fromIpCam” di file “getImage”)
  2. Dapatkan nama orang pada gambar itu (fungsi "checkPerson" di file "recognition")
  3. Periksa izin akses untuk orang itu (fungsi "periksa" di file "akses")
  4. Berdasarkan hasil fungsi "cek" tulis pesan
  5. Kirim pesan yang telah dibuat ke Node-Red (fungsi "toNodeRed" dalam file "sendData")

Catatan: untuk melihat kode lengkap dari fungsi yang disebutkan, silakan unduh file zip yang dilampirkan pada langkah ini.

Tentang fungsi "fromIpCam". Fungsi ini membuat permintaan GET ke kamera ip Anda, dapatkan gambar fokus sebagai tanggapan dan simpan ke jalur yang ditentukan oleh Anda. Anda harus memberikan alamat ip kamera untuk fungsi ini.

Tentang fungsi "checkPerson". Fungsi ini mendapatkan jalur ke gambar dan grup di mana Anda ingin mencari orang dari foto sebagai parameter. Pertama, mendeteksi wajah pada gambar yang disediakan (file Face.py, fungsi "deteksi"). Sebagai tanggapan itu mendapat id jika wajah yang terdeteksi. Kemudian memanggil fungsi "identifikasi" (file Face.py) yang menemukan orang-orang serupa dalam grup tertentu. Sebagai tanggapan, ia mendapat id seseorang jika orang itu ditemukan. Kemudian panggil fungsi "orang" (file Person.py) dengan ID orang sebagai parameter, fungsi "orang" mengembalikan orang dengan ID yang ditentukan, kami mendapatkan nama orang dan mengembalikannya.

Tentang fungsi "periksa". Fungsi ini ditempatkan di file “akses” di mana juga menempatkan “daftar akses” sebagai variabel global (Anda dapat memodifikasinya sesuai keinginan). Mendapatkan nama orang dari fungsi sebelumnya, fungsi "memeriksa" membandingkan orang ini dengan daftar akses dan mengembalikan hasilnya.

Catatan: proyek lengkap dilampirkan ke langkah berikutnya.

Langkah 7: Kesimpulan

Pada langkah ini saya melampirkan proyek lengkap yang harus Anda unzip dan tempatkan ke Raspberry Pi Anda.

Untuk membuat proyek ini berfungsi, jalankan file "main.py".

Jika Anda mengontrol Raspberry Pi melalui SSH, Anda harus menjalankan dua program dari satu shell: program python dan Node-Red. Ketik terminal berikut ini:

simpul-merah

Tekan "Ctrl + Z" dan ketik:

pekerjaan

Anda telah melihat proses Node-Red. Lihatlah ID proses dan ketik:

bg

Sekarang Node-Red harus mulai bekerja di latar belakang. Lalu pergi ke direktori dengan proyek Anda dan jalankan program utama:

python3 main.py

Catatan: jangan lupa untuk mengubah KEY di file python (langkah 4) dan kredensial di aliran Node-Red (langkah 5)

Selesai! Kulkas Anda aman!

Saya harap Anda menikmati ini keras kepala! Jangan ragu untuk meninggalkan pikiran Anda di komentar.

Saya akan menghargai jika Anda memilih proyek saya =)

Terima kasih!

Direkomendasikan: