該項目演示瞭如何使用opencv和ffmpeg在Ubuntu上的ubuntu 20.04上接收圖像並將其處理成靜止的圖像和電影,以Raspberry Pi Model 4B運行。該相機通過HTTP帖子發送以下JSON消息:
{
"body" : [
{
"name" : " battery_percent " ,
"value" : " 96 "
},
{
"name" : " 5MP_MC " ,
"frames" : 0 ,
"content_type" : " image/jpeg " ,
"value" : " "
}
]
}電池數據位於圖像瀏覽頁面的頂部。

有關此頁面的更多信息,請參見“攝像機設置”項目。其餘數據用於處理value有效負載。 (它已經為簡潔而興奮。想像一下一個很長的基本64編碼的字符串。) name字段告訴我們哪個相機發送了數據。如果您有多個攝像機,請簡單地給他們不同的名稱,一切都會很好。 frames計數器讓我們知道我們是否應該期望單個JPEG或倍數。幀從零編號,因此0幀產生一張圖片。如果我們得到倍數,我們將它們分開並按幀號訂購。如果我們得到255的保留價值,告訴我們我們已經收到了Avi/MJPEG電影。如果它通過魔術號碼和FFMPEG驗證,我們將其轉換為MP4並將其保存為電影。如果沒有,我們將嘗試節省盡可能多的幀併後備以保存框架編號的圖像。有關如何在OPENCV中使用FFMPEG來完成所有這些圖像處理,請參見mjpeg_utils::save_avi_frames 。
我修改了該項目,直接在Ubuntu 20.04(64位)上為Raspberry Pi 4B建立。如果您對使用Raspberry Pi OS(又名Raspbian)的先前版本感興趣,請訪問COMPL 511C7B8的存儲庫
如果您還沒有:
sudo apt-get install build-essential libcurl-dev libmagic-dev cmake眾所周知,使用OpENCV的最難部分是獲得它及其依賴關係。一旦您超越了,就很高興使用。我在Raspberry Pi Model 4B上構建了該項目,運行了最新的(2020年10月)Ubuntu 20.04 64位。我之所以這樣做,是因為我希望有限的預算能夠訪問該項目。 PI著名的負擔得起,它具有足夠的功能來完成手頭的任務。就是說,如果您可以訪問運行Ubuntu的筆記本電腦,則可能會發現一個更好的選擇。要開始建築物,請安裝Clang9。 BTW:您可能會想使用GCC建造;如果您讓它工作,那麼您將比我更好。之後,安裝OpenCV及其依賴項。最後,在項目根文件夾中以通常的方式運行cmake 。
作為根,請執行以下操作;
/usr/lib/cgi-bin/如果您在cmakelists.txt中重命名該項目。請確保在HTTP_HOST_URL中反映了此名稱,請在相機項目的Platformio.ini中反映出此名稱。sudo a2enmod cgisudo systemctl restart apache2/etc/apache2/ports.conf ,然後在下面的一行, Listen 4444 Listen 80並保存文件。 -1。作為root,open /etc/apache2/sites-available/000-default.conf -available/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。作為root,將目錄/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/totion_camera來測試配置
關於CGI接口設計的方便的事情之一是,所有錯誤消息都應寫入標準錯誤流。 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 html get requests的項目。std::map<std::string, std::vector<std::string>> - 一個用於變量,另一個用於文件。由此,您可以創建一個項目,其中使用表格來控制機器人/嵌入式系統或您的Raspberry Pi。為了幫助您入門,這是所有的kitchen-sink html表格。在頂部編輯<form>標籤,然後更改action屬性以反映您的服務器名稱。 如果找到錯誤,請創建問題。如果您想貢獻,請發送拉動請求。
我使用doxygen創建項目文檔。您可以在這裡閱讀。
以下是該項目開發的有用參考。