İçindekiler:

Yüz Tanıma ile Kapı Zili: 7 Adım (Resimlerle)
Yüz Tanıma ile Kapı Zili: 7 Adım (Resimlerle)

Video: Yüz Tanıma ile Kapı Zili: 7 Adım (Resimlerle)

Video: Yüz Tanıma ile Kapı Zili: 7 Adım (Resimlerle)
Video: SAMSUNG TELEFONLARDA KİMSENİN BİLMEDİĞİ BİLDİRİM AYARI #samsung #android #samsungbildirim 2024, Temmuz
Anonim
Yüz Tanımalı Kapı Zili
Yüz Tanımalı Kapı Zili

Motivasyon

Son zamanlarda, ülkemde yaşlıları kendi evlerinde hedef alan bir soygun dalgası var. Ziyaretçiler onları bakıcı/hemşire olduklarına ikna ettiğinden, genellikle erişim, yolcuların kendileri tarafından verilir. Bu hikayelerin beni ne kadar kızdırdığı ve üzdüğü kelimelerin ötesinde. Ev, ilk güvenli sığınağınız olmalı ve hatta dışarıdayken zaten savunmasız bir durumdaysanız, daha da fazlası olmalıdır. Bu düşünceyle bu projeye başladım.

Genel bilgi

Kapı zili sistemi esas olarak yaşlı veya görme engelli kişiler için tasarlanmıştır ve işleyişinde oldukça basittir. Kısacası, kapı zili anahtarı, kamerayı görüntü elde etmek için tetikler. Ardından, görüntüdeki yüzler algılanır ve bir beyaz liste ve kara liste ile eşleştirilir. Yolcu, net bir trafik ışığı ekranıyla net görsel geri bildirim alır. Burada yeşil, sarı veya kırmızı ışık, kişi(ler)in sırasıyla beyaz listede, sistem tarafından bilinmeyen veya kara listede olduğunu gösterir. Sarı veya kırmızı ışık tetiklenirse, bir akraba veya bakıcıyı bilgilendirmek/uyarmak için fotoğraf bir Telegram botu tarafından gönderilir.

uzmanlık düzeyi

Proje, özellikle bilgisayarlı görme ve yapay zeka kullanımına meraklı meraklılar için kuruldu. Bu talimat, yeni başlayanlar için yazılmıştır, bu nedenle deneyiminiz yoksa endişelenmeyin! Ayrıca, proje daha deneyimli yapımcılar için de ilgi çekici olabilir, çünkü boru hattı kendi bilgisayar vizyonunuzla genişletebileceğiniz ve çok fazla güçlük çekmeden yüz tanıma fikirlerinizle genişletebileceğiniz şekilde organize edilmiştir.

Adım 1: Malzemeler

Malzemeler
Malzemeler

Minimum gereksinimleri içeren ürün listesi:

Ürün Bağlantı Yorum Yap
Ahududu Pi 3b RPi Link, RPi 4'ü gösteriyor çünkü çok daha iyi performansa ve RPi 3b ile neredeyse eşit fiyata sahip.
Mikro SD Amazon 16 GB veya daha büyük bir mikro SD kart işi yapacak. Ancak Amazon'daki 16 GB kartlar şimdi 32 GB kartlarla hemen hemen aynı fiyatta.
Ahududu Pi kamera Amazon Kamera v1 daha ucuzdur, ancak v2 daha iyidir ve daha uzun süre desteklenecektir.
15 pinli FPC esnek kablo Amazon Uzunluk aslında bu projeyi yapma koşullarına bağlıdır. Sadece bir prototip oluşturmak istiyorsanız, orijinal esnek kablo işi yapacaktır.
Güç Kaynağı 5v mikro usb Ada meyvesi Bu asla bir araya gelmedi! Mükemmel kalite. (fotoğrafta yok)
Dahili LED'li arcade düğmeleri Amazon İstediğiniz boyutu seçin, ancak CAD tasarımı 60 mm düğmelere dayanmaktadır.
dirençler Amazon Sadece birkaç 1k ve 100 ohm dirence ihtiyacınız var. Normal 1/4W'lar iyidir.
Kapasitörler 0.1 uF Amazon Üç kapasitör gereklidir. (fotoğrafta yok)
Jumper Telleri / Şerit Kablo AmazonAmazon Kendinize biraz para kazandırmak istiyorsanız, eski bir disket sürücü şerit kablosu da kullanabilirsiniz (fotoğrafa bakın).
Daralan tüp / Elektrik bandı AmazonAmazon

Gerekli olan araçlar:

