资源简介
基于c++实现的LeNet,可以基于自己鼠标手写的字符进行识别,效果很好,原验证集99%的识别率
代码片段和文件信息
#define USE_OPENCV 1
#define CPU_ONLY 1
#include
#include
#include
#include
#include
#include
#include
#include “head.h“
#include
#include
#include
#include
#include
using namespace caffe;
using namespace cv;
Point previousPoint(-1 -1) nowPoint(-1 -1);
Mat srcimage=Mat::zeros(280280CV_8UC1);
Mat srcimageori = Mat::zeros(280 280 CV_8UC1);
class Classifier {
public:
Classifier(const string& model_file
const string& trained_file);
int Classify(const cv::Mat& img);
private:
std::vector Predict(const cv::Mat& img);
void WrapInputlayer(std::vector* input_channels);
void Preprocess(const cv::Mat& img
std::vector* input_channels);
private:
shared_ptr > net_;
cv::Size input_geometry_;
int num_channels_;
};
Classifier::Classifier(const string& model_file
const string& trained_file)
{
#ifdef CPU_ONLY
Caffe::set_mode(Caffe::CPU);
#else
Caffe::set_mode(Caffe::GPU);
#endif
/* Load the network. */
net_.reset(new Net(model_file TEST));
net_->CopyTrainedlayersFrom(trained_file);
CHECK_EQ(net_->num_inputs() 1) << “Network should have exactly one input.“;
CHECK_EQ(net_->num_outputs() 1) << “Network should have exactly one output.“;
Blob* input_layer = net_->input_blobs()[0];
num_channels_ = input_layer->channels();
CHECK(num_channels_ == 3 || num_channels_ == 1)
<< “Input layer should have 1 or 3 channels.“;
input_geometry_ = cv::Size(input_layer->width() input_layer->height());
}
/* Return the top N predictions. */
int Classifier::Classify(const cv::Mat& img) {
std::vector output = Predict(img);
std::vector::iterator iter=find(output.begin() output.end() 1);
int prediction = distance(output.begin() iter);
return prediction<10 ? prediction:0;
}
std::vector Classifier::Predict(const cv::Mat& img) {
Blob* input_layer = net_->input_blobs()[0];
input_layer->Reshape(1 num_channels_
input_geometry_.height input_geometry_.width);
/* Forward dimension change to all layers. */
net_->Reshape();
std::vector input_channels;
WrapInputlayer(&input_channels);
Preprocess(img &input_channels);
net_->Forward();
/* Copy the output layer to a std::vector */
Blob* output_layer = net_->output_blobs()[0];
const float* begin = output_layer->cpu_data();
const float* end = begin + output_layer->channels();
return std::vector(begin end);
}
void Classifier::WrapInputlayer(std::vector* input_channels) {
Blob* input_layer = net_->input_blobs()[0];
int width = input_layer->width();
int height = input_layer->height();
float* input_data = input_layer->mutable_cpu_data();
for (int i = 0; i < input_layer->chann
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-02-07 15:34 lenet_test\
目录 0 2017-02-07 15:34 lenet_test\lenet_test\
文件 68747264 2017-02-07 15:34 lenet_test\lenet_test.sdf
文件 1330 2017-02-07 08:59 lenet_test\lenet_test.sln
文件 35328 2017-02-07 15:34 lenet_test\lenet_test.v12.suo
文件 126464 2016-09-02 14:06 lenet_test\lenet_test\gflags.dll
文件 26608 2016-09-02 14:06 lenet_test\lenet_test\gflags.lib
文件 514048 2016-09-02 14:06 lenet_test\lenet_test\gflagsd.dll
文件 26684 2016-09-02 14:06 lenet_test\lenet_test\gflagsd.lib
文件 126464 2016-09-02 14:06 lenet_test\lenet_test\gflags_nothreads.dll
文件 27440 2016-09-02 14:06 lenet_test\lenet_test\gflags_nothreads.lib
文件 514048 2016-09-02 14:06 lenet_test\lenet_test\gflags_nothreadsd.dll
文件 27516 2016-09-02 14:06 lenet_test\lenet_test\gflags_nothreadsd.lib
文件 856 2017-02-07 11:12 lenet_test\lenet_test\head.h
文件 1738 2016-08-24 14:09 lenet_test\lenet_test\lenet.prototxt
文件 1725006 2016-10-25 00:00 lenet_test\lenet_test\lenet_iter_10000.caffemodel
文件 6104 2017-02-07 15:09 lenet_test\lenet_test\lenet_test.cpp
文件 12233 2017-02-07 08:59 lenet_test\lenet_test\lenet_test.vcxproj
文件 1068 2017-02-07 08:59 lenet_test\lenet_test\lenet_test.vcxproj.filters
文件 4963840 2016-09-02 14:18 lenet_test\lenet_test\opencv_core2410d.dll
文件 4660224 2016-09-02 14:18 lenet_test\lenet_test\opencv_highgui2410d.dll
文件 4467712 2016-09-02 14:18 lenet_test\lenet_test\opencv_imgproc2410d.dll
目录 0 2017-02-07 15:11 lenet_test\x64\
目录 0 2017-02-07 15:11 lenet_test\x64\Debug\
文件 6367744 2017-02-07 15:11 lenet_test\x64\Debug\lenet_test.exe
文件 21927880 2017-02-07 15:11 lenet_test\x64\Debug\lenet_test.ilk
文件 36999168 2017-02-07 15:11 lenet_test\x64\Debug\lenet_test.pdb
- 上一篇:C++Builder案例开发集锦(第二版)
- 下一篇:MFC扫雷程序
评论
共有 条评论