【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】

news2025/1/16 3:39:47

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】

  • 1. 前言
  • 2. 实验材料
    • 2.1 Grove Vision AI Module V2
      • 2.1.1 特征
      • 2.1.2 硬件概述
      • 2.1.3 启动/重置/程序
      • 2.1.4 驱动
    • 2.2 ESP32C3
      • 2.2.1 引脚图
      • 2.2.2 组件概述
      • 2.2.3 电源引脚
    • 2.3 SenseCraft AI Model Assistant
      • 2.3.1 部署的模型
      • 2.3.2 连接模块并上传合适的模型
      • 2.3.3 验证检测效果
  • 3. Arduino与Seeed Studio XIAO板连接的程序
    • 3.1 Arduino库介绍
    • 3.2 功能
    • 3.3 安装功能库
  • 4. 演示
    • 4.1 使用XIAO获取识别结果
    • 4.2 程序说明
    • 4.3 效果
  • 5. 总结

视频地址:

Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程

1. 前言

首先非常高兴参加Seeed家的开发板测评活动,将通过本教程,我们可以使用Vision AI v2进行SenseCraft AI猫狗识别,然后与XIAO ESP32C3通讯打印实时检测的结果,大家可以自我发挥将识别结果进行自动喂喵咪|逗喵啥的。SenseCraft AI 使用户能够毫不费力地将大量公开可用的 AI 模型库(包含目标检测,目标识别,姿态检测等人工智能算法)部署到他们的边缘设备上,它提供了无缝且用户友好的体验,只需单击几下即可将公共 AI 模型直接部署到边缘设备上。💕💕💕
在这里插入图片描述
活动地址:免费领取最新AI硬件套装,挑战智能视觉技术!

2. 实验材料

在本教程中,我们将以XIAO ESP32S3为例(可以用ESP32C3代替),介绍Arduino程序的使用。因此,我们建议您准备以下硬件。
在这里插入图片描述
在这里插入图片描述

谨慎
请注意连接方向,Grove Vision AI 的 Type-C 连接器应与 XIAO 的 Type-C 连接器方向相同。

2.1 Grove Vision AI Module V2

Grove Vision AI Module V2是一个基于MCU的视觉AI模块,由Arm Cortex-M55和Ethos-U55提供支持。它支持 TensorFlow 和 PyTorch 框架,并与 Arduino IDE 兼容。借助 SenseCraft AI 算法平台,无需编码即可将经过训练的 ML 模型部署到传感器上。它具有标准的 CSI 接口、板载数字麦克风和 SD 卡插槽,非常适合各种嵌入式 AI 视觉项目。

2.1.1 特征

  • 强大的 AI 处理能力:采用 WiseEye2 HX6538 处理器,配备双核 Arm Cortex-M55 和集成 Arm Ethos-U55 神经网络单元。
  • 多功能 AI 模型支持:轻松部署 SenseCraft AI 的现成或自定义 AI 模型,包括 Mobilenet V1、V2、Efficientnet-lite、Yolo v5 和 v8。支持 TensorFlow 和 PyTorch 框架。
  • 丰富的外设设备:包括 PDM 麦克风、SD 卡插槽、Type-C、Grove 接口和其他外设。
  • 高兼容性:兼容XIAO系列、Arduino、Raspberry Pi、ESP开发板,便于进一步开发。
  • 完全开源:所有代码、设计文件和原理图均可供修改和使用。

应用

  • 工业自动化:质量检测、预测性维护、语音控制等
  • 智慧城市:设备监控、能源管理等
  • 交通:状态监控、位置跟踪等
  • 智慧农业:环境监测等
  • 移动物联网设备:可穿戴设备、手持设备等。

2.1.2 硬件概述

在这里插入图片描述

要使用 Grove Vision AI V2 的全部功能,您可能需要单独购买 CSI 相机,我们推荐 OV5647-62 FOV 相机模块 Raspberry Pi。

连接到 CSI 接口摄像机
准备好 Grove Vision AI V2 和相机后,您可以通过 CSI 连接电缆连接它们。连接时请注意排针脚的方向,不要向后插入。
在这里插入图片描述

2.1.3 启动/重置/程序

如果您使用了某种不寻常的方法,导致 Grove Vision AI 根本无法正常工作(在软件级别),那么您可能需要将设备置于 BootLoader 模式以恢复设备。以下是进入 BootLoader 模式的方法。

  1. 方法 1

