caffe测试多张图片--需改代码
本文通过修改classification.cpp实现用训练好的model文件实现多张图片的分类。
classification.cpp中main函数的源码为:::
int main(int argc, char** argv) {if (argc != 6) {std::cerr << "Usage: " << argv[0]<< " deploy.prototxt network.caffemodel"<< " mean.binaryproto labels.txt img.jpg" << std::endl;return 1;}::google::InitGoogleLogging(argv[0]);string model_file = argv[1];string trained_file = argv[2];string mean_file = argv[3];string label_file = argv[4];Classifier classifier(model_file, trained_file, mean_file, label_file);string file = argv[5];std::cout << "---------- Prediction for "<< file << " ----------" << std::endl;cv::Mat img = cv::imread(file, -1);CHECK(!img.empty()) << "Unable to decode image " << file;std::vector<Prediction> predictions = classifier.Classify(img);/* Print the top N predictions. */for (size_t i = 0; i < predictions.size(); ++i) {Prediction p = predictions[i];std::cout << std::fixed << std::setprecision(4) << p.second << " - \""<< p.first << "\"" << std::endl;}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
根据博客http://blog.csdn.net/lanxuecc/article/details/52795344 我们知道,该文件编译生成的.bin只能分类单张,那么如果我们训练出来了一个caffemodel,我们如何实现分类大量图片来统计分类准确率呢,我把代码做了一些修改,实现了这个功能
int main(int argc, char** argv) {string imgfilename;if (argc != 6) {std::cerr << "Usage: " << argv[0]<< " deploy.prototxt network.caffemodel"<< " mean.binaryproto labels.txt img.jpg" << std::endl;return 1;}::google::InitGoogleLogging(argv[0]);string model_file = argv[1];string trained_file = argv[2];string mean_file = argv[3];string label_file = argv[4];Classifier classifier(model_file, trained_file, mean_file, label_file);string file = argv[5]; //传入的字符串是保存所有图片路径的文件fstream fin( file.c_str()); string fnd = "sglimg";string rep = "sglimgbak";string imgsave;string strinsert;while(getline(fin, imgfilename)) //依次读入文件中每个图片路径{std::cout << "---------- Prediction for "<< imgfilename << " ----------" << std::endl; imgsave = imgfilename;cv::Mat img = cv::imread(imgfilename, -1); //读取图片CHECK(!img.empty()) << "Unable to decode image " << imgfilename;std::vector<Prediction> predictions = classifier.Classify(img); //对图片进行分类imgsave = imgsave.erase(61,2);imgsave = imgsave.replace(imgsave.find(fnd), fnd.length(), rep);strinsert = predictions[0].first + "/";imgsave.insert(64, strinsert);std::cout << "---------- Save2 for "<<predictions[0].first<<"in"<< imgsave << " ----------" << std::endl; imwrite(imgsave, img); //按图片围住度最高的分类来保存图片}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
修改后重新编译caffe就可以分类图片了
make clean //在caffe根目录下
make all //在caffe根目录下
- 1
- 2
只是传入的图片路径参数,改为记录所有待分类图片的路径的文件。
例如::::我的所有待分类的图片在目录/home/schao/sc_tmp/caffe/caffe-master/examples/numlet/sglimg/0~9,A~Z中,那么传入程序的图片目录为(见下截图,只保存一部分)
现在我把这0~9,A~Z文件夹内的图片分类分别保存到/home/schao/sc_tmp/caffe/caffe-master/examples/numlet/sglimgbak这个目录下0~9,A~Z目录中
则代码改成如上形式并且编译后执行下述命令:::
./build/examples/cpp_classification/classification.bin \
./examples/numlet/lenet.prototxt \
./examples/numlet/caffenet_train_iter_20000.caffemodel \
./examples/numlet/mean.binaryproto \
./examples/numlet/synset_words.txt \
./examples/numlet/sglimg/imglist.txt \
- 1
- 2
- 3
- 4
- 5
- 6
caffe测试多张图片--需改代码相关推荐
- ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签
ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签 目录 仅需两行代码实现切分训练集和测试集并分离特征与标签 输出结果 实习代码 仅需两行代码实现切分训练集和测试集并分离特征 ...
- python编写代码_用 Python 编写干净、可测试、高质量的代码
用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...
- laravel改代码没变化_菜鸡程序员是如何写代码的?
每个程序员都要历经从菜鸡到大牛过程蜕变胡过程.当初大家起点都差不多,工作多年后,有些人依然停留在菜鸡,有些人却已成为大牛,所有的事情,都是一点一滴习惯养成.让我们看看菜鸡程序员是如何写代码的?有可能找 ...
- Python第三方库巧用,制作图片验证码只需三行代码
现在验证码的种类真的是越来越多,短信验证码.语音验证码.图片验证码.滑块验证码 - 我们在 PC 的网页端或者手机上的 app 进行登录或者注册时,应该总会遇见图片验证码,比如下面这类: 上面这些图片 ...
- 3D打印断电、断料续打,打印一半中断续打改代码,也适用于单喷头多色打印(用cura切片)
我使用的是cura软件切片,要进行续打首先要知道目前打印到Z轴的位置,这个自己量或者用喷头慢慢靠近测试也可以,主要记录下如何改代码. 用记事本打开gcode文件,找到目前Z层数,如图 从下图位置一直往 ...
- ESP8266 MP3制作——关于SelectionList从源码中改代码的一次经历
SelectionList修改源码(这可能为扩展引脚提供一个新思路) 原因 上一篇文章已经提到了SelectionList的神奇功能,然后在setup中有这个一段代码: u8g2.begin(/* m ...
- pytorch转换onnx,再转换caffe 测试caffe, pytorch 模型结果是否一致
def pytorch_out(input):model = model_res() #model.eval# input = input.cuda()# model.cuda()torch.no_g ...
- 测试cpu多核性能软件,CPU测试软件权重大改,多核性能仅占2% 玩家:你疯了吗
原标题:CPU测试软件权重大改,多核性能仅占2% 玩家:你疯了吗 一家名为UserBenchmark的网站最近大火了一把,因为他们最近将自己的CPU评价标准进行了大刀阔斧的修改,简单来说就是削弱多核性 ...
- python编写高质量代码_用 Python 编写干净、可测试、高质量的代码
用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...
- javaCV学习-1-环境搭建及测试多张图片合成一个mp4的视频
最近在自学用java语言如何进行处理音视频. 学习时,在网上找了一段代码,测试多张图片合成一个mp4的视频. 代码是: import org.bytedeco.ffmpeg.global.avcode ...
最新文章
- mysql主键约束和唯一性约束
- 抓rtmp推流地址_如何实现摄像机竖屏直播推流?
- 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)
- Ubuntu安装指定版本clang-format
- 小米手机又一产品线退场,大步迈向高端市场!
- 美团点评2020年测试工程师笔试题
- YOLOv3: An Incremental Improvement
- max6675一直读0_女儿读完我要收藏起来的英文杂志,它让0~15岁孩子阅读无缝对接!...
- 书单丨把握Java技术发展的新趋势!
- 【SENCHA TOUCH】改了tomcat的IP访问!java的session失效问题! [ Web 开发]
- fxp连接失败_用FlashFXP时总是连接失败(连接丢失)是什么原因
- PS 批处理切图去空白
- 虚拟机架设服务器u盘不显示盘符,【图文详解】怎么解决win7虚拟机无法识别U盘问题...
- 统计工具代码同步安装和异步安装有何区别
- 基于51单片机的带方位指示的自行车码表proteus仿真原理图PCB
- 算法---逆向旋转矩阵法求解矩阵绕圈走
- [200902] 条件概率与独立事件
- 创新之路 纪录片观后感
- deepin标题栏边框美化
- 推荐好书《值得阅读的书籍》列表