查看: 5945|回复: 1

无线摄像头监控和图像处理 OpenWRT + OpenCV

[复制链接]
  • TA的每日心情
    开心
    2014-4-11 10:00
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2017-7-5 10:45:17 | 显示全部楼层 |阅读模式
    分享到:
    诚然,可以使用OpenCV的linux版本把该功能做到嵌入式设备当中,然而当处理复杂的时候就需要在服务器平台上进行图像处理运算,本文尝试简单实现这一功能

    【OpenWRT】
    OpenWRT是广泛使用的开源路由器操作系统,因为开源所以强大。

    手头有一台MW151路由,据悉该路由与TP-Link 703n的区别只是USB口,改装升级内存和flash,刷上703n的OpenWRT固件,一台适宜开发的设备诞生了。

    【步骤:路由】

    路由器上的原材料:
    703n固件
    mjpeg-streamer软件
    免驱摄像头(笔者使用的是某宝上淘来的东芝笔记本拆机摄像头)
    首先要实现图像传输需要在路由上挂载USB摄像头,本文挂出来的路由固件已经有具有相应组件(kmod-video-core和kmod-video-uvc)。
    1.安装mjpeg-streamer讲软件解压,把其中的www目录放到路由器的www目录下,改名为camwww,向路由器上传文件可以用WinSCP,重启路由
    TIM截图20170705102415.png

    2.插好摄像头开机,启动mjpeg-streamer,ssh登陆路由(可以用Putty软件ssh登录)输入以下命令
    1. mjpg_streamer -i "input_uvc.so  -d /dev/video0" -o "output_http.so -p 8080 -w /www/camwww"
    复制代码
    TIM截图20170705102645.png
    8080指视频流使用端口,可以自定义,其余选项为默认分辨率640x480,30fps

    用户可以根据自己的需求自定义,例如
    1. mjpg_streamer -i "input_uvc.so -f 15 -r 320*240 -d /dev/video0" -o "output_http.so -p 8080 -w /www/camwww"
    复制代码
    表示分辨率320x240,15fps

    这时候可以看到摄像头的LED被点亮,结束操作时在SSH窗口中按Ctrl+C键可退出mjpg-streamer
    TIM截图20170705103013.png

    此时用浏览器(建议用火狐)连接路由器打开以下地址,可以查看摄像头的实时图像
    1. 192.168.10.1:8080/?ac<a href="http://bbs.elecfans.com/zhuti_715_1.html" target="_blank" class="relatedlink">ti</a>on=stream
    复制代码
    至此,OpenWRT已经实现挂载摄像头进行无线监控。

    【步骤:OpenCV】
    电脑是已经安装好Visual Studio 2013并配置好OpenCV 2.4.10

    要用OpenCV对路由器传输的实时图像进行处理,只需要让程序从网页获取图像,在while循环里不断把采集的图像转换成Mat矩阵(新版本的OpenCV正在逐步淘汰IplImage结构体)既可,令人欣喜的是,OpenCV里的VideoCapture类本身就能从网页获取图像,因此带来了极大的方便,具体如下:
    1. #include "opencv2/highgui/highgui.hpp"
    2.     #include "opencv2/imgproc/imgproc.hpp"
    3.     #include <iostream>
    4.     #include <stdio.h>
    5.     //头文件

    6.     using namespace std;
    7.     using namespace cv;

    8.     /** [url=home.php?mod=space&uid=254365]@function[/url] main */
    9.     int main(int argc, char** argv)
    10.     {
    11.             Mat src;
    12.             cv::VideoCapture vcap;

    13.             const string address = "恶心哦,说我没有权限发URL链接192.168.10.1:8080/?action=stream?dummy=param.mjpg";

    14.             if (!vcap.open(address))
    15.             {
    16.                     cout << "Error opening video stream" << endl;
    17.                     return -1;
    18.             }

    19.             cout << "Stream opened" << endl;

    20.             while (1)
    21.             {
    22.                   
    23.                     vcap >> src;
    24.                     // your code here
    25.                     /// Show your results
    26.                     namedWindow("Cam", CV_WINDOW_AUTOSIZE);
    27.                     imshow("Cam", src);
    28.                     if (waitKey(2) == 27)
    29.                             break;
    30.                      // Press "Esc" to exit
    31.             }
    32.             return 0;
    33.     }
    复制代码
    上文中如果address直接等于浏览器地址栏中输入的地址,将不能获取图像,一个解释是,需要让程序知道视频流是jpeg类型,因此“伪造”了一个jpeg文件名

    下图是修改OpenCV官网的一个demo,亲测在路由上获取图像可行(分别从笔记本摄像头和路由器挂载的无线摄像头)
    TIM截图20170705103309.png
    TIM截图20170705103319.png

    wr703n-rom.part1.rar (2 MB, 下载次数: 0)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-25 10:04
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-7-20 17:59:09 | 显示全部楼层
    点个赞,不错得分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-20 09:22 , Processed in 0.110801 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.