请断开 Grove Vision AI 和您的计算机之间的连接电缆,然后按住设备上的启动按钮而不松开它。此时,请使用 Type-C 型数据线将 Grove Vision AI 连接到您的电脑,然后再次松开。此时,设备将进入 BootLoader 模式。

在这里插入图片描述

  1. 方法 2

将 Grove Vision AI 连接到您的计算机后,您可以通过按 Boot 按钮,然后快速按 Reset 按钮进入 BootLoader 模式。
在这里插入图片描述

  1. 重置
    如果您遇到设备数据突然无法上传或图像卡住的问题,您可以尝试使用“重置”按钮重新启动设备。

2.1.4 驱动

如果您在将 Grove Vision AI V2 连接到计算机后发现无法识别。然后,您可能需要在计算机上安装 CH343 驱动程序。以下是下载和安装 CH343 驱动程序的一些链接。

Windows 供应商 VCP 驱动程序一键式安装程序:CH343SER.EXE
Windows 供应商 VCP 驱动程序:CH343SER.ZIP
Windows CDC驱动一键安装:CH343CDC.EXE
Windows CDC驱动程序:CH343CDC.ZIP
macOS 供应商 VCP 驱动程序:CH34xSER_MAC.ZIP

2.2 ESP32C3

Seeed Studio XIAO ESP32C3是一款基于乐鑫 ESP32-C3 WiFi/蓝牙双模芯片的物联网迷你开发板。ESP32-C3 是一款 32 位 RISC-V CPU,内含一个用于 32 位单精度算术的 FPU(浮点运算),具有强大的计算能力。它具有出色的射频性能,支持 IEEE 802.11 b/g/n WiFi 和蓝牙 5 (LE) 协议。该板随附一个外部天线,可提高无线应用的信号强度。它还具有小巧精致的外形尺寸和单面表面贴装设计。它配备了丰富的接口,并具有 11 个可用作 PWM 引脚的数字 I/O 和 3 个可用作 ADC 引脚的模拟 I/O。它支持 UART、I2C 和 SPI 四种串行接口。电路板上还有一个小的复位按钮和一个引导加载程序模式按钮。XIAO ESP32C3 与 Seeeduino XIAO 的 Grove Shield 和 Seeeduino XIAO 扩展板完全兼容,除了 Seeeduino XIAO 扩展板外,板上的 SWD 弹簧触点将不兼容。

2.2.1 引脚图

在这里插入图片描述

*A3(GP105) - 使用ADC2,由于采样信号错误,ADC2可能会失效。对于可重复的模拟读取,请改用 ADC1(A0/A1/A2)。请参考 ESP32-C3 数据表。

2.2.2 组件概述

在这里插入图片描述

2.2.3 电源引脚

  • 5V - 这是 USB 端口的 5v 输出。您也可以将其用作电压输入,但必须在外部电源和该引脚之间具有某种二极管(肖特基、信号、电源),该引脚具有阳极到电池,阴极到5V引脚。

  • 3V3 - 这是板载稳压器的稳压输出。您可以汲取 700mA

  • GND - 电源/数据/信号接地

如果你是新手,可以先看这份【Seeed Studio XIAO ESP32S3 Sense 开箱Arduino教程】,可以帮你搭建ESP32环境

2.3 SenseCraft AI Model Assistant

首先,我们需要打开 SenseCraft AI 模型助手主页面。
在这里插入图片描述

前往 SenseCraft AI

2.3.1 部署的模型

选择要部署的模型,然后按照顺序单击猫狗模型。
在这里插入图片描述

您可以在此处查看此模型的说明,如果适合您,请单击右侧的“部署模型”按钮。
在这里插入图片描述

2.3.2 连接模块并上传合适的模型

请使用 Type-C 型数据线将 Grove Vision AI V2 连接到您的计算机,然后单击“连接”按钮。
在这里插入图片描述

单击“确认”按钮。在此页面的左上角,您可以选择 USB Single Serial。然后单击“连接”按钮。
在这里插入图片描述

请在此页面上停留 1-2 分钟,直到模型上传成功。请注意,在此过程中切换到另一个页面选项卡可能会导致上传失败(我们的团队正在积极解决此问题,并将很快修复)。

2.3.3 验证检测效果

成功上传模型后,在网上搜索一张猫狗图片,用摄像头对照图片,您将能够在左侧的预览中看到来自 Grove Vision AI V2 相机的实时画面。

