Home security With Raspberry Pi

Bu yazımızda yapay zeka destekli bir ev güvenlik kamerasının kurulumunu, herhangi bir yere video sızdırmadan, inceleyeceğiz.

kullanacağımız sistem BerryNet adlı open source (açık kaynak) olan yapay zeka destekli bir sistemdir. Açık kaynak olması her şeyin ortada ve şeffaf olması demektir.

Gerekli Cihazlar

Projeyi gerçekleştirebilmek için aşağıdakilere ihtiyacımız olacaktır:

  1. Kamera girişi olarak kullanabileceğimiz bir adet cep telefon veya Raspberry Pi kamerası
  2. Bir adet Raspberry Pi (tercihen RPi 4)
  3. en az 8GB’lık SD Kart
  4. Sonucu elde etmek için Ubuntu kurulu bir bilgisayar
  5. Bildirim göndermek adına bir Gmail hesabı

Plan

İlk başta cep telefonumuzu bir IP kamera gibi kurucağız. Kamera fotoğraflarını analiz edilmesi için Raspberry Pi’ye göndereceğiz ve analiz sonucunu Raspberry Pi ekranında görüntüleyebileceğiz.

Şekil 1 – Fotoğrafları analiz etme

 

Bundan sonra, bildirimleri sizin mail hesabınıza gönderimini sağlamak için yeni bir Gmail hesabı kuracağız.

Şekil 2 – Bildirim gönderimi

 

Proje Adımları

1. Adım

Cep telefonunuzu bir IP kameraya dönüştürmek için CamOn Live Streaming programını kullanabilirsiniz.

Şekil 3 – Video yayin bilgileri

 

BerryNet video frame girişi için RTSP URL gerekiyor. H264 için RTSP URL bilgisini cep telefonumuzda yükarıdan aşağıya doğru kaydırarak bildirim merkezinden ulaşabiliriz.

Şekil 4 – RTSP URL

 

2. Adım

BerryNet sistem imajını SD Karta kurmak en son sürümünü aşağıdaki linkten indirebilirsiniz:

https://berrynet.s3.amazonaws.com/images/2019-07-15-raspbian-buster-berrynet.zip

İndirdiğiniz imajın sağlamlığını doğrulamak için md5sum’ı kullanabilirsiniz:

https://berrynet.s3.amazonaws.com/images/2019-07-15-raspbian-buster-berrynet.md5sum

İmajın /home/DT42/Downloads/ adresine kayıt edildiğini varsayalım;

notebook $ cd /home/DT42/Downloads
notebook $ md5sum 2019-07-15-raspbian-buster-berrynet.zip
8bda8053a69995814a0ca6fa60b1d49e  2019-07-31-raspbian-buster-berrynet.zip

BerryNet imajını SD karta yazdırmak için aşağıdaki komutu giriniz:

notebook $ unzip -p 2019-07-15-raspbian-buster-berrynet.zip | sudo dd 
of=/dev/sdb bs=4M conv=fsync status=progress

 

3. Adım

Raspberry Pi’yi boot yapdıktan sonra BerryNet object detection (nesne bulma) aplikasyonu hep çalışır durumda olacaktır. Manuel olarak durdurmak için aşağıdaki komutu giriniz:

rpi $ sudo supervisorctl stop all

 

4. Adım

Aşağıdaki komutları girerek BerryNet’i güncelleyin:

rpi $ sudo apt update
rpi $ sudo apt install -y berrynet

 

5. Adım

Hem cep telefonunuzun hem de Raspberry Pi’nin aynı WiFi ağına bağlı olduğundan emin olun.

İlk olarak “object detection service”i çalıştırın:

rpi $ bn_tflite -s detector -p mobilenet-ssd-coco-tflite-2.0.0 
--num_threads 4 --draw --debug
[D 190724 06:28:19 tflite_service:183] model filepath:
/usr/share/dlmodels/mobilenet-ssd-coco-tflite-2.0.0/model.tflite
[D 190724 06:28:19 tflite_service:184] label filepath: 
/usr/share/dlmodels/mobilenet-ssd-coco-tflite-2.0.0/labels.txt
INFO: Initialized TensorFlow Lite runtime.
[D 190724 06:28:19 __init__:11] Connected with result code 0
[D 190724 06:28:19 __init__:13] Subscribe topic berrynet/data/rgbimage

Sonrasında “dashboard client” çalıştırın ve bulma sonucu bu ekranda görüntülenecektir.(bir sonraki adımda “camera client” çalıştırdıktan sonra)

rpi $ bn_dashboard --topic berrynet/engine/tflitedetector/result --
no-decoration --no-full-screen --debug
[D 190724 06:37:54 __init__:11] Connected with result code 0
[D 190724 06:37:54 __init__:13] Subscribe topic 
berrynet/engine/tflitedetector/result

Devamında ise “camera client” çalıştırın ve “image filepath” giriş olarak belirleyin:

rpi $ wget -O /tmp/person.jpg 
https://raw.githubusercontent.com/pjreddie/darknet/master/data/person.jpg
rpi $ bn_camera --mode file --filepath /tmp/person.jpg --debug
[D 190724 06:46:18 camera:165] payload: 3.301 ms
[D 190724 06:46:18 camera:166] payload size: 161232
[D 190724 06:46:18 __init__:50] Send message to topic berrynet/data/rgbimage
[D 190724 06:46:18 camera:171] mqtt.publish: 8.06 ms
[D 190724 06:46:18 camera:172] publish at 2019-07-24T06:46:18.65415