Alet Gerekli? Yorum Yap
Havya Evet
multimetre Evet
tel striptizci Evet Veya bir bıçak/makas kullanabilirsiniz.
Lazer Kesici Numara
3 boyutlu yazıcı Numara
Kelepçeler Numara Test aşamasında kutuyu bir arada tutmak için kullanışlıdır.

Uyarılar:

Projenin erişilebilirliğini artırmak için bir Raspberry Pi 3b kullanarak geliştirmeye karar verdim. Erişilebilirliği artırırken, RPi'ler o kadar hızlı olmadığı için uygulamanın yeteneklerini azaltır. Daha hızlı tek kartlı bir bilgisayar arıyorsanız, NVIDIA Jetson Nano'ya bir göz atmak isteyebilirsiniz

Adım 2: Kablolama

kablolama
kablolama
kablolama
kablolama
kablolama
kablolama

Şematik diyagram bu adım için en bilgilendiricidir ve oldukça açıklayıcıdır. Elektronikte yeniyseniz, efsane görseli kullanabilirsiniz. Bileşenin değeri (eğer varsa) şematik diyagramda belirtilmiştir. Fotoğraflar devreyi nasıl kurduğumu görmeme yardımcı olabilir. Temel olarak, tüm bileşenleri arcade düğmesine mümkün olduğunca yakın bağladım, bu da neler olup bittiğine dair net bir genel bakışla sonuçlandı.

Uyarılar:

  • Tek atlama telleri kullanmaktan çok daha sağlam oldukları için şerit kablo konektörlerini kullanmayı gerçekten seviyorum.
  • Önerildiği gibi, eski bir bilgisayardan alınmış bir şerit kablo kullandım. Bu biraz zor olsa da, kablonun yapılandırmasını manuel olarak belirtmeniz gerekeceğinden. Örneğin bu projede bazı deliklerin birbiriyle bağlantılı olduğunu öğrendim (muhtemelen orijinal uygulama için zemin olarak kullanılmış). Bu yüzden resimlerde de göreceğiniz gibi sonradan farklı bir kablo almak zorunda kaldım.

Adım 3: Kasayı İnşa Etme

Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme
Kasayı İnşa Etme

Kamera kasası

