基於深度學習(端到端)的OCR文字識別

2021-08-31 07:17:54 字數 3311 閱讀 1436

開發環境:anaconda | python3.6 + tensorflow/keras/pytorch

該模型使用了 opencv 模組。

依賴包版本需求:你可以使用 pip install 包名/ conda install 包名 安裝依賴

easydict==

1.7tensorflow_gpu==

1.3.0

scipy==

0.18

.1numpy==

1.11

.1opencv_python==

3.4.0

.12cython==

0.27

.3pillow==

5.0.0

pyyaml==

3.12

from cython.build import cythonize

import numpy as np

from distutils.core import setup

try:

numpy_include = np.get_include(

)except attributeerror:

numpy_include = np.get_numpy_include(

)

setup(ext_modules=cythonize(

["bbox.pyx"

,"cython_nms.pyx"],

include_dirs=

[numpy_include]),

)(a)執行匯出cflags =

-i/home/zhao181/program1/anaconda2/lib/python2.

7/site-packages/numpy/core/include

你應該使用自己的numpy路徑。

(b)cd ***/text-detection-ctpn-master/lib/utils

和execute:python setup.py build

(c)將.so檔案從「build」目錄複製到***/text-detection-ctpn-master/lib/utils。

(5)cd ***/text-detection-ctpn-master並執行:python .

/ctpn/demo.py

順便說一下,我使用

anaconda2-

4.2.0

-linux-x86_64.sh和tensorflow-

1.3.0

-cp27-cp27mu-manylinux1_x86_64.whl(cpu)在ubuntu 16.04下執行。

如果您有乙個gpu裝置,請按以下方式構建庫

cd lib / utils

chmod + x make.sh

./make.sh

文字方向檢測網路-classify(vgg16)

文字區域檢測網路-ctpn(cnn+rnn)

endtoend文字識別網路-crnn(cnn+gru/lstm+ctc)

基於影象分類,在vgg16模型的基礎上,訓練0、90、180、270度檢測的分類模型(考慮到文字在紙張上出現的情況)。**參考angle/predict.py檔案,訓練8000張,準確率88.23%

關於 ocr 端到端識別:crnn網路請檢視

你可以執行demo.py 寫入測試的路徑來測試識別效果,

如果想要顯示ctpn的結果,修改檔案./ctpn/ctpn/other.py 的draw_boxes函式的最後部分,cv2.inwrite(『dest_path』,img),如此,可以得到ctpn檢測的文字區域框以及影象的ocr識別結果

工程專案目錄

"""

root

.├── ctpn

| ├── __init__.py

| ├── demo.py

| ├── demo_pb.py

| ├── generate_pb.py

| ├── text.yml

| └── train_net.py

├── data

| ├── demo

| ├── oriented_results

| ├── results

| ├── ctpn.pb

| └── results

└── lib

├── __pycache__

├── datasets

├── fast_rcnn

├── networks

├── prepare_training_data

├── roi_data_layer

├── rpn_msr

├── text_connector

├── utils

└── __init__.py

"""

1 對ctpn進行訓練

2 對crnn進行訓練

parser.add_argument( 『–crnn』, help=「path to crnn (to continue training)」, default=預訓練權重的路徑)

parser.add_argument( 『–experiment』, help=『where to store samples and models』, default=模型訓練的權重儲存位置,這個自己指定)

對於純文字的識別結果還行,感覺可以在crnn網路在加以改進,現在的crnn中的cnn有點淺,並且rnn層為單層雙向+attention,目前正在針對這個地方進行改動,使用遷移學習,以restnet為特徵提取層,使用多層雙向動態rnn+attention+ctc的機制,將模型加深。

關於訓練需求準備

準備資料

根據您的資料集修改prepare_training_data / split_label.py中的路徑和gt_path。並執行:

cd lib/prepare_training_data

python split_label.py

資料集準備好後:

python tovoc.py

將準備好的訓練資料轉換為voc格式。它將生成乙個名為textvoc的資料夾。將此資料夾移動到資料/然後執行:

cd ../../data

ln -s textvoc vocdevkit2007

訓練

python ./ctpn/train_net.py

特別鳴謝

2 9 什麼是端到端的深度學習?

端到端學習到底是什麼呢?簡而言之,以前有一些資料處理系統或者學習系統,它們需要多個階段的處理。那麼端到端深度學習就是忽略所有這些不同的階段,用單個神經網路代替它。以語音識別為例,你的目標是輸入x,比如說一段音訊,然後把它對映到乙個輸出y,就是這段音訊的聽寫文字。所以和這種有很多階段的流水線相比,端到...

端到端學習

傳統的影象識別問題 將過程分解為預處理,特徵提取和選擇,分類器設計等若干步驟。優點 把複雜的問題分解為簡單 可控且清晰的若干小的子問題。缺點 儘管可以在子問題上得到最優解,但子問題上的最優解並不意味著就能得到全域性問題的最後解。深度學習影象識別 提供了一種端到端的學習正規化 整個學習的流程並不進行人...

端到端的文字檢測識別

選自iccv 2017 澳大利亞阿德萊德大學 沈春華老師組的作品 towards end to end text spotting with convolutional recurrent neural networks 是目前為止第一篇提出端到端 ocr文字檢測 識別的文章。文章主要3點貢獻 1 ...