在这里插入图片描述

我们可以看到,在左侧的预览设置中,有两个设置选项可以更改,以优化模型的识别精度。

Confidence:置信度是指模型分配给其预测的确定性或概率级别。

IOU:IoU 用于评估预测边界框与真值边界框相比的准确性。
在这里插入图片描述

提示

  • Confidence:这告诉您计算机视觉模型对其猜测的确定性。把它想象成一个百分比:更高的置信度意味着模型更确定。
  • IoU(并集上的交点):这衡量了两个盒子之间的重叠程度。想象一下,您在图片中的对象周围画了一个盒子,模型也画了一个盒子。IoU会告诉您您的盒子匹配程度。更高的 IoU 意味着盒子之间的距离更近。 此时,您已经完成了模型的上传并观察结果。

3. Arduino与Seeed Studio XIAO板连接的程序

3.1 Arduino库介绍

提示
如果这是您第一次使用Arduino,我们强烈建议您参考Arduino入门。下载安装Seeed_Arduino_SSCMA资料库

在这里插入图片描述

Grove Vision AI 使用 WiseEye2 HX6538 芯片,图像处理和模型推理在 Grove Vision AI 中本地处理,然后通过 IIC 或 UART 输出到 XIAO,因此该库的主要目的是处理 Grove Vision AI 的数据流,不涉及模型推理或图像处理。因此,该库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。

Grove Vision AI 通过 IIC 与 XIAO 通信,设备的 IIC 地址为 。图像信息传输通过USB串口传输。0x62

3.2 功能

在开始开发草图之前,让我们先看一下该库的可用功能。

  1. bool begin(TwoWire *wire = &Wire, uint16_t address = I2C_ADDRESS, uint32_t wait_delay = 2, uint32_t clock = 400000)—— 初始化 Grove Vision AI V2。

输入参数:

TwoWire *wire—— 此指针指向 TwoWire 对象,通常用于与 I2C 设备通信。
uint16_t address—— 这是标识连接到 I2C 总线的特定设备的 I2C 设备的地址。
uint32_t wait_delay——在发送命令之前等待响应的延迟(以毫秒为单位)。
uint32_t clock—— 这是I2C总线的时钟频率(单位:Hz)。
返回: 或初始化成功为真,初始化失败为假。TrueFalse

  1. int invoke(int times = 1, bool filter = 0, bool show = 0)—— 用于向 Grove Vision AI V2 发送 INVOKE 命令,让 Grove Vision AI 开始调用模型、推理和识别。

输入参数:

int times—— 调用次数。
fileter——表示只有当上一个结果与上一个结果不同时,才会发送事件回复(通过几何和分数进行比较)。
bool show——表示只有当上一个结果与上一个结果不同时,才会发送事件回复(通过几何和分数进行比较)。

注意
有关 Grove Vision AI 协议定义的更多信息,您可以阅读协议文档。

返回: 如果模型已成功启用,则返回CMD_OK,否则返回CMD_ETIMEDOUT。CMD_OK | CMD_ETIMEDOUT

  1. int available()—— 检查有多少字节的数据可以通过IIC从连接的设备中读取。

输入参数:没有。

返回:可以从设备读取的数据字节数。

  1. int read(char *data, int length)—— 通过IIC接口从Grove Vision AI读取数据。该函数的目的是用读取的数据填充所提供的数据指针指向的数组。

输入参数:
char *data—— 用于存储数据的数组。
int length—— 要读取的数据长度。 返回:要读取的数据的长度。

  1. int write(const char *data, int length)—— 通过I2C接口将数据写入指定设备。

输入参数:
const char *data—— 要写入的数据内容。
int length—— 要写入的数据长度。
返回:要写入的数据的长度。

  1. std::vector<boxes_t> &boxes() { return _boxes; }—— 以方框的形式输出结果。
typedef struct
{
    uint16_t x;      // Horizontal coordinates of the centre of the box
    uint16_t y;      // Vertical coordinates of the centre of the box
    uint16_t w;      // Width of the identification box
    uint16_t h;      // Height of the identification box
    uint8_t score;   // Confidence in identifying as target
    uint8_t target;  // Target
} boxes_t;
  1. std::vector<classes_t> &classes() { return _classes; }—— 将结果作为类别输出。
typedef struct
{
    uint8_t target;  // Target
    uint8_t score;   // Confidence in identifying as target
} classes_t;
  1. std::vector<point_t> &points() { return _points; }—— 将结果输出为点。
