2020年12月28日22:08:08

环境:windows10 vscode cmake vcpkg

vcpkg install opencv

vcpkg install tesseract

参考手册

tesseract-ocr demo
https://github.com/tesseract-ocr/tessdoc/blob/master/APIExample.md
opencv
https://docs.opencv.org/master/index.html
https://www.w3cschool.cn/opencv/opencv-p2hd2ccj.html
http://www.woshicver.com/
https://apachecn.gitee.io/opencv-doc-zh/#/

注意:这里的手册或者文档基本都是是python,但是我对比过opencv官方的doxygen版本的文档,方法命名和参数基本一致,所以可以参考着看

注意网络不好的话使用

github下载加速网站
http://toolwa.com/github/
https://gh.api.99988866.xyz/
https://shrill-pond-3e81.hunsh.workers.dev/
1,语言数据
https://github.com/tesseract-ocr/langdata
2,训练过的数据
Tesseract 4.0x +添加了基于LSTM神经网络的新OCR引擎。最初它可以在x86 / Linux上正常运行(很好),并具有适用于100多种语言和35多种脚本的官方语言模型数据。有关各种类型的模型的详细信息,请参见数据文件。
4.00可从tessdata标记为4.00的版本获得模型文件。它具有从2016年11月开始的模型。可从以下链接获得各个语言文件的链接。
tessdata 4.00 2016年11月
4.0.0可从标记为4.0.0的tessdata获得用于版本和更高版本的模型文件。它具有2017年9月以来的旧模型,并已使用tessdata_bestLSTM模型的Integer版本进行了更新。这套训练有素的数据文件同时支持带有--oem 0和的LSTM模型的旧式识别器--oem 1。
这些模型可从以下Github存储库中获得。
tessdata
official以下Github存储库中提供了另外两组在Google培训下的受训练数据。这些没有旧模型,只有可用于的LSTM模型--oem 1。
tessdata_best
tessdata_fast
建议使用Google的训练好的数据
https://github.com/tesseract-ocr/tessdata_best

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做图片文字识别相关推荐

  1. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  2. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  3. Java 使用开源类库 Tesseract 实现图片文字识别

    Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选.Tess4J则是Tesseract在Java上的应用.Tess4J的官网地址为:http://tess4j ...

  4. Python识别验证码,基于Tesseract实现图片文字识别

    一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[li ...

  5. Python调用百度OCR实现图片文字识别

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  6. Android Studio调用百度API(图片文字识别)

    1.登录百度AI平台(https://ai.baidu.com/),下载license文件 包名填写内容: 下载好的文件夹内包含四个文件 (OCR-Android-SDK.md文件里有使用说明) (1 ...

  7. Python3 图片文字识别翻译——调用百度AI、百度翻译和有道翻译的API

    文章目录 Python3 图片文字识别翻译--调用百度AI.百度翻译和有道翻译的API 一.演示 二. API准备 三. 图片文字识别--调用百度AI文字识别API 四. 文字翻译 1. 百度翻译 请 ...

  8. 调用百度ai接口实现图片文字识别详解

    调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...

  9. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

最新文章

  1. js 判断 是否为android
  2. 2018热点总结:BERT最热,GANs最活跃,每20分钟就有一篇论文...
  3. Java数据结构和算法:哈夫曼树
  4. @PropertySource@ImportResource@Bean
  5. python3 x默认使用的编码_python3默认使用什么编码
  6. c语言1076素数,大学C语言考试题库(答案)-20210412093908.docx-原创力文档
  7. 怎么取消打开文件的安全警告?
  8. sql 上亿 查询_在文件上使用 SQL 查询的示例
  9. ASP.NET组件与开发之复合控件的事件处理
  10. 微信小程序云开发教程-分页查询
  11. JavaEE Day10 JavaScript高级
  12. Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
  13. 每秒浮点运算次数FLOPS
  14. 掘进机数字孪生,掘进机远程智能控制
  15. 体验更简单的 DM —— v1.0.2
  16. 诡异事件之--数据库存3.12E8 但是自动变成了31.00
  17. 域名转入阿里云操作说明
  18. webGl shader的学习记录(六):如何画出一个渐变色填充的三角形
  19. maven引入支付宝SDK
  20. web前端读取串口数据

热门文章

  1. 设计模式01-设计模式中的七大原则
  2. 初级计算机硬件试题,新版初级计算机操作员应知考试试题
  3. 简单实用的pandas技巧:如何将内存占用降低90%
  4. 建立正确的领导思维方式
  5. 【GD32】从0开始学GD32单片机(13)—— ADC模数转换器外设详解+PS2遥杆例程
  6. 计算机硬盘一直正在处理,win7电脑快速退出移动硬盘时一直提示设备正在使用中怎么办?...
  7. allergro音乐术语什么意思_音乐术语里面fz是什么意思?
  8. 中科大计算机苏黎世联邦理工,从国内top10到世界top10-苏黎世联邦理工offer到!...
  9. AI遮天传 DL-回归与分类
  10. 孙陶然:有能力的第三个标准是有亮点