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

95 篇文章 57 订阅
32 篇文章 24 订阅

前言

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;
		}
	}
}

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值