chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RK3506的監(jiān)控系統(tǒng)

嵌入式大雜燴 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2025-11-30 00:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 簡(jiǎn)介

本文基于 RK3506開(kāi)發(fā)板的監(jiān)控系統(tǒng)的詳細(xì)方案與實(shí)現(xiàn)流程,結(jié)合硬件選型、軟件部署、算法優(yōu)化和系統(tǒng)集成實(shí)現(xiàn)一套“低功耗、可離線(xiàn)、可遠(yuǎn)程”的輕量級(jí)智能監(jiān)控系統(tǒng)。系統(tǒng)架構(gòu)如下所示。

Snipaste_2025-11-30_00-42-00.png

2 系統(tǒng)功能

1、識(shí)別能力

? 識(shí)別速度:< 300 ms(含活體)

? 準(zhǔn)確率:≥ 99.5 %

2、監(jiān)控邏輯

? 事件觸發(fā) → 本地 JPG 截圖并保存 + MQTT 告警 → 微信群通知

? MQTT 上報(bào)記錄(JSON:ID、時(shí)間、抓拍圖 base64)

? 與安防系統(tǒng)聯(lián)動(dòng):安防信號(hào)輸入→觸發(fā)視頻監(jiān)控→上傳報(bào)警視頻

3、管理后臺(tái)

? Web 端(Python+ Django)

? 支持 HTTPS Web 端、微信小程序、企業(yè)微信推送

? HTTP RESTful API(遠(yuǎn)程監(jiān)控、參數(shù)配置)

3 硬件架構(gòu)

1、計(jì)算平臺(tái)

? 睿擎派,采用 Rockchip處理器 RK3506(三核 Cortex-A7+單核Cortex-M0, 主頻最高1.5GHz),

2、視覺(jué)采集

? USB 攝像頭,視頻數(shù)據(jù)采集入口

3、網(wǎng)絡(luò)與交互

? 100 M 以太網(wǎng)

4、人體檢測(cè)模塊

? 安信可RD-03_V2雷達(dá)模組,感應(yīng)警報(bào)、配合攝像頭觸發(fā)聯(lián)動(dòng)

4 軟件與算法棧

4.1 系統(tǒng)鏡像

? RuiChing_RC-Pi-3506_Firmware_SMP_FACTORY_V1.5.0.img

4.2 視頻推流實(shí)現(xiàn)

這里使用USB攝像頭作為視頻流。核心組件如下:

  • WebNet HTTP 服務(wù)器:處理 HTTP 請(qǐng)求和響應(yīng)
  • UVC 設(shè)備驅(qū)動(dòng):USB 視頻類(lèi)設(shè)備采集
  • MJPEG 流協(xié)議:基于 multipart/x-mixed-replace 的流式傳輸

核心代碼如下:

#include < rtthread.h >
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include < webnet.h >
#include < wn_module.h >
#include < fcntl.h >
#include < unistd.h >

#define DBG_TAG "webnet.video"
#define DBG_LVL DBG_INFO
#include < rtdbg.h >

#define RT_UVC_CTRL_SET_CALLBACK          0x0             /**< Set the callback control command */
#define RT_UVC_CTRL_START_STREAM          0x1             /**< Start the video stream control command */
#define RT_UVC_CTRL_STOP_STREAM           0x2             /**< Stop the video stream control command */

struct usbh_videoframe
{
    uint8_t *frame_buf;
    uint32_t frame_size;
};

static struct webnet_session* g_session = RT_NULL;
static struct rt_device *uvc_device = RT_NULL;
static rt_bool_t stream_running = RT_FALSE;

static const char* boundary = "frame";
static const char* mimetype = "multipart/x-mixed-replace; boundary=";

static void video_frame_callback(struct usbh_videoframe *frame)
{
    if (stream_running && g_session)
    {
        webnet_session_printf(g_session, "Content-Type: image/jpegrnrn");
        webnet_session_write(g_session, frame- >frame_buf, frame- >frame_size);
        webnet_session_printf(g_session, "rn--%srn", boundary);
    }
}

