使用MindStudio开发铝材表面缺陷检测_铝材缺陷检测算法流程图-程序员宅基地

技术标签: 深度学习  目标检测  AI  人工智能  ai  MindStudio  

BiliBili视频链接:使用MindStudio开发铝材表面缺陷检测_哔哩哔哩_bilibili

使用MindStudio开发铝材表面缺陷检测

 

使用MindStudio开发铝材表面缺陷检测

1. MindStudio介绍

2. 案例模型

3. 环境搭建

3.1 安装MindX SDK和CANN包并配置环境变量

3.2 在windows开发环境同步CANN

3.3 在windows开发环境同步MindX SDK

4. 开发过程

4.1 创建工程

4.2 配置python解释器

4.3 开发步骤

4.4 项目下载连接以及项目结构

5. 运行

5.1 配置远程映射

5.2 精度测试

6. FAQ

1 尺寸不匹配

2 模型路径未进行正确配置

3 未修改pipeline中后处理插件的postProcessLibPath属性

4 同步远端CANN开发包失败

7. 一些个人经验总结

8. Mindstuido下载连接

9. 开发过程中用到的链接

1. MindStudio介绍

MindStudio提供AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够使开发者在一个工具上就能高效便捷地完成AI应用开发 ·MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。MindStudio-昇腾社区 (hiascend.com)

2. 案例模型

在本案例中,目的是基于MindX SDK,在华为云昇腾平台上,使用MindStudio开发端到端铝材缺陷检测的参考设计,实现对图像中的铝材进行缺陷类型分类和定位的功能,达到功能要求,并对精度进行测试。

3. 环境搭建

开发环境为windows版本的MindStudio,运行环境在远端linux上。

3.1 安装MindX SDK和CANN包并配置环境变量

请先确保远端环境上MindX SDK软件包已安装完成,安装方式请参见安装MindX SDK开发套件

确保远端环境上CANN包已安装完成,安装方式请参见该链接

在远端服务器上配置环境变量

  • 执行如下命令,打开.bashrc文件
    vim ~/.bashrc
    在.bashrc文件中添加以下环境变量
    . ${MX_SDK_HOME}/set_env.sh
    . ${HOME}/Ascend/ascend-toolkit/set_env.sh
    其中${MX_SDK_HOME}为MindX SDK安装目录,${HOME}为用户目录(如果CANN 开发包装在用户目录,否则为/usr/local/),配置的时候请自行替换成相应目录
    保存退出.bashrc文件
    执行如下命令使环境变量生效
    source ~/.bashrc
    查看环境变量
    env

3.2 在windows开发环境同步CANN

工具栏点击“File > Settings > Appearance & Behavior > System Settings > CANN”进入CANN管理界面。点击Change CANN配置CANN包。

 

配置远程连接以及远端CANN包路径(配置到版本号一级)

 

3.3 在windows开发环境同步MindX SDK

工具栏点击“File > Settings > Appearance & Behavior > System Settings > MindX SDK”或依次点击“Ascend>MindX SDK Manager”进入MindX SDK管理界面。界面中“MindX SDK Location”为软件包的默认安装路径,默认安装路径为“C:\Users*用户名*\Ascend\mindx_sdk”。单击“Install SDK”进入“Installation settings”界面。

在“Installation settings”界面

    • “Remote Connection”:远程连接的用户及IP。
    • “Remote CANN Location”:远端环境上CANN开发套件包的路径,请配置到版本号一级。
    • “Remote SDK Location”:远端环境上SDK的路径,请配置到版本号一级。IDE将同步该层级下的“include”、“opensource”、“python”、“samples”文件夹到本地Windows环境,层级选择错误将导致安装失败。
    • “Local SDK Location”:同步远端环境上SDK文件夹到本地的路径。默认安装路径为“C:\Users*用户名*\Ascend\mindx_sdk”。

 

安装完成之后,界面如图所示:

 

4. 开发过程

4.1 创建工程

工具栏点击“File > New > Project

 

选择左侧Ascend APP,创建Ascend APP应用工程,,创建MindX SDK空白工程(提供MindX SDK开发框架,不包含代码逻辑),点击finish完成创建。

 

创建完成之后目录结构如下图所示

 

