opencv SVM

2023-11-04

目录

What is a SVM?

官方文档的源代码

函数补充

colRange 和 rowRange

 RNG 随机数,rng.fill

 简化

多分类问题


What is a SVM?

A Support Vector Machine (SVM) is a discriminative classifier formally defined by a separating hyperplane(超平面). In other words, given labeled training data (supervised learning), the algorithm outputs an optimal hyperplane which categorizes new examples. 

官方文档的源代码

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

static void help()
{
    cout << "\n--------------------------------------------------------------------------" << endl
        << "This program shows Support Vector Machines for Non-Linearly Separable Data. " << endl
        << "--------------------------------------------------------------------------" << endl
        << endl;
}

int main()
{
    help();

    const int NTRAINING_SAMPLES = 10;
    // Number of training samples per class 每类分类样本的数目
    const float FRAC_LINEAR_SEP = 0.9f;
    // Fraction of samples which compose the linear separable part 组成线性可分部分的样本的数量

    // Data for visual representation
    const int WIDTH = 512, HEIGHT = 512;// 最后画的图的尺寸
    Mat I = Mat::zeros(HEIGHT, WIDTH, CV_8UC3);// 三通道黑色背景图像

    //--------------------- 1. Set up(设置) training data randomly ---------------------------------------
    Mat trainData(2 * NTRAINING_SAMPLES, 2, CV_32F);//保存坐标信息,20行*2列

    Mat labels(2 * NTRAINING_SAMPLES, 1, CV_32S);//保存标签信息,20行*1列

    RNG rng(10); // Random value generation class //构造方法设定一个具体值,表示下面代码每次生成的结果都是一样的

    // Set up the linearly separable part of the training data
    int nLinearSamples = (int)(FRAC_LINEAR_SEP * NTRAINING_SAMPLES);// 10*0.9=9

    //! [setup1]
    // Generate random points for the class 1 为第一类创建随机点
    Mat trainClass = trainData.rowRange(0, nLinearSamples);//9行2列
    // The x coordinate of the points is in [0, 0.4)//x 的变化范围为横轴的0.4,
    Mat c = trainClass.colRange(0, 1);
    rng.fill(c, RNG::UNIFORM, Scalar(0), Scalar(0.4 * WIDTH));//给序列填充随机数字 RNG rng(10) 数字越大,可填入随机数的选择越多
    // The y coordinate of the points is in [0, 1)
    c = trainClass.colRange(1, 2);
    rng.fill(c, RNG::UNIFORM, Scalar(0), Scalar(HEIGHT));


    // Generate random points for the class 2 为第二类创建随机点
    trainClass = trainData.rowRange(2 * NTRAINING_SAMPLES - nLinearSamples, 2 * NTRAINING_SAMPLES);
    // The x coordinate of the points is in [0.6, 1]
    c = trainClass.colRange(0, 1);
    rng.fill(c, RNG::UNIFORM, Scalar(0.6 * WIDTH), Scalar(WIDTH));
    // The y coordinate of the points is in [0, 1)
    c = trainClass.colRange(1, 2);
    rng.fill(c, RNG::UNIFORM, Scalar(0), Scalar(HEIGHT));


    //! [setup1]

    //------------------ Set up the non-linearly separable part (非线性部分) of the training data ---------------
    //! [setup2]
    // Generate random points for the classes 1 and 2
    trainClass = trainData.rowRange(nLinearSamples, 2 * NTRAINING_SAMPLES - nLinearSamples);
    // The x coordinate of the points is in [0.4, 0.6)
    c = trainClass.colRange(0, 1);
    rng.fill(c, RNG::UNIFORM, Scalar(0.4 * WIDTH), Scalar(0.6 * WIDTH));
    // The y coordinate of the points is in [0, 1)
    c = trainClass.colRange(1, 2);
    rng.fill(c, RNG::UNIFORM, Scalar(0), Scalar(HEIGHT));
    //! [setup2]

    //------------------------- Set up the labels for the classes ---------------------------------
    labels.rowRange(0, NTRAINING_SAMPLES).setTo(1);  // Class 1
    labels.rowRange(NTRAINING_SAMPLES, 2 * NTRAINING_SAMPLES).setTo(2);  // Class 2

    //------------------------ 2. Set up the support vector machines parameters --------------------
    cout << "Starting training process" << endl;
    //! [init]
    Ptr<SVM> svm = SVM::create();
    svm->setType(SVM::C_SVC);
    svm->setC(0.1);
    svm->setKernel(SVM::LINEAR);
    svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)1e7, 1e-6));
    //! [init]

    //------------------------ 3. Train the svm ----------------------------------------------------
    //! [train]
    svm->train(trainData, ROW_SAMPLE, labels);
    //! [train]
    cout << "Finished training process" << endl;

    //------------------------ 4. Show the decision regions ----------------------------------------
    //! [show]
    Vec3b green(0, 100, 0), blue(100, 0, 0);
    for (int i = 0; i < I.rows; i++)
    {
        for (int j = 0; j < I.cols; j++)
        {
            Mat sampleMat = (Mat_<float>(1, 2) << j, i);
            float response = svm->predict(sampleMat);

            if (response == 1) I.at<Vec3b>(i, j) = green;
            else if (response == 2) I.at<Vec3b>(i, j) = blue;
        }
    }
    //! [show]

    //----------------------- 5. Show the training data --------------------------------------------
    //! [show_data]
    int thick = -1;
    float px, py;
    // Class 1
    for (int i = 0; i < NTRAINING_SAMPLES; i++)
    {
        px = trainData.at<float>(i, 0);
        py = trainData.at<float>(i, 1);
        circle(I, Point((int)px, (int)py), 3, Scalar(0, 255, 0), thick);
    }
    // Class 2
    for (int i = NTRAINING_SAMPLES; i < 2 * NTRAINING_SAMPLES; i++)
    {
        px = trainData.at<float>(i, 0);
        py = trainData.at<float>(i, 1);
        circle(I, Point((int)px, (int)py), 3, Scalar(255, 0, 0), thick);
    }
    //! [show_data]

    //------------------------- 6. Show support vectors --------------------------------------------
    //! [show_vectors]
    thick = 2;
    Mat sv = svm->getUncompressedSupportVectors();

    for (int i = 0; i < sv.rows; i++)
    {
        const float* v = sv.ptr<float>(i);
        circle(I, Point((int)v[0], (int)v[1]), 6, Scalar(128, 128, 128), thick);
    }
    //! [show_vectors]

    imwrite("result.png", I);                      // save the Image
    imshow("SVM for Non-Linear Training Data", I); // show it to the user
    waitKey();
    return 0;
}