static void cgi_mjpeg_stream_handler(struct webnet_session* session)
{
    uint8_t type = 1;

    g_session = session;
    RT_ASSERT(g_session != NULL);

    /*Initialize the UVC device*/
    if (!uvc_device)
    {
        uvc_device = rt_device_find("uvc");
        if (!uvc_device)
        {
            LOG_E("uvc equipment cannot be found");
            return;
        }
        rt_device_init(uvc_device);
        rt_device_open(uvc_device, RT_DEVICE_FLAG_RDWR);
    }

    /*Set the response header*/
    char content_type[64];
    rt_snprintf(content_type, sizeof(content_type), "%s%s", mimetype, boundary);
    g_session- >request- >result_code = 200;
    webnet_session_set_header(g_session, content_type, 200, "OK", -1);
    webnet_session_printf(g_session, "--%srn", boundary);

    /* Start the UVC stream */
    rt_device_control(uvc_device, RT_UVC_CTRL_SET_CALLBACK, (void *) video_frame_callback);
    rt_device_control(uvc_device, RT_UVC_CTRL_START_STREAM, &type);

    stream_running = RT_TRUE;
    LOG_I("The video stream has been started");

    while (stream_running)
    {
        char read_buf[32];
        int read_len;
        read_len = webnet_session_read(g_session, read_buf, sizeof(read_buf) - 1);
        if (read_len < 0)
        {
            LOG_I("The client connection has been disconnected(read_len = %d,errno = %d)", read_len, errno);
            stream_running = RT_FALSE;
        }
        rt_thread_mdelay(33);
    }

    g_session = RT_NULL;
    LOG_I("cgi_mjpeg_stream_handler exits");

}

/* WebNet initialization function */
void webnet_video_init(void)
{

#ifdef WEBNET_USING_CGI
    /* Register for video processing CGI */
    webnet_cgi_register("mjpeg_stream", cgi_mjpeg_stream_handler);
#endif

    webnet_init();

}

#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(webnet_video_init, initialize video stream server);
#endif

4.3 人體檢測(cè)

安信可Rd-03_V2搭載矽典微的 S1KM0000芯片、 高性能 24GHz 一發(fā)一收天線(xiàn)和外圍電路。 S1KM0000 是一種基于 FMCW 雷達(dá)收發(fā)器技術(shù)的集成單片機(jī)毫米波傳感器 SoC。 利用 FMCW 調(diào)頻連續(xù)波, 對(duì)設(shè)定空間內(nèi)的目標(biāo)進(jìn)行探測(cè)。 結(jié)合雷達(dá)信號(hào)處理, 實(shí)現(xiàn)高靈敏度的運(yùn)動(dòng)檢測(cè)和微動(dòng)檢測(cè)。Rd-03_V2 版模組對(duì)運(yùn)動(dòng)人體的最遠(yuǎn)感應(yīng)距離為 7m, 可感知區(qū)域內(nèi)是否有運(yùn)動(dòng)或者微動(dòng)的人體,實(shí)現(xiàn)實(shí)時(shí)檢測(cè)結(jié)果。

核心代碼如下:

#define INPUT_GPIO  0 // 定義.0號(hào)為輸入引腳
static rt_ssize_t g_pin_value =  0;

static void gpio_isr(void *args) // gpio 中斷回調(diào)函數(shù)
{
    g_pin_value = rt_pin_read((INPUT_GPIO));
    if(g_pin_value > 0)
    {
        LOG_I("input gpio %d irq trigger, level is %d", INPUT_GPIO, g_pin_value);
    }
}

static void gpio_interrupt_enable(void)
{
    rt_pin_mode(INPUT_GPIO, PIN_MODE_INPUT);   // 設(shè)置引腳為輸入模式

    // 設(shè)置 引腳為中斷模式,并且綁定中斷觸發(fā)回調(diào)函數(shù)
    rt_pin_attach_irq(INPUT_GPIO, PIN_IRQ_MODE_RISING_FALLING, gpio_isr, RT_NULL);
    rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_ENABLE);
}

static void gpio_interrupt_disable(void)
{
    // 取消 0 號(hào)引腳的中斷綁定
    rt_pin_detach_irq(INPUT_GPIO);
    rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_DISABLE);
}

當(dāng)檢測(cè)到人體會(huì),會(huì)將該事件傳遞給RK3506。

4.4 MQTT客戶(hù)端

當(dāng)檢測(cè)到人體時(shí),會(huì)觸發(fā)中斷事件,RK3506則將打開(kāi)攝像頭截圖并保存到本地,同時(shí)推送到云端和微信群,提醒用戶(hù)及時(shí)查看監(jiān)控情況。核心代碼如下:

#include < rtthread.h >
#include < rtdevice.h >
#include "paho_mqtt.h"
#include < stdint.h >
#include < stdlib.h >
#include < string.h >

#define DBG_TAG "example.mqtt"
#define DBG_LVL DBG_LOG
#include < rtdbg.h >

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/**
 * MQTT URI farmat:
 * domain mode
 * tcp://iot.eclipse.org:1883
 *
 * ipv4 mode
 * tcp://192.168.10.1:1883
 * ssl://192.168.10.1:1884
 *
 * ipv6 mode
 * tcp://[fe80::20c:29ff:fe9a:a07e]:1883
 * ssl://[fe80::20c:29ff:fe9a:a07e]:1884
 */