删除config文件夹,创建models和pipeline里的文件,以备后续开发自己的业务流程,目录结构如图所示。

 

4.2 配置python解释器

依次点击File->Project Structure,选择SDKs,添加Python SDK如下图所示:

 

选择SSH interpreter,配置远程服务器,MindStudio会自动侦测远程python环境(如果PATH环境变量已正确配置python的路径),点击OK

 

Project中选择配置好的远程SDK,点击Apply点击OK。完成python解释器的配置。

 4.3 开发步骤

4.3.1 确定业务流程

根据铝材表面缺陷检测SDK推理的具体需求,这里将流程依次划分为图片获取、图片解码、图像缩放、目标检测、序列化、结果发送。

4.3.2 寻找合适的插件

首先根据已有SDK插件的功能描述和规格限制来匹配业务功能(SDK插件列表详见已有插件介绍)。当SDK提供的插件无法满足功能需求时,用户可以参考插件开发介绍开发自定义插件,该部分为SDK高阶特性。在本案例中,已有SDK插件已经满足业务需求。铝材表面缺陷检测流程图以及pipeline编排流程图如下所示:

  • 1 铝材表面缺陷检测流程图
  •  

  • 2 铝材表面缺陷检测pipeline示意图

4.3.3 准备模型推理文件和数据

步骤1 训练铝材缺陷检测对应的yolov5模型,输出pt模型文件。

pt模型文件链接:https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/ascend_community_projects/Aluminum_surface_defect_detection/best.pt

步骤2 将pt模型文件转换成onnx,也可直接通过以下链接下载onnx模型。

onnx模型文件链接:https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/ascend_community_projects/Aluminum_surface_defect_detection/best.onnx

下载yolov5官方源码6.1版本Releases · ultralytics/yolov5 (github.com),进入项目根目录,将best.pt模型文件复制到项目目录,执行命令

python export.py --weights best.pt –simplify

模型转换成功之后,显示的日志信息如下图所示,在项目根目录会生成best.onnx模型文件

 

步骤3 将转化后的YOLOv5模型onnx文件存放至./models/yolov5/。

步骤4 AIPP配置

由于yolov5模型的输入为rgb格式,pipeline中的图像解码为yuv格式,且数据类型不同,需要在atc转换模型时使用aipp预处理,该案例所需进行的aipp预处理包括色域转化以及归一化操作,aipp配置步骤如下:

在./models/yolov5文件夹创建insert_op.cfg配置文件,所需添加的配置内容的属性:

参数

参数说明

aipp_mode

每次模型推理过程采用固定的AIPP预处理参数进行处理

Related_input_rank

related_input_rank参数为可选,标识对模型的第几个输入做AIPP处理,从0开始,默认为0。例如模型有两个输入,需要对第2个输入做AIPP,则配置related_input_rank为1。

# 类型: 整型

Input_format

输入图像格式,必选。取值范围:YUV420SP_U8、XRGB8888_U8、RGB888_U8、YUV400_U8

src_image_size_w

src_image_size_h

原始图像的宽度、高度

宽度取值范围为[2,4096]或0;高度取值范围为[1,4096]或0,对于YUV420SP_U8类型的图像,要求原始图像的宽和高取值是偶数

crop

AIPP处理图片时是否支持抠图

类型:bool

取值范围:true/false,true表示支持,false表示不支持

Csc_switch

色域转换开关,静态AIPP配置

类型:bool

取值范围:true/false,true表示开启色域转换,false表示关闭

rbuv_swap_switch

R通道与B通道交换开关/U通道与V通道交换开关

类型:bool

取值范围:true/false,true表示开启通道交换,false表示关闭

matrix_rxcy

X和y代表矩阵的行和列

一旦确认了AIPP处理前与AIPP处理后的图片格式,即可确定色域转换相关的参数值(matrix_r*c*配置项的值是固定的,不需要调整)

var_reci_chn

归一化配置参数

把需要处理的数据经过处理后限制在一定范围内,方便后面数据的处理。

pixel_out_chx(i)=[pixel_in_chx(i)-mean_chn_i-min_chn_i]*var_reci_chn

最终配置参数如下图所示:

 

 