Pikamera için birçok kılıf internetten ücretsiz olarak indirilebilir. Bu yüzden, tekerleği yeniden icat etmemeyi ve internetten basit ama güzel bir kasa seçmeyi seçiyorum:thingiverse.com - Raspberry pi kamera kasası/muhafazası. (Tasarımcı VGer'e sesleniyorum.)

Trafik ışığı muhafazası

Trafik ışığı kasası için, Autodesk Fusion 360'ta (ücretsiz indirilebilir, bkz. Açıklamalar) tüm donanıma uyan küçük bir kutu tasarladım. Yerel lazer kesim şirketime gönderdiğim dosyayı ekte bulabilirsiniz. Burada tasarım 6 mm plaka kalınlığına dayanmaktadır. Ancak, bir şeyleri ayarlamak isterseniz, bu bağlantıyı kullanarak her türlü dosya formatına erişebilirsiniz. Resimlerde görüldüğü gibi, lazer kesiciye erişiminiz yoksa karton kutu da kullanabilirsiniz. Prototipleme için resimdeki karton kutuyu kullandım ve bir cazibe gibi çalışıyor.

Montaj oldukça yalındır:

  1. Arcade anahtarlarını monte edin.
  2. Kapı zili için kabloları serbest bıraktığınızdan emin olun.
  3. Şerit kabloyu RPI'ye bağlayın.
  4. RPi'yi alt panele vidalayın.
  5. Kapı zili kablolarını bir kablo konektörüne bağlayın ve alt panele de monte edin.
  6. Picamera'yı RPi'ye bağlayın.
  7. Kapı zili anahtarlama kablosu ve RPi güç kablosu için yan panellerden birinde bir delik açın.

Kablo konektörü, daha sonra mevcut bir kapı ziline sabitlenebilmesi için kapı zili anahtarı kabloları için bir montaj noktası olarak kullanılır. Artık her şey yerinde ve birbirine yapıştırılabilir. Ancak, her şeyin olması gerektiği gibi çalıştığından emin olmak için önce sonraki adımları tamamlamak isteyebilirsiniz.

Uyarılar:

Autodesk Fusion 360, hobiler için ücretsiz! Kopyanızı almak istiyorsanız şu bağlantıyı ziyaret edin: autodesk.com - Fusion 360 For Hobbyists. Bazı terimler vardır, bu yüzden onları okuduğunuzdan ve uyguladığınızdan emin olun. Bu benim Fusion 360 ile ilk projemdi ve CAD yazılımını kullanma konusunda fazla tecrübem yok, ancak yazılımı ve Fusion 360 ile gelen tüm ek araçları gerçekten sevdiğimi söylemeliyim

4. Adım: Kamerayı Yapılandırma

Kamerayı Yapılandırma
Kamerayı Yapılandırma
Kamerayı Yapılandırma
Kamerayı Yapılandırma
Kamerayı Yapılandırma
Kamerayı Yapılandırma

Raspbian'ın kurulu olduğu ve GUI modunda çalıştığı varsayılmaktadır. Henüz Raspbian yüklemediyseniz, bu makaleyi takip edebilirsiniz: raspberrypi.org - İşletim sistemi imajlarını yükleme. Raspbian'ı başlatırsanız, resimlerde gösterildiği gibi bir masaüstü görmelisiniz.

Kamerayı RPi'de yapılandıralım ve çalışıp çalışmadığını görelim! Burada açıklanan yöntem doğrudan raspberrypi.org - Documentation'dan alınmıştır. İlk olarak, bir terminal penceresinde aşağıdaki komutları yürüterek en son paketlere (kamera üretici yazılımı dahil) güncelleyelim (resimlere bakın):

sudo uygun güncelleme

sudo apt tam yükseltme

Ardından, aşağıdaki komut kullanılarak kamera etkinleştirilmelidir:

sudo raspi yapılandırması

Menüde 5. Arayüz Seçenekleri -> P1 Kamera seçeneğine gidin. Aşağıdakileri gerçekleştirerek kamerayı etkinleştirmeyi ve RPi'yi yeniden başlatmayı seçin:

yeniden başlat

Kamera şimdi doğru şekilde yapılandırılmalıdır. Bir terminal penceresi açarak test edilebilir ve yürütülebilir:

raspistill -v -o /home/pi/test.jpg

Görüntü şuraya kaydedilir: /home/pi.

Adım 5: Docker'ı Ayarlama

Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma
Docker'ı Kurma

Bağımlılık ve kurulum hatalarından kaçınmak için bu proje için özel bir Docker görüntüsü oluşturmaya karar verdim (bkz. wikipedia.org - Docker). Docker'ı hiç kullanmadıysanız veya duymadıysanız merak etmeyin bu projede nasıl kullanılacağını adım adım anlatacağım. Aslında, süper kolay! Bu projeyi yerel bir kurulumda (bir Docker konteyneri yerine) çalıştırmak isterseniz, size bazı ipuçları vereceğim. Ancak Docker imajını kullanmanız şiddetle tavsiye edilir. Sonuçta, bu projeyi yürütmenizi kolaylaştırmak için yapıyorum!

Docker nedir?

Not: Bu bölüm, yalnızca kodu çalıştırmak istiyorsanız atlanabilecek Docker hakkında bazı arka plan bilgileri sağlar.

Bu proje Docker'ı ilk kullanışım ve tek kelimeyle harika! Belki Python için virtualenv veya Anaconda'yı duymuşsunuzdur? Docker, paket sürümlerini kolayca yönetebilmeniz ve farklı bir ortam (veya Docker'da adlandırıldığı gibi kapsayıcı) kullanarak bir ana bilgisayar sisteminde farklı Python sürümlerini çalıştırabilmeniz açısından oldukça benzerdir. Ancak virtualenv ve Anaconda ile karşılaştırıldığında Docker, yalnızca Python paketlerini içermekle sınırlı olmadığı için çok daha güçlüdür. Aslında bir Docker kapsayıcısında, istediğiniz işletim sisteminin paketlerini de kurabilir ve yönetebilirsiniz. Örneğin, bir veritabanı (ör. MySQL) ile bir Python web çerçevesi (ör. Django) çalıştıran, taşımak istediğiniz bir web sitesini düşünün. Docker kapsayıcısı olmadan, tüm paketleri yeni sunucuya yüklemeniz gerekir; bu, hatalara ve hatalara çok açık bir işlemdir. Öte yandan, web siteniz Docker'da oluşturulduğunda, geçiş temelde görüntü dosyasını/dosyalarını yeni sunucuya taşımak ve çalıştırmak kadar kolaydır. Tahmin edebileceğiniz gibi Docker, Instructables üzerindeki projeler için de çok kullanışlıdır;)! Docker hakkında daha fazla bilgi edinmek istiyorsanız web sitelerine göz atın: docker.org - Docker: Enterprise Container Platform. Şimdi, Docker ile çalışmaya başlayalım!

Docker'ı Yükleme

Yürüterek Docker'ı yükleyin:

curl -sSL https://get.docker.com | NS

Daha sonra kullanıcı, Docker'ı çalıştırma haklarını sağlayan 'docker' kullanıcı grubuna eklenir. Bu şu şekilde yapılır:

sudo usermod -aG liman işçisi $ KULLANICI

Artık Docker'ı çalıştırabiliyor olmalısınız. Bu, merhaba dünya görüntüsünü çalıştırarak doğrulanabilir:

liman işçisi merhaba dünya koşusu

Son olarak, kapı zili Python komut dosyalarını çalıştırmak için gereken tüm bağımlılıkları içeren Docker görüntüsünü çekelim. Görüntü oldukça büyük olduğundan (~1,5 GB) bu işlem biraz zaman alabilir. Uygulamak:

liman işçisi çekme erientes/kapı zili

Not: Dockerfile, Github'daki kapı zili deposunda bulunabilir. Şimdi, bir sonraki adımda tartışılacak olan kapı zili komut dosyalarını çalıştırmak için her şey hazır.

Yerel kurulum

Yine, yerel bir kurulum yerine Docker imajını kullanmanızı şiddetle tavsiye ederim. Ancak bu öğreticiyi tamamlamak için şimdi yerel kurulum için attığım bazı adımları anlatacağım.

Kodu çalıştırabilmek için python sürümü >= 3.5 olmalıdır (python 3.5.3 kullandım) ve aşağıdaki paketlerin yüklenmesi gerekir:

  • yüz tanıma
  • fotoğraf makinesi
  • dizi
  • Yastık
  • piton-telgraf-bot
  • RPi. GPIO

Bu bağlantı oldukça faydalıdır: Github - Bir Raspberry Pi'ye dlib ve face_recognition yükleyin. Ancak, burada bazı uyarılar var: 1) Yastık, bu yöntemle kurulmayacak olan en az Python 3.5'e ihtiyaç duyar. 2) Ayrıca bu yöntem izlenerek kapı zili projesinde ihtiyaç duyulan tüm paketler kurulmayacaktır. Ancak, sadece pip3 kullanarak kurabilmelisiniz.

