*本博客主要是记录在caffe(添加了新层)框架上训练数字串识别算法crnn的模型,用VS2013封装一个识别数字串的接口。
1. crnn模型训练
框架:crnn.caffe在github上的地址
数据准备:
数据增强到了六万,只识别0~9,+,-,. 等(可能数据还没达到十万量级识别精度欠佳)
模型训练:
训练模型时需要resize到128*32,为了避免拉抻变形,所以这里需要在原始图片周围加上padding。这样在算法中resize时就不会变形严重。
训练步骤可以根据github指导逐步训练,网络结构可以根据自己的算法进行调整。
注意避免模型过拟合
模型测试:cpp_recognition中提供了测试的接口;
测试代码稍微改了下
`
#include <gflags/gflags.h>
#include <glog/logging.h>
#include "boost/algorithm/string.hpp"
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <vector>
#include <utility>
#include <iosfwd>
#include <string>
#include <iostream>
#include "glob.h"
#include <caffe/caffe.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace caffe;
using namespace std;
using namespace cv;
const int BLANK_LABEL = 13;
class Classifier {
public:
Classifier(const string& model_file,const string& trained_file,int blank_label);
std::vector<int> Classify(const cv::Mat& img, int N = 1);
private:
std::vector<int> Predict(const cv::Mat& img