函数补充

colRange 和 rowRange

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

int main(int argc, char** argv)
{
	Mat Test = (Mat_<double>(3, 3) << 0, 1, 2, 3, 4, 5, 6, 7, 8);
	cout << "Total matrix:" << endl;
	cout << Test << endl << endl;

	Mat Test_col = Test.colRange(0,2);// 保存前2列的元素
	cout << "col range:" << endl;
	cout << Test_col << endl << endl;

	Mat Test_row = Test.rowRange(0, 2);// 保存前2行的元素
	cout << "row range:" << endl;
	cout << Test_row << endl << endl;

}

 RNG 随机数,rng.fill

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

int main(int argc, char** argv)
{
	RNG rng(10);//里面的数值设定之后,每次产生的随机数都一样,类似于numpy的seed
	for (int i = 0; i < 10; i++) {
		cout << "round " << i << endl;
		cout << "random number = " << rng.uniform(1, 10) << endl;
	}

}

 

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;


RNG rng(10);


int main(int argc, char** argv)
{
	Mat Test = (Mat_<double>(3, 3) << 0, 1, 2, 3, 4, 5, 6, 7, 8);
	cout << "Total matrix:" << endl;
	cout << Test << endl << endl;

	Mat Test_col = Test.colRange(0, 1);
	cout << "col range:" << endl;
	cout << Test_col << endl << endl;

	rng.fill(Test_col, RNG::UNIFORM,2,10);
	cout << "new col range:" << endl;
	cout << Test_col << endl << endl;
	cout << "new Total matrix:" << endl;
	cout << Test << endl << endl;

}

 简化

仅仅使用简单数据实现整个流程

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;


RNG rng(10);


