第1篇 目标检测概述 —(2)目标检测算法介绍

前言:Hello大家好,我是小哥谈。目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。常见的目标检测算法包括传统的基于特征的方法(如Haar特征和HOG特征)以及基于深度学习的方法(如Faster R-CNN、YOLO和SSD)。本节课就给大家重点介绍下基于深度学习的目标检测算法,希望大家学习之后能够有所收获!🌈 

前期回顾:

             第1篇 目标检测概述 —(1)目标检测基础知识

            目录

🚀1.目标检测算法介绍

🚀2.两阶段目标检测算法

💥💥2.1 R-CNN

💥💥2.2 Fast R-CNN

💥💥2.3 Faster R-CNN

💥💥2.4 Mask R-CNN

🚀3.一阶段目标检测算法

💥💥3.1 SSD

💥💥3.2 YOLO算法

🚀1.目标检测算法介绍

目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。常见的目标检测算法包括传统的基于特征的方法(如Haar特征和HOG特征)以及基于深度学习的方法(如Faster R-CNN、YOLO和SSD)。

传统的基于特征的目标检测算法通常是基于手工设计的特征和机器学习分类器的组合。这些算法通常包括以下步骤:提取图像特征、选择目标检测窗口、应用分类器进行目标判别和定位。而基于深度学习的目标检测算法则使用深度神经网络来自动学习图像特征和目标位置。这些算法通常由两个主要部分组成:卷积神经网络(如VGG、ResNet等)用于提取图像特征,以及用于目标检测的后处理步骤(如边界框回归和非极大值抑制)。

近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN、Fast R-CNN、Faster R-CNN等),它们是two-stage的。而另一类是YOLO、SSD这类one-stage算法。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。

计算机视觉中关于图像识别有四大类任务

📗分类-Classification:解决“是什么?”的问题,即给定⼀张图⽚或⼀段视频判断里面包含什么类别的目标。

📗定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

📗检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个⽬标的的位置并且知道目标物是什么。

📗分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每⼀个像素属于哪个目标物或场景”的问题。


🚀2.两阶段目标检测算法

💥💥2.1 R-CNN

R-CNN(Region-based Convolutional Neural Network)是一种目标检测算法,它在2014年由Girshick等人提出。R-CNN的主要思想是首先生成一组候选区域,然后对每个候选区域进行特征提取和分类,最后对分类结果进行边界框回归,以获得最终的目标检测结果。

具体流程如下:

  1. 输入图像被划分为多个候选区域,这些候选区域可以通过选择性搜索(Selective Search)等算法生成。
  2. 对每个候选区域,使用预训练的卷积神经网络(如AlexNet、VGG等)提取特征。
  3. 将提取的特征输入到一个支持向量机(SVM)进行分类,判断该区域是否包含目标物体。
  4. 对于被分类为包含目标物体的区域,使用线性回归模型进行边界框回归,以获得更准确的目标位置。

R-CNN算法虽然能够取得较好的检测结果,但其缺点也比较明显,如候选区域生成速度慢、训练和测试过程繁琐等。后续的改进算法(如Fast R-CNN、Faster R-CNN等)都是在R-CNN的基础上进行优化和改进。

R-CNN作为R-CNN系列的第⼀代算法,其实没有过多的使⽤“深度学习”思想,⽽是将“深度学习”和传统的“计算机视觉”的知识相结合。⽐如R-CNN pipeline中的第⼆步和第四步其实就属于传统的“计算机视觉”技术。使⽤ selective search提取region proposals,使⽤SVM实现分类。📚

比如对于猫的检测,如下图所示: 

在原论⽂中,R-CNN pipeline只有4个步骤,光看下图⽆法深刻理解R-CNN处理机制,下⾯结合图⽰补充相应⽂字。

🍀(1)预训练模型。选择⼀个预训练 (pre-trained)神经⽹络(如AlexNet、VGG)。

🍀(2)重新训练全连接层。使⽤需要检测的⽬标重新训练(re-train)最后全连接层(connected layer)。

🍀(3)提取proposals并计算CNN 特征。利⽤选择性搜索(Selective Search)算法提取所有proposals(⼤约 2000幅images),调整(resize/warp)它们成固定⼤⼩,以满⾜CNN输⼊要求(因为全连接层的限制),然后将feature map保存到本地磁盘。

🍀(4)训练SVM。利⽤feature map 训练SVM来对⽬标和背景进⾏分类(每个类⼀个⼆进制SVM)

