# text-detection
## 简介
为了能将一张图像中的多行文本识别出来,可以将该任务分为两步:
1. 检测图像中每一行文本的位置
2. 根据位置从原始图像截取出一堆子图像
3. 只需识别出子图像的文字,再进行排序组合即可
因此,采用两类模型:
1. 文本检测:CTPN
2. 文本识别:Densenet + ctc
## 安装
### 运行环境
OS: win10
Python: 3.6
### 安装步骤
1. 安装tensorflow 1.9.0,若电脑配置了gpu环境,请选择gpu版,否则选择cpu版
```sh
pip install tensorflow==1.9.0 # 1. for cpu
pip install tensorflow-gpu==1.9.0 # 2. for gpu
```
2. 安装该包
```python
python setup.py sdist
cd dist/
pip install dlocr-0.1.tar.gz
```
## 执行速度
| 图像大小 | 处理器 | 文本行数量 | 速度 |
| -------- | --------- | ---------- | ----- |
| 500kb | 1070ti | 20 | 420ms |
| 500kb | Tesla k80 | 20 | 1s |
## 使用
### OCR
用于识别一张图片中的文字
- 编程方式
```python
import time
import dlocr
if __name__ == '__main__':
ocrModel = dlocr.get_or_create()
start = time.time()
bboxes, texts = ocrModel.detect("../asset/demo_ctpn.png")
print('\n'.join(texts))
print(f"cost: {(time.time() - start) * 1000}ms")
```
`get_or_create()` 支持以下参数用于使用自己训练的模型:
- ctpn_weight_path
- ctpn_config_path
- densenet_weight_path
- densenet_config_path
- dict_path
参数说明:见以下命令行方式中的参数说明。
- 命令行方式
```sh
> python -m dlocr -h
usage: text_detection_app.py [-h] [--image_path IMAGE_PATH]
[--dict_file_path DICT_FILE_PATH]
[--densenet_config_path DENSENET_CONFIG_PATH]
[--ctpn_config_path CTPN_CONFIG_PATH]
[--ctpn_weight_path CTPN_WEIGHT_PATH]
[--densenet_weight_path DENSENET_WEIGHT_PATH]
[--adjust ADJUST]
optional arguments:
-h, --help show this help message and exit
--image_path IMAGE_PATH
图像位置
--dict_file_path DICT_FILE_PATH
字典文件位置
--densenet_config_path DENSENET_CONFIG_PATH
densenet模型配置文件位置
--ctpn_config_path CTPN_CONFIG_PATH
ctpn模型配置文件位置
--ctpn_weight_path CTPN_WEIGHT_PATH
ctpn模型权重文件位置
--densenet_weight_path DENSENET_WEIGHT_PATH
densenet模型权重文件位置
--adjust ADJUST 是否对倾斜的文本进行旋转
```
1. ctpn模型权重文件位置不指定默认使用`weights/weights-ctpnlstm-init.hdf5`
2. ctpn模型配置文件位置不指定默认使用`config/ctpn-default.json`
3. densenet模型权重文件位置不指定默认使用`weights/weights-densent-init.hdf5`
4. densenet模型配置文件位置不指定默认使用`config/densent-default.json`
5. 字典文件位置不指定默认使用`dictionary/char_std_5990.txt`
示例:
```sh
python -m dlocr --image_path asset/demo_ctpn.png
```
<div>
<img src="asset/demo_ctpn.png" width="45%">
<img src="asset/text_detect_recognited.png" width="45%">
</div>
### CTPN
用于定于图像中文字的位置
- 编程方式
```python
from dlocr import ctpn
if __name__ == '__main__':
ctpn = ctpn.get_or_create()
ctpn.predict("asset/demo_ctpn.png", "asset/demo_ctpn_labeled.jpg")
```
- 命令行方式
```sh
> python dlocr.ctpn_predict.py -h
usage: ctpn_predict.py [-h] [--image_path IMAGE_PATH]
[--config_file_path CONFIG_FILE_PATH]
[--weights_file_path WEIGHTS_FILE_PATH]
[--output_file_path OUTPUT_FILE_PATH]
optional arguments:
-h, --help show this help message and exit
--image_path IMAGE_PATH
图像位置
--config_file_path CONFIG_FILE_PATH
模型配置文件位置
--weights_file_path WEIGHTS_FILE_PATH
模型权重文件位置
--output_file_path OUTPUT_FILE_PATH
标记文件保存位置
```
1. 权重文件位置不指定默认使用`weights/weights-ctpnlstm-init.hdf5`
2. 配置文件位置不指定默认使用`config/ctpn-default.json`
示例:
```sh
python ctpn_predict.py --image_path asset/demo_ctpn.png --output_file_path asset/demo_ctpn_labeled.jpg
```
<div>
<img src="asset/demo_ctpn.png" width="45%">
<img src="asset/demo_ctpn_labeled.jpg" width="45%">
</div>
### Densenet
用于识别固定图像高度中的文字,默认图像高度为32
- 编程方式
```python
from dlocr.densenet import load_dict, default_dict_path
from dlocr import densenet
if __name__ == '__main__':
densenet = densenet.get_or_create()
text, img = densenet.predict("asset/demo_densenet.jpg", load_dict(default_dict_path))
print(text)
```
- 命令行方式
```sh
> python dlocr.densenet_predict.py -h
usage: densenetocr_predict.py [-h] [--image_path IMAGE_PATH]
[--dict_file_path DICT_FILE_PATH]
[--config_file_path CONFIG_FILE_PATH]
[--weights_file_path WEIGHTS_FILE_PATH]
optional arguments:
-h, --help show this help message and exit
--image_path IMAGE_PATH
图像位置
--dict_file_path DICT_FILE_PATH
字典文件位置
--config_file_path CONFIG_FILE_PATH
模型配置文件位置
--weights_file_path WEIGHTS_FILE_PATH
模型权重文件位置
```
1. 权重文件位置不指定默认使用`weights/weights-densent-init.hdf5`
2. 配置文件位置不指定默认使用`config/densent-default.json`
3. 字典文件位置不指定默认使用`dictionary/char_std_5990.txt`
示例:
```sh
python densenetocr_predict.py --image_path asset/demo_densenet.jpg
```
<div>
<img src="asset/demo_densenet.jpg" width="45%">
<img src="asset/demo_densenet_recognited.png" >
</div>
## 训练
### 数据集说明
- CTPN 训练使用的数据集格式与VOC数据集格式相同,目录格式如下:
```json
- VOCdevkit
- VOC2007
- Annotations
- ImageSets
- JPEGImages
```
- Densenet + ctc 使用的数据集分为3部分
- 文字图像
- 标注文件:包括图像路径与所对应的文本标记(train.txt, test.txt)
- 字典文件:包含数据集中的所有文字 (char_std_5990.txt)
数据集链接:
- ctpn: 链接: https://pan.baidu.com/s/19iMHzjvNfQS22NdFjZ_2XQ 提取码: nw7a
- densenet: 链接: https://pan.baidu.com/s/1LT9whsTJx-S48rtRTXw5VA 提取码: rugb
关于创建自己的文本识别数据集,可参考:[https://github.com/Sanster/text_renderer](https://github.com/Sanster/text_renderer)。
### CTPN 训练
```sh
> python -m dlocr.ctpn_train -h
usage: ctpn_train.py [-h] [-ie INITIAL_EPOCH] [--epochs EPOCHS] [--gpus GPUS]
[--images_dir IMAGES_DIR] [--anno_dir ANNO_DIR]
[--config_file_path CONFIG_FILE_PATH]
[--weights_file_path WEIGHTS_FILE_PATH]
[--save_weights_file_path SAVE_WEIGHTS_FILE_PATH]
optional arguments:
-h, --help show this help message and exit
-ie INITIAL_EPOCH, --initial_epoch INITIAL_EPOCH
初始迭代数
--epochs EPOCHS 迭代数
--gpus GPUS gpu的数量
--images_dir IMAGES_DIR
图像位置
--anno_dir ANNO_DIR 标注文件位置
--config_file_path CONFIG_FILE_PATH
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于深度学习的文本识别算法(OCR)项目.zip (66个子文件)
fund-algorithm-v2-master
scrapy
tiantian.py 8KB
danjuanFund.py 6KB
app.py 11KB
asset
demo_densenet.jpg 2KB
demo_ctpn.png 500KB
1.png 185KB
demo_ctpn_labeled.jpg 302KB
demo_densenet_recognited.png 4KB
text_detect_recognited.png 27KB
data
fund_sale
train.tsv 843B
dev.tsv 126B
predict.tsv 7B
test.tsv 216B
fund_risk
train.tsv 843B
dev.tsv 126B
predict.tsv 7B
test.tsv 216B
base_data
train.tsv 843B
dev.tsv 126B
predict.tsv 7B
test.tsv 216B
dihuiqitajijinguanliren
train.tsv 911B
dev.tsv 126B
predict.tsv 7B
test.tsv 216B
kuadashouyi
train.tsv 843B
dev.tsv 126B
predict.tsv 7B
test.tsv 216B
dlocr
__init__.py 326B
dictionary
char_std_5990.txt 23KB
ctpn_train.py 3KB
densenet
__init__.py 870B
data_loader.py 5KB
core.py 8KB
weights
.gitignore 0B
densenet_predict.py 1KB
densenet_train.py 5KB
text_detection_app.py 7KB
custom
__init__.py 61B
callbacks.py 6KB
__main__.py 2KB
ctpn_predict.py 1KB
ctpn
__init__.py 635B
lib
utils.py 11KB
__init__.py 39B
text_connect_cfg.py 281B
text_proposal_connector_oriented.py 4KB
text_proposal_graph_builder.py 3KB
other.py 832B
text_proposal_connector.py 2KB
data_loader.py 2KB
core.py 8KB
config
densent-default.json 168B
ctpn-default.json 65B
fine_tuning.py 3KB
predict.py 2KB
web
scrapy
ScrapySwitch.py 462B
runnable
ThreadFunc.py 592B
file_page_query.py 2KB
ctpnOcr.py 394B
ViolateDataset.py 792B
.gitignore 514B
similarity
sensim.py 3KB
simnet_bow_serving_demo.py 685B
README.md 12KB
共 66 条
- 1
资源评论
sec0nd_
- 粉丝: 6434
- 资源: 2069
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 修改LATEX.pdf
- IMG_20241125_120800.jpg
- AI助手Copilot辅助Go+Flutter打造全栈式在线教育系统课程17章
- 2024下半年,CISSP官方10道练习题
- JD-Core是一个用JAVA编写的JAVA反编译器 .zip
- 时间复杂度与数据结构:算法效率的双重奏
- QT 简易项目 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现
- YOLOv3网络架构深度解析:关键特性与代码实现
- ACOUSTICECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK
- 深入解析:动态数据结构与静态数据结构的差异
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功