Adım 6: Kapı Zili Komut Dosyalarını Çalıştırma

Kapı Zili Komut Dosyalarını Çalıştırma
Kapı Zili Komut Dosyalarını Çalıştırma
Kapı Zili Komut Dosyalarını Çalıştırma
Kapı Zili Komut Dosyalarını Çalıştırma
Kapı Zili Komut Dosyalarını Çalıştırma
Kapı Zili Komut Dosyalarını Çalıştırma

Komut dosyalarını alın

Komut dosyaları şu adresten manuel olarak indirilebilir: github.com - Erientes/doorbell. Veya Git'i yüklediyseniz, yürütün:

git klonu

Takma ad oluştur

Şimdi hayatımızı biraz daha kolaylaştırmak için komut dosyalarını çalıştırmak için bazı takma adlar oluşturalım. Uygulamak:

yaprak defteri ~/.bashrc

Aşağıdaki satırları ekleyin ve dosyayı kaydedin:

takma ad doorbell_run='docker run --privileged -v /home/pi/kapı zili:/kapı zili -w /kapı zili -it erientes/kapı zili python $1'

takma ad doorbell_login='docker run --privileged -v /home/pi/kapı zili:/kapı zili -w /kapı zili -it erientes/kapı zili bash'

Test komut dosyaları

Her şeyin doğru kurulup kurulmadığını test etmek için yeni bir terminal açın ve şunu çalıştırın:

kapı zili_run örnekleri/0_test_installation.py

Sonuç, terminal penceresinde 'Kapı zili kurulumu başarıyla sona erdi!' yazan bir mesaj olmalıdır. Kameraya Docker kapsayıcı tarafından erişilip erişilemeyeceğini test etmek için şunu çalıştırın:

kapı zili_run örnekleri/1_test_camera.py

1_test_camera.py çalıştırıldığında bir fotoğraf çekilecek ve /home/pi/doorbell içinde bulunabilecek 'test.jpg' olarak kaydedilecektir. Son olarak, LED sürücüleri aşağıdakiler yürütülerek test edilebilir:

kapı zili_run örnekleri/2_test_voicehat_drivers.py

Bu komut dosyası çalışırken, arcade anahtarındaki LED, düğmeye basıldığında yanıt vermelidir.

Kapı zili komut dosyalarını çalıştırma

Doorbell komut dosyalarını çalıştırmak için önce Telegram bot kimlik bilgilerinin alınması gerekir. Telefonunuza Telegram'ı yükleyin ve telegram.me - Botfather'a gidin. Bir konuşma başlatın ve şunu girin:

/newbot