🍀(5)边界框回归(Bounding boxes Regression)。训练将输出⼀些校正因⼦的线性回归分类器。

R-CNN创新点:

🍀(1)使⽤CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提⾼特征对样本的表⽰能⼒。

🍀(2)采⽤⼤样本下(ILSVRC)有监督预训练和⼩样本(PASCAL)微调(fine-tuning)的⽅法解决⼩样本难以训练甚⾄过拟合等问题。

说明:♨️♨️♨️

ILSVRC其实就是众所周知的ImageNet的挑战赛,数据量极⼤;PASCAL数据集(包含⽬标检测和图像分割等),相对较⼩。

R-CNN 实验结果:

R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的⽬标检测算法。

说明:♨️♨️♨️

论文题目:《Rich feature hierarchies for accurate object detection and semantic segmentation》 

论文地址:  https://openaccess.thecvf.com/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf

💥💥2.2 Fast R-CNN

Fast R-CNN是一种目标检测算法,它在深度学习中被广泛应用。它是R-CNN系列算法中的一员,相比于前几个版本,Fast R-CNN在速度和准确性上都有明显的提升。

Fast R-CNN的工作流程如下:

  1. 输入一张图片和它对应的ground truth边界框。
  2. 使用预训练的卷积神经网络(CNN)提取图片的特征。
  3. 将特征图和ground truth边界框送入RoI (Region of Interest)池化层,将不同尺寸的RoIs映射到固定大小的特征图上。
  4. 把RoIs映射后的特征通过全连接层进行分类和回归,得到每个RoI的类别概率和边界框坐标调整值。
  5. 使用非最大抑制(NMS)来排除重叠的边界框,最终输出检测结果。

这种算法的优点是能够共享卷积特征提取过程,因此在处理多个RoIs时可以节省计算时间。此外,Fast R-CNN还引入了RoI池化层,解决了原始R-CNN中不同大小的RoI输入固定大小CNN的问题,提高了模型的准确性。

Fast R-CNN是基于R-CNN和SPPnets进⾏的改进。SPPnets,其创新点在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature map上映射到对应的feature vector(就是不⽤重复计算 feature map了)。当然,SPPnets也有缺点:和R-CNN⼀样,训练是多阶段(multiple-stage pipeline)的,速度还是不够"快",特征还要保存到本地磁盘中。📚

以下是Fast R-CNN的流程图:

解析1:RoI Pooling层详解:

因为Fast R-CNN使⽤全连接层,所以应⽤RoI Pooling将不同⼤⼩的ROI转换为固定⼤⼩。RoI Pooling 是Pooling层的⼀种,⽽且是针对RoI的Pooling,其特点是输⼊特征图尺⼨不固定,但是输出特征图尺⼨固定(如7x7)。

解析2:什么是RoI呢?

RoI是Region of Interest的简写,⼀般是指图像上的区域框,但这⾥指的是由Selective Search提取的候选框。

 RoI的具体操作:

  1. 根据输⼊image,将ROI映射到feature map对应位置 。注:映射规则⽐较简单,就是把各个坐标除以“输⼊图⽚与feature map的⼤⼩的⽐值”,得到了feature map上的box坐标。
  2. 将映射后的区域划分为相同⼤⼩的sections(sections数量与输出的维度相同)。
  3. 对每个sections进⾏max pooling操作。

这样我们就可以从不同⼤⼩的⽅框得到固定⼤⼩的相应的feature maps。值得⼀提的是,输出的feature maps的⼤⼩不取决于ROI和卷积feature maps⼤⼩。RoI Pooling 最⼤的好处就在于极⼤地提⾼了处理速度。

Fast R-CNN创新点:

🍀(1)只对整幅图像进⾏⼀次特征提取,避免R-CNN中的冗余特征提取。

🍀(2)⽤RoI pooling层替换最后⼀层的max pooling层,同时引⼊建议框数据,提取相应建议框特征。

🍀(3)Fast R-CNN⽹络末尾采⽤并⾏的不同的全连接层,可同时输出分类结果和窗⼝回归结果,实现了end-to-end的多任务训练(建议框提取除外),也不需要额外的特征存储空间(R-CNN中的特征需要保持到本地,来供SVM和Bounding-box regression进⾏训练)。

🍀(4)采⽤SVD对Fast R-CNN⽹络末尾并⾏的全连接层进⾏分解,减少计算复杂度,加快检测速度。

说明:♨️♨️♨️

论文题目:《Fast R-CNN》

论文地址:  https://arxiv.org/abs/1504.08083

