Membuat MJPEG Stream Camera Menggunakan ESP32-CAM — Part 2 – Telegram Group

Membuat MJPEG Stream Camera Menggunakan ESP32-CAM — Part 2

Tulisan ini melanjutkan bahasan pada tulisan sebelumnya disni,

Membuat MJPEG Stream Camera Menggunakan ESP32-CAM — Part 1

yunusmuhammad007.medium.com

Sebelumnya kita telah berhasil membuat MJPEG Stream Camera menggunakan ESP32-CAM, sekarang kita akan coba membaca video streaming tersebut dan melakukan Facedetection dengan menggunakan OpenCV lalu mengirimkan foto wajah yang terdeteksi ke Telegram.

1. System Architecture

Architecture sistem ini dibangun diatas Docker Contaier yang terdiri dari sebuah container yang bertugan sebagai MJPEG Proxy dan sebuah container yang bertugas sebagai Engine untuk Facedetection dan mengirimkan notifikasi gambar ke Telegram. Berikut adalah System Architecturenya,

System Architecture [dok pribadi]

Jika masih awam tentang Docker, dapat dipelajari konsep & instalasi-nya terlebih dahulu pada tulisan berikut,

Docker — Part 1: Install Docker & Docker Compose Di Raspberry Pi 3

Hai, semua, kali ini kita akan bahas bagaimana cara install Docker pada Raspberry Pi. Sebelum kita mulai kita akan ulas…

yunusmuhammad007.medium.com

Setelah itu kita akan coba ulas terkait MJPEG Proxy Container,

2. NodeJS MJPEG Proxy

  • MJPEG Steam Camera ESP32-CAM akan di relay oleh NodeJS MJPEG Proxy Container yang dibangung menggunakan NodeJS.
  • Penggunaan MJPEG Proxy memiliki banyak manfaat, diataranya untuk mengontrol CORS (Cross-Origin Resource Sharing) MJPEG Camera, mengakomodir single MJPEG stream agar dapat didistibusi ke multiple inbound (HTTP) atau application consumer, sampai manage certificate/SSL.
  • NodeJS MJPEG Proxy Dockerfile & App tersedia di Github repository berikut,

Muhammad-Yunus/docker-mjpeg-proxy

cd CERT/ openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 docker run -it -d -p…

github.com

3. Install NodeJS MJPEG Proxy

  • Untuk menjalankan MJPEG Proxy container, kita terlebih dahulu perlu meyiapkan Docker Server di local network, Bisa menggunakan Raspberry Pi ataupun Mini PC lainya dengan sistem Operasi berbasis Debian Linux,
  • Install Docker pada Raspberry Pi bisa diikuti pada tulisan berikut,

Docker — Part 1: Install Docker & Docker Compose Di Raspberry Pi 3

Hai, semua, kali ini kita akan bahas bagaimana cara install Docker pada Raspberry Pi. Sebelum kita mulai kita akan ulas…

yunusmuhammad007.medium.com

3.a [Recommended] Using Ready to Use Image

  • Jika kalian menggunakan Raspberry Pi dengan arsitektur ARM64 (aarch64) atau Mini PC lain berbasis ARM dengan arsitektur tersebut, maka langkah ini paling direkomendasikan, karena kita tinggal menggunakan Image yang sudah di-build dan di-push ke Docker Hub, sehingga kita tinggal pull & run saja,

Docker Hub

Edit description

hub.docker.com

  • Pull & Run NodeJS MJPEG Proxy Image,
docker run -it -d --name mjpeg-proxy-esp32cam -p 8081:8081 -e MJPEG_URL='http://MJPG_URL' yunusdev/mjpeg-proxy-aarch64:latest
  • Ubah http://MJPG_URL dengan URL MJPEG ESP32-CAM dengan format http://IP_ESP32CAM:81/stream,
  • Tunggu sampai proses Pull & Run selesai,
  • Selanjutnya kita cek apakah container berjalan dengan baik atau tidak, jalankan command berikut,
docker ps
  • Hasilnya akan nampak seperti berikut,
  • Jika Container berjalan, selanjutnya kita cek pada browser dengan membuka URL berikut,
https://HOST_IP:8081/index.jpg
  • HOST_IP adalah IP address pada Docker Server.
  • Selanjutnya pada browser akan terlihat tampilan MJPEG Stream yang di relay dari ESP32-CAM,
  • Ditahap ini kita teah berhasil menjalankan NodeJS MJPEG Proxy dan me-relay MJPEG Stream Camera ESP32-CAM ke MJPEG Proxy tersebut.