Şimdi bulma sonucunu dashboard ekranında görebilmeniz gerekiyor.

Son olarak “camera client” durdurun ve girişini camera video streamin RTSP URL olarak belirleyerek tekrar başlatın:

rpi $ bn_camera --stream-src rtsp://10.0.0.108:8080/video/h264 --fps 1 --debug
[W 190724 06:34:52 camera:113] Camera FPS is 180000.0 (>30 or <1). Set it to 30.
[D 190724 06:34:52 camera:127] ===== VideoCapture Information =====
[D 190724 06:34:52 camera:128] Stream Source: rtsp://10.0.0.108:8080/video/h264
[D 190724 06:34:52 camera:129] Camera FPS: 30
[D 190724 06:34:52 camera:130] Output FPS: 5.0
[D 190724 06:34:52 camera:131] Interval: 6
[D 190724 06:34:52 camera:133] ====================================
[D 190724 06:34:52 camera:142] Drop frames: 5
[D 190724 06:34:52 __init__:50] Send message to topic berrynet/data/rgbimage

Bulma sonucu sürekli dashboard ekranında güncellenecektir.

 

6. Adım

Herhangi bir olay gerçekleştiğinde bildirim almak isterseniz, Gmail client size bu konuda yardımcı olacaktır.

İlk olarak “dashboard client”i dashboard ekranına tıklayarak ve “Q” ye basarak durdurun.

Sonrasında Gmail hesabınızın konfigürasyonunu aşağıdaki şekillerde gösterildiği gibi yapın:

Şekil 5 – Gmail hesabı konfigürasyonu

 

Son olarak da “Gmail client” başlatın:

rpi $ bn_gmail --sender-address foo@gmail.com --sender-password
 <gmail-password> --receiver-address bar@dt42.io --target-label person
 --topic berrynet/engine/tflitedetector/result --debug
[D 190722 15:36:27 __init__:11] Connected with result code 0
[D 190722 15:36:27 __init__:13] Subscribe topic 
berrynet/engine/ovdetector/result
[D 190722 15:36:50 __init__:20] Receive message from topic 
berrynet/engine/ovdetector/result
[D 190722 15:36:50 gmail:120] inference text result: {'timestamp':
 '2019-07-22T15:36:49.674736', 'annotations': [{'left': 63,
 'confidence': 0.9310929179191589, 'bottom': 347, 'right': 203,
 'label': 'dog', 'top': 261}, {'left': 405, 'confidence':
 0.7530375123023987, 'bottom': 341, 'right': 606, 'label': 'horse',
 'top': 135}, {'left': 182, 'confidence': 0.9989088773727417,
 'bottom': 369, 'right': 271, 'label': 'person', 'top': 103}, {'left':
 404, 'confidence': 0.4551317095756531, 'bottom': 337, 'right': 600,
 'label': 'sheep', 'top': 135}]}
[D 190722 15:36:50 gmail:109] Result labels: ['dog', 'horse',
 'person', 'sheep']
[D 190722 15:36:50 gmail:126] Find target label person: True
[D 190722 15:36:50 gmail:72] Sender: foo@gmail.com
[D 190722 15:36:50 gmail:73] Receiver: bar@dt42.io
[D 190722 15:36:50 gmail:74] Subject: BerryNet mail client notification
[D 190722 15:36:50 gmail:80] Attachment: /tmp/2019-07-22T15:36:50.632503.jpg
[D 190722 15:36:50 gmail:80] Attachment: /tmp/2019-07-22T15:36:50.632503.json

Alıcı bir bildirim maili almalıdır ve ekinde bulma sonucu bir fotoğraf ve yazı olmalıdır:

Şekil 6 – Bildirim örneği

 

Eğer hedef nesneyi köpek olarak değiştirirseniz, köpek bulunduğu anda size bildirim gelecektir:

Şekil 7 – Bildirim fotoğrafı

 

Eğer bildirim yerine aşağıdaki gibi mesaj alırsanız, “Command Line”da girdiğiniz şifreyi kontrol ediniz.

[W 190803 15:31:54 gmail:148] (535, b'5.7.8 Username and Password not 
accepted. Learn more at\n5.7.8 https://support.google.com/mail/?
p=BadCredentialsn140sm80107108fpd.132 - gmtp')

 

Sonuç

Nesnelerin interneti ve yapay zekayı kullanarak küçük bir proje gerçekleştirmiş olduk. Umarız bu proje sizin için bir başlangıç noktası olur ve devamında inanılmaz projelere imza atarsınız. 🙂

Kaynak: medium.com

 

0 0 votes
Article Rating
Subscribe
Bildir
guest

1 Yorum
Eskiler
En Yeniler Beğenilenler
Inline Feedbacks
View all comments
Mehmet
Mehmet
2 yıl önce

Merhaba, proje için teşekkürler.
Results label kısmına kendi tespit etmek istediğim fotoğrafı gömebilir miyim acaba?