💥💥2.3 Faster R-CNN

Faster R-CNN是一种目标检测算法,它是在R-CNN(Region-based Convolutional Neural Networks)的基础上进行改进而来的。它的主要创新点是引入了候选区域生成网络(Region Proposal Network,简称RPN),将候选区域的生成和目标检测两个任务合并在一个网络中,从而实现了端到端的目标检测。

Faster R-CNN的工作流程如下:

  1. 输入图像经过卷积神经网络(CNN)提取特征。
  2. RPN网络在特征图上滑动窗口,并输出一系列候选区域和对应的边界框偏移信息。
  3. 对于每个候选区域,通过RoI池化层将其转化为固定大小的特征图。
  4. 将特征图输入全连接层进行分类和回归,得到目标的类别和位置信息。

以下是Faster R-CNN的网络结构图:

Faster R-CNN的优点是:

🍀(1)相较于R-CNN,它引入了共享卷积特征提取部分,从而大大减少了计算量。

🍀(2)候选区域生成和目标检测任务在同一个网络中进行,使得整个模型可以端到端地训练,提高了效率和准确性。

说明:♨️♨️♨️

论文题目:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

论文地址:  https://arxiv.org/pdf/1506.01497.pdf

💥💥2.4 Mask R-CNN

Mask R-CNN是一种用于物体检测和语义分割的深度学习模型。它是基于Faster R-CNN模型的扩展,通过添加一个额外的分支来生成每个检测到的物体的精确掩码。Mask R-CNN模型通常由两个主要组件组成:区域建议网络(Region Proposal Network,RPN)和掩码预测分支。RPN负责生成候选目标区域,它会从输入图像中提取特征,并预测每个区域是前景还是背景。然后,这些候选区域会传递给掩码预测分支。掩码预测分支负责为每个检测到的物体生成精确的掩码。它会在每个候选区域上进行卷积操作,并输出一个与输入区域大小相匹配的二进制掩码图像。

通过结合目标检测和语义分割,Mask R-CNN可以准确地识别图像中的每个物体,并为它们生成精确的掩码。这使得Mask R-CNN成为许多计算机视觉任务(如实例分割、姿态估计等)的重要基础。

Mask R-CNN算法步骤:

  1. 输⼊⼀幅你想处理的图⽚,然后进⾏对应的预处理操作,或者预处理后的图⽚;
  2. 将其输⼊到⼀个预训练好的神经⽹络中(ResNeXt等)获得对应的feature map;
  3. 对这个feature map中的每⼀点设定预定个的RoI,从⽽获得多个候选RoI;
  4. 将这些候选的RoI送⼊RPN⽹络进⾏⼆值分类(前景或背景)和BB回归,过滤掉⼀部分候选的RoI;
  5. 对这些剩下的RoI进⾏RoI Align操作(即先将原图和feature map的pixel对应起来,然后将feature map和 固定的feature对应起来);
  6. 对这些RoI进⾏分类(N类别分类)、BB回归和MASK⽣成(在每⼀个RoI⾥⾯进⾏FCN操作)。

说明:♨️♨️♨️

论文题目:《Mask R-CNN》

论文地址:  https://arxiv.org/abs/1703.06870


🚀3.一阶段目标检测算法

💥💥3.1 SSD

SSD(Single Shot MultiBox Detector)是一种基于深度学习的目标检测算法,它能够同时进行目标的位置定位和类别预测。相比于其他目标检测算法,SSD具有快速、准确和端到端的优势。它采用了多层特征图来检测不同尺度的目标,并且通过预定义的一系列锚框(anchor boxes)来进行目标定位和分类。

SSD主要由两个部分组成:基础网络和特征提取网络常用的基础网络包括VGG16、ResNet等,用于提取原始图像的特征。特征提取网络由多个卷积层和池化层组成,用于生成一系列特征图。每个特征图都负责检测不同大小的目标。

在SSD中,每个锚框都与一个特定的尺度和长宽比相关联。对于每个锚框,SSD会计算其与真实目标框之间的IoU(Intersection over Union),并将其分为正样本和负样本。然后,SSD通过卷积操作对每个锚框进行类别预测和边界框调整,得到最终的检测结果。