配置文件的教程请参考如下链接:配置文件模板 - CANN 5.0.4 ATC工具使用指南 01 - 华为 (huawei.com)

  • 5 模型转换

模型转换有两种方式,一种是通过MindStudio可视化操作,另一种是通过命令行的方式,使用MindStudio进行模型转换参考该链接

使用命令方式进行模型转换步骤如下:

首先开启一个SSH会话

 

切换到项目根目录,运行如下命令:

atc  --input_shape="images:1,3,640,640" --out_nodes="Transpose_286:0;Transpose_336:0;Transpose_386:0" --output_type=FP32 --input_format=NCHW --output="./models/yolov5/yolov5_add_bs1_fp16" --soc_version=Ascend310 --framework=5 --model="./models/yolov5/best.onnx" --insert_op_conf=./models/yolov5/insert_op.cfg

模型转换成功,模型保存在--output定义的路径下,输出结果如图所示:

 

Atc中各个参数代表的含义请参考这个链接:参数说明 - CANN 5.0.4 ATC工具使用指南 01 - 华为 (huawei.com)。常见的报错请参考这个链接:FAQ - CANN 5.0.4 ATC工具使用指南 01 - 华为 (huawei.com)

4.3.4 编写后处理配置文件

 在./models/yolov5创建模型后处理配置文件yolov5addbs1_fp16.cfg,对后处理参数进行配置:

表1 配置文件中各个参数的意义

参数名称

参数介绍

修改方法

默认值

CLASS_NUM

铝材缺陷检测的类别数目。

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改CLASS_NUM的大小即可

10

BIASES_NUM

铝材缺陷检测锚点框数量

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改BIASES_NUM的大小即可

18

BIASES

铝材缺陷检测锚点框,用kmeans计算最合适的锚点框

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改BIASES即可

17,14,161,31,113,69,649,17,637,32,636,73,625,132,640,202,626,365

YOLO_TYPE

YOLO输出特征向量的维度数,YOLOv5使用的是3

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改YOLO_TYPE即可

3

SCORE_THRESH

是否为框的阈值,大于此值才认定为框

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改SCORE_THRESH的大小即可

0.25

IOU_THRESH

两个框的IOU阈值,超过此值则被认定为同一个框,用于nms算法

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改IOU_THRESH的大小即可

0.5

OBJECTNESS_THRESH

识别目标置信度的阈值,大于阈值才会认定为目标

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改OBJECTNESS_THRESH的大小即可

0.0

YOLO_VERSION

YOLO版本号,本项目使用的YOLOv5,故取值为5

在models/yolov5/yolov5_add_bs1_fp16.cfg文件中修改YOLO_VERSION的大小即可

5

4.3.5 配置names文件

在./models/yolov5文件夹下创建aldefectdetection.names文件,按顺序配置相应类名,该文件为数据集中所有类别,后处理插件通过读取改文件,返回准确的类别名称,达到缺陷识别的目的:

 

4.3.6 可视化流程编排

根据已经确定的业务流程和合适的插件,利用MindStudio进行可视化插件编排,需要用到的为以下六个插件。

  •     1. appsrc # 输入
  •     2. mxpi_imagedecoder # 图像解码
  •     3. mxpi_imageresize # 图像缩放
  •     4. mxpi_tensorinfer # 模型推理(铝材缺陷检测)
  •     5. mxpi_objectpostprocessor # 模型后处理(yolov5)
  •     6. appsink # 输出

用MindStudio进行可视化流程编排,工具栏依次点击“Ascend > MindX SDK Pipeline :

 

搜索流程编排中需要用到的插件:

 

将插件依次拖动到如下界面并连接起来,Format选项可以整理插件连接的排列,让界面更加美观。

 

点击需要配置参数的插件,在如下区域设置合适的参数:

 

点击save,生成相应的pipeline代码,该代码会将可视化pipeline中设置的参数也加载到对应的插件中去:

{
  "classification+detection": {
    "stream_config": {
      "deviceId": "0"
    },
    "appsrc0": {
      "props": {
        "blocksize": "409600"
      },
      "factory": "appsrc",
      "next": "mxpi_imagedecoder0"
    },
    "mxpi_imagedecoder0": {
      "factory": "mxpi_imagedecoder",
      "next": "mxpi_imageresize0"
    },
    "mxpi_imageresize0": {
       "props": {
                "dataSource": "mxpi_imagedecoder0",
                "resizeType": "Resizer_KeepAspectRatio_Fit",
                "resizeWidth":"640",
                "resizeHeight":"640",
                "paddingType":"Padding_NO",
                "interpolation":"2"
            },
      "factory": "mxpi_imageresize",
      "next": "mxpi_tensorinfer0"
    },

    "mxpi_tensorinfer0": {
      "props": {
        "dataSource": "mxpi_imageresize0",
        "modelPath": "./models/yolov5/yolov5_add_bs1_fp16.om"
      },
      "factory": "mxpi_tensorinfer",
      "next": "mxpi_objectpostprocessor0"
    },
    "mxpi_objectpostprocessor0": {
      "props": {
                "dataSource": "mxpi_tensorinfer0",
                "postProcessConfigPath": "./models/yolov5/yolov5_add_bs1_fp16.cfg",
                "labelPath": "./models/yolov5/aldefectdetection.names",
                "postProcessLibPath": "${HOME}/MindX_SDK/mxVision-2.0.4/lib/modelpostprocessors/libyolov3postprocess.so"
            },
      "factory": "mxpi_objectpostprocessor",
      "next": "mxpi_dataserialize0"
    },
    "mxpi_dataserialize0": {
      "props": {
        "outputDataKeys": "mxpi_objectpostprocessor0"
      },
      "factory": "mxpi_dataserialize",
      "next": "appsink0"
    },

    "appsink0": {
      "props": {
        "blocksize": "4096000"
      },
      "factory": "appsink"
    }
  }
}

 可视化流程编排极大地提升了开发效率,通过这种方式用户可以很快的完成pipeline的编排。

4.3.7 编写main.py文件

main文件的编写逻辑如下图所示:

  •  

 

 

  按照上述流程图,完成代码开发,其中,通过SendDataWithUniqueId将数据送入流里,GetResultWithUniqueId从流里获取数据,最终用opencv将位置信息和类别信息标记在图片上并保存。

主函数main.py:

    1. 初始化流管理器,如果初始化失败,则提示用户并退出程序:

 

2.通过streamManagerApi创建流,导入pipeline文件,如果失败,则提示用户并退出程序

 

3. 构建输入数据,并对输入数据进行检查,确保输入的图片存在且不为空,否则提示用户并退出程序。

 

4. 对输入数据进行预处理,对齐YOLOv5数据预处理操作。

 

5. 将输入数据传入到指定流中,并通过uniqueId获取指定流的输出结果:

 

6. 读取流中的结果,并将位置信息和类别信息输出到图片上,保存图片

 

7. 销毁流

 

4.4 项目下载连接以及项目结构

完整项目请在此处下载:ascend_community_projects: MindX边缘开发套件社区代码仓库

项目目录结构如下所示:

├── models

│   ├── yolov5

│   │   ├── aldefectdetection.names      # 铝材缺陷检测类别

│   │   ├── insert_op.cfg # yolov5 aipp转换配置

│   │   ├── yolov5_add_bs1_fp16.cfg # yolov5后处理配置

│   │   ├── yolov5_add_bs1_fp16.om       # 铝材缺陷检测模型

│   │   ├── best.onnx                    # 用于模型转换

├── pipeline

│   └── AlDefectDetection.pipeline       # pipeline文件

├── main.py

├── eval.py

├── eval_pre.py # letterbox预处理

├── plots.py # 绘图工具类

├── utils.py # 工具类

└── test.jpg

5. 运行

5.1 配置远程映射

 在工具栏"Tools > Deployment> Configuration"在Connection选项中配置远程连接。

 

在Mappings选项中配置远程映射,同步远端和本地代码。配置远端路径之后点击OK完成映射。

 

 在工具栏点击"Tools > Deployment> Upload to"上传本地代码到远端服务器

 

  在精度测试下载的数据集中任意选择一张图片放在项目的根目录下,并命名为test.jpg

在main.py文件点击右键,Modify Run Configuration,配置python解释器,选择远端python解释器,配置完成之后点击apply,点击OK。

 

