tesseract-ocr之python和Cpp的分别调用方法及其tesseractV5.0训练方法

tesseract是是谷歌公司开发得到通用文字识别的一个库,可以训练图集,让这个库识别更准确。相关软件下载链接在最下面

以下操作都是在系统拥有tesseract4.0应用程序的情况下实现的,具体的下载链接如下:https://digi.bib.uni-mannheim.de/tesseract/

一、Python3.6.5 调用tesseract

环境准备:

  • Python 3.6.5
  • pytesseract 0.3.4 (pip install pytesseract == 0.3.4)
  • tesseract安装环境

代码如下:

from PIL import Image
import pytesseract


class Output:
    BYTES = 'bytes'
    DATAFRAME = 'data.frame'
    DICT = 'dict'
    STRING = 'string'



def ocr():
    '''
    参数说明:图片、输出样式、识别语言包、其他配置(--)
    --psm 7 表示一行文本,提升识别精准度
    --oem 3 表示正常识别字符集
    tessedit_char_whitelist=0123456789R  识别白名单
    '''
    text = pytesseract.image_to_string(Image.open("./ocr.png"), output_type=Output.DICT, lang="eng", config="--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789R")
    return text["text"]

二、C++调用

// 在此之前要准备好环境相应的bin  include  lib 文件,下面是4.0版本
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <tesseract/baseapi.h>
#include <iostream>

int main()
{
	// Load image
	cv::Mat im = cv::imread("C:/Users/Administrator/Desktop/test-ocr/images/888.png");
	if (im.empty())
	{
		std::cout << "Cannot open source image!" << std::endl;
		system("pause");
		return -1;
	}

	cv::Mat gray;
	cv::cvtColor(im, gray, CV_BGR2GRAY);
	// ...other image pre-processing here...

	// Pass it to Tesseract API
	tesseract::TessBaseAPI tess;
	tess.Init(NULL, "eng", tesseract::OEM_DEFAULT);
	tess.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz0123456789"); // 目前没起作用
	tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
	tess.SetImage((uchar*)gray.data, gray.cols, gray.rows, 1, gray.cols);

	// Get the text
	char* out = tess.GetUTF8Text();
	std::cout << out << std::endl;

	system("pause");
	return 0;
}

三、参数说明

关于上面参数 psm 说明:

Page segmentation modes:(参数 --psm 说明)
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,

// 如下为c++说明
enum PageSegMode {
  PSM_OSD_ONLY,       ///< Orientation and script detection only.
  PSM_AUTO_OSD,       ///< Automatic page segmentation with orientation and
                      ///< script detection. (OSD)
  PSM_AUTO_ONLY,      ///< Automatic page segmentation, but no OSD, or OCR.
  PSM_AUTO,           ///< Fully automatic page segmentation, but no OSD.
  PSM_SINGLE_COLUMN,  ///< Assume a single column of text of variable sizes.
  PSM_SINGLE_BLOCK_VERT_TEXT,  ///< Assume a single uniform block of vertically
                               ///< aligned text.
  PSM_SINGLE_BLOCK,   ///< Assume a single uniform block of text. (Default.)
  PSM_SINGLE_LINE,    ///< Treat the image as a single text line.
  PSM_SINGLE_WORD,    ///< Treat the image as a single word.
  PSM_CIRCLE_WORD,    ///< Treat the image as a single word in a circle.
  PSM_SINGLE_CHAR,    ///< Treat the image as a single character.
  PSM_SPARSE_TEXT,    ///< Find as much text as possible in no particular order.
  PSM_SPARSE_TEXT_OSD,  ///< Sparse text with orientation and script det.
  PSM_RAW_LINE,       ///< Treat the image as a single text line, bypassing
                      ///< hacks that are Tesseract-specific.

  PSM_COUNT           ///< Number of enum entries.
};

关于参数 oem 说明:

enum OcrEngineMode {
  OEM_TESSERACT_ONLY,           // Run Tesseract only - fastest; deprecated
  OEM_LSTM_ONLY,                // Run just the LSTM line recognizer.
  OEM_TESSERACT_LSTM_COMBINED,  // Run the LSTM recognizer, but allow fallback
                                // to Tesseract when things get difficult.
                                // deprecated
  OEM_DEFAULT,                  // Specify this mode when calling init_*(),
                                // to indicate that any of the above modes
                                // should be automatically inferred from the
                                // variables in the language-specific config,
                                // command-line configs, or if not specified
                                // in any of the above should be set to the
                                // default OEM_TESSERACT_ONLY.
  OEM_COUNT                     // Number of OEMs
};

四、训练字符集

还没开始搞!记得提醒我一下。。。。。。【开始啦 开始啦…】

如下网址是训练字符集的教程,需要tesseract5.0版本

https://blog.csdn.net/m0_37693841/article/details/105672637

0、环境准备

链接:https://pan.baidu.com/s/13GOAwDxR4e1KHDOulGxjuA
提取码:9nll
复制这段内容后打开百度网盘手机App,操作更方便哦

如上连接,文件包括

  • jTessBoxEditor
  • jdk-14.0.1_windows-x64_bin.exe
  • tesseract-ocr-w64-setup-v5.0.0.20190623.exe
  • eng.traineddata

首先安装jdk,后安装ocr,jTessBoxEditor只需要解压到文件夹即可

注意:OCR安装后需要在环境变量里面添加

然后在添加:TESSDATA_PREFIX -> D:\TESS-OCR\Tesseract-OCR\tessdata 将字符文件目录添加进来