不同于前⾯的R-CNN系列,SSD属于one-stage⽅法。SSD使⽤ VGG16 ⽹络作为特征提取器(和 Faster R-CNN 中使⽤的 CNN ⼀样),将后⾯的全连接层替换成卷积层,并在之后添加⾃定义卷积层,并在最后直接采⽤卷 积进⾏检测。在多个特征图上设置不同缩放⽐例和不同宽⾼⽐的先验框以融合多尺度特征图进⾏检测,靠前的⼤尺度特征图可以捕捉到⼩物体的信息,⽽靠后的⼩尺度特征图能捕捉到⼤物体的信息,从⽽提⾼检测的准确 性和定位的准确性。

下图是SSD的⽹络结构图。

SSD创新点:

🍀(1)基于Faster R-CNN中的Anchor,提出了相似的先验框(Prior box)

🍀(2)从不同⽐例的特征图(多尺度特征)中产⽣不同⽐例的预测,并明确地按长宽⽐分离预测。 

说明:♨️♨️♨️

论文题目:《SSD single shot multibox detector》

论文地址:  https://arxiv.org/abs/1512.02325

💥💥3.2 YOLO算法

YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和 class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。

YOLO划分网格:

具体来说,YOLO的CNN网络将输入的图片分割成S×S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为,当该边界框是背景时(即不包含目标),此时Pr(object)=0。而当该边界框包含目标时,Pr(object)=1。边界框的准确度可以用预测框与实际框(ground truth)的IoU(intersection over union,交并比)来表征。

使用YOLO来检测物体,其流程是非常简单明了的:

  1. 将图像resize到448 * 448作为神经网络的输入;
  2. 运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities;
  3. 进行非极大值抑制,筛选Boxes。

YOLO对每个bounding box有5个predictions:x, y, w, h, confidence:

🍀(1)坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。

🍀(2)坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。

🍀(3)confidence就是预测的bounding box和ground truth box的IoU值。

Yolo算法开创了one-stage检测的先河,它将物体分类和物体检测网络合二为一, 都在全连接层完成。故它大大降低了目标检测的耗时,提高了实时性;但是,它的缺点也十分明显:

🍀(1)每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果很差。

🍀(2)原始图片只划分为7x7的网格,当两个物体靠的很近时,效果很差。

🍀(3)最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。

🍀(4)对于图片中比较小的物体,效果很差。这其实是所有目标检测算法的通病,SSD对它有些优化。


参考文献名:

【1】Rich feature hierarchies for accurate object detection and semantic segmentation;

【2】Fast R-CNN;

【3】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks;

【4】You Only Look Once: Unfied,Real-Time Object Detection;

【5】SSD:Single Shot MultiBox Detector;

【6】Selective Search for Object Recognition;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/144372.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[React] Context上下文的使用

文章目录 1.Context的介绍2.为什么需要Context3.Context的使用 1.Context的介绍 Context旨在为React复杂嵌套的各个组件提供一个生命周期内的统一属性访问对象,从而避免我们出现当出现复杂嵌套结构的组件需要一层层通过属性传递值得问题。 Context是为了提供一个组…

CTF 入门指南:从零开始学习网络安全竞赛

文章目录 写在前面CTF 简介和背景CTF 赛题类型介绍CTF 技能和工具准备好书推荐 写作末尾 写在前面 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几…

网络爬虫--伪装浏览器

从用户请求的Headers反反爬 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资…

阿里云 Oss 权限控制

前言 最近公司的私有 Oss 服务满了,且 Oss 地址需要设置权限,只有当前系统的登录用户才能访问 Oss 下载地址。一开始想着用 Nginx 做个转发来着,Nginx 每当检测当前请求包含特定的 Oss 地址就转发到我们的统一鉴权接口上去,但是紧…

ElementUI动态树,数据表格以及分页的实现

