该项目演示了如何使用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创建项目文档。您可以在这里阅读。
以下是该项目开发的有用参考。