From 0f7f5a7a24c11a7491320b64079e124eb1b89843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E6=A2=93=E7=AB=AF?= <1515891028@qq.com> Date: Tue, 11 Aug 2020 10:34:33 +0800 Subject: [PATCH] first commit --- 阅读分析CharsRecognise模块.txt | 72 ++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 阅读分析CharsRecognise模块.txt diff --git a/阅读分析CharsRecognise模块.txt b/阅读分析CharsRecognise模块.txt new file mode 100644 index 0000000..01431c9 --- /dev/null +++ b/阅读分析CharsRecognise模块.txt @@ -0,0 +1,72 @@ +ַʶChars RecognitionòҪĿľǴһƼⲽлȡijͼ񣬽йѧַʶOCR̡õĻѧϰ㷨˹磨ANNеĶ֪MLPģ͡ +CharsRecognizeУһͼȻлҶȻֵȻʹһϵ㷨ȡƵÿַķָͼ顣úЩַͼ󣬽ֹࣨdzʱ䣬μķȻ磨ANNMLPģУѵʵʵijʶУõ7ַͼѵõģͣͨģԤÿͼʾľַͼƬоˡEUK722 +ַʶҪͨ CharsIdentify?Уַͷֱַȡ˲ͬIJԣѵõANNģҲһַʶҪʹ?identifyChinese?ַʶҪ?identify?⣬CharsIdentify˵ģʽijʼ͹캯£ +CharsIdentify* CharsIdentify::instance_ = nullptr; + + CharsIdentify* CharsIdentify::instance() { + if (!instance_) { + instance_ = new CharsIdentify; + } + return instance_; + } + + CharsIdentify::CharsIdentify() { + ann_ = ml::ANN_MLP::load(kDefaultAnnPath); + annChinese_ = ml::ANN_MLP::load(kChineseAnnPath); + kv_ = std::shared_ptr(new Kv); + kv_->load("etc/province_mapping"); + } + + void CharsIdentify::LoadModel(std::string path) { + if (path != std::string(kDefaultAnnPath)) { + + if (!ann_->empty()) + ann_->clear(); + + ann_ = ml::ANN_MLP::load(path); + } + } + + void CharsIdentify::LoadChineseModel(std::string path) { + if (path != std::string(kChineseAnnPath)) { + + if (!annChinese_->empty()) + annChinese_->clear(); + + annChinese_ = ml::ANN_MLP::load(path); + } + } +ͨģͶԳַʶ𣬾ʶʾ +int CharsIdentify::classify(cv::Mat f, float& maxVal, bool isChinses){ + int result = -1; + + cv::Mat output(1, kCharsTotalNumber, CV_32FC1); + ann_->predict(f, output); + + maxVal = -2.f; + if (!isChinses) { + result = 0; + for (int j = 0; j < kCharactersNumber; j++) { + float val = output.at(j); + // std::cout << "j:" << j << "val:" << val << std::endl; + if (val > maxVal) { + maxVal = val; + result = j; + } + } + } + else { + result = kCharactersNumber; + for (int j = kCharactersNumber; j < kCharsTotalNumber; j++) { + float val = output.at(j); + //std::cout << "j:" << j << "val:" << val << std::endl; + if (val > maxVal) { + maxVal = val; + result = j; + } + } + } + //std::cout << "maxVal:" << maxVal << std::endl; + return result; + } +ann_Ϊ֮ǰصõ·ģֱͣӵ?predict()?ɵõ outputֵΪʶijַУֱֵΪ0-6465֡ \ No newline at end of file