【ChatGPT助我开发】利用ChatGPT编写基于Matlab的SVM的蔬菜分类项目

序言

从去年12月份开始用ChatGPT,一直被惊艳到,然后问一些奇怪的问题,到现在助力开发,我发现合适的提示词(Prompt)会很大程度影响到生成的质量,我在开发的过程中也会逐渐完善修改,最终能完美的写出合适的代码。当然进程的时候会发现ChatGPT会犯一些小错误,在有一定知识基础之下,开发还是非常快的。

数据集

首先,我做的是蔬菜分类项目,理所应当的需要一些图片,这里收集了分别三种蔬菜,各30张图片作为训练集。图片大概长这个样子
在这里插入图片描述

开始交流

首先我大概说了一下我的需求,就是用SVM做一个物品分类的项目,他给我列了一个示例。

在这里插入图片描述
但是呢,我觉得我是需要读取三个文件夹的不同内容,这部分内容百度一下肯定不难,但是捏,本着能偷懒就偷懒的态度,我修改了一下,又提了一个需求。告诉我他我有三个文件夹,也有三种图片,进行三分类。于是他又给了我一串代码

在这里插入图片描述
其实这时候看会觉得还不错,就是基本上你设置一下路径名字,和文件类型,然后就能使用了,于是兴致冲冲的复制过去运行,这个时候发现报错了,因为他给我了一个函数extractFeaturesFromImage(imagePath),这个函数实际上是不存在的,我需要设置一下特征提取方法。当然这个时候我是不知道的,于是我又开始询问了
在这里插入图片描述

在这里插入图片描述
这个时候它有告诉我了一些常用的特征提取方法,这个时候我就觉得哇这个真的好强大,作为一个工具会发现特别好用,然后我让他用HOG方法生成一个特征提取函数,再给我重新生成一下。这个时候代码基本上大致上完成了,但是还是有一些小问题,在运行中报错了,第一个就是报错shape大小不一致,这个错误在图片处理中很常见,我发现代码并没有给我一个图片预处理的部分,不同的图像大小不一致,所以我又要求让他给我做归一化操作。当然,完美解决了。
在这里插入图片描述
可是他还是报错了,emmmm好吧,继续问,继续解决。免费的3.5还是有点不太行呀hahhh。
在这里插入图片描述
但是他还是给我修复了,这一版代码就可以使用了,而且发现在识别准确率上面还是非常高的,NICE!这个过程开发不到半个小时,就能用matlab这个不太熟悉的语言开发一个简单的应用,换做以前这半个小时查个api都能给我人查晕哈哈哈哈,下面贴出完整版代码吧!

% 物品分类示例 - 读取三个文件夹的图片进行分类

% 1. 准备数据
% 假设您有三个文件夹,每个文件夹包含一种类型的图像。
% 在这个示例中,我们假设三种类型的图像分别存储在文件夹A、文件夹B和文件夹C中。

% 设置文件夹路径
folderA = './carrot';
folderB = './chili';
folderC = './pumpkin';
% 使用HOG特征进行分类(包括图像大小归一化)

% 读取文件夹A中的图像
imageFilesA = dir(fullfile(folderA, '*.png')); % 根据图像文件类型进行修改
numImagesA = numel(imageFilesA);

% 读取文件夹B中的图像
imageFilesB = dir(fullfile(folderB, '*.png')); % 根据图像文件类型进行修改
numImagesB = numel(imageFilesB);

% 读取文件夹C中的图像
imageFilesC = dir(fullfile(folderC, '*.png')); % 根据图像文件类型进行修改
numImagesC = numel(imageFilesC);

% 创建特征矩阵和类别向量
numFeatures = 34596; % HOG特征向量的维度
numImagesTotal = numImagesA + numImagesB + numImagesC;

X = zeros(numImagesTotal, numFeatures);
y = strings(numImagesTotal, 1);

% 提取特征并标记类别
for i = 1:numImagesA
    imagePath = fullfile(folderA, imageFilesA(i).name);
    % 读取图像并进行大小归一化
    image = imread(imagePath);
    resizedImage = imresize(image, [256, 256]); % 调整图像大小为256x256
    % 提取图像的HOG特征并将其存储在特征矩阵中
    feature = extractHOGFeaturesFromImage(resizedImage); % 调用HOG特征提取函数
    X(i, :) = feature;
    % 将类别标签存储在类别向量中
    y(i) = '胡萝卜;price';
end