1、生成box文件、

打开jTessBoxEditor 软件,点击tools -> Merge,选择需要训练的图片,然后储存为一张tiff

生成tiff文件,注意格式:<语言名.字体名.版本号> 如:ocr-R47.eng.exp0

生成lstmbox文件,用如下命令行

tesseract eng-ocr.eng.exp0.tif eng-ocr.eng.exp0 -l eng --psm 6 lstmbox

2、矫正字符

继续打开jTessBoxEditor

点击 box editor -> open 打开刚刚生成的tiff文件,会自动关联box文件

3、生成LSTMF文件用于LSTM训练

命令行输入:

tesseract eng-ocr.eng.exp0.tif eng-ocr.eng.exp0 -l eng --psm 6 lstm.train

此时会生成一个 **eng-ocr.eng.exp0.lstmf ** 文件,后文用上

4、提取LSTM文件

刚刚下载的文件"eng.traineddata"表示的是纯英文字符集,如果是要中文字符集就选择中文,

从https://github.com/tesseract-ocr/tessdata_best下载所需语言的.traineddataw文件,放入文件夹,命令行输入如下

combine_tessdata -e eng.traineddata eng.lstm

5、LSTM训练

创建一个名字为 eng.training_files.txt 文件,文件中写入 eng-ocr.eng.exp0.lstmf 文件的绝对路径

输入如下命令开始训练

lstmtraining --debug_interval -1 --max_iterations 100 --continue_from="E:\tesseract\eng.lstm" --model_output="E:\tesseract\output" --train_listfile="E:\tesseract\eng.training_files.txt" --traineddata="F:\tesseract\eng.traineddata"

训练时参数如下:

  • model_output 模型训练输出的路径
  • continue_from 训练从哪里开始,这里指定从第4步中提取的eng.lstm文件。也可从之前训练生成的阶段文件output_checkpoint开始。
  • train_listfile 指定上一步创建的chi_sim.training_files.txt文件路径。
  • traineddata 第4步中下载的.traineddata文件的路径。
  • debug_interval 当值为-1时,训练结束,会显示训练的一些结果参数,此参数可略去。
  • max_iterations 指明训练遍历次数。也可以使用这个参数:–target_error_rate 0.01 训练至错误率低于0.01%终止。

训练完之后会生成两个文件: output_checkpoint output1.667_2.checkpoint,表示成功

6、合并训练结果为 .traineddata 文件

命令行输入:

lstmtraining --stop_training --continue_from="E:\tesseract\output_checkpoint" --traineddata="E:\tesseract\eng.traineddata" --model_output="E:\tesseract\eng.traineddata"

参数如下:

  • stop_training 默认要有
  • continue_from 上一步生成的output_checkpoint文件路径
  • traineddata 第4步中下载的已有.traineddata文件的路径
  • model_output chi.traineddata 输出的路径和文件名

命令成功之后会生成文件: eng_ocr.traineddata

之后再将生成的文件放入到tesseract的tessdata文件夹中,存放语言,调用的时候用 -l eng-ocr 来调用\

文件下载链接

百度网盘:

链接:https://pan.baidu.com/s/13GOAwDxR4e1KHDOulGxjuA
提取码:9nll

如果有积分也可以支持一下-CSDN下载:
https://download.csdn.net/download/qq_42874244/12532423

写在最后:(链接挂了联系我 https://abraverman.gitee.io/ )

经历了漫长的实验和试错,终于是完成了识别训练,网上很多文章,有正确的,也有错误的。不管怎样,我终究是完成了。开心

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你想了解关于在PyCharm中使用PythonTesseract-OCR吗?要使用Tesseract-OCR,你需要安装tesseract-ocr库和pytesseract库。 首先,你需要安装Tesseract-OCR。根据你的操作系统,你可以通过以下方式安装: 对于Windows用户: 1. 访问https://github.com/UB-Mannheim/tesseract/wiki下载Tesseract-OCR的安装文件。 2. 执行安装文件,并按照安装向导的指示进行安装。 对于Mac用户: 1. 使用Homebrew安装Tesseract-OCR。在终端中输入以下命令: ``` brew install tesseract ``` 2. 安装完成后,Tesseract-OCR会自动添加到你的系统路径中。 对于Linux用户: 1. 打开终端,并根据你的Linux发行版输入以下命令来安装Tesseract-OCR: ``` sudo apt-get install tesseract-ocr ``` 或者 ``` sudo yum install tesseract ``` 安装完成后,确保Tesseract-OCR已正确配置并能在终端中使用。你可以在终端中运行以下命令来测试: ``` tesseract --version ``` 接下来,你需要在PyCharm中安装pytesseract库。可以通过以下步骤完成: 1. 打开PyCharm,并创建一个新的Python项目。 2. 在PyCharm的终端中运行以下命令,安装pytesseract: ``` pip install pytesseract ``` 3. 安装完成后,你可以开始在PyCharm中使用pytesseract库来使用Tesseract-OCR了。 下面是一个简单的示例代码,演示如何在PyCharm中使用pytesseract库进行图像文字识别: ```python import pytesseract from PIL import Image # 打开图像 image = Image.open('image.jpg') # 使用pytesseract进行文字识别 text = pytesseract.image_to_string(image) # 输出识别结果 print(text) ``` 确保将上述示例中的'image.jpg'替换为你要识别的图像路径。 希望这能帮到你!如果你有其他问题,请随时问我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值