int main(int argc, char** argv)
{
   //设置训练数据
	int labels[4] = { 1, 1, -1, -1 };
	float trainingData[4][2] = { {0, 50}, {255, 40}, {501, 255}, {10, 501} };
	Mat trainingDataMat(4, 2, CV_32F, trainingData);
	Mat labelsMat(4, 1, CV_32SC1, labels);
	cout << "训练数据" << "\n" << "trainingDataMat" << "\n" << trainingDataMat << "\n" << "labelsMat" << "\n" << labelsMat << endl;

	//训练SVM
	Ptr<SVM> svm = SVM::create();
	svm->setType(SVM::C_SVC);
	svm->setKernel(SVM::LINEAR);
	svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
	//开始训练
	svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);

	//可视化表示
	int width = 512, height = 512;
	Mat image = Mat::zeros(height, width, CV_8UC3);

	//显示由支持向量机给出的决策区域
	Vec3b green(0, 255, 0), blue(255, 0, 0);
	for (int i = 0; i < image.rows; i++)
	{
		for (int j = 0; j < image.cols; j++)
		{
			Mat sampleMat = (Mat_<float>(1, 2) << j, i);
			float response = svm->predict(sampleMat);

			if (response == 1)
				image.at<Vec3b>(i, j) = green;
			else if (response == -1)
				image.at<Vec3b>(i, j) = blue;
		}
	}
	//把训练数据在图片上进行显示
	int thickness = -1;
	//类别1,白色
	circle(image, Point(0, 50), 5, Scalar(255, 255, 255), thickness);
	circle(image, Point(255, 40), 5, Scalar(255, 255, 255), thickness);
	//类别-1,黑色
	circle(image, Point(501, 255), 5, Scalar(0, 0, 0), thickness);
	circle(image, Point(10, 501), 5, Scalar(0, 0, 0), thickness);

	//显示支持相量,距离最短的
	thickness = 2;
	Mat sv = svm->getUncompressedSupportVectors();
	for (int i = 0; i < sv.rows; i++)
    {
        const float* v = sv.ptr<float>(i);
        circle(image,  Point( (int) v[0], (int) v[1]), 6, Scalar(0, 0, 255), thickness);
    }


	imshow("SVM", image);
	waitKey(0);
	destroyAllWindows();

	return 0;
}

多分类问题

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;


RNG rng(10);


//三分类问题

