基于yolov8、yolov5的鸟类检测系统(含UI界面、数据集、训练好的模型、Python代码)

在这里插入图片描述

项目介绍

项目中所用到的算法模型和数据集等信息如下:

算法模型:
    yolov8yolov8 + SE注意力机制yolov5yolov5 + SE注意力机制直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU,无法自行训练。

数据集:
    网上下载的数据集,格式都已转好,可直接使用。

界面:
    PyQt5

以上是本篇博客的简单说明,添加注意力机制可作为模型的创新点

在这里插入图片描述


摘要鸟类识别在生态保护及科研领域中起着至关重要的作用,不仅能有效监测野生鸟类的分布,还为自动化生态监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的鸟类识别模型,该模型使用了大量图片进行训练,能够准确识别多种鸟类。系统可在不同场景下进行鸟类识别,包括多鸟场景复杂背景光线变化等。
此外,我们开发了一款带有UI界面鸟类识别系统,支持实时检测不同种类的鸟类,并通过图形界面直观展示检测结果。系统基于PythonPyQt5开发,能够处理图片、视频及摄像头输入,检测结果可以保存以供后续分析。本文还提供了完整的Python代码及详细的使用指南,供有兴趣的读者参考,完整代码资源请见文章末尾。

前言

    鸟类识别在保护生态环境、促进生物多样性研究以及推动智能化野生动物监测中发挥着至关重要的作用。在野生动物研究和生态保护过程中,快速且精准地识别不同种类的鸟类,能够有效提高研究效率,减少人力成本,尤其是在自动化监测系统中,准确识别鸟类种类是生物多样性研究的基础。同时,鸟类识别系统还为研究人员提供了重要的实时数据反馈,帮助他们及时掌握生态环境的变化情况,推动生态保护工作的科学化和高效化。

    鸟类识别已在多个领域得到了广泛应用,如野生动物研究、生态监测、环境保护、智能识别等场景中,都依赖于高效准确的鸟类识别技术。通过自动化的识别系统,研究机构可以在野外监测过程中实时识别鸟类的种类和数量,并根据识别到的数据做出相应的生态保护决策,从而提高生物多样性保护工作的效率。

    在现代生态管理环境中,鸟类识别系统还可以与其他智能化管理系统结合使用,如环境监测、智能调度和生态预警系统,形成一个完整的智能生态管理体系,帮助研究人员更高效地掌握生态动态。在特殊的生态环境或复杂的自然景观中,系统能够快速识别不同类型的鸟类,为研究人员提供更为精准的物种分布数据。

    本文通过收集与鸟类识别相关的数据和图像,利用YOLOv8、YOLOv5等目标检测技术,结合Python与PyQt5,开发出了一款界面简洁的鸟类识别系统。该系统支持图片、视频及摄像头检测,并能够保存识别结果,为用户提供直观便捷的鸟类识别体验。

目录

  • 项目介绍
  • 前言
  • 一、功能展示:
  • 🌟 二、数据集介绍
  • 🌟 三、深度学习算法介绍
    • 1. yolov8相关介绍
    • 2. yolov5相关介绍
    • 3. PyQt5介绍
  • 🌟 四、模型训练步骤
  • 🌟 五、模型评估步骤
  • 🌟 六、训练结果
  • 结束语 🌟 🌟🌟🌟
  • 参考文献:

一、功能展示:

部分核心功能如下:

  • 功能1: 支持单张图片识别
  • 功能2: 支持遍历文件夹识别
  • 功能3: 支持识别视频文件
  • 功能4: 支持摄像头识别
  • 功能5: 支持结果文件导出(xls格式)
  • 功能6: 支持切换检测到的目标查看

更多的其他功能可以通过下方视频演示查看。

基于深度学习的鸟类检测识别系统(yolov8)


🌟 二、数据集介绍

CUB-200数据集由加州理工学院在2010年提出的细粒度数据集,也是目前细粒度分类识别研究的基准图像数据集,共有11788张鸟类图像,包含200类鸟类子类,其中训练数据集有5994张图像,测试集有5794张图像,每张图像均提供图像类标记信息。

这里是官方的下载地址:https://www.vision.caltech.edu/datasets/

在这里插入图片描述