for i = 1:numImagesB
    imagePath = fullfile(folderB, imageFilesB(i).name);
    % 读取图像并进行大小归一化
    image = imread(imagePath);
    resizedImage = imresize(image, [256, 256]); % 调整图像大小为256x256
    % 提取图像的HOG特征并将其存储在特征矩阵中
    feature = extractHOGFeaturesFromImage(resizedImage); % 调用HOG特征提取函数
    X(numImagesA + i, :) = feature;
    % 将类别标签存储在类别向量中
    y(numImagesA + i) = '辣椒;price';
end

for i = 1:numImagesC
    imagePath = fullfile(folderC, imageFilesC(i).name);
    % 读取图像并进行大小归一化
    image = imread(imagePath);
    resizedImage = imresize(image, [256, 256]); % 调整图像大小为256x256
    % 提取图像的HOG特征并将其存储在特征矩阵中
    feature = extractHOGFeaturesFromImage(resizedImage); % 调用HOG特征提取函数
    X(numImagesA + numImagesB + i, :) = feature;
    % 将类别标签存储在类别向量中
    y(numImagesA + numImagesB + i) = '南瓜;price';
end

% 2. 训练SVM模型
% 使用fitcecoc函数来训练SVM模型,并使用'Linear'作为线性核函数。
svmModel = fitcecoc(X, y, 'Learners', 'svm', 'Coding', 'onevsall', 'Learner', 'linear');

% 3. 进行预测
% 假设您有一个新的图像需要进行分类预测。
% 提取新图像的HOG特征并存储在newFeature中
newImagePath = './testPhoto/3.png'; % 根据您的新图像路径进行修改
newImage = imread(newImagePath);
resizedNewImage = imresize(newImage, [256, 256]); % 调整图像大小为256x256
newFeature = extractHOGFeaturesFromImage(resizedNewImage); % 调用HOG特征提取函数
predictedLabel = predict(svmModel, newFeature);

% 4. 显示结果
disp(['预测结果:' predictedLabel]);
imshow(imread(newImagePath));
% HOG特征提取函数
function features = extractHOGFeaturesFromImage(image)
    % 将图像转换为灰度图像
    grayImage = rgb2gray(image);

    % 计算HOG特征
    hogFeatures = extractHOGFeatures(grayImage);

    % 返回HOG特征向量
    features = hogFeatures;
end

有代码有注释,结构异常清楚,自愧不如啊,写的比我好太多了!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于SVM的电能质量信号分类Matlab程序示例。这个程序使用的是libsvm库。 首先,需要准备好训练数据和测试数据。数据应该包含已分类的电能质量信号。在这个示例中,我们使用一个名为"train_data.mat"的Matlab文件来存储训练数据,一个名为"test_data.mat"的Matlab文件来存储测试数据。训练数据和测试数据都需要包含以下两个变量: 1. X: 一个m x n的矩阵,其中m是样本数,n是每个样本的特征数。 2. Y: 一个m x 1的向量,其中每个元素表示相应样本的类别。 在这个示例中,我们将训练数据分为两个类别,分别是"好的电能质量"和"差的电能质量",类别标签分别为1和-1。 接下来,我们将使用libsvm库来训练SVM分类器。在此之前,需要先下载并安装libsvm库。安装完成后,将libsvm库的路径添加到Matlab的搜索路径中。可以使用以下命令将libsvm库的路径添加到Matlab的搜索路径中: ``` addpath('libsvm-3.24/matlab'); ``` 然后,使用以下代码来训练SVM分类器: ```matlab % 加载训练数据 load('train_data.mat'); % 训练SVM分类器 model = svmtrain(Y, X, '-s 0 -t 2 -c 1 -g 0.1'); ``` 在这个示例中,我们使用RBF内核函数,C=1,gamma=0.1来训练SVM分类器。训练完成后,可以使用以下代码来测试分类器: ```matlab % 加载测试数据 load('test_data.mat'); % 预测测试数据的类别 [predict_label, accuracy, decision_values] = svmpredict(Y, X, model); ``` 在这个示例中,我们使用测试数据来预测样本的类别,并计算分类器的准确度。 完整的Matlab程序示例: ```matlab % 添加libsvm库到Matlab的搜索路径 addpath('libsvm-3.24/matlab'); % 加载训练数据 load('train_data.mat'); % 训练SVM分类器 model = svmtrain(Y, X, '-s 0 -t 2 -c 1 -g 0.1'); % 加载测试数据 load('test_data.mat'); % 预测测试数据的类别 [predict_label, accuracy, decision_values] = svmpredict(Y, X, model); ``` 希望这个示例能帮编写基于SVM的电能质量信号分类Matlab程序。如果您有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值