3.b [Manual Build] Manual Build MJPEG Proxy Image

CATATAN !!! Step Ini hanya dilakukan jika kita ingin build manual Image MJPEG proxy (tidak menggunakan step 3.a)

  • Jika Docker sudah berhasil diinstall, selanjutnya kita clone Repository MJPEG Proxy, Jalankan command berikut pada terminal linux,
cd ~
mkdir Github
cd Github
git clone https://github.com/Muhammad-Yunus/docker-mjpeg-proxy
cd docker-mjpeg-proxy
  • Setelah itu kita buat Self-Sign-Certificate didalam foldr CERT/ dengan mengeksekusi command berikut,
cd CERT/
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
  • Setelah itu akan terbentuk file cert.pem dan key.pem pada folder CERT/ yang merupakan Self-Sign-Certificate yang kita create menggunakan openssl pada Linux.
  • Setelah itu kita build Docker Image NodeJS MJPEG Proxy dengan command berikut,
cd ~/Github/
docker build --pull --rm -f "docker-mjpeg-proxy/Dockerfile" -t mjpeg-proxy-aarch64:latest "docker-mjpeg-proxy"
  • Tunggu sampai proses build selesai, setelah itu baru kita bisa cek Image yang berhasil dibuild dengan menjalankan command berikut,
docker image ls mjpeg-proxy-aarch64
  • Terlihat Docker Image dengan nama mjpeg-proxy-aarch64 berhasil dibuat.
  • Jalankan Container untuk Docker Image yang berhasil dibuat dengan command berikut,
docker run -it -d --name mjpeg-proxy-esp32cam -p 8081:8081 -e MJPEG_URL='http://MJPG_URL' mjpeg-proxy-aarch64:latest
  • Selebihnya untuk pengecekan MJPEG Proxy Container sama dengan poin 3.a diatas.

4. Facedetection Telegram Bot Container

Setelah diatas kita berhasil menjalankan MJPEG Proxy baik dari ready to use image ataupun manual build, sekarang kita akan menjalankan Container yang bertugas untuk membaca video stream dari MJPEG Proxy container, lalu melakukan Facedetection dan mengirimkan Telegram notification jika ada wajah yang terdeteksi.

Algoritma Facedetection yang digunakan adalah Haar Cascade Classifier pada Library OpenCV dengan bahasa pemrograman Python. Informasi lebih detail tentang Facedetection menggunakan Haar Casescade Classifier dapat ditemukan pada video berikut,

Video Facedetection menggunakan Haar Casecade Classifier OpenCV

