
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:
- Kamera girişi olarak kullanabileceğimiz bir adet cep telefon veya Raspberry Pi kamerası
- Bir adet Raspberry Pi (tercihen RPi 4)
- en az 8GB’lık SD Kart
- Sonucu elde etmek için Ubuntu kurulu bir bilgisayar
- 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
Merhaba, proje için teşekkürler.
Results label kısmına kendi tespit etmek istediğim fotoğrafı gömebilir miyim acaba?