#define MQTT_URI               "tcp://192.168.101.222:1883"
#define MQTT_CLIENTID          "rk3506_mqtt"
#define MQTT_USERNAME          "admin"
#define MQTT_PASSWORD          "admin"
#define MQTT_SUBTOPIC          "/rk3506_mqtt/sub"
#define MQTT_PUBTOPIC          "/rk3506_mqtt/pub"
#define MQTT_WILLMSG            "Goodbye!"
#define MQTT_QOS                1
#define MQTT_PUB_SUB_BUF_SIZE   1024
#define MAX_PAYLOAD             128
#define CMD_INFO                "'mqtt_thread_cmd < start|stop >'"
#define PUB_CYCLE_TM            1000


/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static rt_thread_t pub_thread_tid = RT_NULL;

/* define MQTT client context */
static MQTTClient client;

static rt_uint32_t pub_count = 0, sub_count = 0;
static int recon_count = -1;
static int is_started = 0;

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

static void mqtt_sub_callback(MQTTClient *c, MessageData *msg_data)
{
    sub_count ++;
    return;
}

static void mqtt_connect_callback(MQTTClient *c)
{
    LOG_I("Start to connect mqtt server");
    return;
}

static void mqtt_online_callback(MQTTClient *c)
{
    LOG_D("Connect mqtt server success");
    recon_count ++;
    return;
}

static void mqtt_offline_callback(MQTTClient *c)
{
    LOG_I("Disconnect from mqtt server");
    return;
}

/**
 * This function create and config a mqtt client.
 *
 * @param void
 *
 * @return none
 */
static void mq_start(void)
{
    /* init condata param by using MQTTPacket_connectData_initializer */
    MQTTPacket_connectData condata = MQTTPacket_connectData_initializer;

    rt_memset(&client, 0, sizeof(MQTTClient));

    /* config MQTT context param */
    {
        client.uri = MQTT_URI;

        /* config connect param */
        rt_memcpy(&client.condata, &condata, sizeof(condata));
        client.condata.clientID.cstring = MQTT_CLIENTID;
        client.condata.keepAliveInterval = 30;
        client.condata.cleansession = 1;
        client.condata.username.cstring = MQTT_USERNAME;
        client.condata.password.cstring = MQTT_PASSWORD;

        /* config MQTT will param. */
        client.condata.willFlag = 1;
        client.condata.will.qos = MQTT_QOS;
        client.condata.will.retained = 0;
        client.condata.will.topicName.cstring = MQTT_PUBTOPIC;
        client.condata.will.message.cstring = MQTT_WILLMSG;

        /* rt_malloc buffer. */
        client.buf_size = client.readbuf_size = MQTT_PUB_SUB_BUF_SIZE;
        client.buf = rt_malloc(client.buf_size);
        client.readbuf = rt_malloc(client.readbuf_size);
        if (!(client.buf && client.readbuf))
        {
            rt_kprintf("no memory for MQTT client buffer!n");
            goto _exit;
        }

        /* set event callback function */
        client.connect_callback = mqtt_connect_callback;
        client.online_callback = mqtt_online_callback;
        client.offline_callback = mqtt_offline_callback;

        /* set subscribe table and event callback */
        client.messageHandlers[0].topicFilter = rt_strdup(MQTT_SUBTOPIC);
        client.messageHandlers[0].callback = mqtt_sub_callback;
        client.messageHandlers[0].qos = MQTT_QOS;

        /* set default subscribe event callback */
        client.defaultMessageHandler = mqtt_sub_callback;
    }

    /* run mqtt client */
    paho_mqtt_start(&client);

    return;

_exit:
    if (client.buf)
    {
        rt_free(client.buf);
        client.buf = RT_NULL;
    }
    if (client.readbuf)
    {
        rt_free(client.readbuf);
        client.readbuf = RT_NULL;
    }
    return;
}

static void show_mqtt_info(void)
{
    char temp[50] = {0};
    LOG_D("r==== MQTT Stability ====n");
    LOG_D("Server: "MQTT_URI"n");
    LOG_D("QoS   : %dn", MQTT_QOS);
    LOG_D("Number of published  packages : %dn", pub_count);
    LOG_D("Number of subscribed packages : %dn", sub_count);
    LOG_D(temp, sizeof(temp), "Packet loss rate              : %.2f%%   n", (float)((float)(pub_count - sub_count) * 100.0f / pub_count));
    LOG_D(temp);
    LOG_D("Number of reconnections       : %dn", recon_count);
}

