Dieses Projekt zeigt, wie Sie Bilder von dieser Kamera empfangen und sie in Stillbildern und Filmen mit OpenCV und FFMPEG auf Ubuntu 20.04 verarbeiten, die auf einem Raspberry Pi -Modell 4B ausgeführt werden. Die Kamera sendet die folgende JSON -Nachricht per HTTP -Beitrag:
{
"body" : [
{
"name" : " battery_percent " ,
"value" : " 96 "
},
{
"name" : " 5MP_MC " ,
"frames" : 0 ,
"content_type" : " image/jpeg " ,
"value" : " "
}
]
}Die Batteriedaten landen oben auf der Bildbrowsing -Seite.

Weitere Informationen zu dieser Seite finden Sie im Projekt der Kameraeinstellungen. Der Rest der Daten wird verwendet, um die value zu verarbeiten. (Es wurde für die Kürze ausgestattet. Stellen Sie sich eine sehr lange Basis 64 -codierte Zeichenfolge an seiner Stelle vor.) Das Feld name sagt uns, welche Kamera die Daten gesendet haben. Wenn Sie mehrere Kameras haben, geben Sie ihnen einfach unterschiedliche Namen und alle sind gut. Mit dem frames können wir wissen, ob wir mit einem einzigen JPEG oder Multiples rechnen sollten. Die Rahmen sind von Null nummeriert, sodass 0 Rahmen ein Bild erstellen. Wenn wir Multiples erhalten, teilen wir sie auseinander und bestellen sie mit der Rahmennummer. Wenn wir den reservierten Wert von 255 erhalten, der uns sagt, haben wir einen AVI/MJPEG -Film erhalten. Wenn es die magische Nummer und die FFMPEG -Validierung übergibt, konvertieren wir sie in MP4 und speichern sie als Film. Wenn dies nicht der Fall ist, versuchen wir, so viele Frames wie möglich zu speichern, und fallback beim Speichern von Bildnummernbildern. Siehe mjpeg_utils::save_avi_frames , um wie ffmpeg in openCV verwendet wird, um all diese Bildverarbeitung zu erreichen.
Ich habe das Projekt überarbeitet, um direkt auf Ubuntu 20.04 (64 Bit) für das Raspberry Pi Model 4b zu bauen. Wenn Sie an der vorherigen Version interessiert sind, in der Raspberry Pi OS (auch bekannt als Raspbian) verwendet wird, greifen Sie auf das Repository auf dem Commit 511c7b8 zu
Wenn Sie es noch nicht getan haben:
sudo apt-get install build-essential libcurl-dev libmagic-dev cmake Es ist allgemein bekannt, dass der schwierigste Teil der Verwendung von OpenCV darin besteht, es und seine Abhängigkeiten installiert zu haben. Sobald Sie vorbei sind, ist es eine Freude, es zu verwenden. Ich habe dieses Projekt auf einem Raspberry Pi Model 4B gebaut, das das neueste Ubuntu 20.04 64 -Bit (Oktober 2020) ausführt. Ich habe das getan, weil ich wollte, dass das Projekt für diejenigen mit einem begrenzten Budget zugänglich ist. Der PI ist berühmt erschwinglich und hat mehr als genug Fähigkeiten für die vorliegenden Aufgaben. Wenn Sie Zugriff auf einen Laptop haben, der Ubuntu läuft, finden Sie möglicherweise eine bessere Option. Um das Gebäude zu beginnen, installieren Sie Clang 9. Übrigens: Sie können versucht sein, mit GCC zu bauen. Wenn Sie es zum Laufen bringen, sind Sie ein besserer Aufbau -Meister als ich. Installieren Sie danach OpenCV und seine Abhängigkeiten. Führen Sie cmake zuletzt im Projektroot -Ordner üblich aus.
Machen Sie als Wurzel Folgendes;
/usr/lib/cgi-bin/ Wenn Sie das Projekt in cmakelists umbenannt haben. Stellen Sie sicher, dass Sie diesen Namen in HTTP_HOST_URL im Camera Project platformio.ini überlegen.sudo a2enmod cgisudo systemctl restart apache2/etc/apache2/ports.conf als Root und fügen Sie in einer Zeile unten Listen 80 Listen 4444 hinzu und speichern Sie die Datei. -1. Open /etc/apache2/sites-available/000-default.conf und fügen Sie dies in direktem unterhalb des Schlusss </VirtualHost> -Tag.
<VirtualHost *:4444>
<Directory /var/www/html/motion_camera>
Options +Indexes
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
<IfModule mod_autoindex.c>
IndexOptions IgnoreCase FancyIndexing HTMLTable SuppressHTMLPreamble FoldersFirst VersionSort NameWidth=* DescriptionWidth=* XHTML IconHeight=16 IconWidth=16
IndexIgnore ..
IndexOrderDefault Descending Name
IndexStyleSheet ./fancy-index/style.css
HeaderName ./fancy-index/header.html
ReadmeName ./fancy-index/footer.html
# IGNORE THESE FILES
IndexIgnoreReset ON
IndexIgnore fancy-index
# DEFAULT ICON
DefaultIcon ./fancy-index/icons/file-text.svg
AddIcon ./fancy-index/icons/back.svg ..
AddIcon ./fancy-index/icons/file-directory.svg ^^DIRECTORY^^
# https://github.com/file-icons/source
AddIcon ./fancy-index/icons/file-media.svg .jpg .jpeg
AddIcon ./fancy-index/icons/Video.svg .avi .mp4
# https://upload.wikimedia.org/wikipedia/commons/d/da/Battery-303889.svg
AddIcon ./fancy-index/icons/battery.svg .pwr
AddDescription "MPEG Layer 4 Format" .mp4
AddDescription "Joint Photographics Experts Group" .jpg .jpeg .jpe .jfif
AddDescription "Audio Video Interleave - Motion JPEG" .avi
AddDescription "Camera battery power available" .pwr
</IfModule>
</Directory>
</VirtualHost>
-2. Machen Sie als Root das Verzeichnis /var/www/html/motion_camera und kopieren Sie den Inhalt des Web_Root -Ordners dieses Projekts hinein.
-3. Beheben Sie das Eigentum, die Gruppe und die Berechtigungen.
sudo mkdir /var/www/html/motion_camera
cd /var/www/html/motion_camera
sudo chown -R www-data:www-data
sudo find . -type f -exec chmod 0644 {} ;
sudo find . -type d -exec chmod 0755 {} ; -4. Wenn Sie fertig sind /var/www/html/motion_camera enthält:
ls -al /var/www/html/motion_camera/fancy-index/
total 72
drwxr-xr-x 3 www-data www-data 4096 Jun 9 09:37 .
drwxr-xr-x 3 www-data www-data 40960 Jun 15 09:06 ..
-rw-r--r-- 1 www-data www-data 66 Jun 5 15:53 footer.html
-rw-r--r-- 1 www-data www-data 295 Jun 5 16:05 header.html
drwxr-xr-x 2 www-data www-data 4096 Jun 8 15:35 icons
-rw-r--r-- 1 www-data www-data 6322 Jun 8 15:48 script.js
-rw-r--r-- 1 www-data www-data 3170 Jun 9 09:37 style.css-5. Sie können die Konfiguration jetzt testen, indem Sie Ihren Browser auf http: // your_server: 4444/motion_camera verweisen
Eines der praktischen Dinge über das Design der CGI -Schnittstelle ist, dass alle Fehlermeldungen in den Standardfehlerstrom geschrieben werden sollten. stderr . Der Webserver schreibt diese in das Fehlerprotokoll. /var/log/apache2/error.log . Wenn dieser CGI auf einen Fehler stößt, schreibt er eine nützliche Nachricht dazu in dieser Datei. So deaktivieren Sie diese Ausgabe bearbeiten debug_output.hpp und kommentieren Sie DEBUG_OUTPUT aus
Sicher nicht. Der CGI -Schnittstellenstandard wird von vielen verschiedenen HTTP -Servern unterstützt. Sie sollten kaum Schwierigkeiten haben, dieses Projekt so anzupassen, dass Sie mit Ihrem ausgewählten Webserver arbeiten.
Es gibt auch Tools, die Sie für Sie in anderen Projekten nützlich finden. Zum Beispiel;
std::map<std::string, std::vector<std::string>> Aus diesem Grund können Sie ein Projekt erstellen, das HTML -Anfragen erstellt.std::map<std::string, std::vector<std::string>> - eine für Variablen und eine für Dateien. Daraus können Sie ein Projekt erstellen, bei dem Formulare verwendet werden, um ein Roboter/eingebettetes System oder Ihren Raspberry Pi zu steuern. Damit Sie beginnen können, gibt es ein HTML-Formular für alles, aber das Kitchen-Sink. Bearbeiten Sie das <form> -Tag oben und ändern Sie das action , um Ihren Servernamen widerzuspiegeln. Wenn Sie einen Fehler finden, erstellen Sie bitte ein Problem. Wenn Sie einen Beitrag leisten möchten, senden Sie bitte eine Pull -Anfrage.
Ich habe Doxygen verwendet, um die Projektdokumentation zu erstellen. Sie können es hier lesen.
Im Folgenden waren hilfreiche Referenzen bei der Entwicklung dieses Projekts.