typedef struct
{
    uint16_t x;      // Horizontal coordinates of the identification point
    uint16_t y;      // Vertical coordinates of identification point
    uint16_t z;      // Relative depth coordinates of the identification point
    uint8_t score;   // Confidence in identifying as target
    uint8_t target;  // Target
} point_t;

注意
这里的深度坐标是相对的,并不意味着 Grove Vision AI 启用了深度相机,而是该算法计算出在某些模型(例如,面部 3D模型)中有效的相对深度坐标。

  1. perf_t &perf() { return _perf; }—— 图像处理和推理时间。
typedef struct
{
    uint16_t prepocess;   // Pre-processing time
    uint16_t inference;   // inference time
    uint16_t postprocess; // Post-processing time
} perf_t;

注意
输出并不总是输出标识框和点的信息,具体取决于模型。

3.3 安装功能库

需要安装Seeed_Arduino_SSCMA库和ArduinoJSON库。

  1. 离线安装Seeed_Arduino_SSCMAzip库
    既然你已经下载了Seeed_Arduino_SSCMAzip库,打开你的Arduino IDE,点击Sketch>Include Library>Add .ZIP Library。选择您刚刚下载的 zip 文件,如果库安装正确,您将在通知窗口中看到库已添加到您的库。这意味着库已成功安装。
    在这里插入图片描述

  2. 在线安装ArduinoJSON库。

转到“草图”菜单,然后选择“包括库”>“管理库…”。这将打开库管理器。在库管理器顶部的搜索栏中,键入 ArduinoJSON。搜索结果将列出ArduinoJSON库。库旁边将有一个“安装”按钮。单击“安装”按钮。Arduino IDE将自动下载库并将其安装到Arduino开发环境中。

在这里插入图片描述

4. 演示

4.1 使用XIAO获取识别结果

以下过程是一个简单的示例,可帮助您获取和解析 Grove Vision AI V2 上报的识别信息。

#include <Seeed_Arduino_SSCMA.h>

SSCMA AI;

void setup()
{
    AI.begin();
    Serial.begin(9600);
}