static void thread_pub(void *parameter)
{
    char payload_buf[MAX_PAYLOAD];

    while (1)
    {
        if(g_pin_value > 0)
        {
            g_pin_value = 0;
            snprintf(payload_buf, sizeof(payload_buf), "{"Persion": 1}" );
            if (!paho_mqtt_publish(&client, QOS1, MQTT_PUBTOPIC, payload_buf))
            {
                ++ pub_count;
                LOG_D(payload_buf);
            }
        }
        rt_thread_delay(PUB_CYCLE_TM);
    }
}

static void mqtt_client_start(void)
{
    if (is_started)
    {
        return;
    }

    mq_start();

    while (!client.isconnected)
    {
        rt_kprintf("Waiting for mqtt connection...n");
        rt_thread_delay(1000);
    }

    pub_thread_tid = rt_thread_create("pub_thread", thread_pub, RT_NULL, 1024, 8, 100);
    if (pub_thread_tid != RT_NULL)
    {
        rt_thread_startup(pub_thread_tid);
    }

    is_started = 1;

    return;
}

static void mqtt_client_stop(void)
{
    MQTTClient *local_client = &client;

    if (pub_thread_tid)
    {
        rt_thread_delete(pub_thread_tid);
    }

    if (local_client)
    {
        paho_mqtt_stop(local_client);
    }
    show_mqtt_info();
    pub_count = sub_count = recon_count = 0;
    is_started = 0;

    LOG_D("==== MQTT Stability stop ====n");
}

static void mqtt_thread_cmd(uint8_t argc, char **argv)
{
    if (argc >= 2)
    {
        if (!strcmp(argv[1], "start"))
        {
            mqtt_client_start();
        }
        else if (!strcmp(argv[1], "stop"))
        {
            mqtt_client_stop();
        }
        else
        {
            LOG_D("Please input "CMD_INFO"n");
        }
    }
    else
    {
        LOG_D("Please input "CMD_INFO"n");
    }
}
MSH_CMD_EXPORT(mqtt_thread_cmd, MQTT THREAD CMD_INFO);

5 監(jiān)控服務(wù)器搭建

監(jiān)控服務(wù)器使用Django開(kāi)發(fā),另外使用Mosquitto作為MQTT服務(wù)器,搭建過(guò)程見(jiàn)下文。

5.1 Django相關(guān)軟件包安裝

1、Django以及組件安裝

$ pip install django

$ pip install dj_database_url

$ pip install whitenoise

$ pip install django-online-status

$ pip install django requests

或者

$ python3 -m pip install django

2、MySQL 數(shù)據(jù)庫(kù)驅(qū)動(dòng)

$ sudo apt update

$ sudo apt install python3-dev default-libmysqlclient-dev build-essential

#使用 pip 安裝

$ pip install mysqlclient

如果 mysqlclient 安裝困難,可以使用純 Python 實(shí)現(xiàn)的替代品:

$ pip install pymysql

然后在 Django 項(xiàng)目的 init .py 中添加:

# yourproject/__init__.py
import pymysql
pymysql.install_as_MySQLdb()

3、WebSocket(AGSI)框架依賴(lài)

$ pip install channels channels-redis djangorestframework redis daphne

5.2 MQTT服務(wù)器搭建

5.2.1 安裝Mosquitto相關(guān)的軟件

#安裝依賴(lài)

$ pip install paho-mqtt channels

#安裝 MQTT 代理

$ sudo apt install mosquitto mosquitto-clients

5.2.2 修改 Mosquitto 配置

要修改 Mosquitto 的監(jiān)聽(tīng)地址和端口,需要編輯其配置文件。以下是詳細(xì)步驟:

1、找到并編輯 Mosquitto 配置文件

配置文件位置

  • Ubuntu/Debian: /etc/mosquitto/mosquitto.conf
  • Windows: 安裝目錄下的 mosquitto.conf (如 C:Program FilesMosquittomosquitto.conf)
  • macOS (Homebrew): /usr/local/etc/mosquitto/mosquitto.conf

編輯配置文件

sudo vi /etc/mosquitto/mosquitto.conf

2、修改監(jiān)聽(tīng)設(shè)置

在配置文件中添加或修改以下內(nèi)容:

# 監(jiān)聽(tīng)所有網(wǎng)絡(luò)接口的默認(rèn)端口 1883
listener 1883 0.0.0.0

# pid_file /var/run/mosquitto.pid

# persistence true
# 防止重復(fù)消息
persistence false
allow_duplicate_messages false

persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d
# 需要身份驗(yàn)證 (生產(chǎn)環(huán)境)
password_file /etc/mosquitto/passwd
allow_anonymous false

3、配置防火墻

#開(kāi)放 MQTT 端口 (1883)

sudo ufw allow 1883/tcp

#如果使用SSL/TLS

sudo ufw allow 8883/tcp

4、重啟 Mosquitto 服務(wù)

sudo systemctl restart mosquitto

5、驗(yàn)證配置

檢查服務(wù)狀態(tài):

sudo systemctl status mosquitto

檢查監(jiān)聽(tīng)端口:

sudo netstat -tuln | grep 1883

6、創(chuàng)建用戶(hù) (如果需要身份驗(yàn)證)

#創(chuàng)建密碼文件

sudo touch /etc/mosquitto/passwd

sudo chmod 777 /etc/mosquitto/passwd

添加用戶(hù)

sudo mosquitto_passwd -b /etc/mosquitto/passwd your_username your_password

在配置文件/etc/mosquitto/mosquitto.conf中啟用認(rèn)證

password_file /etc/mosquitto/passwd

allow_anonymous false

#重啟服務(wù)

sudo systemctl restart mosquitto

7、測(cè)試連接

使用命令行工具測(cè)試

#訂閱測(cè)試

$ mosquitto_sub -h your_server_ip -t "test" -u your_username -P your_password

#發(fā)布測(cè)試 (在另一個(gè)終端)

$ mosquitto_pub -h your_server_ip -t "test" -m "Hello MQTT" -u your_username -P your_password

5.3 截圖和消息推動(dòng)

截圖核心代碼如下:

from celery import shared_task
import requests
from django.core.files.base import ContentFile
from .models import DetectionEvent, CaptureImage

@shared_task
def capture_image_task(event_id):
    """觸發(fā)RK3506設(shè)備抓拍圖片"""
    try:
        event = DetectionEvent.objects.get(id=event_id)
        device = event.device
        
        # 調(diào)用RK3506設(shè)備的抓拍接口
        response = requests.post(
            f'http://{device.ip_address}/',
            json={'event_id': event_id},
            timeout=10
        )
        
        if response.status_code == 200:
            # 保存圖片
            image_data = response.content
            capture = CaptureImage(event=event)
            capture.image.save(
                f'capture_{event_id}.jpg',
                ContentFile(image_data)
            )
            capture.save()
            
            # 可選:觸發(fā)AI分析
            analyze_image_task.delay(capture.id)
            
    except Exception as e:
        print(f"Capture image failed: {e}")

消息推送企業(yè)微信代碼如下:

import requests
import os
import requests, os, json
from datetime import datetime

class Auto_Message:
    def __init__(self, webhook_key: str):
        self.key = webhook_key

    def send_text(self, msg: str, at_all: bool = False):
        """Push plain text"""
        data = {
            "msgtype": "text",
            "text": {
                "content": msg,
                "mentioned_list": ["@all"]
            }
        }
        send_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={self.key}"
        r = requests.post(send_url, json=data, timeout=5)
        return r.json()

    def upload_file_to_media(self, filepath: str):
         # Upload file - >Return media_id
        upload_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={self.key}&type=file"
        with open(filepath, "rb") as f:
            media = {"media": (os.path.basename(filepath), f, "application/octet-stream")}
            r = requests.post(upload_url, files=media).json()
        media_id = r["media_id"]
        
        return media_id

    def send_file_to_group(self, filepath: str):
        """Push local files to the enterprise WeChat group"""
        # 1. Upload file - >Return media_id
        media_id = self.upload_file_to_media(filepath)

        # 2. Send file message
        send_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={self.key}"
        data = {"msgtype": "file", "file": {"media_id": media_id}}
        requests.post(send_url, json=data)

    def send_image_to_group(self, image_path: str):
        """
        Push local images to the enterprise WeChat group robot
        :param image_path: Local image absolute or relative path
        :param webhook_key: robot key
        """
        # 1. Upload images to obtain media_id
        media_id = self.upload_file_to_media(filepath)

        # 2. Send picture message
        webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={self.key}"
        data = {
            "msgtype": "image",
            "image": {
                "media_id": media_id
            }
        }
        headers = {'Content-Type': 'application/json'}
        requests.post(webhook_url, headers=headers, data=json.dumps(data))

    def send_news(self, articles: list):
        """Send graphic and text messages"""
        url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={self.key}"
        payload = {
            "msgtype": "news",
            "news": {"articles": articles}
        }
        r = requests.post(url, json=payload, timeout=5)
        return r.json()

6 性能與可靠性

? 工作溫度:-10 ℃ ~ 55 ℃,無(wú)風(fēng)扇散熱片即可

? 掉電保護(hù):超級(jí)電容保證 50 ms 數(shù)據(jù) flush,避免庫(kù)損壞

7 統(tǒng)演示

7.1 監(jiān)控服務(wù)器開(kāi)啟

筆者使用Ubuntu22.04作為監(jiān)控服務(wù)器平臺(tái),使用 Daphne 作為 ASGI 服務(wù)器,同時(shí)配置為自啟動(dòng)。開(kāi)啟監(jiān)控服務(wù)命令如下:

$ daphne monitor.asgi:application -b 192.168.101.222 -p 8000

用戶(hù)可查看實(shí)時(shí)畫(huà)面,首先進(jìn)入監(jiān)控服務(wù)器主頁(yè)。

2.png

如果查看視頻需要先登錄。

3.png

登錄賬號(hào)即可查看視頻流。

4.png

點(diǎn)擊開(kāi)始即可查看。

7.2 監(jiān)控終端配置與啟動(dòng)

step1: set network

#ifconfig e0 192.168.101.38 192.168.101.254 255.255.255.0

5.png

step2: mqtt thread start

#mqtt_thread_cmd start

6.png

step3: usb video

#webnet_video_init

7.png

7.3 監(jiān)控效果

監(jiān)控終端連線(xiàn)圖如下所示。

8.png

  • RK3506開(kāi)發(fā)板:作為主控制器,運(yùn)行Linux系統(tǒng)。
  • 安信可RD-03_V2:通過(guò)UART/GPIO接口與RK3506連接,用于檢測(cè)運(yùn)動(dòng)。
  • USB攝像頭:連接到RK3506的USB接口。

當(dāng)監(jiān)控到有人體是,企業(yè)微信會(huì)收到監(jiān)控畫(huà)面。

9.png

打開(kāi)監(jiān)控服務(wù)器,也可實(shí)時(shí)查看監(jiān)控畫(huà)面。

10.png

11.png

可實(shí)時(shí)截圖。

12.png

8 代碼地址

地址:https://gitee.com/ouxiaolong/rtthread_monitor

9 總結(jié)

基于RK3506、安信可RD-03_V2雷達(dá)和USB攝像頭構(gòu)建了一個(gè)監(jiān)控系統(tǒng),并使用Django搭建了服務(wù)器。

總結(jié)如下:

  • 硬件集成:成功將RK3506作為主控,連接雷達(dá)和攝像頭,實(shí)現(xiàn)了基于雷達(dá)觸發(fā)的圖像采集。
  • 軟件設(shè)計(jì):在RK3506上運(yùn)行Linux,編寫(xiě)Python程序處理雷達(dá)串口數(shù)據(jù)和控制攝像頭抓拍。
  • 服務(wù)器開(kāi)發(fā):使用Django構(gòu)建了RESTful API,接收并存儲(chǔ)檢測(cè)事件和圖片,同時(shí)提供了Web管理界面。
  • 實(shí)時(shí)通信:利用WebSocket實(shí)現(xiàn)服務(wù)器與網(wǎng)頁(yè)客戶(hù)端的實(shí)時(shí)通信,及時(shí)推送檢測(cè)事件。
  • 異步任務(wù):使用Celery處理耗時(shí)的圖像保存和AI分析任務(wù),提高系統(tǒng)響應(yīng)速度。
  • 前后端分離:前端通過(guò)JavaScript和WebSocket與后端交互,實(shí)現(xiàn)動(dòng)態(tài)更新監(jiān)控?cái)?shù)據(jù)。

總之,本項(xiàng)目成功構(gòu)建了一個(gè)低成本、高效率、易維護(hù)的智能監(jiān)控系統(tǒng),主要優(yōu)勢(shì)體現(xiàn)在:

  • 技術(shù)先進(jìn)性:結(jié)合雷達(dá)精準(zhǔn)檢測(cè)與Django強(qiáng)大生態(tài)
  • 成本優(yōu)勢(shì):國(guó)產(chǎn)硬件+開(kāi)源軟件,性?xún)r(jià)比突出
  • 實(shí)用性強(qiáng):經(jīng)過(guò)實(shí)際部署驗(yàn)證,穩(wěn)定可靠
  • 擴(kuò)展性好:模塊化設(shè)計(jì),便于功能擴(kuò)展
  • 用戶(hù)體驗(yàn)佳:完善的Web界面和API接口