配置完成之后即可右键运行main.py文件得到结果,在程序中,通过输出流里取得的数据,我们可以看到图片的位置和类别信息。通过这些位置信息,我们进一步作出结果图:

 

 

5.2 精度测试

准备测试数据https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/ascend_community_projects/Aluminum_surface_defect_detection/testDatas.zip和om模型文件:https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/ascend_community_projects/Aluminum_surface_defect_detection/yolov5_add_bs1_fp16.om

运行项目根目录下的eval.py,该文件是在main.py的基础上循环输入测试数据集图片得到结果。

生成的位置信息和类别信息会以txt文件的形式保存在项目目录下的test/testouttxt/。在map.py界面右键,修改运行配置,添加路径参数

 

 配置命令行参数:

 

其中--gt为测试集数据的标签路径,--testpath为模型输出结果的路径(即上述test/testpre_post/),包括分类结果、位置信息和置信度参数。

结果如下图所示:

 

mAP0.5为0.8135478,mAP0.5:0.95为0.5587293358。

其中mAP是目标检测模型中常用的评价指标,它的英文全称是(Mean Average Precision),翻译过来就是平均精确率的平均。mAP0.5是指计算标准为IOU阈值大于0.5,也就是预测框和标签IOU>0.5为正样本。mAP0.5:0.95是指取IOU阈值为以0.05为步长,0.5为起始数据,一直到IOU阈值为0.95的十组数据的平均精度。

6. FAQ

1 尺寸不匹配

问题描述:

提示mxpi_tensorinfer0The input of the model does not match] The datasize of concated inputTensors0 does not match model inputTensors0. Tensor Dtype: TENSORDTYPEUINT8, model Dtype: TENSORDTYPEUINT8.

 

解决方案:

模型经过插件处理后的图像与模型输入不匹配,检查模型经过pipeline之后的尺寸大小是否和模型输入匹配。

2 模型路径未进行正确配置

问题描述:

提示 Failed to get model, the model path is invalidate.

 

解决方案:

检查模型存放路径,正确配置模型路径。

3 未修改pipeline中后处理插件的postProcessLibPath属性

问题描述:

提示[Object, file or other resource doesn't exist] The postprocessing DLL does not exist

 

解决方案:

修改pipeline文件中mxpi_objectpostprocessor0插件的postProcessLibPath属性,修改为{SDK安装路径}/lib/modelpostprocessors/libyolov3postprocess.so

4 同步远端CANN开发包失败

问题描述:

提示[PermissionError: [Errno 13] Permission denied: '/usr/local/Ascend/ascend-toolkit/5.0.4/pyACL/scene.info' Command execute fail, exitStatus = 1]

 

解决方案:

将CANN开发包安装到用户目录下。

7. 一些个人经验总结

  在编写pipeline的时候,MindStudio提供的可视化流程编排极大地提高了开发效率,在MindStudio可以通过拖动的方式完成pipeline的编写,参数也可以很方便的在可视化流程编排中配置;

  在开发中我们难免会遇到各种各样奇奇怪怪的问题,昇腾论坛是个不错的选择,有问必答,从大四开始已经陆陆续续问了挺多问题,答复速度比较快,开发中受阻,不妨在论坛里请求大佬寻求帮助,链接:华为云论坛云计算论坛开发者论坛_技术论坛-华为云 (huaweicloud.com)

 

  在做模型转换前,最好用netron确定一下输出节点,找到正确输出节点,才能让om模型正确输出,netron下载链接:lutzroeder/netron: Visualizer for neural network, deep learning, and machine learning models (github.com)

  1. Mindstuido下载连接

   链接:(MindStudio下载-昇腾社区 (hiascend.com)

  1. 开发过程中用到的链接

  MindX SDK 2.0.4 mxVision 用户指南:MindX SDK 2.0.4 mxVision 用户指南 01 - 华为 (huawei.com)

  CANN安装指南(在用MindStudio可能会由于权限问题,导致远端CANN开发包同步不到本地,可以安装该包到用户目录下) :在昇腾设备上安装 - CANN 5.0.4 软件安装指南 01 - 华为 (huawei.com)

 基于MindStudio的MindX SDK应用开发全流程:基于MindStudio的MindX SDK应用开发全流程哔哩哔哩bilibili

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43937678/article/details/128179011

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签