Simovits

Smart säkerhetskamera

I denna blogg ska jag visa hur man med enkla medel bygger en smart säkerhetskamera som kan upptäcka rörliga objekt samt skickar ett mail med en bild på en inkräktare.

Den utrustning som behövs till detta projekt är:

Projektet har använt operativsystemet Raspbian som finns tillgänglig på Raspberry Pi:s officiella hemsida [1]. För att installera operatvisystemet på minneskortet bör den officiella installationsguiden följas [2]. När installationen av operativsystemet är färdigt monteras kameramodulen i Raspberry Pi:n enligt bilden nedan.

Efter Raspberryn har startat upp, öppna terminalen och skriv in följande kommando:

sudo raspi-config

Navigera till kamera alternativet och aktivera kameran. I detta konfigurationsfönster bör även filsystemet expanderas samt är det värdefullt att sätta på SSH-alternativet. Filsystemet bör expanderas för att använda allt tillgängligt utrymme på minneskortet. Genom att aktivera SSH-alternativet är det möjligt att administrera Raspberryn på distans. Kom ihåg att använda ett starkt lösenord för användare när SSH används. Konfigurationsfönstret kommer se ut som bilden nedan.

För att testa att kameran fungerar och är korrekt installerad skriver du följande kommando i terminalen:

raspistill -o bild.jpg

Finns det en JPG-fil i den aktuella katalogen så fungerar kameran. För att upptäcka objekt i videoflödet har detta projekt använt OpenCV som är ett programvarubibliotek med rutiner inom datorseende och bildanalys. Det finns ett färdigutvecklat paket på github [3] som finns att ladda ner till Raspberry. För att kunna installera OpenCV krävs att beroenden samt video- och bildbibliotek installeras. Detta skript nedan fungerar för att hämta alla beroenden, video- och bildbibliotek samt installera OpenCV.

#!/bin/bash
# Installation av OpenCV på Raspberry Pi
cd ~
# Tar bort program som tar upp mycket lagringsplats
sudo apt-get purge wolfram-engine -y
sudo apt-get purge libreoffice* -y 
sudo apt-get clean
sudo apt-get autoremove -y
sudo apt-get update && sudo apt-get upgrade -y

# Installerar nödvändiga paket och beroenden
sudo apt-get install build-essential cmake unzip pkg-config -y
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y 
sudo apt-get install libgtk-3-dev -y
sudo apt-get install libcanberra-gtk* -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install python3-dev -y

# Hämtar och zippar upp OpenCV
wget https://github.com/opencv/opencv/archive/4.0.0.zip
wget https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
unzip 4.0.0.zip
unzip 4.0.0.zip
mv opencv-4.0.0 opencv
mv opencv_contrib-4.0.0 opencv_contrib

# Installerar NumPy som krävs för vissa av beräkningarna
pip install numpy
# Konfigurerar OpenCV
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

#Utökar swapfilen för att kunna utnyttja alla fyra kärnor på Raspberry 
sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=2048'
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

# Kompilerar OpenCV med alla tillgängliga kärnor
make -j$(nproc)
# Installation av OpenCV
sudo make install
sudo ldconfig

Nu bör OpenCV vara installerat på Raspberry. Detta skript kan ta mellan 2-4 timmar att köra. Det kan uppstå fel med kompilationen av OpenCV när alla tillgängliga kärnor används, då systemet försöker utföra flera operationer samtidigt när de skall utföras sekventiellt. Skulle detta inträffa bör kompileringen startas om med ett mindre antal kärnor genom följande:

make clean
make -j(antalet kärnor som skall användas (1-4)) 

Det kommer bli en prestandaskillnad vid användning av mindre antal kärnor och installationen kommer ta längre tid men förhoppningsvis uppstår inga kompileringsfel.

OpenCV används endast för bildanalys, för att övervaka och skicka mail användes ett färdigutvecklat Pythonprogram [4]. Detta hämtas och installeras enligt nedan.

wget https://github.com/HackerShackOfficial/Smart-Security-Camera/archive/master.zip
unzip Smart-Security-Camera-master.zip
cd Smart-Security-Camera-master
pip install requirements.txt

För att få programmet att fungera samt mail skickad från ett konto till ett övervakningskonto så måste ändringar göras i mail.py filen. Öppna filen genom:

sudo nano mail.py

Gå ner till följande del och skriv in den mail som ska användas att skicka från samt den mail som ska vara mottagare.

# Email you want to send the update from (only works with gmail)
fromEmail = 'mail@gmail.com'
# You can generate an app password here to avoid storing your password in plain text
# https://support.google.com/accounts/answer/185833?hl=en
fromEmailPassword = 'Lösenord'
# Email you want to send the update to
toEmail = 'mail@gmail.com'

För att inte lagra lösenordet i klartext i koden bör instruktionen i kommentaren följas och ett lösenord för applikationen bör genereras.

Nu är programmet redo att köras!

python main.py

För att se en livestream av övervakningskameran från det lokala nätverket skriver man i webbläsaren: <IP-adressen till Raspberry> :5000. Nedan är en bild på min stream från övervakningskameran.

Som bilden ovan visar övervakar jag min kaffekopp och läskedryck då dessa brukar försvinna spårlöst.

Första email

Vid första mailet kommer Google ej tillåta att mail skickas då Google blockerar applikationer att använda sig av protokollet SMTP utan tillstånd. Detta löses genom att tillåta mindre säkra applikationer för Google-kontot. Denna funktion bör endast aktiveras för Googlekonton skapade enbart för detta syfte och inget konto där känslig information kan finnas tillgängligt.

Nu är man redo att testa den nya säkerhetskameran efter inkräktare. Denna notis fick jag då jag gick på min lunch:

Någon på kontoret har försökt stjäla min kaffekopp, det var alltså befogat att montera min säkerhetskamera.

  1. https://www.raspberrypi.org/downloads/raspbian/
  2. https://www.raspberrypi.org/documentation/installation/installing-images/README.md
  3. https://github.com/opencv/opencv
  4. https://github.com/HackerShackOfficial/Smart-Security-Camera