精华内容
下载资源
问答
  • 树莓派纳入到监控网络中:http://www.makeuseof.com/tag/turn-raspberry-pi-network-monitoring-tool/ 也可以参考其他工具,比如比较典型的Nagios和ganglia,如果有可能,可以把这两个尝试组合使用; 另外,也...

    将树莓派纳入到监控网络中:http://www.makeuseof.com/tag/turn-raspberry-pi-network-monitoring-tool/

    也可以参考其他工具,比如比较典型的 Nagios 和 ganglia,如果有可能,可以把这两个尝试组合使用;

    另外,也可以看看 onealert http://www.onealert.com/,它是SaaS模式的云告警平台,目前支持Nagios报警、Zabbix报警 、Cacti报警、Solarwinds报警 、VmWare报警、阿里云报警、监控宝报警等...

     

    转载于:https://www.cnblogs.com/haochuang/p/6372568.html

    展开全文
  • 树莓派远程监控+运动目标检测

    万次阅读 热门讨论 2019-03-04 20:58:53
    近期的我在做的一个项目,正好需要用到远程监控以及内网IP映射成公网IP,以便穿透局域网的限制,但是说实话,我是小白啊,我是菜鸡啊,而且我TM是一个搞...首先,关于树莓派远程监控问题,需要详解的同学,可以...

    近期的我在做的一个项目,正好需要用到远程监控以及内网IP映射成公网IP,以便穿透局域网的限制,但是说实话,我是小白啊,我是菜鸡啊,而且我TM是一个搞嵌入式的啊…emmmm用爱发电,所以,没办法,能怎么办呢,emmmm,在深思熟虑之下,只能认真学习(CTRL -C&V之后),由此,终于还算是弄出来了…如有错误,或者建议,欢迎大家指正
    闲话少谈,正文要紧:
    本文如果是笔记本用户的话,可以使用笔记本的自带摄像头,或者其他任意usb摄像头,只需要在camera_opencv.py里面的camera = cv2.VideoCapture(Camera.video_source)中的Camera.video_source改成对应你相机的代号就Ok(比如说:0|1),树莓派用户必须要有一个USB摄像头,其余不用更改。
    首先,关于树莓派的远程监控问题,需要详解的同学,可以去这个大佬博客瞅瞅http://shumeipai.nxez.com/2018/07/03/video-streaming-web-server-with-flask.html
    ,因为他的论述很详细,所以我就不多哔哔,直接上代码:
    先还是要说说我的工程构架:
    在这里插入图片描述
    首先要有一个总的工程文件夹——camWebServer2,然后里面扩一个存放有页面风格的style.css文件以及一张背景图片的文件夹——static,然后有一个存放有camera.html文件的——templates文件夹。其他的.py文件后文一一介绍:
    先来说说static文件夹里面的style.css文件,直接上代码:

    body{
     background: url('timg.jpg') no-repeat 0 0 transparent;//timg.jpg即是背景图,存放在同一个文件夹下,你可以更改图片,换上的图片名称即可
     background-size: 200% auto;
     color: red;
     padding:1%;
     text-align: center;
    }
    .button {
     font: bold 15px Arial;
     text-decoration: none;
     background-color: #EEEEEE;
     color: #333333;
     padding: 2px 6px 2px 6px;
     border-top: 1px solid #CCCCCC;
     border-right: 1px solid #333333;
     border-bottom: 1px solid #333333;
     border-left: 1px solid #CCCCCC;
    }
    
    img{
     display: display: inline-block
    }
    

    再来templates文件夹里面的camera.html文件:

    <html>
      <head>
        <title>Safe Online</title>
        <link rel="stylesheet" href='../static/style.css'/>
        <style>
      body {
       text-align: center;
      }
        </style>
      </head>
      <body>
        <h1>web name</h1>
        <h3><img src="{{ url_for('video_feed') }}" width="80%"></h3>
        <h3>{{ time }}</h3>
     <p> @web 描述</p>
      </body>
    </html>
    

    再来就是appCam2.py文件:

    from flask import Flask, render_template, Response
    app = Flask(__name__)
    from camera_opencv import Camera
    import time
    @app.route('/')
    def index():
    	"""Video streaming home page."""
     	timeNow = time.asctime( time.localtime(time.time()) )
     	templateData = {
          	'time': timeNow
     	}
     	return render_template('camera.html')
    def gen(camera):
        """Video streaming generator function."""
        while True:
            frame = camera.get_frame()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
    @app.route('/video_feed')
    def video_feed():
        """Video streaming route. Put this in the src attribute of an img tag."""
        return Response(gen(Camera()),
                        mimetype='multipart/x-mixed-replace; boundary=frame')
     if __name__ == '__main__':
        app.run(host='0.0.0.0', port =80, debug=True, threaded=True)#注意,host就是你的主机ip地址
     #树莓派查看ip地址为:ifconfig,电脑笔记本为:ipconfig
     #port端口树莓派用5000;笔记本用80,这与之后的内网穿透有关
    
    
    

    之后就是base_camera.py:

    import time
    import threading
    try:
        from greenlet import getcurrent as get_ident
    except ImportError:
        try:
            from thread import get_ident
        except ImportError:
            from _thread import get_ident
     class CameraEvent(object):
        """An Event-like class that signals all active clients when a new frame is
        available.
        """
        def __init__(self):
            self.events = {}
        def wait(self):
            """Invoked from each client's thread to wait for the next frame."""
            ident = get_ident()
            if ident not in self.events:
                # this is a new client
                # add an entry for it in the self.events dict
                # each entry has two elements, a threading.Event() and a timestamp
                self.events[ident] = [threading.Event(), time.time()]
            return self.events[ident][0].wait()
        def set(self):
            """Invoked by the camera thread when a new frame is available."""
            now = time.time()
            remove = None
            for ident, event in self.events.items():
                if not event[0].isSet():
                    # if this client's event is not set, then set it
                    # also update the last set timestamp to now
                    event[0].set()
                    event[1] = now
                else:
                    # if the client's event is already set, it means the client
                    # did not process a previous frame
                    # if the event stays set for more than 5 seconds, then assume
                    # the client is gone and remove it
                    if now - event[1] > 5:
                        remove = ident
            if remove:
                del self.events[remove]
        def clear(self):
            """Invoked from each client's thread after a frame was processed."""
            self.events[get_ident()][0].clear()
    class BaseCamera(object):
        thread = None  # background thread that reads frames from camera
        frame = None  # current frame is stored here by background thread
        last_access = 0  # time of last client access to the camera
        event = CameraEvent()
        def __init__(self):
            """Start the background camera thread if it isn't running yet."""
            if BaseCamera.thread is None:
                BaseCamera.last_access = time.time()
                # start background frame thread
                BaseCamera.thread = threading.Thread(target=self._thread)
                BaseCamera.thread.start()
                # wait until frames are available
                while self.get_frame() is None:
                    time.sleep(0)
        def get_frame(self):
            """Return the current camera frame."""
            BaseCamera.last_access = time.time()
            # wait for a signal from the camera thread
            BaseCamera.event.wait()
            BaseCamera.event.clear()
            return BaseCamera.frame
        @staticmethod
        def frames():
            """"Generator that returns frames from the camera."""
            raise RuntimeError('Must be implemented by subclasses.')
        @classmethod
        def _thread(cls):
            """Camera background thread."""
            print('Starting camera thread.')
            frames_iterator = cls.frames()
            for frame in frames_iterator:
                BaseCamera.frame = frame
                BaseCamera.event.set()  # send signal to clients
                # if there hasn't been any clients asking for frames in
                # the last 10 seconds then stop the thread
                if time.time() - BaseCamera.last_access > 10:
                    frames_iterator.close()
                    print('Stopping camera thread due to inactivity.')
                    break
            BaseCamera.thread = None
    

    注释详细,我就吧多哔哔了。接下来继续camera_opencv.py:

    import cv2
    from base_camera import BaseCamera
    import imutils
    import time
    class Camera(BaseCamera):
        video_source = 0
        @staticmethod
        def set_video_source(source):
            Camera.video_source = source
        @staticmethod
        def frames():
            camera = cv2.VideoCapture(Camera.video_source)
            camera.set(3,160)
            camera.set(4,160)
            avg = None
            def nothing(x):
                pass
            if not camera.isOpened():
                raise RuntimeError('Could not start camera.')
            while True:
                # read current frame
                _, img = camera.read()
                img = imutils.resize(img, width=500)
                gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                #高斯滤波
                #gray = cv2.blur(gray,(kerne,kerne))
                gray = cv2.GaussianBlur(gray, (21,21),0)
                #gray=cv2.medianBlur(gray,kerne)
                # 如果平均帧是None,初始化它
                if avg is None:
                    avg = gray.copy().astype("float")
                    continue
                    #背景更新,调节第三个参数改变权重,改变被景更新速度
                cv2.accumulateWeighted(gray, avg, 0.5)
                #获取两福图的差值---cv2.convertScaleAbs()--用来转换avg为uint8格式
                frameDelta = cv2.absdiff(gray,cv2.convertScaleAbs(avg))
                # 对变化的图像进行阈值化,膨胀阈值图像来填补
                thresh = cv2.threshold(frameDelta,5,255,cv2.THRESH_BINARY)[1]
                #膨胀图像
                thresh = cv2.dilate(thresh,None,iterations=2)
                #寻找轮廓,存储在cnts里面
                _, cnts, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
                # 遍历轮廓线
                for c in cnts:
                    print(cv2.contourArea(c))#打印检测运动区域大小
                    #调整这个值的大小可以调整检测动作的大小
                    if cv2.contourArea(c) > 1000:
                        (x, y, w, h) = cv2.boundingRect(c)#计算轮廓线的外框,为当前帧画上外框
                        cv2.rectangle(img,(x,y),(x+w,y+h), (0, 255, 0),1)# 更新文本
                cv2.putText(img, "action-detector", (10, 20),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
                yield cv2.imencode('.jpg', img)[1].tobytes()
    

    文章都有注释,相信你们能看懂,看不懂的可以下放提问,我看到了也会回复的。
    好了,到目前为止,代码就完了,如果你按照我的目录,把每个代码放入相应的文件夹,那么你就可以做到局域网内访问了。
    局域网版本:
    首先,先假设你不需要内网穿透,只需要局域网版本,那么,当你cv完我的代码:
    ——windows用户:找到键盘上的win+r,一同按下,使用cd命令进入camWebServer2,然后运行:python appCam2.py:如下图在这里插入图片描述
    ,然后回车。之后你需要随便打开一个浏览器,输入你的主机ip:http:0.0.0.0/就Ok.
    ——树莓派用户同windows用户,唯一区别则是,使用ctrl+alt+t打开终端运行…相信你们懂得
    然后,内网穿透版本,首先,我使用的是花生壳,其他的还有萤石云之类的就不赘述了,我们就来说说花生壳的使用吧,关于花生壳的使用,
    树莓派:http://service.oray.com/question/2680.html
    win10:http://service.oray.com/question/2480.html
    当你按照对应教程执行完之后,那么就来到了最关键的映射阶段:
    首先,先点击

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190304123752993.png
    增加映射,然后

    在这里插入图片描述
    其中,应用名称随意,域名选择花生壳免费给你的就可以了,或者你自己购买的也可以,选择***应用类,动态端口***,内网主机就输入你的ip地址,内网端口,树莓派悬着5000,win10选择80,注意,一定要和前文的appCam2.py里面的地址与端口一一对应。

    然后,映射完之后的操作与之前的局域网版本的操作一样。
    好了,到这里已经可以恭喜你了,共同进步,有什么建议或者什么的可以在下方评论给出,谢谢大家。
    额,对了最后再说一下,关于代码中的一些库的安装:其中,重点说一下opencv的树莓派的安装:https://mp.csdn.net/mdeditor/88073005#,大家可以去这篇文章下面看一下,
    最后其他的一些库就很简单了:
    windows:pip install xxx
    树莓派:sudo pip3 install xxx//注意一定是pip3,当然你如果是用的py2当我没说
    树莓派:sudo apt-get install python3-xxx
    最后,谢谢大家

    展开全文
  • 树莓派远程监控的实现

    千次阅读 2018-02-04 15:31:49
    这一章就来讲一下如何实现使用树莓派,USB摄像头,手机来实现远程监控,当然也可以跟前面做的小车结合起来,将摄像头放到车上。 ##使用的材料: 1:USB摄像头 2:树莓派 3:手机 使用的USB摄像头就像这种:...

    接着上面的两篇讲,上面的两章讲了让手机控制树莓派小车跑起来,并且实现了通过公网访问来控制小车的活动。这一章就来讲一下如何实现使用树莓派,USB摄像头,手机来实现远程监控,当然也可以跟前面做的小车结合起来,将摄像头放到车上。
    ##使用的材料:
    1:USB摄像头
    2:树莓派
    3:手机
    使用的USB摄像头就像这种:
    这里写图片描述
    这种的摄像头可以直接插在树莓派的USB接口上,也可以去百度一下树莓派支持的摄像头,插入摄像头后使用 ls /dev 查看是否有了USB摄像头设备:
    这里写图片描述
    video0就是插入的摄像头。
    我们实现监控使用motion,首先第一步安装motion:

    sudo apt-get install motion
    然后就是修改motion的配置:(比较习惯使用vim,如果想用vim的话可以去装一下当然也可以使用其他的)
    
    sudo nano /etc/motion/motion.conf

    要修改的地方不是很多,主要有:

    #deamon off 改成 on
    deamon on
    #设置分辨率
    width 800
    height 600
    #关闭 localhost 的限制
    webcam_localhost off

    如果想让motion一直在后台运行,可以打开 motion daemon 守护进程,让他可以一直在后台运行:

    sudo nano /etc/default/motion
    #no修改成yes:
    start_motion_daemon=yes

    然后就能启动motion了:

    
    sudo motion

    现在我们的树莓派监控就做好了,当然这只是在局域网中实现了,测试一下:
    首先你需要确定你的树莓派的局域网IP地址,比如我的为
    192.168.1.108,端口为8081,现在打开浏览器测试一下。
    这里写图片描述
    只是在局域网下监控就没太有意思了,把它放到公网上,进行远程监控才更加的有用,要实现远程监控就要用到了内网穿透,给大家推荐一个比较好用而且免费的内网穿透网站,毕竟是免费的还是有一定的延迟。(https://www.ngrok.cc)可以注册一个账号,下载一个客户端到树莓派上,选择linux RAM 的客户端,下载到树莓派上,网站上的教程比较详细,这里就不在讲了,开的隧道可以是TCP协议的也可以是HTTP协议的,需要将树莓派的本地端口和IP地址进行映射,比如我的本地端口是192.168.1.108:8081,然后去树莓派去运行下载的客户端:

    ./sunny clientid *********   *处为你开通的隧道id
    

    运行完后树莓派显示:
    这里写图片描述
    划掉的地方为给你映射的公网域名,访问时,使用这个域名即可。
    现在远程访问就实现了。
    我们之前使用的手机app控制的小车现在,我们也将视频监控图像放到app中显示,andriod使用控件WebView,使用方法也比较简单:

     <WebView
                android:id="@+id/web_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />
    
    
    
    video.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //String url="http://域名/";
                    webView.loadUrl(" http://free.ngrok.cc:12297");
    
                    //步骤3. 复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
                    webView.setWebViewClient(new WebViewClient() {
                        @Override
                        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                            view.loadUrl(url);
                            return true;
                        }
                    });
    
                }
            });

    至此,就实现了一个功能比较完整地智能小车,手机app控制小车,并且能在手机app上查看实时监控,后面将进行舵机使用的教程,实现摄像头的独立转动。

    展开全文
  • 最近接了个项目,项目中有一个远程监控的功能,最好用网页就能查看摄像头画面。 通过几天的查找资料,找到了一个相对简单的解决方案:借助一个名为“MJPG-Streamer”的web开源项目,可以在局域网中用web查看摄像头...

    最近接了个项目,项目中有一个远程监控的功能,最好用网页就能查看摄像头画面。

    通过几天的查找资料,找到了一个相对简单的解决方案:借助一个名为“MJPG-Streamer”的web开源项目,可以在局域网中用web查看摄像头画面,之后再通过内网穿透的方式,将一个购买的域名映射到这个局域网,之后就可以通过web查看摄像头的画面。

     经过一天一夜的测试,除了中间树莓派wifi断过一次导致网页访问失败,其余都十分顺利。我甚至还找来了放假回到全国各地的同班同学帮忙测试,测试结果也是没问题的。话不多说,接下上教程。

    一共分两步

    1.搭建“MJPG-Streamer”

    2.内网穿透

     

     

    〇 、前期准备

    树莓派烧录好系统、换源、调试好摄像头(原装或者usb摄像头都可)  具备简单的终端操作知识

     

    一、搭建“MJPG-Streamer”

      MJPG简介: 

           MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名. 
      MJPEG 
      全名为 “Motion Joint Photographic Experts Group”,是一种视频编码格式, 
      Motion JPEG技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。典型的应用如数字视频记录器等。MJPEG不像MPEG,不使用帧间编码,因此用一个非线性编辑器就很容易编辑。MJPEG的压缩算法与MPEG一脉相承,功能很强大,能发送高质图片,生成完全动画视频等。但相应地,MJPEG对带宽的要求也很高,相当于T-1,MJPEG信息是存储在数字媒体中的庞然大物,需要大量的存储空间以满足如今多数用户的需求。因此从另一个角度说,在某些条件下,MJPEG也许是效率最低的编码/解码器之一。 
      MJPEG 是 24-bit 的 “true-color” 影像标准,MJPEG 的工作是将 RGB 格式的影像转换成 YCrCB 格式,目的是为了减少档案大小,一般约可减少 1/3 ~ 1/2 左右。 

    安装命令  在终端中输入

     sudo apt-get install cmake libjpeg8-dev
     wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
    unzip master.zip
    cd mjp*g-*
    cd mjpg-*
    make
    sudo make install 

     此时安装就成功了

    接下来开启这个局域网监控  在终端中输入

    /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 320x180" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

     

    出现这个画面  表示开启成功  (终端不能关,除非要结束监控) (320x180是分辨率,分辨率低才能不卡顿)

    在连接局域网或者同一wifi下的任意设备中  ,用浏览器打开  http://192.168.137.45:8080/javascript_simple.html

    将其中192.168.137.45换成自己的树莓派ip地址。(可通过vnc快速查看ip)

     

     

    我用树莓派打开网址,看到的画面是这样的。

    至此,MJPG-Streamer便搭建成功。

     

    二、内网穿透

     

    什么是内网穿透?

    有时候,我们在外想要访问家里主机的资料,要么由于主机处于家庭路由器下,是非公网IP,要么就是是运营商随机分配的一个公网IP,都很难直接连上主机获取资料。那么,有什么办法可以解决这一难题?答案就是 内网穿透

    这里我们借助花生壳来进行内网穿透。(优点:最简单省事的方式,不需要经常维护,随用随开;缺点:开通一年域名要6元)

    1.首先在树莓派上下载花生壳的 驱动
    http://service.oray.com/question/2680.html

    2.安装 dpkg -i phddns_rapi_3.0.3.armhf.deb

    (phddns_rapi_3.0.3.armhf.deb为安装包名称   可能安装包更新 名字会有变化)

    3.安装成功后,将显示此树莓派的SN码、默认密码以及远程管理地址。默认密码为:admin

     

    4.配置花生壳 

    浏览器输入远程管理地址b.oray.com进入花生壳远程管理页面
    输入安装花生壳时生成的SN码及默认密码admin进入;

    首次登录,需要进行初始化:重设密码,填写手机,发送验证码;

    初始化成功,系统自动赠送一个免费域名;但是不支持内网穿透,如需使用内网穿透功能,要自行开通;

    应用名称和域名自己填,映射类型选择HTTP,外网端口选默认80,内网主机填"127.0.0.1",内网端口填“8080”,然后点击开启映射服务。到这里内网穿透就完成了

     

    5.确保以上操作都已顺利完成,你可以开始使用树莓派的远程监控服务了。

    6.开始测试

    首先 打开一个终端输入

     /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 320x180" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

    其次再打开一个终端  开启花生壳映射程序

     sudo phddns start  (关闭用 sudo phddns stop)

    保持两个终端,不关闭

    此时用任意一个浏览器打开  注册的域名

    比如我的  http://286b3261x1.wicp.vip  

     

     

     

     

     

    如果不需要界面中这么多文字  ,可以点击提示中的“此处”  就会出现以下画面

     

    三、远程测试

    我找了我初中同学——李同学来协助测试

    以下是他实时看到的画面(延迟可以忽略不计)

     

     

     

     

    展开全文
  • 树莓派远程监控空气质量

    千次阅读 2014-02-17 09:14:15
    使用GP2Y1010AU0F灰尘传感器,arduino uno,树莓派进行的空气质量在线监控。Rpilink系统是一个将树莓派设备连接到一起的数据平台,树莓派之间可以通过用户的配置进行数据交换和命令的执行。
  • 树莓派远程监控水位传感器

    千次阅读 2014-02-12 16:55:41
    利用树莓派采集传感器的数据并上传到服务器上,Rpilink系统是一个将树莓派设备连接到一起的数据平台,树莓派之间可以通过用户的配置进行数据交换和命令的执行,目前rpilink系统在硬件上只针对树莓派设备和部分...
  • 树莓派实现远程监控

    2017-08-17 17:44:41
    树莓派实现远程监控
  • 背景介绍: 在淘宝上入手一个树莓派摄像头,它是通过CSI接口连接到树莓派板上,之前我使用的是...为了实现树莓派+摄像头组合完成远程监控的目标,我们需要完成的任务包括: 1&amp;amp;amp;amp;amp;amp;gt;. ...
  • 现在有一种在树莓派远程视频监控方法,直接在浏览器中打开即可。 源码下载地址:https://github.com/waveform80/pistreaming 一、安装 1、安装各种依赖 $ sudo apt-get install ffmpeg git python3-...
  • 树莓派|远程监控 主要参考: i) 在树莓派上安装远程监控所需的包 ii) 第一个不行用第二个
  • 树莓派网络监控

    2020-03-15 02:03:56
    配置简单的树莓派远程网络监控 文章目录配置简单的树莓派远程网络监控方法:motion+FRP内网穿透安装配置后台运行修改配置测试内网穿透 方法:motion+FRP内网穿透 使用材料 树莓派3B+(安装的官方buster版本Raspbian...
  • 树莓派实现远程监控(玩转树莓派(二))换种方式连接树莓派1.一根网线+raspberry+路由器2.raspberry+路由器开启web监控 换种方式连接树莓派 在上一篇文章中,我是通过一根网线将树莓派的以太网接口和电脑的以太网...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 321
精华内容 128
关键字:

树莓派远程监控