int main(int argc, char** argv)
{
	//设置训练数据
	int labels[6] = { 1, 1, 2, 2, 3, 3 };
	float trainingData[6][2] = { {0, 50}, {255, 40}, {501, 255}, {10, 501},{100,350},{400,350} };
	Mat trainingDataMat(6, 2, CV_32F, trainingData);
	Mat labelsMat(6, 1, CV_32SC1, labels);
	cout << "训练数据" << "\n" << "trainingDataMat" << "\n" << trainingDataMat << "\n" << "labelsMat" << "\n" << labelsMat << endl;

	//训练SVM
	Ptr<SVM> svm = SVM::create();
	svm->setType(SVM::C_SVC);
	svm->setKernel(SVM::LINEAR);
	svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
	//开始训练
	svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);

	//可视化表示
	int width = 512, height = 512;
	Mat image = Mat::zeros(height, width, CV_8UC3);

	//显示由支持向量机给出的决策区域
	Vec3b green(0, 255, 0), blue(255, 0, 0),red(0,0,255);
	for (int i = 0; i < image.rows; i++)
	{
		for (int j = 0; j < image.cols; j++)
		{
			Mat sampleMat = (Mat_<float>(1, 2) << j, i);
			float response = svm->predict(sampleMat);

			if (response == 1)
				image.at<Vec3b>(i, j) = green;
			else if (response == 2)
				image.at<Vec3b>(i, j) = blue;
			else if (response == 3)
				image.at<Vec3b>(i, j) = red;
		}
	}
	//把训练数据在图片上进行显示
	int thickness = -1;
	//类别1,红色 背景绿色
	circle(image, Point(0, 50), 5, Scalar(0, 0, 255), thickness);
	circle(image, Point(255, 40), 5, Scalar(0, 0, 255), thickness);
	//类别2,绿色 背景蓝色
	circle(image, Point(501, 255), 5, Scalar(0, 255, 0), thickness);
	circle(image, Point(10, 501), 5, Scalar(0, 255, 0), thickness);
	//类别3,蓝色 背景红色
	circle(image, Point(100, 350), 5, Scalar(0, 255, 0), thickness);
	circle(image, Point(400, 350), 5, Scalar(0, 255, 0), thickness);


	//显示支持相量,距离最短的
	thickness = 2;
	Mat sv = svm->getUncompressedSupportVectors();
	for (int i = 0; i < sv.rows; i++)
	{
		const float* v = sv.ptr<float>(i);
		circle(image, Point((int)v[0], (int)v[1]), 6, Scalar(255,2555,255), thickness);
	}


	imshow("SVM", image);
	waitKey(0);
	destroyAllWindows();

	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv SVM 的相关文章

  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • Opencv Mat内存管理

    内存管理对于图像类至关重要 在opencv中 图像类是cv Mat 它有一个微妙的内存管理方案 假设我已经有了自己的图像类SelfImage class SelfImage public int width int height unsig
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • iphone opencv - 模板匹配

    我已经在我的 iphone 项目中实现了这个 OpenCV 构建 http aptogo co uk 2011 09 opencv framework for ios http aptogo co uk 2011 09 opencv fra
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 深度估计的准确性 - 立体视觉

    我正在研究立体视觉 我对这个问题的深度估计的准确性感兴趣 这取决于几个因素 例如 适当的立体校准 旋转 平移和失真提取 图像分辨率 相机和镜头质量 失真越小 色彩捕捉正确 两个图像之间的匹配特征 假设我们没有低成本的相机和镜头 没有廉价的网
  • 查找具有不同强度/亮度的相似图像

    假设我有如下图像 我可以选择什么来比较两个图像之间的相似度 显然它们是相同的图像 只是亮度不同 我找不到任何可行的方法 目前我最好的选择是训练 cnn 或自动编码器并比较输出的特征向量 但这似乎有点矫枉过正 任何提示将不胜感激 相当强大的工
  • 如何使用 AdaBoost 进行特征选择?

    我想使用 AdaBoost 从大量 100k 中选择一组好的特征 AdaBoost 的工作原理是迭代功能集并根据功能的执行情况添加功能 它选择对现有特征集错误分类的样本表现良好的特征 我目前正在 Open CV 中使用CvBoost 我得到
  • Opencv 2.4.2 代码讲解-人脸识别

    我参考OpenCV提供的文档制作了一个人脸识别程序 可以识别多个人脸 并且工作正常 在文档中 他们制作了省略号来突出显示脸部 我不明白的是他们如何计算椭圆的中心 他们的计算如下 for int i 0 i lt faces size i P
  • 使用 OpenCV 进行图像模糊检测

    我正在研究图像的模糊检测 我已经用过拉普拉斯方法的方差在 OpenCV 中 img cv2 imread imgPath gray cv2 cvtColor img cv2 COLOR BGR2GRAY value cv2 Laplacia
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • OpenCV Python 和 SIFT 功能

    我知道有很多关于Python and OpenCV但我没有找到有关这个特殊主题的帮助 我想提取SIFT关键点来自 python OpenCV 中的图像 我最近安装了 OpenCV 2 3 可以访问 SURF 和 MSER 但不能访问 SIF
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • 在 opencv 中一次性将旋转和平移结合起来

    我有一段用于旋转和平移图像的代码 Point2f pt 0 in rows double angle atan trans c trans b 180 M PI Mat r getRotationMatrix2D pt angle 1 0
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使