Bot için bir ad ve kullanıcı adı girin. Bundan sonra, erişim belirteci size sağlanacaktır. Bu değeri /home/pi/doorbell içindeki 'credentials_telegram_template.py' dosyasına kopyalayın ve 'credentials_telegram.py' adlı yeni bir dosyaya kaydedin. Son olarak, Botfather'ın size sağladığı bağlantıya tıklayarak az önce oluşturduğunuz bot ile bir sohbet başlatın.

Son olarak, Kapı Zilini Yüz Tanıma ile çalıştıralım:

kapı zili_run main.py

Uyarılar:

Kodun nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, komut dosyalarının kendisindeki yorumlara göz atın. Kodla ilgili bir sorunuz varsa, lütfen bana Github üzerinden ulaşın

Adım 7: Kapı Zilini Kullanma

Image
Image
Kapı Zilini Kullanma
Kapı Zilini Kullanma
Kapı Zilini Kullanma
Kapı Zilini Kullanma

Kapı zili komut dosyasını çalıştırarak çalıştıralım:

kapı zili_run main.py Paketleri yükledikten sonra betikler boşta kalır. Temelde olabilecek 2 şey var:

  1. Biri kapı zilini çalıyor.
  2. Beyaz listeye biri eklendi.

Biri kapı zilini çalıyor

Bu durumda komut dosyası, içinde bir yüz algılanan bir fotoğraf çekene kadar fotoğraf çekmeye başlayacaktır. Algılamadan sonra, yüzün 128 kodlamasını hesaplamak için 'face_recognition' python paketinden bazı yöntemler çağrılır. Daha sonra elde edilen kodlama, whitelist.csv ve blacklist.csv'deki kodlamalarla karşılaştırılır. Olası sonuçlar aşağıdaki yanıtla sonuçlanır:

Beyaz listede mi? Kara listede mi? Cevap
Evet Numara Yeşil ışık yanar.
Evet Evet Sarı ışık yanar. Kapı zili kamerası, fotoğrafları turuncu simgeli Telegram botuna gönderir. Bu durum, her iki listeye de biri eklenmişse gerçekleşebilir. Örneğin, biri ilk başta hoş karşılanırken daha sonra kara listeye alındığında.
Numara Numara Sarı ışık yanar. Kapı zili kamerası, fotoğrafları turuncu simgeli Telegram botuna gönderir.
Numara Evet Kırmızı ışık yanar. Kapı zili kamerası, fotoğrafları kırmızı simgeyle Telegram botuna gönderir.

Beyaz listeye biri eklendi

Beyaz listeye birini eklemek için kapı zili boştayken trafik ışığının sarı düğmesine basın. İlk olarak, sarı ışık yanacaktır. Yeşil ışık 3 kez yanıp sönerse, kişinin yüzü beyaz listeye başarıyla eklenir. Yeşil ışık 3 kez yanıp sönmezse, deneme başarılı olmamıştır. Bu durumda sarı düğmeye tekrar basın. Kapı zilini çalarak ve yeşil ışığın geçip geçmediğini kontrol ederek başarılı olup olmadığını kolayca doğrulayabilirsiniz.

Kara listeye biri nasıl eklenir?

Açıkçası, kötü niyetli insanlar bize yüzlerinin fotoğrafını vermek için geçmeyecekler. Bunun yerine, (örneğin) polisin img/kara liste klasörüne yayınladığı kötü şöhretli kişilerin resimlerini ekleyebilirsiniz. Her saat, bu klasör yeni görüntüler için kontrol edilir. Yeni bir resim varsa, yüz kodlaması hesaplanır ve blacklist.csv'ye eklenir. Görüntü daha sonra yeniden adlandırılır ve /img/blacklist/encoding klasörüne taşınır.

Uyarılar:

  • Komut dosyalarını RPi'de oturum açarak çalıştırmak çok daha fazla kontrol ve bilgi sağlar, ancak temel kontrol ve bilgiler yalnızca trafik ışığı ekranı kullanılarak elde edilebilir.
  • Yüz tanıma, 'face_recognition' python paketi kullanılarak gerçekleştirilir. Bu paket, Labeled Faces in the Wild karşılaştırmasında %99,38 doğruluk sağlayan son teknoloji bir yüz tanıma algoritması içeren Dlib'e dayanmaktadır (kaynak: dlib.net - Deep Metric Learning ile Yüksek Kaliteli Yüz Tanıma).
Yardımcı Teknoloji Yarışması
Yardımcı Teknoloji Yarışması
Yardımcı Teknoloji Yarışması
Yardımcı Teknoloji Yarışması

Yardımcı Teknoloji Yarışmasında Birincilik Ödülü

Önerilen: