【智能家居】8、摄像头模块安装以及监控代码编写

这篇具有很好参考价值的文章主要介绍了【智能家居】8、摄像头模块安装以及监控代码编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要毕业论文可以私信获取哦

 一、摄像头模块安装与配置

一、摄像头选型与连接

摄像头模块RaspBerry Pi Camera Module V2

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

树莓派断电后将摄像头 模块排针接到下图所示的口中(注意排针方向)

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

二、树莓派配置mjpg-streamer

1、扩容

df -h

首先输入df -h命令查看可用空间,如果空间不足配置过程中可能会遇到 E: You don t have enough free space in /var/cache/apt/archives/.这个报错

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 扩容步骤https://mp.csdn.net/mp_blog/creation/editor/136244710

2、配置

步骤一
sudo apt-get update    #更新软件列表

sudo apt-get upgrade  #更新软件
步骤二
sudo apt-get install subversion  #Subversion是一个自由开源的版本控制系统
步骤三
sudo apt-get install libjpeg8-dev  #JPEG支持库

sudo apt-get install imagemagick

sudo apt-get install libv4l-dev   #4l是小写"L"

sudo apt-get install cmake  #下载编译工具
步骤四
sudo apt-get install git
步骤五(在Downloads目录下)
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

步骤六(在Downloads目录下)
cd mjpg-streamer/mjpg-streamer-experimental #进入下载目录后进入左侧路径

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

步骤七(在/Downloads/mjpg-streamer/mjpg-streamer-experimentals目录下)
make all#编译
【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居
步骤八(在/Downloads/mjpg-streamer/mjpg-streamer-experimentals目录下)
sudo make install #安装

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

sudo vi start.sh

将下图红框处修改为./input_raspicam.so

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

sudo raspi-config #开启树莓派摄像头 

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居 【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

用“Tab”键选择“Finish”后按回车

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

重启

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

步骤九(在/Downloads/mjpg-streamer/mjpg-streamer-experimentals目录下)
./start.sh

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

或者

sudo mjpg_streamer -i "./input_uvc.so -r 640x480 -f 10 -n" -o "./output_http.so -p 8088 -w /usr/local/www"  #此命令尤为重要,如下图所示,输出信息,说明成功!(端口号8080以上就行,但要和后面编写代码一致就行)

报错

ERROR opening V4L interface: No such file or directory
 i: init_VideoIn failed

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

解决办法

sudo modprobe bcm2835-v4l2

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

步骤十
http://树莓派IP地址:端口号

在浏览器输入 http://树莓派IP地址:端口号,回车 显示如下页面,点击页面左侧,Stream栏,显示监视画面

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

如果是下面这种情况

404: Not Found!
Could not open file

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

将命令换成

http://树莓派IP地址:端口号/?action=stream

 成功,动一动物体测试摄像头实时性

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

二、代码编写

人脸识别方案使用翔云提供技术支持

翔云_人工智能_API_服务平台z

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

注册后在首页选择产品--人脸识别 --购买

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 选择免费后会出现一个二维码让你扫码加微信,加了微信后他们会发给你一个链接用于输入手机号领取免费测试条数(一个账号可以免费领取100条 有效期5天)有钱的话可以直接买

公司开发大项目的他们会给更多免费条数,但我的演技拙劣被他们识破了,建议多备几个手机号

 一、libcutrl库

1、简介

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。

libcurl的官网 http://curl.haxx.se/

2、libcurl的使用

调用curl_global_init()初始化libcurl

调用curl_easy_init()函数得到 easy interface型指针

调用curl_easy_setopt()设置传输选项

根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务
调用curl_easy_perform()函数完成传输任务
调用curl_easy_cleanup()释放内存

 库下载Release 7.71.1 · curl/curl · GitHub

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

3、libcutrl库学习安装测试

将下载的压缩包放到虚拟机里并解压

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

解压完成生成一个名为curl.7.71.1的文件夹,进入里面有一系列开源压缩包

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 查看doc文件夹下的INSTALL.md学习如何安装库

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居(1)安装libcutrl

在~/httpHandler/curl-7.71.1目录下

./configure --prefix=$PWD/_install  #配置

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

make #编译

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

make install #安装拷贝

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 (2)测试打开百度网页
#include <stdio.h>
#include <curl/curl.h>

#define true 1
#define false 0
typedef unsigned int bool;

bool getUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
        return false;
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: Agent-007");
    curl = curl_easy_init();    // 初始化
    if (curl)
    {
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
        curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
        curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
        res = curl_easy_perform(curl);   // 执行
        if (res != 0) {

            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
    }
}
bool postUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)
        return false;
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
        curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    return true;
}
int main(void)
{
    getUrl("/tmp/get.html");
    postUrl("/tmp/post.html");
}

编译运行

gcc demo1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

环境变量导致错误,gcc编译的时候首先在usr/lib路径里面去找库,但我们的libcutrl库是我们自己加进来的路径是在./curl-7.71.1/_install/lib下

export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib/

再次运行后打开get.html文件发现访问成功

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

4、人脸识别代码编写预热

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>

#define true 1
#define false 0
typedef unsigned int bool;

// 定义一个缓冲区用于存储接收到的数据
static char response_buffer[10240];

// 重写readData回调函数以累积数据
size_t readData(void *ptr, size_t size, size_t nmemb, void *userdata) {
    size_t actual_size = size * nmemb;
    if (actual_size > sizeof(response_buffer) - strlen(response_buffer) - 1) {
        actual_size = sizeof(response_buffer) - strlen(response_buffer) - 1;
    }
    strncat(response_buffer, (const char*)ptr, actual_size);
    response_buffer[sizeof(response_buffer) - 1] = '\0'; // 确保字符串结尾有'\0'
    
    printf("===============get Data===============\n");
    printf("%s\n", response_buffer);
    
    return actual_size; // 返回处理的实际字节数
}

bool postUrl() {
    CURL *curl;
    CURLcode res;
    char *postString;

    char img1[12];
    char img2[12];

    const char *key = "翔云个人中心查看OCR Key";
    const char *secret = "翔云个人中心查看OCR secret";
    int typeId = 21;
    const char *format = "xml";

    postString = (char *)malloc(strlen(key) + strlen(secret) + 2048);
    sprintf(postString, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", "","", key, secret, typeId, format);

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);    // 指定post内容
        curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, response_buffer); // 设置写入数据的目标缓冲区
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); // 设置写入回调函数
        res = curl_easy_perform(curl);
        printf("OK:%d\n", res);
        curl_easy_cleanup(curl);
    }

    free(postString);
    return true;
}

int main(void) {
    postUrl();
    return 0;
}
(1)编译运行
gcc demo2.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib -lcurl

运行报错./a.out: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

原因:未安装curl

sudo apt-get update
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install curl

安装后运行

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

发现并不是我们想要的效果,因为目前libcurl缺少openssl不支持https的访问

(2)编译openssl支持libcurl的https访问
1)删除_install
【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居
2)openssl

下载压缩包

wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

解压

tar xvf openssl-1.1.1a.tar.gz

安装

./config

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居编译(时间有点长,耐心等待,只要不报错就OK)

make

 安装

sudo make install

在docs/INSTALL.md文件内有介绍

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

./configure --prefix=$PWD/_install --with-ssl

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 编译

make

安装

sudo make install

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

 (3)再次编译运行

gcc demo8.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib -lcurl

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

二、实战

一、人脸识别初体验

将普通格式图片转成base64格式

Base64格式图片是一种将原始的二进制图像数据编码为ASCII字符序列的过程。这种编码方法使得原本不适合直接在纯文本环境中传输的图片数据能够以文本的形式在网络上传输。使用Linux自带功能生成二进制编码。

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

封装一个函数

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>	
#include <sys/types.h>
#include <unistd.h>

#define true 1
#define false 0
typedef unsigned int bool;

// 定义一个缓冲区用于存储接收到的数据
static char response_buffer[10240];

// 重写readData回调函数以累积数据
size_t readData(void *ptr, size_t size, size_t nmemb, void *userdata) {
    size_t actual_size = size * nmemb;
    if (actual_size > sizeof(response_buffer) - strlen(response_buffer) - 1) {
        actual_size = sizeof(response_buffer) - strlen(response_buffer) - 1;
    }
    strncat(response_buffer, (const char*)ptr, actual_size);
    response_buffer[sizeof(response_buffer) - 1] = '\0'; // 确保字符串结尾有'\0'
    
   //printf("===============get Data===============\n");
   //printf("%s\n", response_buffer);
    
    return actual_size; // 返回处理的实际字节数
}

char *getBase64(char *filePath){
	char cmd[128]={'\0'};
	sprintf(cmd,"base64 %s >tmpFile",filePath);
	system(cmd);
	int fd=open("./tmpFile",O_RDWR);
	int fileLen=lseek(fd,0,SEEK_END);
	lseek(fd,0,SEEK_SET);
	char *bufPic=(char *)malloc(fileLen+2);
	memset(bufPic,0,fileLen+2);
	read(fd,bufPic,fileLen);
	close(fd);
	system("rm -f tmpFile");	

	close(fd);
	return bufPic;
}

bool postUrl() {
    CURL *curl;
    CURLcode res;
    char *postString;

    const char *key = "你的key";
    const char *secret = "你的secret";
    int typeId = 21;
    const char *format = "xml";
	
	char *buf1=getBase64("./LBJ1.png");
	char *buf2=getBase64("./LBJ2.png");		
    int len=strlen(key) + strlen(secret) + strlen(buf1)+ strlen(buf2)+1024;
    postString = (char *)malloc(len);
	memset(postString,'\0',len);
    sprintf(postString, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", buf1, buf2, key, secret, typeId, format);

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);    // 指定post内容
        curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, response_buffer); // 设置写入数据的目标缓冲区
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); // 设置写入回调函数
        res = curl_easy_perform(curl);
        printf("OK:%d\n", res);
		if(strstr(response_buffer,"是")!=NULL){
			printf("same\n");
		}else{
			printf("different\n");
		}
        curl_easy_cleanup(curl);
    }

    free(postString);
    return true;
}

int main(void) {
    postUrl();
    return 0;
}

运行测试

gcc demo8.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib -lcurl

【智能家居】8、摄像头模块安装以及监控代码编写,基于RaspberryPi智能家居项目,智能家居文章来源地址https://www.toymoban.com/news/detail-853244.html

到了这里,关于【智能家居】8、摄像头模块安装以及监控代码编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能车摄像头基本循迹控制

    基于摄像头的三种基本巡线控制 开源代码地址: https://github.com/ittuann/Enterprise_E 博客目录: https://blog.csdn.net/sorcererr/article/details/124989905 https://ittuann.github.io/2021/08/30/Car.html 摄像头程序处理后会给出一条中线,使用计算中线与标准值误差,赋予转向环PID。 三行巡线: 类似于线性

    2024年02月11日
    浏览(26)
  • 智能车摄像头三轮PID参数调节

    代码已上传CSDN,包含摄像头和PID控制,设置了VIP可取这个小门槛,有兴趣可以点击下方链接自取哈。 https://download.csdn.net/download/weixin_53129688/87714428 https://download.csdn.net/download/weixin_53129688/87714428  

    2024年02月11日
    浏览(32)
  • stm32 OV7670摄像头模块的介绍以及应用(SCCB的使用)

    今天学习摄像头模块,使用该模块进行拍摄,照相等功能进行对stm32 控制板的结合,了解他的原理以及应用。 主角: ov7670摄像头模块。(大概了解一下产品背景)  OV7670 是 OV( OmniVision)公司生产的一颗 1/6 寸的 CMOS VGA 图像传 感器。该传感器体积小、工作电压低,提供单片

    2023年04月09日
    浏览(39)
  • 基于图片、无人机、摄像头拍摄进行智能检测功能

    根据要求进行无人机拍摄的视频或图片进行智能识别,开发过程需要事项 1、根据图片案例进行标记,进行模型训练 2、视频模型训练 开发语言为python 根据需求功能进行测试结果如下 根据车辆识别标记进行的测试结果截图 测经过查看视频 8月1日 封装一个API接口进行调用图片

    2024年02月13日
    浏览(26)
  • WiFi模块在智能家居中的应用与优化

    智能家居技术的迅速发展已经改变了我们对家庭的定义。WiFi模块作为智能设备连接的核心,扮演着连接和控制智能家居生态系统的关键角色。本文将深入研究WiFi模块在智能家居中的应用,同时探讨如何通过优化来提升其性能和用户体验。 1. 智能家居中WiFi模块的关键应用:

    2024年02月05日
    浏览(35)
  • 树莓派4B摄像头安装+Ubuntu22.04系统摄像头识别

    树莓派4B安装上摄像头后,是不能立即使用的,需要进行一些配置才能使用,本文详细说明了配置过程和测试结果。 执行以下命令,检测是否可以识别摄像头: 结果如下: 返回结果:supported=0 detected=0,说明此时摄像头硬件还没有识别出来,而且设备是不支持摄像头配件的,

    2024年02月22日
    浏览(58)
  • 人工智能在图像处理中的应用:智能摄像头与视觉识别

    人工智能(Artificial Intelligence, AI)是一种计算机科学的分支,旨在模拟人类智能的行为和能力。其中,图像处理和视觉识别是人工智能领域中的重要应用领域。随着计算能力的提高和数据量的增加,人工智能在图像处理和视觉识别方面取得了显著的进展。 智能摄像头是一种具有

    2024年02月20日
    浏览(48)
  • jetson nano 智能小车1.0(实现键盘控制、加装摄像头)

    实验剩了一个jetson nano 开发板,闲着也是闲着,拿过来搞点好玩的,jetson nano 和树莓派差不多,加个L298N电机驱动板模块,买两个直流电机就行,目前图省事儿使用无线键盘控制,缺点是不知道程序目前的执行状态,后面考虑加个led指示灯 1.1主要硬件 jetson nano主控板一个 L2

    2024年04月25日
    浏览(29)
  • 毕业设计:基于深度学习的摄像头人脸识别系统 人工智能

    目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 人脸检测技术 1.2 活体检测技术 二、 数据集 2.1 数据集 2.2 数据扩充 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就

    2024年04月27日
    浏览(32)
  • 第十八届全国大学生智能汽车竞赛——摄像头算法(附带个人经验)

    参加了第十六,十七和第十八届全国大学生智能车竞赛,对摄像头的学习有部分心得,分享给大家,三届车赛,车赛生涯也算是到了尽头。打算从基础的算法开始,给各位一些个人看法,也是对车赛的一次总结。 闲话 :其实摄像头的算法有很多种,弄了两年摄像头,也只是

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包