這套技術(shù)方案不僅解決了具體監(jiān)控需求,可用于智能家居、智能安防、智慧農(nóng)業(yè)等領(lǐng)域,更形成了一套可復(fù)用的智能物聯(lián)網(wǎng)系統(tǒng)開(kāi)發(fā)模式,

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)控系統(tǒng)

    關(guān)注

    21

    文章

    4147

    瀏覽量

    184301
  • RK3506
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    706
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于米爾RK3506 Buildroot的MQTT-Modbus網(wǎng)關(guān)開(kāi)發(fā):實(shí)現(xiàn)設(shè)備遠(yuǎn)程監(jiān)控新方案

    在工業(yè)物聯(lián)網(wǎng)與智能家居場(chǎng)景中,遠(yuǎn)程設(shè)備監(jiān)控的核心痛點(diǎn)是工業(yè)總線(xiàn)協(xié)議與物聯(lián)網(wǎng)協(xié)議的兼容性問(wèn)題?;??RK3506 Buildroot? 系統(tǒng)開(kāi)發(fā)的? MQTT-Modbus? 網(wǎng)關(guān)產(chǎn)品,通過(guò)協(xié)議橋接
    的頭像 發(fā)表于 11-25 17:41 ?1390次閱讀
    基于米爾<b class='flag-5'>RK3506</b> Buildroot的MQTT-Modbus網(wǎng)關(guān)開(kāi)發(fā):實(shí)現(xiàn)設(shè)備遠(yuǎn)程<b class='flag-5'>監(jiān)控</b>新方案

    如何讓RK3506流暢刷圖,用好RGA?

    本文基于觸覺(jué)智能RK3506核心板/開(kāi)發(fā)板,介紹RGAIM2D進(jìn)行圖像處理,包括相關(guān)編譯與測(cè)試方法。
    的頭像 發(fā)表于 10-29 10:00 ?379次閱讀
    如何讓<b class='flag-5'>RK3506</b>流暢刷圖,用好RGA?

    RK3506開(kāi)發(fā)板Linux開(kāi)發(fā)板極致性?xún)r(jià)比之選

    RK3506開(kāi)發(fā)板Linux開(kāi)發(fā)板極致性?xún)r(jià)比之選瑞芯微RK3506開(kāi)發(fā)板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux+RT-Thread系統(tǒng)支持,128MB超大
    的頭像 發(fā)表于 09-11 16:26 ?2700次閱讀
    <b class='flag-5'>RK3506</b>開(kāi)發(fā)板Linux開(kāi)發(fā)板極致性?xún)r(jià)比之選

    明遠(yuǎn)智睿RK3506:賦能多場(chǎng)景智能硬件的核心芯片

    主頻以及出色的視頻解碼能力,迅速成為智能攝像頭、視頻監(jiān)控、門(mén)禁系統(tǒng)、智能音箱等領(lǐng)域的 “新寵兒”,為多場(chǎng)景智能硬件的升級(jí)迭代注入強(qiáng)勁動(dòng)力。? 從核心架構(gòu)來(lái)看,RK3506 采用的四核 ARM Cortex - A53 架構(gòu),是當(dāng)
    的頭像 發(fā)表于 09-05 17:48 ?778次閱讀

    明遠(yuǎn)智睿RK3506:嵌入式領(lǐng)域新標(biāo)桿

    嵌入式領(lǐng)域新標(biāo)桿:RK3506開(kāi)發(fā)板引領(lǐng)多行業(yè)應(yīng)用革新 隨著科技的不斷進(jìn)步,各行業(yè)對(duì)嵌入式系統(tǒng)的要求日益提高。在工業(yè)自動(dòng)化精細(xì)化管控、智能家居全場(chǎng)景交互、智能交通協(xié)同化運(yùn)行的大趨勢(shì)下,嵌入式系統(tǒng)
    的頭像 發(fā)表于 08-26 17:51 ?429次閱讀

    【米爾RK3506國(guó)產(chǎn)開(kāi)發(fā)板評(píng)測(cè)試用】開(kāi)箱體體驗(yàn)

    很高興今天收到了米爾科技的RK3506開(kāi)發(fā)板,下面是開(kāi)箱體驗(yàn),后期的測(cè)試使用中將會(huì)做詳細(xì)的測(cè)試和試用。 1.開(kāi)箱,包含以下: RK3506開(kāi)發(fā)板1 USB_TYPEC1 10Pin連接端子1 快速
    發(fā)表于 07-30 01:06

    有獎(jiǎng)丨米爾 瑞芯微RK3506開(kāi)發(fā)板免費(fèi)試用來(lái)啦!

    米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3506應(yīng)用處理器的MYD-YR3506開(kāi)發(fā)板免費(fèi)試用名額增加啦
    的頭像 發(fā)表于 07-10 08:03 ?633次閱讀
    有獎(jiǎng)丨米爾 瑞芯微<b class='flag-5'>RK3506</b>開(kāi)發(fā)板免費(fèi)試用來(lái)啦!

    瑞芯微RK3506 vs NXP i.MX6ULL

    在關(guān)鍵技術(shù)國(guó)產(chǎn)化浪潮中,國(guó)產(chǎn)芯片正以更高性能、更優(yōu)成本及自主可控優(yōu)勢(shì)實(shí)現(xiàn)對(duì)海外方案的成功替代。今天觸覺(jué)智能拿出自家新品瑞芯微RK3506核心板(IDO-SOM3506-S1),與線(xiàn)上某款熱銷(xiāo)
    的頭像 發(fā)表于 06-19 16:26 ?926次閱讀
    瑞芯微<b class='flag-5'>RK3506</b> vs NXP i.MX6ULL

    米爾瑞芯微多核異構(gòu)低功耗RK3506核心板重磅發(fā)布

    。 低延時(shí)、高實(shí)時(shí)性RK3506采用了AMP多核異構(gòu),具備強(qiáng)大的實(shí)時(shí)性能使得一顆芯片便能靈活搭配多種操作系統(tǒng),確保系統(tǒng)能夠快速響應(yīng)各類(lèi)輸入信號(hào),特別適用于高精度控制系統(tǒng),滿(mǎn)足多種應(yīng)用需
    發(fā)表于 05-16 17:20

    觸覺(jué)智能RK3506核心板,工業(yè)應(yīng)用之RK3506 RT-Linux實(shí)時(shí)性測(cè)試

    觸覺(jué)智能RK3506核心板,工業(yè)應(yīng)用方案分享之RT-Linux實(shí)時(shí)性測(cè)試
    的頭像 發(fā)表于 04-27 19:27 ?1354次閱讀
    觸覺(jué)智能<b class='flag-5'>RK3506</b>核心板,工業(yè)應(yīng)用之<b class='flag-5'>RK3506</b> RT-Linux實(shí)時(shí)性測(cè)試

    如何用RK3506核心板自研一款嵌入式工業(yè)網(wǎng)關(guān)?

    飛凌嵌入式RK3506核心板做工業(yè)網(wǎng)關(guān)
    的頭像 發(fā)表于 03-19 16:32 ?1775次閱讀
    如何用<b class='flag-5'>RK3506</b>核心板自研一款嵌入式工業(yè)網(wǎng)關(guān)?

    RK3506到底有多香?搶先看核心板詳細(xì)參數(shù)配置

    RK3506到底有多香?觸覺(jué)智能已推出RK3506核心板,搶先了解核心板詳細(xì)參數(shù)配置!
    的頭像 發(fā)表于 01-18 11:33 ?3148次閱讀
    <b class='flag-5'>RK3506</b>到底有多香?搶先看核心板詳細(xì)參數(shù)配置

    RK3506各型號(hào)該怎么選?瑞芯微全新工業(yè)芯片介紹 觸覺(jué)智能出品

    RK3506各型號(hào)該怎么選?瑞芯微全新工業(yè)芯片介紹,還將推出與星閃技術(shù)相結(jié)合的RK3506星閃網(wǎng)關(guān)開(kāi)發(fā)板
    的頭像 發(fā)表于 12-25 10:27 ?2237次閱讀
    <b class='flag-5'>RK3506</b>各型號(hào)該怎么選?瑞芯微全新工業(yè)芯片介紹 觸覺(jué)智能出品

    低成本解決方案,RK3506的應(yīng)用場(chǎng)景分析!

    RK3506 是瑞芯微推出的MPU產(chǎn)品,芯片制程為22nm,定位于輕量級(jí)、低成本解決方案。該MPU具有低功耗、外設(shè)接口豐富、實(shí)時(shí)性高的特點(diǎn),適合用多種工商業(yè)場(chǎng)景。本文將基于RK3506的設(shè)計(jì)特點(diǎn),為大家分析其應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 12-11 15:26 ?2161次閱讀
    低成本解決方案,<b class='flag-5'>RK3506</b>的應(yīng)用場(chǎng)景分析!

    RK3506各型號(hào)間有什么差異?

    RK3506單板機(jī)(卡片電腦)是一款高性能三核Cortex-A7處理器,內(nèi)部集成Cortex-M0核心,RK3506單板機(jī)具有接口豐富、實(shí)時(shí)性高、顯示開(kāi)發(fā)簡(jiǎn)單、低功耗及多系統(tǒng)支持等特點(diǎn),非常適合于工業(yè)控制、工業(yè)通信、人機(jī)交互等應(yīng)
    的頭像 發(fā)表于 12-05 16:39 ?2543次閱讀
    <b class='flag-5'>RK3506</b>各型號(hào)間有什么差異?