🌟 三、深度学习算法介绍

  本系统集成了多个不同的算法版本和界面版本,以下是对这些版本的概述:

  算法版本方面,系统提供了多种深度学习算法和传统图像处理技术,用户可以选择最合适的算法进行任务处理。此外,各算法版本经过严格的测试和优化,以提供更高的准确率和效率。

  在界面版本方面,系统设计了多种用户界面风格,可以选择简约、直观的界面,快速上手进行操作;也可以选择功能丰富的专业界面,满足复杂任务的需求。界面设计注重用户体验,确保用户在操作过程中能够方便地访问各种功能。

  此外,系统还支持实时更新和扩展,可以根随时添加新的算法模块或界面选项。这种灵活性不仅提高了系统的适用性,也为未来的技术发展预留了空间。

  总之,本系统通过多个算法和界面版本的组合,提供了丰富的选择和强大的功能。

下面是对包含到的算法的大概介绍:

1. yolov8相关介绍

  YOLOv8 是当前深度学习领域内的一个SOTA(State-Of-The-Art)模型,凭借其前代版本的技术积累,再次引领了目标检测算法的发展方向。与其前辈不同,YOLOv8在模型结构和计算方式上都做了创新性调整,旨在实现更高效的计算和更灵活的应用场景适应能力。全新的骨干网络设计,结合Anchor-Free 检测头,让模型在面对不同输入尺寸、不同目标尺度时的表现更加出色,极大提升了性能和准确性

  此外,YOLOv8 的另一个重要进步在于它采用了全新的损失函数,使得训练过程更加稳定和高效。无论是在传统的CPU平台上运行,还是在更强大的GPU平台上进行加速,YOLOv8 都能够适应不同硬件资源的场景,确保在各种场合下保持高效的推理速度精确的检测能力

  不过,值得注意的是,ultralytics 这一开发团队并没有直接将其开源库命名为 YOLOv8,而是采用了ultralytics的品牌名来命名整个项目。这并非单纯的命名策略,而是反映了其定位的重大变化。ultralytics 将这个库不仅视为一个算法框架,而非仅仅一个 YOLO 版本的延续。其设计目标之一是打造一个能够适应不同任务的算法平台,无论是目标检测、分类、分割,还是姿态估计,都能够在这个框架中被高效地支持。

  这也意味着,未来的ultralytics 开源库将不仅限于 YOLO 系列,它的可扩展性为用户提供了更大的可能性。无论是使用非 YOLO 系列模型,还是面对不同应用领域的特定需求,ultralytics都提供了灵活且高效的解决方案

总的来说,ultralytics 开源库 的优势可以归纳为以下几个要点:

  • 融合当前最前沿的深度学习技术,让用户可以轻松实现复杂的计算任务。

  • 具有极高的扩展性,未来将不仅支持 YOLO 系列,还会支持更多非 YOLO 的算法,适用于广泛的任务场景。

如此一来,ultralytics 不仅能够帮助开发者在算法研究工程应用上取得突破,更能推动未来智能视觉领域的进一步发展。

在这里插入图片描述

网络结构如下:
在这里插入图片描述

2. yolov5相关介绍

  YOLOV5有YOLOv5n,YOLOv5s,YOLOv5m,YOLOV5l、YOLO5x五个版本。这个模型的结构基本一样,不同的是deth_multiole模型深度和width_multiole模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOV5n网络是YOLOV5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。不过最常用的一般都是yolov5s模型。
在这里插入图片描述

  本系统采用了基于深度学习的目标检测算法YOLOv5,该算法是YOLO系列算法的较新版本,相比于YOLOv3和YOLOv4,YOLOv5在检测精度和速度上都有很大的提升。YOLOv5算法的核心思想是将目标检测问题转化为一个回归问题。此外,YOLOv5还引入了一种称为SPP(Spatial Pyramid Pooling)的特征提取方法,这种方法可以在不增加计算量的情况下,有效地提取多尺度特征,提高检测性能。

  在YOLOv5中,首先将输入图像通过骨干网络进行特征提取,得到一系列特征图。然后,通过对这些特征图进行处理,将其转化为一组检测框和相应的类别概率分数,即每个检测框所属的物体类别以及该物体的置信度。YOLOv5中的特征提取网络使用CSPNet(Cross Stage Partial Network)结构,它将输入特征图分为两部分,一部分通过一系列卷积层进行处理,另一部分直接进行下采样,最后将这两部分特征图进行融合。这种设计使得网络具有更强的非线性表达能力,可以更好地处理目标检测任务中的复杂背景和多样化物体。