目录 前言 一. ElementUI动态树 二. 数据表格和分页 三. 后端代码 service层 controller层 前言 在上一篇博客中实现了左侧菜单栏,在此基础上将它变为动态的,即动态的展示数据库的数据。还有数据表格的实现以及分页。(纯代码分享&#…

SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题

title: “SpringCloud SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题” createTime: 2021-11-24T10:27:5708:00 updateTime: 2021-11-24T10:27:5708:00 draft: false author: “Atomicyo” tags: [“tomcat”] categories: [“java”] description: …

燃气安全如何保障?万宾燃气管网监测系统时刻感知管网运行态势

近年来随着我国城镇化建设的加快,燃气已经成为每个家庭的必需品。然而,每年夏季频繁发生的燃气爆炸事故,已经严重危害人民生命财产安全危害社会公共安全和公共利益。为了保障燃气安全运行,近日,许多城市都在大力推进燃…

wepack打包生产环境使用http-proxy-middleware做api代理转发的方法

首先安装http-proxy-middleware依赖,这个用npm和yarn安装都可以。 然后在express服务器的代码增加如下内容: const express require("express"); const app express(); const { createProxyMiddleware, fixRequestBody, } require("h…

WebGL笔记:绘制多个点,三角形,以及画各种不同的线条

绘制多点 1 ) WebGL 缓冲区 我们在用js定点位的时候,肯定是要建立一份顶点数据的,这份顶点数据是给着色器的,因为着色器需要这份顶点数据绘图然而,我们在js中建立顶点数据,着色器肯定是拿不到的&#xff…

ElementUI之首页导航与左侧菜单

目录 一、Mock 1.1 什么是Mock.js 1.2 安装与配置 1.2.1 安装mock.js 1.2.2 引入mock.js 1.3 mock.js使用 1.3.1 定义测试数据文件 1.3.2 mock拦截Ajax请求 1.3.3 界面代码优化 二、总线 2.1 定义 2.2 类型分类 2.3 前期准备 2.4 配置组件与路由关系 2.4.1 配置…

arduino - UNO-R3,mega2560-R3,NUCLEO-H723ZG的arduino引脚定义区别

文章目录 arduino - UNO-R3,mega2560-R3,NUCLEO-H723ZG的引脚定义区别概述笔记NUCLEO-H723ZGmega2560-R3UNO-R3经过比对, 这2个板子(NUCLEO-H723ZG, mega2560-R3)都是和UNO-R3的arduino引脚定义一样的.mega2560-r3和NUCLEO-H723ZG的区别补充arduino uno r3的纯数字IO和模拟IO作…

HTTP 协商缓存 Last-Modified,If-Modified-Since

浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone header加上Last-Modified属性(表示这个资源在服务器上的最后修改时间): ----------------------------------------------------------------…

【Java 进阶篇】MySQL 数据库备份与还原

MySQL 是一款常用的关系型数据库管理系统,用于存储和管理数据。在数据库应用中,数据备份和还原是非常重要的操作,用于保护数据免受意外删除、损坏或数据丢失的影响。本文将详细介绍如何在 MySQL 中进行数据库备份和还原操作,包括常…

5+铁死亡+分型+WGCNA+机器学习分析

今天给同学们分享一篇铁死亡分型WGCNA机器学习的生信文章“Identification of ferroptosis-related molecular clusters and genes for diabetic osteoporosis based on the machine learning”,这篇文章于2023年8月14日发表在Front Endocrinol (Lausanne)期刊上&am…

Swift 周报 第三十八期

文章目录 前言新闻和社区苹果自研调制解调器芯片受挫:速度太慢容易过热,落后高通 3 年App Store 现已接受适用于最新版操作系统的 App 和游戏提交 提案通过的提案正在审查的提案驳回的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组…

redis主从从,redis-7.0.13

redis主从从,redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc,报错2、没有python3,报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…

DEM格式转换:转换NSDTF-DEM国标数据格式为通用格式,使用ArcGIS工具转换NSDTF-DEM国标.dem文件为通用.tif格式。

DEM格式转换:转换NSDTF-DEM国标数据格式为通用格式,使用ArcGIS工具转换NSDTF-DEM国标.dem文件为通用.tif格式。 *.dem是一种比较常见的DEM数据格式,其有两种文件组织方式,即NSDTF-DEM和USGS-DEM。 (1)NSDT…

【Linux】网络原理

文章目录 📖 前言1. 计算机内部的交流1.1 计算机之间的交流: 2. 协议2.1 网络分层:2.2 以打电话为例:2.3 OSI七层模型:2.4 TCP/IP: 3. 操作系统与网络的关系4. 报头与解包4.1 报头的作用: 5. 局…

IDEA Debug技巧大全,看完就能提升工作效率

作者简介 目录 1.行断点 2.方法断点 3.异常断点 4.字段断点 5.条件表达式 1.行断点 行断点就是平时我们在代码行旁边单击鼠标打上的断点,这个没有什么好说的。关键点在于很多人不知道的,行断点其实是可以右击选择是对改行的全部调用都生效&#xf…

最新影视视频微信小程序源码-带支付和采集功能/微信小程序影视源码PHP(更新)

源码简介: 这个影视视频微信小程序源码,新更新的,它还带支付和采集功能,作为微信小程序影视源码,它可以为用户 提供丰富的影视资源,包括电影、电视剧、综艺节目等。 这个小程序影视源码,还带有…