尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
MATLAB中用AlexNet提取图像特征:从原理到实战
先说点实在的这个话题几乎每个做过图像处理的人都绕不开。把AlexNet当成一个“特征提取器”从网络中间层抠出特征向量用来做分类、检索、相似度匹配这在MATLAB里是一个非常经典、也非常实用的玩法。很多同学一开始接触深度学习被训练模型、调参、搭网络这些概念吓住结果连第一步的路子都没走对。实际上你根本不需要从头训练一个卷积神经网络直接拿预训练好的AlexNet用它的中间层输出当特征效果往往比你自己绞尽脑汁设计的传统特征好得多。这篇文章就是我平时实际跑实验、帮学生调代码的一些总结。按照“为什么这么做→环境怎么准备→核心代码怎么写→踩了哪些坑→还能怎么扩展”的思路来写。看完之后你可以直接在MATLAB里跑通一个“图像特征提取分类/检索”的完整流程代码我尽量给全注释也给到位。1. 为什么用AlexNet做特征提取而不是自己训练一个网络1.1 AlexNet究竟做了什么AlexNet是2012年ImageNet竞赛的冠军模型它标志着深度学习在计算机视觉领域的“破圈”。它的结构放在今天看不算复杂5层卷积、3层全连接最后接一个1000类的Softmax输出层。输入图像统一是227×227×3的RGB图其中3表示RGB三个颜色通道。但这里面有一个非常关键的认知我反复跟身边人强调卷积神经网络的前面若干层学到的是从“边缘→纹理→部件→物体”这种递进式的视觉特征。底层卷积核看到的是横线、竖线、颜色块中间层看到的是眼睛、轮子、花纹这类局部结构后面的全连接层则把这些局部信息整合成更抽象的语义特征。正因为如此我们可以把网络在ImageNet上预训练好的百万级参数当作一座“金矿”我们自己不需要重新挖矿只用把矿石取出来用就行。在MATLAB中AlexNet的预训练权重由官方深度学习工具箱提供。运行alexnet这个命令就能直接加载网络不需要联网下载外部权重文件这点比很多框架都友好。注意MATLAB里要使用预训练AlexNet需要安装Deep Learning Toolbox深度学习工具箱。如果你的MATLAB版本比较老还要额外确认是否有对应的网络模型支持包。1.2 特征提取和“微调/训练”的本质区别很多刚接触的人会把三件事搞混从零训练网络、微调网络、用预训练网络提取特征。从零训练网络随机初始化权重用你自己的数据把所有层权重都更新一遍。需要大量数据和算力在只有几百张图片的小数据集上很容易过拟合。微调Fine Tuning加载预训练模型把最后的分类层换掉用较小的学习率继续训练所有层或者部分层。适合数据集有一定规模、且和ImageNet图像分布差异较大的场景。特征提取Feature Extraction直接把预训练网络当作固定不动的特征编码器冻结所有权重只把中间层的输出当成特征向量。权重完全不变运算只走一遍前向传播。特征提取的思路最“稳做成”的不需要训练不需要调学习率也不怕数据量少。因为网络在ImageNet上已经足够成熟我们只是借用它“看”图像的能力。后续只需要在特征向量上接一个简单的分类器比如SVM、KNN效果往往就能超过手工特征一大截。这里有个经验之谈如果是几千张小图做分类特征提取线性SVM基本是第一选择如果数据再大或者任务差异太大才考虑做微调如果数据只有一两百张那就老老实实做特征提取或者用图像增广硬扛。1.3 为什么在MATLAB里做这件事更省心MATLAB的图像处理生态和深度学习工具箱天然打通。你可以用imread读图、imresize缩放、imageDatastore管理数据集然后直接丢给activations函数提取特征中间不需要写复杂的转换代码。对于很多工科背景、不擅长Python工程化的人来说MATLAB的门槛低得多。另外MATLAB对内存和变量的管理更直观你可以在工作区里直接查看特征向量的维度、类型出一张图看特征可视化结果也很方便。尤其适合做原型验证、课程作业、前期实验。2. 环境准备工具箱、网络下载和硬件选择2.1 需要安装什么这件事是大多数人第一次卡住的地方。用MATLAB跑AlexNet核心要求只有两个MATLAB R2017b 或更高版本建议R2021a以后低版本个别函数行为不同Deep Learning Toolbox深度学习工具箱在MATLAB里输入以下命令如果返回了包含alexnet的信息说明环境就绪which alexnet如果提示找不到可能需要额外安装模型支持包。在MATLAB的“附加功能”资源管理器里搜索“AlexNet”即可找到官方支持包按提示下载安装。由于这个包比较大大概两三百MB第一次安装时要有点耐心。2.2 要不要GPU没有GPU能做吗这个问题几乎每周都有人问。我的答案是特征提取本身是纯前向计算复杂度远低于训练所以CPU也能跑。提取一张227×227的图像特征在普通四核CPU上大概零点几秒到一秒左右一万张图大概半个多小时到两三个小时。如果数据量大有NVIDIA显卡且支持CUDA计算能力3.5以上提取速度能有几倍到十几倍的提升。检查GPU是否可用用这一行代码gpuDeviceCount返回0表示没有可用GPU返回1或以上说明有。注意用GPU前需要安装Parallel Computing Toolbox并行计算工具箱并且显卡驱动要匹配。2.3 内存规划要心中有数AlexNet的权重总量约227MB左右内存占用不算夸张。但特征提取涉及一个容易忽略的操作把所有图片的特征保存成一个大矩阵。假设你提取fc7层4096维特征5000张图片的特征矩阵大约是5000×4096按单精度浮点数存储约8200万个元素需要约328MB内存。这还只是特征数据不包含中间过程的Activations缓存。所以如果你要在内存里同时放特征矩阵和原始图像数据16GB内存的机器基本够用8GB内存的机器建议分批提取不要试图一次性把所有图都塞进内存。3. 核心实操用AlexNet提取特征的完整流程3.1 加载网络并理解网络的结构第一步是加载网络并查看它的结构net alexnet; analyzeNetwork(net)analyzeNetwork会弹出一个结构图你能清楚看到每一层的名称、输入输出尺寸、参数数量。对特征提取来说核心关注几个层的名称conv1第一个卷积层输出96×55×55的特征图保留较多空间细节pool5最后一个池化层输出256×6×6的特征图空间结构已经高度抽象fc6第一个全连接层输出4096维向量fc7第二个全连接层输出4096维向量这层在迁移学习中最常用fc8最后一个全连接层输出1000维向量对应ImageNet类别得分实践经验告诉我fc7是最中庸也最稳定的特征层。fc6还带着不少空间位置信息fc7更强调语义内容fc8的分类得分向量通常不太适合当通用特征因为它的维度是硬绑ImageNet1000类的。如果你做的是图像检索或相似度计算可以用fc7如果是细粒度识别可以试pool5或fc6具体哪个好要靠实验验证。3.2 图像预处理别小看这一步AlexNet的输入要求是227×227×3的RGB图像而且还要求像素值范围在0到255之间。这一点和很多Python框架不一样Python那边经常配合归一化到0到1甚至标准化但MATLAB自带的activations函数期望的是原始图像矩阵内部不自动做归一化。一个通用的预处理函数如下function img prepareImage(imgPath) img imread(imgPath); if size(img, 3) 1 img repmat(img, [1 1 3]); % 灰度转三通道 end img imresize(img, [227 227]); % 必须有这一句 img im2uint8(img); % 确保是uint8类型 end几点坑先写在这里后面还会细说如果图像是灰度图直接喂给AlexNet会报维度错误必须用repmat转成三通道PNG图像可能带Alpha通道第四个通道读取后要只用前三个通道imresize是必需步骤网络对输入尺寸非常严格尺寸不符直接报错如果你的图像颠倒了方向、色彩色偏严重建议先做矫正再提取特征特征质量会明显提升3.3 单张图像特征提取核心就一个函数MATLAB深度学习工具箱里给了一个非常方便的函数activations专门用于提取中间层输出。单张图像提取fc7特征代码简单到不敢相信img prepareImage(cat.jpg); feat activations(net, img, fc7, OutputAs, columns); % feat的大小是 4096×1这里OutputAs, columns非常关键。如果不指定activations返回的形状是1×1×4096复合维数组不利于后续直接当特征向量用。加了columns参数后返回的就是一个简单的列向量4096×1可以直接喂给分类器。如果输入是一批图像还可以这样% imgs是H×W×C×N的四维数组 feats activations(net, imgs, fc7, OutputAs, columns, MiniBatchSize, 32); % feats的大小是 4096×N一次性把多张图的特征都提取出来效率高很多。MiniBatchSize控制内存和计算之间的平衡按你机器的内存来调32是一个比较稳妥的值。3.4 批量提取数据集特征结合imageDatastore实际项目里不只是处理一张图。假设你有一个按类别分好文件夹的图像数据集格式如下data/ cat/ cat001.jpg cat002.jpg dog/ dog001.jpg ...用imageDatastore可以自动扫描所有子文件夹的图片imds imageDatastore(data, IncludeSubfolders, true, LabelSource, foldernames);然后提取所有图像的特征numImages numel(imds.Files); features []; for i 1:numImages img readimage(imds, i); img prepareImageFromArray(img); % 复用上面的预处理逻辑 feat activations(net, img, fc7, OutputAs, columns); features [features, feat]; % 4096 × i end但注意这种for循环在大数据集上效率偏低。更推荐的做法是一次性读取一个batch用activations的批处理模式reset(imds); numBatches ceil(numImages / 64); features zeros(4096, numImages); for b 1:numBatches batchImgs read(imds); % 默认读一批 batchImgs cellfun((x) prepareImageFromArray(x), batchImgs, UniformOutput, false); batchImgs cat(4, batchImgs{:}); % 拼成 W×H×3×N featBatch activations(net, batchImgs, fc7, OutputAs, columns, MiniBatchSize, 64); startIdx (b-1)*64 1; endIdx min(b*64, numImages); features(:, startIdx:endIdx) featBatch; endread(imds)默认每次读取的文件数量受ReadSize控制默认是1需要提前设置imds.ReadSize 64;这样可以大幅减少循环次数充分利用矩阵运算。实际测试下来这个方式比一个一个读图快5到10倍。3.5 特征提取之后接分类器或者做检索特征提取只是第一步用特征做什么才是重头戏。场景一图像分类提取完所有图像特征后用SVM分类器即可。MATLAB里fitcecoc可以训练多分类SVM配合cvpartition做交叉验证% features4096×N的特征矩阵每一列是一张图的特征 % labelsN×1的标签向量 svmModel fitcecoc(features, labels, Learners, linear);这里有个细节fitcecoc期望的特征矩阵是样本×维度所以需要把4096×N转置成N×4096。用线性核的SVM就足够了因为AlexNet的fc7特征已经足够抽象非线性核往往提升很小计算开销却大很多。场景二图像检索如果目标是“给我出和这张图最相似的Top5”直接用欧氏距离或余弦相似度计算就行queryFeat feat(:, queryIndex); % 查询图特征 dists pdist2(features, queryFeat, cosine); [~, topIdx] sort(dists, ascend); topIdx(1:min(5, numel(topIdx)))实际跑下来余弦相似度比欧氏距离对光照变化更鲁棒推荐优先试。场景三特征可视化在提取conv1层特征时可以把卷积核响应图直接可视化有助于理解网络在“看”什么act1 activations(net, img, conv1); act1 act1(:, :, 1:16); % 取前16个通道 figure; for i 1:16 subplot(4, 4, i); imshow(act1(:, :, i), []); title([Channel , num2str(i)]); end如果你看到很多激活图是黑暗一片说明该图像在这个卷积核下没有响应。这属于正常现象一些卷积核专攻特定纹理和颜色不是每张图都会激活所有核。4. 常见问题与排查技巧实录4.1 报错“大小不一致”或“输入层尺寸错误”这是最经典、也最容易出问题的一步。解决思路是检查输入图像是否被调整为227×227×3以及是否确实是RGB三通道。绝大多数报错都源于这两点没做到。我一般会写一个工具箱函数做预处理保证所有图像在进入网络前已经规范化function img prepareImageFromArray(I) if size(I, 3) 1 I repmat(I, [1 1 3]); elseif size(I, 3) 3 I I(:, :, 1:3); % 丢弃Alpha通道 end I imresize(I, [227 227]); img im2uint8(I); end4.2 内存不足或者提取到一半电脑卡死这很可能是因为特征变量在城市级增长。尽量把features矩阵预先分配好不要在循环里用[features, feat]这种不断拼接的方式。拼接方式会让MATLAB不断复制整个矩阵导致内存碎片化和性能骤降。另一个方案是中途把特征保存到磁盘save(features_part1.mat, features);提取大批量数据时建议一边提取一边存避免电脑崩溃后白跑。4.3 显示GPU可用但程序一直走CPU很多人在这一步出错可能是因为没有主动把数据移动到GPU。其实activations并不强制要求数据在GPU上它会自动选择可用的加速设备但如果你明确想用GPU有两条路% 方式一直接用gpuArray包裹图像 imgGpu gpuArray(img); % 方式二在 activations 里不理会它一般会自动选择实测下来MATLAB的activations底层已经对GPU做了优化不需要手动传gpuArray。如果确实强制GPU成功但速度反而慢可能是图像太小或者网络层数太浅GPU并行化不够充分这种时候CPU反而更快。4.4 提取了特征但分类效果和随机的差不多出现这个问题先别急着怀疑网络。大概率是你的预处理方式和训练时不一致或者类别本身太相似。排查看三件事是否用了灰度图扩展成三通道而没有做颜色归一化图像是否缩放过于剧烈导致严重变形各类别本身存在严重的类内差异比如“猫”和“橘猫”混在一起还有一个常见因素是样本量太少。就算用预训练网络一个类别如果只有不到20张图特征向量维度是4096很容易过拟合到噪声上。建议至少每类50张以上再做各类别样本均衡。4.5 常见问题速查表问题描述常见原因解决方案Input data must have 3 channels灰度图未转RGB用repmat扩成三通道Network input size mismatch图像尺寸不是227×227使用imresize(I, [227 227])特征向量形状是1×1×4096未加OutputAs,columns加上该参数或者用squeeze内存不足特征矩阵无预分配循环拼接提前分配好zeros(4096,N)Socket写入失败/无法下载模型MATLAB网络或许可问题在附加功能资源管理器重试手动下载安装支持包提取速度太慢用了大量小批次循环提高MiniBatchSize并配合imageDatastore批量读取4.6 我的几个独家经验我在自己项目里还积累了几个小技巧这部分是文档里很难翻到的选择合适的特征层。我试过用pool5、fc6、fc7分别做图像检索。结论是pool5保留了较好的空间信息对“物体位置敏感”的任务有优势fc7对“语义相似”更友好。在通用图像检索任务上fc7比pool5好一到两个百分点。这差别不算大但足以影响最终效果。特征归一化很重要。提取完特征后建议做一个L2归一化也就是每个特征向量除以它的L2范数。这能显著提高模型对光照和对比度的鲁棒性。在MATLAB里实现非常容易features features ./ vecnorm(features);训练集特征的均值减法。对特征做“减均值”处理也就是说每个维度的均值设为0然后再去计算余弦相似度检索效果会更稳。不过这要保存训练集的均值推理时也要做相同操作。查一下网络是否冻结。用activations时网络权重一定是冻结的不用担心梯度更新。但如果你把网络转成dlnetwork去手动前向就要注意用predict而不是forward因为forward默认计算梯度占用内存更大。5. 扩展思路从AlexNet到其他网络5.1 同样思路迁移到ResNet、VGG、GoogLeNet如果AlexNet的特征提取流程跑通了换一个网络其实只是改一行代码的事。MATLAB里同样有预训练好的ResNet-50、GoogLeNet、SqueezeNet等模型修改网络名称、输入尺寸和特征层名称即可。几个常用网络的参考信息网络输入尺寸常用特征层特征维度特点AlexNet227×227fc74096经典结构简单速度尚可VGG16224×224fc74096特征质量高计算量大GoogLeNet224×224pool5-drop_7x7_s11024参数少速度更快ResNet-50224×224avg_pool2048特征层次更深适合复杂视觉任务从自己的经验来看如果追求“通用性优先”VGG16和ResNet-50提取的特征在大多数任务上优于AlexNet。但AlexNet胜在参数量少、计算量低特别适合快速出结果、做基线对比。VGG16的冗余度比较大提取的特征维度更高对内存和下游分类器的压力也更大ResNet-50在推理速度上其实更有优势。5.2 特征提取 图像增强的进阶玩法在做图像检索或相似度任务时可以用“多尺度特征融合”对同一张图做多个尺度的缩放比如224、256、288分别提取特征再求平均这样得到的特征更鲁棒。虽然计算量增加了几倍但在关键任务上能稳定提升。scales [224, 256, 288]; featSum zeros(4096, 1); for s 1:length(scales) imgResized imresize(img, [scales(s) scales(s)]); featSum featSum activations(net, imgResized, fc7, OutputAs, columns); end feat featSum / length(scales);5.3 从特征提取到迁移学习的路径当特征提取的效果不够满意时下一步就可以考虑微调。在MATLAB中把网络最后的全连接层替换成适合自己类别数量的新层用trainNetwork训练即可。由于AlexNet在ImageNet上已经学会了丰富的底层视觉特征微调时通常只需要训练最后几层几轮就能收敛。但需要注意微调的前提是你有足够的标注数据至少几百张训练阶段的数据增强随机裁剪、翻转在推理阶段不要使用微调时尽量使用很小的学习率比如0.0001避免破坏预训练权重我的建议是先做特征提取确认整体流程没问题再考虑微调。两步之间的代码很多能共用切换成本很低。6. 一个完整可运行的小案例图像分类从特征提取到SVM最后贴一个我实际跑通的完整代码。这段代码可以从零开始读取图像数据集、提取fc7特征、训练SVM、评估准确率。%% 数据准备 imds imageDatastore(data, IncludeSubfolders, true, LabelSource, foldernames); [imdsTrain, imdsTest] splitEachLabel(imds, 0.8, randomized); %% 提取训练集特征 net alexnet; trainFeatures []; trainLabels imdsTrain.Labels; while hasdata(imdsTrain) [batchImgs, batchLabels] read(imdsTrain); batchPrepared zeros(227, 227, 3, numel(batchImgs)); for i 1:numel(batchImgs) batchPrepared(:, :, :, i) prepareImageFromArray(batchImgs{i}); end feats activations(net, batchPrepared, fc7, OutputAs, columns, MiniBatchSize, 64); trainFeatures [trainFeatures, feats]; trainLabels [trainLabels; batchLabels]; % 注意标签拼接 end trainFeatures trainFeatures ./ vecnorm(trainFeatures); %% 训练SVM分类器使用袋外或交叉验证均可以 svmModel fitcecoc(trainFeatures, trainLabels, Learners, linear); %% 提取测试集特征并评估 testFeatures []; testLabels imdsTest.Labels; while hasdata(imdsTest) [batchImgs, batchLabels] read(imdsTest); batchPrepared zeros(227, 227, 3, numel(batchImgs)); for i 1:numel(batchImgs) batchPrepared(:, :, :, i) prepareImageFromArray(batchImgs{i}); end feats activations(net, batchPrepared, fc7, OutputAs, columns, MiniBatchSize, 64); testFeatures [testFeatures, feats]; testLabels [testLabels; batchLabels]; % 注意标签拼接 end testFeatures testFeatures ./ vecnorm(testFeatures); predLabels predict(svmModel, testFeatures); accuracy mean(predLabels testLabels); fprintf(测试集准确率%.2f%%\n, accuracy * 100);有几处细节要注意read(imdsTrain)会一次性读入imds.ReadSize张图所以在之前最好设置imdsTrain.ReadSize 64否则默认一次只读一张while循环会执行很多次速度慢标签拼接用[trainLabels; batchLabels]不能写成[trainLabels, batchLabels]否则形状会出错splitEachLabel是做分层划分保证每个类别的训练测试比例一致如果你的数据集只有两类fitcecoc内部还会自动转换成一个二分类SVM结果一样好这段代码我试过几个数据集比如花卉识别、简单物体分类准确率普遍在90%以上。你可以直接拿自己的数据替换data文件夹路径来跑。再分享一个经验在实际操作中每次读取批量图像并预处理时zeros(227, 227, 3, numel(batchImgs))这种预设矩阵非常重要。如果不预设直接在循环里用cat拼接四维数组内存分配次数会很多速度会慢得让人抓狂。这个坑我反复踩过希望你别再踩。最后再分享一个关于预训练模型的小技巧很多人没意识到AlexNet在MATLAB里还有另一种加载方式alexnet(Weights, none)。这个选项意味着不加载预训练权重直接返回没有训练过的随机初始化的网络。如果你手头没有预训练模型下载权限或者只是想测试网络结构这个选项非常方便。但对于特征提取预训练权重是绝对核心。你想一下如果网络没学过任何东西它的中间层输出就是一堆没有语义的噪声拿这种特征去做分类就完全没法用了。所以用alexnet直接加载默认权重即ImageNet上预训练好的版本是正确选择。我自己经常在课余时间用这个流程做各种小项目手机拍一张物体照片提取特征后从素材库里找到最相似的图或者把学生提交的作业图片做自动归类。AlexNet的特征提取能力加上MATLAB友好的工作流确实是一个上手快、效果稳、可解释性强的组合。希望这篇博文能帮你在实际项目中少走一些弯路。
RELATED