void loop()
{
    if (!AI.invoke())
    {
        Serial.println("invoke success");
        Serial.print("perf: prepocess=");
        Serial.print(AI.perf().prepocess);
        Serial.print(", inference=");
        Serial.print(AI.perf().inference);
        Serial.print(", postpocess=");
        Serial.println(AI.perf().postprocess);

        for (int i = 0; i < AI.boxes().size(); i++)
        {
            Serial.print("Box[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.boxes()[i].target);
            Serial.print(", score=");
            Serial.print(AI.boxes()[i].score);
            Serial.print(", x=");
            Serial.print(AI.boxes()[i].x);
            Serial.print(", y=");
            Serial.print(AI.boxes()[i].y);
            Serial.print(", w=");
            Serial.print(AI.boxes()[i].w);
            Serial.print(", h=");
            Serial.println(AI.boxes()[i].h);
        }
        for (int i = 0; i < AI.classes().size(); i++)
        {
            Serial.print("Class[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.classes()[i].target);
            Serial.print(", score=");
            Serial.println(AI.classes()[i].score);
        }
        for (int i = 0; i < AI.points().size(); i++)
        {
            Serial.print("Point[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.points()[i].target);
            Serial.print(", score=");
            Serial.print(AI.points()[i].score);
            Serial.print(", x=");
            Serial.print(AI.points()[i].x);
            Serial.print(", y=");
            Serial.println(AI.points()[i].y);
        }
    }
}

4.2 程序说明

此 Arduino 草图利用 Seeed_Arduino_SSCMA 库与 Grove Vision AI 模块 V2 进行交互。在功能中,AI模块初始化,并启动串口通信。setup()

该函数反复调用该方法,以 使用 Grove Vision AI 模块 V2 的内置算法执行推理。成功推理后,草图会将性能指标打印到串行监视器,包括预处理、推理和后处理时间。loop()invoke()

草图处理并打印出有关推理结果的详细信息,包括:

  1. box(),以 x 和 y 坐标、宽度和高度的形式标识检测到的对象的位置和尺寸。
  2. classes()用于标识检测到的对象的类别及其置信度分数。
  3. points()表示检测到的对象的特定特征或关键点的点及其 x 和 y 坐标和置信度分数。

这些结果提供了对 AI 模块检测到的对象、它们的位置、大小以及每个检测或分类的置信度的见解。输出被打印到串行监视器,以便进一步分析或调试。

4.3 效果

我们仍在使用手势检测模型。上传应用程序后,请打开串行监视器并将串行监视器的波特率设置为9600。请准备好您的猫狗图片,用摄像头对照图片,,串口监视器将输出识别结果。
在这里插入图片描述

17:00:08.345 -> perf: prepocess=7, inference=78, postpocess=0
17:00:08.345 -> Box[0] target=0, score=61, x=15, y=140, w=34, h=70
17:00:08.345 -> Box[1] target=1, score=67, x=95, y=145, w=108, h=136
17:00:08.479 -> invoke success
17:00:08.479 -> perf: prepocess=7, inference=78, postpocess=1
17:00:08.479 -> Box[0] target=0, score=72, x=15, y=145, w=38, h=63
17:00:08.479 -> Box[1] target=1, score=74, x=97, y=151, w=115, h=151
17:00:08.617 -> invoke success
17:00:08.617 -> perf: prepocess=7, inference=78, postpocess=1
17:00:08.617 -> Box[0] target=1, score=79, x=90, y=154, w=131, h=136
17:00:08.700 -> invoke success
17:00:08.700 -> perf: prepocess=7, inference=78, postpocess=0
17:00:08.741 -> Box[0] target=1, score=74, x=92, y=156, w=131, h=136

注意:

  1. target=0识别为喵咪
  2. target=1识别为小狗

5. 总结

通过Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程,我们可以使用Vision AI v2进行SenseCraft AI猫狗识别,然后与XIAO ESP32C3通讯打印实时检测的结果,接下来就是学习其他外设有机衔接从而完成功能,进而丰富我们的生活。🛹🛹🛹

从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣

  1. 我会持续更新对应专栏博客,非常期待你的三连!!!🎉🎉🎉
  2. 如果鹏鹏有哪里说的不妥,还请大佬多多评论指教!!!👍👍👍
  3. 下面有我的🐧🐧🐧群推广,欢迎志同道合的朋友们加入,期待与你的思维碰撞😘😘😘

参考博客:

  1. Grove Vision AI Module V2

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度网盘的文件该怎么整理?不如试试这个整理工具

科学的文件架构 一键生成文件夹层级工具 极具妥帖的秩序感受 又是一周&#xff0c;好久不见&#xff0c;正琢磨着这次给大家带来点什么好东西&#xff0c;突然百度网盘的整理让我头疼不已&#xff0c;从我记事以来&#xff0c;这网盘已经整理过N遍了&#xff0c;总是乱了整理…

嵌入式学习——数据结构(队列)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2 5. 算法设计 5.1 正确性 5.2 可读性&#xff08;高内聚、低耦合&#xff09; 5.3 健壮性 5.4 高效率&#xff08;时间复杂度&am…

nn.Embedding 根据索引生成的向量有权重吗

import torch import torch.nn as nn 假设有一个大小为 10x3 的 Embedding 层&#xff0c;其中有 10 个单词&#xff0c;每个单词用一个长度为 3 的向量表示 num_words 10 embedding_dim 3 创建 Embedding 层 embedding_layer nn.Embedding(num_words, embedding_dim) p…

朴素贝叶斯案例

一、朴素贝叶斯算法&#xff1a; 朴素贝叶斯算法&#xff0c;是一种基于贝叶斯定理与特征条件独立假设的分类方法&#xff0c;基于贝叶斯后验概率建立的模型&#xff0c;它用于解决分类问题。朴素&#xff1a;特征条件独立&#xff1b;贝叶斯&#xff1a;基于贝叶斯定理。属于…

使用Let‘s Encrypt 申请通配符证书

为什么不使用阿里云/腾讯云等公有云厂商提供的免费证书? 上篇介绍了从阿里云上面申请免费证书,有效期一年 为网站配置https证书 公有云提供的证书不支持通配符&#xff0c;只支持某个确定的解析。 不管是二级域名还是三级域名&#xff0c;只要是具体的确定的地址&#xff0c;都…

Go WebSocket入门+千万级别弹幕系统架构设计

Go实现WebSocket&#xff08;千万级别弹幕系统架构设计&#xff09; 1 websocket简介(基于HTTP协议的长连接) 使用WebSocket可以轻松的维持服务器端长连接&#xff0c;其次WebSocket是架构在HTTP协议之上的&#xff0c;并且也可以使用HTTPS方式&#xff0c;因此WebSocket是可靠…

图像反转入门

文章目录 1.实验目的2.需求3.代码4.运行结果图 1.实验目的 熟练掌握图像像素操作API 2.需求 自己构造一个纯黑图像,通过多种方法进行反转,最终生成一个纯白图像 3.代码 """ Time : 2024/6/23 下午3:46 Author : chensong File : 自己创建一个图像并…

287 寻找重复数-类似于环形链表II

题目 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums…

【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

swift使用websocket通讯,依赖库Starscream集成,并验证apple watch实现websocket可行性

这里使用webscoket&#xff0c;主要是使用了Starscream这个库&#xff0c;看图片就知道很牛X&#xff0c;那么干就完了。官方开源仓库地址&#xff1a;https://github.com/daltoniam/Starscream?tabreadme-ov-file 安装依赖库 首先&#xff0c;使用 Swift Package Manager 安…

新版idea(2023)创建spring boot3项目

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 前言 汉化教程 项目模板初始化 1.点击新建项目 2.配置初始化信息 3.初始依赖选择 配置Maven 1.打开maven设置 2.重写maven配置文件 3.选择你创建的配置文件 4.重启项目 spring…

Redis预备知识

一.预备知识 1.基本全局命令 set key value 将key的值设置成value get key 得到key的值 keys [pattern] 查看匹配pattern的所有key 比如h?llo匹配hallo&#xff0c;hbllo&#xff0c;hcllo……只要用一个符号将&#xff1f;代替即可 比如h*llo匹配hllo&#xff0c;heeeello…

硕思LOGO设计师软件怎么下载安装? 【详细安装图文教程】

​相信大家都认同硕思logo设计者只需简单的点击就能够制作出各领域通用及专业的logo、商标、标志、图标等&#xff0c;提供了很多精心设计的logo设计模板及丰富的logo素材&#xff0c;为更好的创建logo作品&#xff0c;使用者能够导入图形或将SWF中的素材反编译到项目中。数据表…

gitlab-cicd-k8s

k8s已经准备好 kubectl get node 创建cicdYaml文件 kubectl create namespace gitlab-cicd --dry-runclient --outputyaml >> gitlab-cicd.yaml kubectl apply -f gitlab-cicd.yaml 服务器和仓库在一起可用专有地址 使用 GitLab Runner 可以自动执行 GitLab CI/CD 管道…

【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List)

文章目录 1 概念2 无向图的邻接表2.1 示例2.2 Mermaid 图示例2.3 C实现2.3.1 简单实现2.3.2 优化封装 2.4 总结 3 有向图的邻接表3.1 示例3.2 C实现3.3 总结 4 邻接图的遍历5 拓展补充References 数据结构 1 概念 优点&#xff1a;空间效率高&#xff0c;适合稀疏图。动态性强…

【C语言】解决C语言报错:Syntax Error

文章目录 简介什么是Syntax ErrorSyntax Error的常见原因如何检测和调试Syntax Error解决Syntax Error的最佳实践详细实例解析示例1&#xff1a;缺少分号示例2&#xff1a;括号不匹配示例3&#xff1a;变量未声明示例4&#xff1a;拼写错误示例5&#xff1a;数据类型不匹配 进一…

低代码平台实践:打造高效动态表单解决方案的探索与思考

&#x1f525;需求背景 我司业务同事在抓取到候选人的简历之后&#xff0c;经常会出现&#xff0c;很多意向候选人简历信息不完整&#xff0c;一个个打电话确认的情况&#xff0c;严重影响了HR的工作效率&#xff0c;于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

低成本STC32G8K64驱动控制BLDC开源入门学习方案

低成本STC32G8K64驱动控制BLDC开源入门学习方案 ✨采用STC32G8K64单片机&#xff0c;参考梁工的STC32G12K128-LQFP48驱动方案制作&#xff0c;梁工BLDC相关的资料&#xff1a;https://www.stcaimcu.com/forum.php?modviewthread&tid7472&extrapage%3D1&#xff0c;在此…

Node.js是什么(基础篇)

前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境&#xff0c;主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型&#xff0c;使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…

算法训练与程序竞赛题目集合(L4)

目录 L4-103 就不告诉你 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; L4-104 Wifi密码 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; L4-105 冠军魔术 输入格式&#xff1a; …