在这里插入图片描述

  在YOLOv5中,每个检测框通过其左上角坐标(x, y)、宽度(w)、高度(h)以及置信度confidence)来表示。此外,YOLOv5对于每个检测框还会预测C个类别的概率得分,每个类别的概率得分总和为1。这意味着每个检测框最终可以被表示为一个维度为(C+5)的向量,包括类别概率、位置和置信度信息。

  在训练过程中,YOLOv5使用了交叉熵损失函数来优化模型,该损失函数由定位损失置信度损失分类损失三个部分组成。YOLOv5还采用了Focal LossIoU Loss等优化方法,以缓解正负样本不平衡目标尺寸变化等问题。这些优化不仅提高了模型的准确性,还改善了在不同尺寸目标下的表现。

  从网络结构来看,YOLOv5分为四个主要部分:Input(输入)、Backbone(骨干网络)、Neck(颈部结构)和Prediction(预测)。其中,Input部分负责将数据引入网络,采用了Mosaic数据增强技术,能够通过随机裁剪和拼接输入图片,进一步提升网络的泛化能力。

  Backbone部分是YOLOv5提取图像特征的关键模块,其特征提取能力直接影响了整个模型的性能表现。相比前代YOLOv4,YOLOv5在Backbone中引入了Focus结构。Focus结构通过切片操作将图片的宽度(W)高度(H)信息转移到通道空间中,从而实现了2倍的下采样操作,同时保证了不丢失关键信息。

3. PyQt5介绍

  PyQt5 是 Python 语言的一个图形用户界面(GUI)开发框架,基于 Qt库 开发而成。Qt 是一个广泛使用的跨平台 C++ 图形库,支持开发适用于 Windows、macOS、Linux 等多个操作系统的应用程序。PyQt5 提供了对 Qt 类库的完整封装,使开发者可以使用 Python 语言构建功能强大、界面美观的桌面应用。

  PyQt5 包含了丰富的组件,如窗口、按钮、文本框、表格等,可以通过拖拽和代码的方式快速布局,极大地简化了 GUI 开发流程。同时,它还支持 事件处理信号与槽机制,使得用户与界面之间的交互更加灵活。

  通过 PyQt5,开发者能够轻松实现跨平台桌面应用,同时结合 Python 的易用性和 Qt 的强大功能,既适合初学者学习 GUI 编程,也适合资深开发者进行复杂项目的开发。