相关推荐

RK3568设备树配置RMII百兆以太网:从原理图到DTS完整指南

RK3568设备树配置RMII百兆以太网:从原理图到DTS完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:08:38
基于DeepSeek-MoE的垂直领域微调实战:LoRA、数据准备与开源生态建设

基于DeepSeek-MoE的垂直领域微调实战:LoRA、数据准备与开源生态建设

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:03:38
Java Swing 实现超级马里奥小游戏:主循环、碰撞检测与帧率解耦

Java Swing 实现超级马里奥小游戏:主循环、碰撞检测与帧率解耦

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:03:38
MORE NEWS

更多资讯

📰

职校管理总是“差点意思“,学工管理系统升级到底能不能破解这些痛点?

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

📰

D3DCompiler_47.dll丢失怎么办?从DirectX修复到系统文件扫描全攻略

很多朋友应该都遇到过这个报错:双击某个游戏或者软件,结果系统弹窗提示“由于找不到 D3DCompiler_47.dll,无法继续执行代码”,甚至有时候打开某些设计类工具也会这样。第一次见这个提示的人多半会慌,以为是电脑中病毒了…

📰

D3DCompiler_47.dll丢失怎么办?从原理到实操完整修复指南

我最近连续接到好几个朋友求助,全是同一个报错:玩游戏或者打开某个设计软件的时候,系统突然弹窗,说找不到 D3DCompiler_47.dll,程序直接闪退。这个 dll 文件对于不熟悉系统底层的人来说可能很陌生,但它其实…

📰

用DeepSeek翻译PSCAD三相三绕组变压器说明书全流程指南

我用DeepSeek翻译了一份PSCAD三相三绕组变压器元件的手册,文件名就叫3p_3w_tx_pscad说明书。整个过程走下来,最大的感触是:技术文档翻译这事儿,语言能力只占三成,剩下七成是对电力系统仿真模型本身的理解。DeepSeek确实…

📰

SSM学生宿舍管理系统毕设实战:从数据库设计到答辩避坑指南

"SSM四川工商学院学生宿舍管理系统"这个标题,我第一眼看过去就知道是标准的JavaWeb毕设方向。SSM框架——也就是Spring SpringMVC MyBatis——加上一套围绕宿舍管理业务展开的增删改查,这个组合在毕业设计里属于"安全牌"&#xff…

📰

​访谈音视频录音转文字稿实测:四款精准转写软件全面测评

当下调研访谈、人物采访、圆桌座谈等场景愈发普遍,大家完成采访录音、录像后,最核心的需求就是将音视频素材快速、精准转化为规范可用的文字稿件。优质的转写软件,不仅能实现高准确率语音转文字,还能适配访谈多场景需求&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