随机推荐

  • 如何完全卸载VS2010

    1 首先用360卸载 当卸载完成后 提示有残余的话 就强力清除2 接着 下载IobitUninstaller工具3 按照下面进行卸载1 Microsoft NET Framework 4 框架 建议保留 很多东西会用到 1 1 Micros
  • 电子学会2022年12月青少年软件编程(图形化)等级考试试卷(四级)答案解析

    目录 一 单选题 共15题 共30分 二 判断题 共10题 共20分 三 编程题 共3题 共50分
  • Cannot resolve plugin org.apache.maven.plugins:maven-install-plugin:2.5.2

    项目场景 今天在创建springboot项目的时候 遇到一个与maven相关的报错 仅此记录一下 防止以后继续踩坑 问题描述 在idea gt settings设置maven的目录信息完后 就遇到了以下报错 原因分析 经排查后发现是自己的本
  • vs code 用户代码片段失效问题

    例如 vue1 scope javascript typescript prefix v1 body new Vue el data description Log output to console 注意 1 如果没有scope的话 试着
  • 【深度学习】yolov5+deepsort 完成计数和行人行人重识别的追踪

    文章目录 前言 1 知识体系 1 1 前置说明 1 2 Sort的工作流程 1 3 deepsort 2 实践应用 3 干货补充 总结 前言 行人重识别是计算机视觉的基本任务之一 首先要有一个detector 检测器来检测到目标 然后将检测
  • Multitor:一款带有负载均衡功能的多Tor实例创建工具

    关于Multitor Multitor是一款带有负载均衡功能的多Tor实例创建工具 Multitor的主要目的是以最快的速度完成大量Tor进程的初始化 并将大量实例应用到我们日常使用的程序中 例如Web浏览器和聊天工具等等 除此之外 在该工
  • Linux配置SSH无密码登录

    下文以配置2台主机无密码登录为例 本机名为master 另外一台机子名为slave1 1 配置主机名 分别修改2台机子的主机名为master和slave1 具体方法 CentOS修改主机名 hostname 2 配置hosts 在2台主机上
  • 媒体查询响应式布局

    移动端样式开始 移动端共用样式开始 media screen and min width 320px and max width 1169px 移动端共用样式结束 768 1169样式开始 1169根据设计图内容宽度来定 media scr
  • odoo13源码-004: models_1

    coding utf 8 Part of Odoo See LICENSE file for full copyright and licensing details Object Relational Mapping module Hie
  • 基于Qt5的计算器设计

    Qt5的信号与槽 描述 信号槽是 Qt 框架引以为豪的机制之一 所谓信号槽 实际就是观察者模式 发布 订阅模式 当某个事件发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如果有对
  • Linux下SVN客户端基本使用教程-使用命令

    Subversion SVN 是一个版本控制系统 用于管理文件和目录的历史记录 在 Linux 中 SVN 客户端提供了一组命令 用于与 SVN 服务器交互 检出 提交 更新和管理版本控制项目 以下是一些 Linux SVN 客户端常用的命
  • 【C语言】不使用strcat(字符串连接函数)将两个字符串连接起来。

    解题思路 定义两个字符数组A B 其中A稍大些 将第一个字符串存入A 再将第二个字符串存入B 然后将B中的字符串紧接在A后即可 采用for循环 具体见程序 include
  • matlab矩阵除法

    matlab中除法有四种 作除 右除 对于标量的运算 与 用法一致 a b 或a b表示a除以b 与 用法一致 a b 或a b表示b除以a 对于矩阵运算 a b 表示矩阵a乘矩阵b的逆矩阵 与 a inv b 一致 a b 表示矩阵a的逆
  • 【无标题】nltk安装wordnet出错[nltk_data]Error loading wordnet:<urlopen error [Errno 111]...>

    一 下载wordnet库报错 二 离线下载nltk data 链接 https pan baidu com s 1B70gBI54aERVNcApUrFDXQ 提取码 snec 下载成功后解压得到nltk data的文件夹 三 把nltk
  • 【CAM】CAM(Class Activation Mapping)——可视化CNN的特征定位

    文章目录 一 CAM Class Activation Mapping 二 CAM技术实现 2 1 网络修改 2 2 微调 2 2 特征提取 三 总结 Reference 完整代码见Github https github com capsu
  • c 中内存拷贝函数(C memcpy)详解

    文章转载自 http blog csdn net sszgg2006 article details 7989404 原型 void memcpy void dest const void src unsigned int count 功能
  • python基础----06-----文件读写追加操作

    一 文件编码概念 思考 计算机只能识别 0和1 那么我们丰富的文本文件是如何被计算机识别 并存储在硬盘中呢 答案 使用编码技术 密码本 将内容翻译成0和1存入 常见编码有UTF8 gbk等等 不同的编码 将内容翻译成不同的二进制 二 文件的
  • (STM32CubeMX)超声波模块测距传感器学习笔记

    超声波模块HC SR04 一 简介 1 概念 2 电路连接 3 工作原理 二 STM32CubeMX配置步骤 1 芯片选择 2 引脚配置 3 时钟配置 4 其他配置 三 keil5代码 1 串口重定向 2 超声波模块编写 一 简介 1 概念
  • LVGL学习笔记6 - 输入设备

    目录 1 移植文件 2 移除多余代码 3 输入设备初始化 4 输入设备读回调函数 4 1 LV INDEV TYPE POINTER 4 2 LV INDEV TYPE KEYPAD 4 3 LV INDEV TYPE ENCODER 4
  • opencv SVM

    目录 What is a SVM 官方文档的源代码 函数补充 colRange 和 rowRange RNG 随机数 rng fill 简化 多分类问题 What is a SVM A Support Vector Machine SVM