当前位置:   article > 正文

文档扫描识别——OpenCV与C++实现OCR文字识别_c++ ocr

c++ ocr

前言

1.前面演示了如何通过线段检测后得到拍照文档的四个校正点,后把文档校正,接下就是OCR识别,其实在OCR的时,也可以不用做校正,但对部分场景下的文档,识别精度可能没有那么好而已。
2.考虑到之后要在移动端上做APP,在选择网络模型时要考虑到移动端的算力,只能选择适合移动端的小模型,chineseocr_lite和paddle Mobile都是移动端上不错的选择,我这里试用了chineseocr_lite的模型。
3.我的开发环境是win10, vs2019, opencv4.5, ncnn,如果要启用GPU加速,所以用到VulkanSDK,实现语言是C++。
4.带GUI的效果演示:
校正过之后的效果:
在这里插入图片描述

没有校正的效果:
在这里插入图片描述

项目流程

1.文本检测就是把文档上所有的文字给检测出来,检测到之后才能切行识别,在一些场景下,如果没有做文档校正的话,文档里面很容易出现检测不到的文本。
2.文本行角度检测,就是检测当前文本行的文字方向,其实这步可以不做,这个模型也可以用来做文档文字方向旋转。
3.文本识别,就是把检测到的文本行一行一行的识别。

工程源码

1.代码太多了,这里就不展示了,整个工程源码和可执行GUI测试程序都上传到CSND,源码都按接口方式写好,只要实例化一个对象就可以调用接口,调用示例如下:

#include "MasterOCR.h"
#include <iostream>
#include <opencv2/opencv.hpp>

//OCR
std::string ocr_model = "models/ocr/ncnn/";
std::string key_path = "models/ocr/key/keys_v1.txt";


int main()
{
	LiteNcnnOCR lite_ocr;
	lite_ocr.initModel(ocr_model, key_path, 4, true);

	cv::Mat cv_src = cv::imread("1.jpg",1);

	if (!cv_src.empty())
	{
		std::vector<std::string> result_str;
		lite_ocr.masterOcr(cv_src, result_str);
		cv::cvtColor(lite_ocr.cv_padding, cv_src, cv::COLOR_RGB2BGR);
		drawTextBoxs(cv_src, lite_ocr.text_boxs, 2);

		for (auto v : result_str)
		{
			std::cout << v << 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

2.资源
可执行exe:https://download.csdn.net/download/matt45m/76348219
学习交流可加企鹅群:767133823

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/650371
推荐阅读
相关标签
  

闽ICP备14008679号