このプロジェクトは、このカメラから画像を受信し、Raspberry PIモデル4Bで実行されているUbuntu 20.04でOpenCVとFFMPEGを使用して静止画像や映画に処理する方法を示しています。カメラは、HTTP投稿を介して次のJSONメッセージを送信します。
{
"body" : [
{
"name" : " battery_percent " ,
"value" : " 96 "
},
{
"name" : " 5MP_MC " ,
"frames" : 0 ,
"content_type" : " image/jpeg " ,
"value" : " "
}
]
}バッテリーデータは、画像ブラウジングページの上部にあります。

このページの詳細については、カメラ設定プロジェクトを参照してください。残りのデータは、 valueペイロードを処理するために使用されます。 (それは簡潔に排除されました。その場所に非常に長いBase64エンコードされた文字列を想像してください。) nameフィールドは、どのカメラがデータを送信したかを教えてくれます。複数のカメラがある場合は、単に明確な名前を付けるだけで、すべてが順調になります。 framesカウンターは、単一のJPEGまたは倍数を期待する必要があるかどうかを知ります。フレームにはゼロから番号が付けられているため、 0フレームは1枚の画像を生成します。複数を取得すると、それらを分割し、フレーム番号で注文します。 AVI/MJPEGムービーを受け取ったことを教えてくれる255の予約額を取得した場合。マジック番号とFFMPEG検証に合格した場合は、MP4に変換し、映画として保存します。そうでない場合は、できるだけ多くのフレームを保存し、フレーム番号の画像を保存することを試みます。 mjpeg_utils::save_avi_frames参照してください。ffmpegがopencv内で使用される方法については、このすべての画像処理を実現してください。
Raspberry Pi Model 4bのUbuntu 20.04(64ビット)に直接構築するプロジェクトを修正しました。 Raspberry Pi OS(別名Raspbian)を使用した以前のバージョンに興味がある場合は、Commit 511C7B8のリポジトリにアクセス
まだ行っていない場合:
sudo apt-get install build-essential libcurl-dev libmagic-dev cmake OpenCVを使用する最も難しい部分は、それを取得し、その依存関係をインストールすることであることは広く知られています。あなたがそれを乗り越えたら、それを使うのが喜びです。このプロジェクトは、最新(2020年10月)Ubuntu 20.04 64ビットを実行しているRaspberry Pi Model 4Bで構築しました。限られた予算でプロジェクトにアクセスできるようにしたかったので、私はそれをしました。 Piは有名な手頃な価格であり、手元のタスクに十分な機能があります。とはいえ、Ubuntuを実行しているラップトップにアクセスできる場合は、より良い選択肢があるかもしれません。建物を開始するには、Clang 9を設置してください。ところで:GCCで構築したいと思われるかもしれません。あなたがそれを機能させるならば、あなたは私よりも良いビルドマスターです。その後、OpenCVをインストールすると依存関係があります。最後に、プロジェクトルートフォルダーで通常の方法でcmakeを実行します。
ルートとして、次のことを行います。
/usr/lib/cgi-bin/プロジェクトと名前を変更した場合、cmakelists.txtにはバイナリにも新しい名前があります。カメラプロジェクトのPlatformio.iniでHTTP_HOST_URLにこの名前を反映してください。sudo a2enmod cgisudo systemctl restart apache2/etc/apache2/ports.confを編集し、下の行にListen 4444てListen 80ファイルを保存します。 -1。 root、open /etc/apache2/sites-available/000-default.conf apache2/sites-abailable/000-default.confとして、最後の</VirtualHost>タグのすぐ下に次の貼り付けを貼り付けます。
<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。ルートとして、ディレクトリ/var/www/html/motion_cameraを作成し、このプロジェクトのWeb_Rootフォルダーの内容をコピーします。
-3。所有権、グループ、および許可を修正します。
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。完了した場合/var/www/html/motion_camera以下が含まれます。
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。これで、ブラウザをhttp:// your_serverに向けることにより、構成をテストできます。4444/motion_camera
CGIインターフェイスの設計に関する便利なことの1つは、すべてのエラーメッセージが標準のエラーストリームに書き込まれることです。 stderr 。 Webサーバーは、これらをエラーログに書き込みます。 /var/log/apache2/error.log 。このCGIがエラーに遭遇すると、このファイルに有用なメッセージが記載されます。この出力をオフにするには、debug_output.hppを編集し、 DEBUG_OUTPUTをコメントします
確かにそうではありません。 CGIインターフェイス標準は、さまざまなHTTPサーバーによってサポートされています。選択したWebサーバーと連携するために、このプロジェクトを適応させるのはほとんど困難ではありません。
他のプロジェクトでは、あなたに役立つツールもあります。例えば;
std::map<std::string, std::vector<std::string>> html query stringを保存します。std::map<std::string, std::vector<std::string>> - 変数用、もう1つはファイル用です。これから、フォームを使用してロボット/埋め込みシステムまたはRaspberry Piを制御するプロジェクトを作成できます。あなたが始めるのを助けるために、すべてのものがありますが、キッチン・シンクHTMLフォームがあります。上部で<form>タグを編集し、 action属性を変更してサーバー名を反映します。 バグが見つかった場合は、問題を作成してください。貢献したい場合は、プルリクエストを送信してください。
Doxygenを使用してプロジェクトドキュメントを作成しました。ここで読むことができます。
以下は、このプロジェクトの開発において役立つ参考文献でした。