4.a Membuat Telegram Bot & Telegram Group

  • Buat bot baru menggunakan BotFatherdi Telegram. Ikuti petunjuk pembuatanya di https://core.telegram.org/bots.
  • BotFather akan memberikan kita TOKEN untuk Bot yang baru kita create.
  • Selanjutnya kita perlu mendapatkan CHAT ID yang ada pada Telegram Group,
  • Buat Telegram Group di https://web.telegram.org,
  • Masukan Bot yang baru kita buat kedalam group tersebut,
  • Pada URL Group Telegram misalnya (https://web.telegram.org/#/im?p=g123456789)
  • Nomor diakhir URL yang diawali huruf g ganti dengan -, contohnya untuk URL diatas akan nampak seperti berikut -123456789,
  • -123456789 adalah contoh CHAT ID yang kita perlukan,

4.b [Recommended] Using Ready to Use Image

  • Langkah ini paling direkomendasikan, karena kita tinggal menggunakan Image yang sudah di-build dan di-push ke Docker Hub, sehingga kita tinggal pull & run saja,

Docker Hub

Edit description

hub.docker.com

  • Pull & Run Facedetection Telegram Bot,
docker run --rm -d --name cctv_facedetect_telegram_bot  -p 8083:8083/tcp \
-e BOT_TOKEN='xxxx' \
-e CHAT_ID='xxxx' \
-e MJPEG_URL="xxxx" \
-e "TZ=Asia/Jakarta" \
yunusdev/cctv_facedetect_telegram_bot:latest
  • Ganti xxxx pada BOT_TOKENdan CHAT_ID dengan yang kita miliki,
  • Ganti xxxx pada MJPEG_URL dengan URL MJPEG Proxy Container di step 3 dengan format,
https://HOST_IP:8081/image.jpg
  • Tunggu sampai proses Pull & Run selesai,
  • Selanjutnya kita cek apakah container berjalan dengan baik atau tidak, jalankan command berikut,
docker ps
  • Hasilnya akan nampak seperti berikut,
  • Jika Container berjalan, selanjutnya kita cek apakah Facedetection Telegram Bot dapat mendeteksi wajah dan mengirimkan notifikasi ke Telegram Group yang kita buat diatas,
  • Coba berdiri didepan kamera, dan tunggu beberapa saat, sampai notif di Telegram muncul mengirimkan foto wajah yang terdeteksi.
Notifikasi Telegram [dok pribadi]
  • Pada Image yang di Pull diatas sudah ada heart beat message untuk melaporkan status MJPEG Stream tiap 15 menit.

4.c [Manual Build] Manual Build Facedetection Telegram Bot

CATATAN !!! Step Ini hanya dilakukan jika kita ingin build manual Image Facedetection Telegram Bot (tidak menggunakan step 4.b)

  • Jika Docker sudah berhasil diinstall, selanjutnya kita clone Repository CCTV Facedetection Telegram Bot, Jalankan command berikut pada terminal linux,
cd ~
mkdir -p Github
cd Github
git clone https://github.com/Muhammad-Yunus/cctv_facedetection_telegram
  • Setelah itu kita build Docker Image Facedetection Telegram Bot dengan command berikut,
cd ~/Github/
docker build --pull --rm -f "cctv_facedetection_telegram/Dockerfile" -t cctv_facedetect_telegram_bot:latest "cctv_facedetection_telegram"
  • Tunggu sampai proses build selesai, setelah itu baru kita bisa cek Image yang berhasil dibuild dengan menjalankan command berikut,
docker image ls cctv_facedetect_telegram_bot
  • Terlihat Docker Image dengan nama cctv_facedetect_telegram_bot berhasil dibuat.
  • Jalankan Container untuk Docker Image yang berhasil dibuat dengan command berikut,
docker run --rm -d --name cctv_facedetect_telegram_bot  -p 8083:8083/tcp \
-e BOT_TOKEN='xxxx' \
-e CHAT_ID='xxxx' \
-e MJPEG_URL="xxxx" \
-e "TZ=Asia/Jakarta" \
cctv_facedetect_telegram_bot:latest
  • Ganti xxxx pada BOT_TOKENdan CHAT_ID dengan yang kita miliki,
  • Ganti xxxx pada MJPEG_URL dengan URL MJPEG Proxy Container di step 3 dengan format,
https://HOST_IP:8081/image.jpg
  • Tunggu sampai selesai dijalankan,
  • Selanjutnya kita bisa melakukan pengecekan yang sama dengan step 4.b diatas.

Ditahap ini kita telah berhasil membangun sisten Facedetection Telegram Bot notification. Tiap ada wajah yang dideteksi oleh OpenCV akan dikirimkan ke Telegram. Selain itu terdapat heart beat message tiap 15 menit untuk reporting MJPEG Streaming status.

Sistem ini dibangun agar implementasinya dapat gampang dimanage dan scalable, dibandingkan jika seluruh kompleksitas program di-put didalam ESP32-CAM.

Sehingga kedepanya kita bisa menambahkan application container lainya misal untuk object detection atau face recognition, dan berbagai kebutuhan analisa citra lainya, tanpa batas.

Sekian tutorial kali ini, terimakasih.

Sumber :

  • https://github.com/Muhammad-Yunus/cctv_facedetection_telegram
  • https://github.com/Muhammad-Yunus/docker-mjpeg-proxy

Ten articles before and after

How to Write a Quick and Easy Telegram Bot that Posts Messages with Python – Telegram Group

Create Telegram Chatbot. In January 2022, Telegram announced… – Telegram Group

Telegram Secret Chat — Enable Now to be Secure – Telegram Group

Bot sederhana dengan menggunakan python! – Telegram Group

python Telegram bot pytelegrambotapi telegram bot simple – Telegram Group

Snap-It Find-It: Your Shopping Companion Bot – Telegram Group

First telegram bot in python.. Lets Create our first echo telegram bot… – Telegram Group

How to use the MOONCLONE Bot. To being using MOONCLONE BOT open up… – Telegram Group

How to restart a python program from inside – Telegram Group

How my Telegram bot “Vaccination finder” helped community and scaled for large scale users. Problems to Solutions — journey ! – Telegram Group