🌟 四、模型训练步骤

  1. 使用pycharm打开代码,找到train.py打开,示例截图如下:
    在这里插入图片描述

  2. 修改 model_yaml 的值,以符合实际情况。如果你打算训练 YOLOv8s 模型,请将其修改为 model_yaml = yaml_yolov8s。如果你想训练添加 SE注意力机制 的模型,请将其修改为 model_yaml = yaml_yolov8_SE

  3. 修改 data_path 的数据集路径。这里默认指定的是 traindata.yaml 文件。如果你使用的是我提供的数据,可以不用修改。

  4. 修改 model.train() 中的参数,根据自己的需求和电脑硬件的情况进行调整。

    # 文档中对参数有详细的说明
    model.train(data=data_path,             # 数据集imgsz=640,                  # 训练图片大小epochs=200,                 # 训练的轮次batch=2,                    # 训练batchworkers=0,                  # 加载数据线程数device='0',                 # 使用显卡optimizer='SGD',            # 优化器project='runs/train',       # 模型保存路径name=name,                  # 模型保存命名)
    
  5. 修改traindata.yaml文件, 打开 traindata.yaml 文件,如下所示:
    在这里插入图片描述
    在这里,只需修改 path 的值,其他的都不用改动(仔细看上面的黄色字体),我提供的数据集默认都是到 yolo 文件夹,设置到 yolo 这一级即可,修改完后,返回 train.py 中,执行train.py

  6. 打开 train.py ,右键执行。
    在这里插入图片描述

  7. 出现如下类似的界面代表开始训练了
    在这里插入图片描述

  8. 训练完后的模型保存在runs/train文件夹下
    在这里插入图片描述


🌟 五、模型评估步骤

  1. 打开val.py文件,如下图所示:
    在这里插入图片描述

  2. 修改 model_pt 的值,是自己想要评估的模型路径

  3. 修改 data_path ,根据自己的实际情况修改,具体如何修改,查看上方模型训练中的修改步骤

  4. 修改 model.val()中的参数,按照自己的需求和电脑硬件的情况更改

    model.val(data=data_path,           # 数据集路径imgsz=300,                # 图片大小,要和训练时一样batch=4,                  # batchworkers=0,                # 加载数据线程数conf=0.001,               # 设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。iou=0.6,                  # 设置非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。有助于减少重复检测。device='0',               # 使用显卡project='runs/val',       # 保存路径name='exp',               # 保存命名)
    
  5. 修改完后,即可执行程序,出现如下截图,代表成功(下图是示例,具体以自己的实际项目为准。)
    在这里插入图片描述

  6. 评估后的文件全部保存在在 runs/val/exp... 文件夹下
    在这里插入图片描述


🌟 六、训练结果

我们每次训练后,会在 run/train 文件夹下出现一系列的文件,如下图所示:
在这里插入图片描述
   如果大家对于上面生成的这些内容(confusion_matrix.png、results.png等)不清楚是什么意思,可以在我写的文档中查看这些指标的具体含义,示例截图如下:

在这里插入图片描述


结束语 🌟 🌟🌟🌟

   下面图片是对每个文件夹作用的介绍:(纯粹是秀一秀 俺的 代码结构是否清晰, 注释是否详细,如果大家觉得有更好的方法,可以下方留言,一定再精进一下。)

在这里插入图片描述

其实用yolo算法做系统非常的简单,但是博客文字有限,如果有介绍不明白的地方,也可以看一下下面的视频,也许会更容易理解。

视频就是记录自己如何进行环境安装、以及如何进行模型训练和模型评估的, 具体视频列表可以看下方图片箭头位置。当然如果自己不做这个项目,做其他的也可以参考一下,毕竟方法都是通用的。
在这里插入图片描述

演示与介绍视频: 【基于深度学习的鸟类检测识别系统(yolov8)】

演示与介绍视频: 【基于深度学习的鸟类检测识别系统(yolov5)】

由于博主的能力有限,文中提到的方法虽经过实验验证,但难免存在一些不足之处。为不断提升内容的质量与准确性,欢迎您指出任何错误和疏漏。这不仅将帮助我在下次更新时更加完善和严谨,也能让其他读者受益。您的反馈对我至关重要,能够推动我进一步完善相关内容。

此外,如果您有更优秀的实现方案或独到的见解,也非常欢迎分享。这将为大家提供更多思路与选择,促进我们共同的成长与进步。期待您的宝贵建议与经验交流,非常感谢您的支持!

参考文献:

  1. Zhou, B., Lapedriza, A., Khosla, A., Oliva, A., & Torralba, A. (2016). “Learning Deep Features for Discriminative Localization.” IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2921-2929.
    该文介绍了一种结合深度学习和特征定位的方法,通过卷积神经网络(CNN)提取鸟类的深度特征,实现了鸟类的准确分类和定位。

  2. Van Horn, G., Mac Aodha, O., Song, Y., Shepard, A., Adam, H., Perona, P., & Belongie, S. (2018). “The iNaturalist Species Classification and Detection Dataset.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 8769-8778.
    本研究提供了一个大型物种分类数据集,其中包括大量鸟类图像,利用深度学习模型进行了分类,显著提高了鸟类识别的准确性。

  3. Kumar, A., Kumar, R., & Singh, Y. (2020). “Bird Species Classification Using Convolutional Neural Networks.” Journal of Ambient Intelligence and Humanized Computing, 11(10), 4323-4335.
    本文利用卷积神经网络(CNN)对鸟类种类进行了分类研究,提出了一种改进的深度学习模型,可以更有效地识别各种鸟类。

  4. Branson, S., Van Horn, G., Wah, C., Perona, P., & Belongie, S. (2014). “Bird Species Categorization Using Pose Normalized Deep Convolutional Nets.” Proceedings of the British Machine Vision Conference (BMVC), 1-12.
    本研究提出了基于姿态归一化的卷积神经网络,用于鸟类的细粒度分类,有效提高了不同姿态下鸟类的识别精度。

  5. Nilsback, M., & Zisserman, A. (2008). “Automated Flower Classification over a Large Number of Classes.” Proceedings of the Indian Conference on Computer Vision, Graphics and Image Processing (ICVGIP), 722-729.
    虽然该文主要针对花卉分类,但其提出的多类别分类方法和特征提取策略对鸟类图像识别也具有参考价值,特别是在处理大规模物种分类问题时。

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

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

相关文章

FastApi SQLAlchemy SQLite

FastApi fastapi是一个用于构建API 的现代、快速(高性能)的web框架,它是建立在Starlette和Pydantic基础上的。 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库,Starlette是一种轻量级的ASGI框架/工具包&…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

Vue Data UI——Vue 3 数据可视化组件库

文章目录 1、Vue Data UI2、核心特点2.1.Vue 3 的深度集成2.2 丰富的可视化组件2.3 灵活的定制性2.4 易于集成2.5 文件导出功能2.6 多主题支持3、如何在项目中使用 Vue Data UI?3.1 安装 Vue Data UI3.2 全局注册组件3.3 局部引入组件3.4 使用通用组件3.5 TypeScript 集成4、总…

新年好——Dijkstra+Permutation

题目 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII; const int N 5e410, M 2e510; const int inf 0x3f3f3f3f; int n, m; int a[6]; int h[N], e[M], ne[M], idx, w[M]; int dist[6][N];…

倾斜的角标 android倾斜角标实现

android倾斜角标实现_android 图片角标如何制作-CSDN博客 import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint;…

企业资产安全之数据防泄密要领

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据价值的增加&#xff0c;数据泄露的风险也随之上升。从内部员工的无意泄露到外部黑客的恶意攻击&#xff0c;企业数据安全面临着前所未有的挑战。SDC沙盒数据防泄密解决方案&#xff0c;正是为…

几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言 最近在上智能物联网的课程&#xff0c;讲授基于hi3861的OpenHarmony编程&#xff0c;所以尝试一下使用大模型工具生成相关的代码&#xff0c;看看效果如何。提问的方式比较简单粗暴&#xff1a; 在OpenHarmony的hi3861平台上&#xff0c;如何编程访问https的网站&#xf…

进程和线程

目录 进程 线程 进程和线程的区别 进程 什么是进程&#xff1f; 每个应用程序运行在操作系统上时&#xff0c; 操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资源都被这个程序在使用。 这种假象是通过抽象了一个进程的概念来完成…

什么是编译器?

我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有 .exe 和 .com&#xff08;其中 .exe 比较常见&#xff09;&#xff1b;在类…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符&#xff0c;用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小&#xff0c;以字节为单位。它可以在编译时计算其操作数的大小&#xff0c;并返回一个 size_t 类型的值。它可以帮助了解不同类…

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…

统信桌面专业版【手动分区安装UOS系统】介绍

统信桌面专业版【手动分区安装UOS系统】介绍 全文导读功能概述准备环境安装步骤注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 全文导读 本文旨在详细介绍在安装UOS系统时采用手动分区的方法。虽然全盘安装通常是推荐的安装方式&…

实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码

Vue2 Three.js 创建可交互的360度全景视图&#xff0c;可控制旋转、缩放 引言 在现代网页开发中&#xff0c;三维图形技术已经成为提升用户体验的重要工具。本文将展示如何使用 Three.js 创建一个简单的可交互360度全景视图。通过这一项目&#xff0c;你将能够学习到基本的场…

hadoop集群搭建-安装虚拟机

2.1 安装虚拟机 在本地搭建集群就需要这么几个事 装虚拟机 安装环境 配置集群 启动 这篇博客主要就是讲的装虚拟机这一个环节的 装虚拟机就是和组装一台现实中的电脑一样&#xff0c;首先来说就是要有硬件&#xff0c;就是组装硬件&#xff0c;然后就是装系统&#xff…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年&#xff0c;一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器&#xff1a; docker exec -it kind-control-plane…

javascript object

用const去define一个constant 用let (如果要reassign的话) 一个变量。

Redis-缓存一致性

缓存双写一致性 更新策略探讨 面试题 缓存设计要求 缓存分类&#xff1a; 只读缓存&#xff1a;&#xff08;脚本批量写入&#xff0c;canal 等&#xff09;读写缓存 同步直写&#xff1a;vip数据等即时数据异步缓写&#xff1a;允许延时&#xff08;仓库&#xff0c;物流&a…

解锁C++继承的奥秘:从基础到精妙实践(下)

文章目录 前言&#x1f950;五、多继承&#xff0c;菱形继承和菱形虚拟继承&#x1f9c0;5.1 多继承&#x1f9c0;5.2 菱形继承&#x1f9c0;5.3 虚拟继承&#xff08;解决菱形继承问题&#xff09;5.3.1 虚拟继承的语法&#xff1a;5.3.2 虚拟继承示例&#xff1a; &#x1f9…

springboot 整合 快手 移动应用 授权 发布视频 小黄车

前言&#xff1a; 因快手文档混乱&#xff0c;官方社区技术交流仍有很多未解之谜&#xff0c;下面3种文档的定义先区分。 代码中的JSON相关工具均用hutool工具包 1.快手 移动双端 原生SDK 文档https://mp.kuaishou.com/platformDocs/develop/mobile-app/ios.html 2.快手 Api 开…