c++ 调用opencv+tesseract做图片文字识别
2020年12月28日22:08:08
环境:windows10 vscode cmake vcpkg
vcpkg install opencv
vcpkg install tesseract
参考手册
注意:这里的手册或者文档基本都是是python,但是我对比过opencv官方的doxygen版本的文档,方法命名和参数基本一致,所以可以参考着看
注意网络不好的话使用
tessdata文件下放入
chi_sim.traineddata
chi_sim_vert.traineddata
eng.traineddata
逻辑很简单,通过opencv是降噪图片数据,给tesseract-ocr来读取数据,但是写的比较简单,所以识别度比较低,如果需要提高识别率,需要好好调试
注意:tesseract在某些windows10上会出现可以编译通过,但是不出结果的情况,目前没时间调试具体是版本问题还是环境问题
开发的话建议还是使用vscode的 remote-ssh,减少线上线下差异,影响开发进度
#define _CRT_SECURE_NO_DEPRECATE#include "main.h"
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <leptonica/allheaders.h>
#include <tesseract/baseapi.h>
#include <tesseract/publictypes.h>
#include <opencv2/imgproc.hpp>using namespace cv;
int main()
{std::string image_name = "3.jpg";Mat imageMat;imageMat = imread(image_name);if (imageMat.data == nullptr){printf("No image data \n");return -1;}Mat blurMat;// 图像模糊// cv::medianBlur(imageMat, blurMat, 5);// 灰度图Mat z1, z2;cv::cvtColor(imageMat, z1, cv::COLOR_BGR2GRAY);// 阈值// cv::threshold(z1, z2, 214, 255, cv::THRESH_BINARY);// 自动降噪cv::adaptiveThreshold(z1, g_grayImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 7, 25);// 显示图片namedWindow("Image1", WINDOW_AUTOSIZE);imshow("Image1", g_grayImage);//waitKey(0);//控制台中文异常std::system("chcp 65001");char *outText;tesseract::TessBaseAPI api;// Initialize tesseract-ocr with English, without specifying tessdata pathif (api.Init(NULL, "chi_sim")){std::cout << stderr << std::endl;exit(1);}// 读取图片路径// Pix *image = pixRead("3.jpg");api.SetImage((uchar *)g_grayImage.data, g_grayImage.cols, g_grayImage.rows, 1, g_grayImage.cols);// Get OCR resultoutText = api.GetUTF8Text();if (outText == nullptr){std::cout << "没有数据" << std::endl;}// printf("OCR output:\n%s", outText);std::cout << outText << std::endl;// Destroy used object and release memoryapi.End();// delete api;delete[] outText;// pixDestroy(&image);return 0;
}
结果:
Active code page: 65001
Warning: Invalid resolution 0 dpi. Using 70 instead.
文 华 财经 ( 编辑 整理 李 志 伟 ) -- 以 下 为 12 月 24 日 伦敦 金属 交易 所 (LME) 库 存 变化 情况 ( 单位 :
吨 )
3
锡 | 136100 |! -3275|!1 -2.745
得 “| 1372350 | 1 -5750|1 -0.423
非 205900 |! -325|1 -0.165
246654 | 人 +336|T +0.149%
133850 |T +75|T +0.065%
轿 2105 一 -625|1 -22.89%
外 S 人 | 4200 | -4300|1 -370%
cmake
# 设置cmake版本
cmake_minimum_required (VERSION 3.8)
set(CMAKE_TOOLCHAIN_FILE "D:/cpp/vcpkg/scripts/buildsystems/vcpkg.cmake")message(STATUS "cmake root:${CMAKE_CURRENT_SOURCE_DIR}")#设置编译器版本
set(CMAKE_CXX_STANDARD 17)
# 设置项目名称 cpptest
# project(cpptest)
# 项目类型cxx c++
project(cpptest CXX)
# 打印当前编译器标志
message("C++ compiler flags: ${CMAKE_CXX_FLAGS}")
# 输出一些信息,调试
message(STATUS "name:${PROJECT_NAME}")#查找当前目录下的所有源文件,然后将源文件名保存到变量DIR_SRCS里面
aux_source_directory(. DIR_SRCS)# 设置cmake项目之后的输出路径
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${opencv_test_SOURCE_DIR}/bin)
# 内存泄露检查
# SET(CMAKE_CXX_FLAGS "-fsanitize=address")# 引入opencv
find_package(OpenCV CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
# 引入Tesseract
find_package(Tesseract CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${Tesseract_INCLUDE_DIRS})
# 引入Leptonica
find_package(Leptonica CONFIG REQUIRED)
INCLUDE_DIRECTORIES(${Leptonica_INCLUDE_DIRS})# 指定生成目标
# add_executable (${PROJECT_NAME} "main.cpp")
# 将源代码添加到此项目的可执行文件
add_executable(${PROJECT_NAME} ${DIR_SRCS})# 连接到项目
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(${PROJECT_NAME} libtesseract)
target_link_libraries(${PROJECT_NAME} leptonica)# target_link_libraries(${PROJECT_NAME} ${Tesseract_LIBS})
# target_link_libraries(${PROJECT_NAME} ${leptonica_LIBS})#引入第三方文件,可以引入非cmake项目
# message(STATUS ${Tesseract_INCLUDE_DIRS})
# message(STATUS ${Tesseract_LIBS})
opencv还提供简单的调试工具
#define _CRT_SECURE_NO_DEPRECATE#include "main.h"
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <leptonica/allheaders.h>
#include <tesseract/baseapi.h>
#include <tesseract/publictypes.h>
#include <opencv2/imgproc.hpp>using namespace cv;#define WINDOW_NAME "窗口"int g_nThresholdValue = 100;
int g_nThresholdType = 3;void on_Threshold(int, void *);
Mat g_srcImage, g_grayImage, g_dstImage;int main()
{std::string image_name = "3.jpg";Mat imageMat;imageMat = imread(image_name);if (imageMat.data == nullptr){printf("No image data \n");return -1;}Mat blurMat;// 图像模糊// cv::medianBlur(imageMat, blurMat, 5);// 灰度图Mat z1, z2;cv::cvtColor(imageMat, g_grayImage, cv::COLOR_BGR2GRAY);//调试模式namedWindow(WINDOW_NAME);createTrackbar("模式", WINDOW_NAME, &g_nThresholdType, 4, on_Threshold);createTrackbar("参数值", WINDOW_NAME, &g_nThresholdValue, 255, on_Threshold);on_Threshold(0, 0);waitKey(0);return 0;
}void on_Threshold(int, void *)
{threshold(g_grayImage, g_dstImage, g_nThresholdValue, 255, g_nThresholdType);imshow(WINDOW_NAME, g_dstImage);
}
c++ 调用opencv+tesseract做图片文字识别相关推荐
- python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- Java 使用开源类库 Tesseract 实现图片文字识别
Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选.Tess4J则是Tesseract在Java上的应用.Tess4J的官网地址为:http://tess4j ...
- Python识别验证码,基于Tesseract实现图片文字识别
一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[li ...
- Python调用百度OCR实现图片文字识别
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- Android Studio调用百度API(图片文字识别)
1.登录百度AI平台(https://ai.baidu.com/),下载license文件 包名填写内容: 下载好的文件夹内包含四个文件 (OCR-Android-SDK.md文件里有使用说明) (1 ...
- Python3 图片文字识别翻译——调用百度AI、百度翻译和有道翻译的API
文章目录 Python3 图片文字识别翻译--调用百度AI.百度翻译和有道翻译的API 一.演示 二. API准备 三. 图片文字识别--调用百度AI文字识别API 四. 文字翻译 1. 百度翻译 请 ...
- 调用百度ai接口实现图片文字识别详解
调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...
- Java调用百度OCR文字识别API实现图片文字识别软件
java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...
最新文章
- js 判断 是否为android
- 2018热点总结:BERT最热,GANs最活跃,每20分钟就有一篇论文...
- Java数据结构和算法:哈夫曼树
- @PropertySource@ImportResource@Bean
- python3 x默认使用的编码_python3默认使用什么编码
- c语言1076素数,大学C语言考试题库(答案)-20210412093908.docx-原创力文档
- 怎么取消打开文件的安全警告?
- sql 上亿 查询_在文件上使用 SQL 查询的示例
- ASP.NET组件与开发之复合控件的事件处理
- 微信小程序云开发教程-分页查询
- JavaEE Day10 JavaScript高级
- Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
- 每秒浮点运算次数FLOPS
- 掘进机数字孪生,掘进机远程智能控制
- 体验更简单的 DM —— v1.0.2
- 诡异事件之--数据库存3.12E8 但是自动变成了31.00
- 域名转入阿里云操作说明
- webGl shader的学习记录(六):如何画出一个渐变色填充的三角形
- maven引入支付宝SDK
- web前端读取串口数据
热门文章
- 设计模式01-设计模式中的七大原则
- 初级计算机硬件试题,新版初级计算机操作员应知考试试题
- 简单实用的pandas技巧:如何将内存占用降低90%
- 建立正确的领导思维方式
- 【GD32】从0开始学GD32单片机(13)—— ADC模数转换器外设详解+PS2遥杆例程
- 计算机硬盘一直正在处理,win7电脑快速退出移动硬盘时一直提示设备正在使用中怎么办?...
- allergro音乐术语什么意思_音乐术语里面fz是什么意思?
- 中科大计算机苏黎世联邦理工,从国内top10到世界top10-苏黎世联邦理工offer到!...
- AI遮天传 DL-回归与分类
- 孙陶然:有能力的第三个标准是有亮点