SummerColdWind / Indefinite-length-text-recognition

基于Opencv的简单不定长文本识别
Apache License 2.0
14 stars 3 forks source link

Simple indefinite length text recognition

基于Opencv的简单不定长文本识别

Author: github.com/SummerColdWind

写在前面:

本项目是一个基于Python-Opencv,针对简单的单行不定长文本的识别。 本项目旨在为简单场景下的文字识别提供一个轻量级的解决方案。 项目基于简单的矩阵运算来决定输出,因此针对复杂场景下的文字识别, 你应该使用深度学习的方法来解决任务。


1.准备数据集

数据集应具有以下结构:

---dir_name
 |---image
 |---label.txt

数据集文件夹本身的名字可以是任意的,其中应该包含储存图片的文件夹image和储存标注信息的文本文件label.txt。 标注文件label.txt应具有如下格式:

1.png   -18
3.png   -18
4.png   -19
5.png   -30
6.png   -29
7.png   -28
8.png   -27
9.png   -26
10.png  -26
11.png  -26

每一行为一条数据,用 '\t' 进行分割,左侧为文件名,右侧为图片中的文字。

2.分割测试

使用tools文件夹下的show_split.py进行字符分割测试。

你应该在config文件夹中复制global.yml,然后重命名为自己的名字,进行分割参数调整。

Split:
  enlarge: 1 
  enhance_contrast: False
  threshold: 100
  adaptedThreshold: False
  threshold_bias: 0
  min_area: 0
  close_morphology: False
  kernel_size: (3,3)

然后启动show_split.py,输入数据集和配置文件的路径,观察分割效果并调整。

3.启动学习

导入学习器Learner进行模型的学习。

from opencv_digit_recognize.collection import Learner

result_path = './models/angle.qmodel'

learner = Learner()
learner.load(dataset='./dataset/angle', config_path='./config/angle.yml')
learner.learn()
learner.save(result_path)

实例化学习器后,指定数据集文件夹,然后使用learn方法进行学习,整个过程您无需其他操作。

最后使用save方法保存识别得到的模型,我们建议您将文件扩展名设置为“.qmodel”。

Tips:

打印learner可以输出所有学习到的字符列表。

调用learner的show方法可以查看学习到的标准化图片。

4.进行预测

from opencv_digit_recognize.collection import Predictor

result_path = './models/angle.qmodel'
predict_image = './dataset/angle/image/1.png'

predictor = Predictor()
predictor.load_model(result_path)
result = predictor.predict(predict_image)
print(result)

实例化预测器后,使用load_model方法导入模型,然后使用predict方法进行预测。