Compare commits

...

327 Commits

Author SHA1 Message Date
dyning 2b16323080
Merge pull request #848 from tink2123/add_anno
6 years ago
tink2123 7f477619c0 fix typo
6 years ago
dyning 43874ba967
Merge pull request #847 from WenmuZhou/fix_cls_android_demo
6 years ago
littletomatodonkey d851f2c8d3
Merge pull request #858 from littletomatodonkey/fix_hub_serveing
6 years ago
littletomatodonkey ac1df3dbca fix hub serving draw
6 years ago
Daniel Yang e4b09948d1
Update FAQ.md
6 years ago
dyning 280cff56dc
Update README_ch.md
6 years ago
dyning 5da58b146c
Update README_ch.md
6 years ago
dyning 84a49ca05b
Update README.md
6 years ago
tink2123 fc512a84e3 add anno for rec
6 years ago
WenmuZhou ccd40ec85f set cls image_shape to 3,48,192
6 years ago
MissPenguin 8b64f4c2ea
Merge pull request #843 from LDOUBLEV/fixocr
6 years ago
Double_V 0c8bdc0885
Merge pull request #840 from lgcy/lgc_dev
6 years ago
Double_V e634afe76c
Merge pull request #839 from baiyfbupt/qat_issue
6 years ago
LDOUBLEV d0d0c4f95c update lite nb file,test=document_fix
6 years ago
baiyfbupt 3ec7d48c0f code refine
6 years ago
lgcy 3218b48148 fix lite crash bug
6 years ago
baiyfbupt 02ae18abf9 fix quant module
6 years ago
littletomatodonkey 815f20b550
Merge pull request #834 from tink2123/fix_srn
6 years ago
tink2123 5f8c3e07d9 fix srn fpn
6 years ago
tink2123 a5fbd902fe fix srn fpn
6 years ago
MissPenguin 5e25ed64a2
Update readme_en.md
6 years ago
littletomatodonkey 47703d16ce
Merge pull request #820 from littletomatodonkey/fix_cpp_doc
6 years ago
MissPenguin 764d8f5fc2
Update params.py
6 years ago
MissPenguin 2c35dafeb5
Update params.py
6 years ago
MissPenguin 358182a6d1
Update params.py
6 years ago
littletomatodonkey 829fe749cc test=document_fix, improve cpp infer doc
6 years ago
MissPenguin 8750361a5d
Merge pull request #817 from LDOUBLEV/fixocr
6 years ago
littletomatodonkey ecad10eb02
Merge pull request #816 from littletomatodonkey/add_tia
6 years ago
MissPenguin 51b57c47c7
Update utility.py
6 years ago
MissPenguin 04c5c6ab3b
Merge pull request #797 from wangjiawei04/ocr_0923
6 years ago
LDOUBLEV 1af833e2b6 fix doc typo
6 years ago
Jiawei Wang 63e4074ab4
Update serving_inference.md
6 years ago
Double_V 58e0a62799
Merge pull request #808 from baiyfbupt/patch-1
6 years ago
Double_V c320457d73
Merge pull request #810 from yukavio/develop
6 years ago
Jiawei Wang 83c420bf31
Update serving_inference.md
6 years ago
wangjiawei04 c67d04ad6e adapt to mobile model
6 years ago
Jiawei Wang e11b8aff79
Update serving_inference.md
6 years ago
littletomatodonkey 43f6ab7a63 fix gen label
6 years ago
wangjiawei04 62f85ec0bd remove utility
6 years ago
Double_V 115b517584
Merge pull request #814 from littletomatodonkey/add_tia
6 years ago
wangjiawei04 0005f4d171 add inference to serving model tool
6 years ago
yukavio 2d07a0bcb9 fix slim prune
6 years ago
MissPenguin 5d202e44d7
Merge pull request #811 from LDOUBLEV/fixocr
6 years ago
MissPenguin d93f006212
Update README_ch.md
6 years ago
MissPenguin 9411df5ae7
Merge pull request #815 from MissPenguin/develop
6 years ago
MissPenguin f196376249 update readme
6 years ago
littletomatodonkey 3a18b08fc5 fix warn
6 years ago
littletomatodonkey 896e573975 add tia aug
6 years ago
MissPenguin 2dfb1cfaa1
Update README_ch.md
6 years ago
Double_V e266466a9a
Merge pull request #802 from TingquanGao/develop
6 years ago
MissPenguin f94ebce2f5
Merge pull request #813 from MissPenguin/develop
6 years ago
MissPenguin 29405e325d update readme
6 years ago
LDOUBLEV d8b9e7a063 add faq
6 years ago
MissPenguin 10808204cd update readme
6 years ago
LDOUBLEV 0de72f5d97 opt doc
6 years ago
LDOUBLEV 6e87c90486 fix bad download link, opt lite doc
6 years ago
MissPenguin 90f30dbeb6
Merge pull request #809 from nblib/develop
6 years ago
nblib f7ae9a5fb3 Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into develop-nblib
6 years ago
yukavio c58fb6e822 update bash of slim pruning
6 years ago
nblib b7e9a81a05 add label tool
6 years ago
Bai Yifan 1063ecbee3
Update README.md
6 years ago
xiaoting 9bcba212b2
Merge pull request #800 from tink2123/add_multi_imgs
6 years ago
wangjiawei04 e53c427330 fix rec local
6 years ago
Tingquan Gao ac439ae1aa
fix path error
6 years ago
wangjiawei04 95f820b835 CLOSE data augment if use pdserving
6 years ago
wangjiawei04 f7dbf2b702 CLOSE data augment if use pdserving
6 years ago
wangjiawei04 3a347ebc3a fix doc
6 years ago
wangjiawei04 a52587d91f fix doc
6 years ago
wangjiawei04 e5fcccc495 Merge branch 'ocr_0923' of https://github.com/wangjiawei04/PaddleOCR into ocr_0923
6 years ago
wangjiawei04 7e97976ce6 fix doc
6 years ago
Jiawei Wang 0d12338fa9
Merge branch 'develop' into ocr_0923
6 years ago
wangjiawei04 4d1e17e70b fix doc
6 years ago
wangjiawei04 c4720557e8 fix all minor bugs
6 years ago
tink2123 8ed0882996 add multi-imgs
6 years ago
MissPenguin ac7e9dd9f2
Merge pull request #799 from tink2123/update_dict
6 years ago
tink2123 4a839b9d92 update clas_train link
6 years ago
tink2123 60763646b9 update clas link
6 years ago
littletomatodonkey 97c767ccfb
Merge pull request #798 from littletomatodonkey/fix_reco_doc
6 years ago
tink2123 853f6db37d fix srn typo
6 years ago
tink2123 0eab30cb17 update japan and korean dict
6 years ago
littletomatodonkey 571275e03c fix visualize
6 years ago
Daniel Yang bad8211491
Update README.md
6 years ago
Daniel Yang 6825ee4e11
Update visualization_en.md
6 years ago
Daniel Yang d9e005d2a7
Update visualization.md
6 years ago
wangjiawei04 7cacfc97d9 first commit
6 years ago
MissPenguin bb7eca34e7
Merge pull request #796 from tink2123/model_list
6 years ago
tink2123 f37745ff7c update model list
6 years ago
MissPenguin fa53bc3817
Update README.md
6 years ago
dyning 72faa11b77
Merge pull request #792 from LDOUBLEV/fixslim
6 years ago
Double_V 89ea21bf9e
Merge pull request #791 from LDOUBLEV/fixocr
6 years ago
dyning b195d7586f
Update update_en.md
6 years ago
dyning 667d393ecf
Update README.md
6 years ago
dyning e8a649ab5b
Update update.md
6 years ago
dyning 580a973841
Update README_ch.md
6 years ago
dyning 4fb914dafe
Update README_ch.md
6 years ago
dyning 8b74966a28
Update README_ch.md
6 years ago
dyning 706b25bff3
Update README.md
6 years ago
Daniel Yang 250412a408
Update README_ch.md
6 years ago
dyning 0f86cebb57
Update README.md
6 years ago
LDOUBLEV 03125024cc fix lite doc, test=document_fix
6 years ago
Daniel Yang e10e788855
Merge pull request #790 from tink2123/fix_typo_and_polish_infer
6 years ago
LDOUBLEV 732bb6eb21 fix ch doc, test=document_doc
6 years ago
xiaoting e8ba14955c
Merge branch 'develop' into fix_typo_and_polish_infer
6 years ago
LDOUBLEV 3f89879c19 add slim introduction,test=document_fix
6 years ago
Daniel Yang 1cc991e5a8
Update recognition.md
6 years ago
LDOUBLEV cf8bc662de fix type
6 years ago
LDOUBLEV 80608bd618 fix slim doc, test=develop
6 years ago
MissPenguin a9e7c8f923
Merge pull request #793 from MissPenguin/develop
6 years ago
MissPenguin a6db27161a update detection.md for v1.1
6 years ago
LDOUBLEV 7d5ce84956 fix conflicts
6 years ago
LDOUBLEV bd2370f1b9 fix ocr slim doc
6 years ago
MissPenguin 6be762d6a0
Merge pull request #783 from yukavio/develop
6 years ago
yukavio 4ac63947c4 add some content to slim doc
6 years ago
MissPenguin de05f4fa43
Merge pull request #782 from tink2123/update_doc_new
6 years ago
MissPenguin 0a6537845b
Merge pull request #774 from WenmuZhou/fix_whl_doc1
6 years ago
tink2123 e5d7571503 fix typo and add srn for inference,test=document_fix
6 years ago
LDOUBLEV 3d11aba92d fix lite doc, test=document_fix
6 years ago
MissPenguin d8ac92cdad
Merge pull request #789 from MissPenguin/develop
6 years ago
Daniel Yang 03960fde89
Update README_ch.md
6 years ago
MissPenguin c66b97f840 rename det_r18_vd_db_v1.1.yml
6 years ago
xiaoting 1614282b23
Merge pull request #768 from littletomatodonkey/fix_direection_cls_doc
6 years ago
MissPenguin 96c2e3f136
Merge pull request #776 from MissPenguin/develop
6 years ago
Double_V 3b286e70c3
Merge pull request #786 from LDOUBLEV/fixocr
6 years ago
tink2123 6af341a37b change pip source, test=document_fix
6 years ago
LDOUBLEV f4d826a5f3 fix doc, test=document_fix
6 years ago
littletomatodonkey a0f13f4340 fix recognition doc
6 years ago
yukavio f6408e11e1 complete the doc of sensitivity analysis
6 years ago
littletomatodonkey 25d7eb87c2 fix det path
6 years ago
MissPenguin bcc8f208ec add det_mv3_db_v1.1.yml & update config link for rec model
6 years ago
WenmuZhou a38de9bdbe update doc
6 years ago
WenmuZhou 278530239d update doc
6 years ago
tink2123 b578edd6a1 fix typo
6 years ago
dyning 6ac1497a31
Update README_ch.md
6 years ago
yukavio 3e3d06b606 refine prune doc
6 years ago
dyning 16352beb89
Update README.md
6 years ago
littletomatodonkey f57e23a902 fix inference doc
6 years ago
tink2123 75fde81704 update doc for install and angle_class
6 years ago
Double_V e086071da2
Merge pull request #778 from LDOUBLEV/fixslim
6 years ago
dyning 36fbabb108
Merge pull request #781 from dyning/develop
6 years ago
dyning f0ce9b90ef add PPOCR doc
6 years ago
littletomatodonkey 706cfe8391 fix cls link
6 years ago
littletomatodonkey 7831f18b08 fix recognition.md
6 years ago
LDOUBLEV 954c3313d2 fix predict det
6 years ago
littletomatodonkey d7080099e9 revert config
6 years ago
LDOUBLEV bc7dd36e0e rename readme
6 years ago
LDOUBLEV afc752248b opt slim doc and add res18 yml
6 years ago
Double_V e600d787f5
Merge pull request #770 from LDOUBLEV/fixocr
6 years ago
littletomatodonkey dcbc20e20e add quick start en model
6 years ago
MissPenguin 28cfb93df5
Merge pull request #772 from MissPenguin/develop
6 years ago
MissPenguin 6b35afb50a add config in models list
6 years ago
WenmuZhou 47f9972a20 update pip to pip3
6 years ago
WenmuZhou 5fa8b5c666 update python to python3
6 years ago
MissPenguin e01a4b623d update hubserving readme and params
6 years ago
WenmuZhou 15be2fb979 update whl doc
6 years ago
littletomatodonkey 0439dfb112 add yaml
6 years ago
MissPenguin 2681ad5f90 update algorithm overview
6 years ago
LDOUBLEV 8e90a40547 opt lite demo doc
6 years ago
littletomatodonkey 9028077999 fix qs
6 years ago
littletomatodonkey 17e722de59 fix table format
6 years ago
zhoujun 3fb28d2a87
Merge pull request #9 from PaddlePaddle/develop
6 years ago
Double_V 9228a49342
Merge pull request #767 from WenmuZhou/fix_readme1
6 years ago
littletomatodonkey f4d2ebcb3a fix quick start
6 years ago
zhoujun 3dce09ead4
Update README_ch.md
6 years ago
zhoujun 3d43a760e6
Update README.md
6 years ago
zhoujun 136ff79047
Merge pull request #8 from PaddlePaddle/develop
6 years ago
dyning 1a19bce923
Update README.md
6 years ago
dyning d181c7a3ed
Update README_ch.md
6 years ago
dyning b254cdb73a
Update README_ch.md
6 years ago
dyning fb2c33bcb1
Update README.md
6 years ago
dyning d6b83901fc
Update README.md
6 years ago
dyning bb873ce14d
Update README.md
6 years ago
dyning f3bac1b981
Merge pull request #765 from grasswolfs/update_readme_en_0920
6 years ago
dyning 0983ca7ad2
Merge pull request #764 from tink2123/add_en_doc
6 years ago
grasswolfs 3cfffcb5c5 test=develop, test=update_readme_en_0920
6 years ago
tink2123 21d0869b6e add en doc for rec
6 years ago
MissPenguin 30648fbc84
Update models_list_en.md
6 years ago
MissPenguin 60967e8b77
Update models_list.md
6 years ago
dyning 9295e25091
Update benchmark_en.md
6 years ago
dyning c762ca4707
Merge pull request #762 from LDOUBLEV/fixocr
6 years ago
LDOUBLEV 17e5df1de3 mv en.doc to ./doc_en
6 years ago
dyning d53dcb225e
Update benchmark.md
6 years ago
dyning 5ea014f5bf
Merge pull request #761 from LDOUBLEV/fixocr
6 years ago
LDOUBLEV fe35728b7d add framework.png
6 years ago
LDOUBLEV a8c8ec1f82 Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into fixocr
6 years ago
LDOUBLEV 0f8dc0a622 update benchmark and doc.jpg
6 years ago
MissPenguin 1ee51e2f56
Update README_en.md
6 years ago
MissPenguin 3872da8de0
Update README_en.md
6 years ago
MissPenguin bf60c4e7e3
Update README.md
6 years ago
MissPenguin 64ae0c4e38
Merge pull request #759 from grasswolfs/update_doc_0919
6 years ago
MissPenguin 7cfc0b910b
Merge pull request #760 from yukavio/develop
6 years ago
grasswolfs ad1aca64d3 test=develop, test=document_fix
6 years ago
grasswolfs 72e4f3643b Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into update_doc_0919
6 years ago
grasswolfs eef60848ba test=develop, test=document_fix
6 years ago
Double_V d64a4c3f6d
Merge pull request #756 from LDOUBLEV/fixocr
6 years ago
yukavio f27b7edd99 refine slim prune doc
6 years ago
yukavio 37f5ff9696 Merge remote-tracking branch 'upstream/develop' into develop
6 years ago
yukavio dc0aea4ec3 refine slim prune doc
6 years ago
grasswolfs 1a024c69c7 test=develop, test=document_fix
6 years ago
littletomatodonkey edd4c33f4a
Merge pull request #757 from littletomatodonkey/fix_whl_language
6 years ago
MissPenguin b287673a0b
Merge pull request #758 from MissPenguin/develop
6 years ago
MissPenguin 2a03948d7c update docs
6 years ago
littletomatodonkey 2ee7dcb53a fix cpp infer doc for cls
6 years ago
Daniel Yang 7a45786ab7
Update README.md
6 years ago
Daniel Yang 1392c9c477
Update README.md
6 years ago
dyning ad545e52f2
Merge pull request #729 from tink2123/tree
6 years ago
littletomatodonkey 24dfd8b2b2 fix whl doc and add multi-language
6 years ago
dyning de5c741a91
Merge pull request #753 from baiyfbupt/doc
6 years ago
LDOUBLEV b6289d0eb0 advance db post_process
6 years ago
MissPenguin 77cd8c1e66
Merge pull request #754 from tink2123/lan_doc
6 years ago
MissPenguin 0d17196f94
Merge pull request #755 from MissPenguin/develop
6 years ago
MissPenguin 84576471c3 modify hubserving doc
6 years ago
MissPenguin 1fd763f89b
Merge pull request #752 from MissPenguin/develop
6 years ago
tink2123 8e53734f35 update model_list
6 years ago
MissPenguin 235b3aff8e
Merge pull request #749 from tink2123/make_label
6 years ago
MissPenguin e9a39e2d27 modify hubserving doc
6 years ago
MissPenguin ae68afd622 modify hubserving doc
6 years ago
MissPenguin 06feb23dff modify hubserving doc
6 years ago
tink2123 821149e090 update model list
6 years ago
tink2123 98c01dabce add doc and font for languages
6 years ago
baiyfbupt 2b68ae333a refine slim readme
6 years ago
MissPenguin b063599418 remove det_mv3_db_v1.1.yml & add code annotation
6 years ago
Daniel Yang 3942482e2d
Update README.md
6 years ago
Daniel Yang 78a428dce6
Update visualization.md
6 years ago
Daniel Yang aee0a1fe96
Update README.md
6 years ago
Daniel Yang be6e69a84f
Update README.md
6 years ago
Double_V f1c4f413be
Merge pull request #751 from yukavio/develop
6 years ago
littletomatodonkey aafa88db70
Merge pull request #746 from tink2123/languages
6 years ago
MissPenguin a6ccaa513e
Merge pull request #750 from grasswolfs/update_readme_0918
6 years ago
tink2123 cf054cffc1 add copyright
6 years ago
tink2123 f9170fcfce polish gen_label
6 years ago
tink2123 289bf76067 add stride and mv to languages
6 years ago
yukavio 9958fdde66 fix some bug
6 years ago
grasswolfs f415f5fcb6 test=develop, test=document_fix
6 years ago
yukavio cf7372475e complete prune doc
6 years ago
grasswolfs 3e1d8f2dee test=develop, test=document_fix
6 years ago
grasswolfs 9cd6e11b3e test=develop, test=document_fix
6 years ago
grasswolfs a63d91c83f test=develop, test=document_fix
6 years ago
tink2123 4d816b6149 make label for paddleocr
6 years ago
MissPenguin 4559f16ec7
Merge pull request #741 from WenmuZhou/whl
6 years ago
MissPenguin 867a60f474
Merge pull request #747 from littletomatodonkey/fix_vis
6 years ago
littletomatodonkey 4a81e9481c fix docker link
6 years ago
tink2123 1edfc308b1 add languages
6 years ago
WenmuZhou cf2a483369 分类支持传参置信度
6 years ago
WenmuZhou 06430c9359 ppocr支持多语言切换
6 years ago
MissPenguin b10bd395c9
Update models_list.md
6 years ago
MissPenguin d4c47e2f50
Merge pull request #744 from wangjiawei04/pdserving_readme
6 years ago
MissPenguin b479372cd3
Merge pull request #745 from MissPenguin/develop
6 years ago
root 2cdf7a666e add models_list.md
6 years ago
root 76b8bb7ef1 add models_list.md
6 years ago
Jiawei Wang e01515599b
Update readme.md
6 years ago
tink2123 e3ac559430 update tree
6 years ago
WenmuZhou 79180223dc 更新分类模型地址
6 years ago
MissPenguin df14801b43
Merge pull request #740 from MissPenguin/develop
6 years ago
root c5f9b69c4e add db mv3 yml for v1.1
6 years ago
WenmuZhou ede5a3f4b6 更新检测识别模型地址
6 years ago
MissPenguin b8ed953142 modify cls model path
6 years ago
Double_V 42f0219cda
Merge pull request #719 from yukavio/develop
6 years ago
WenmuZhou bf60cd827b whl包添加分类模型
6 years ago
yukavio a3dee6a4b1 remove env flags
6 years ago
yukavio b8bf9b2c66 add sensitivity ratio
6 years ago
lichenxia fd76c1234b disable se & add cls params for hub serving
6 years ago
tink2123 6b906ad239 add tree for repo
6 years ago
tink2123 27384a5a5d add tree for repo
6 years ago
WenmuZhou ecba3f85d6 Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into whl
6 years ago
MissPenguin 5b5b72e651
Update inference.md
6 years ago
MissPenguin 594d34f5ed
Merge pull request #708 from WenmuZhou/angle_class
6 years ago
xiaoting cb1cc43259
Merge pull request #718 from tink2123/save_log
6 years ago
WenmuZhou 227f5f3a36 Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into master
6 years ago
yukavio d9d51f7daf rm eval_det_utils
6 years ago
Double_V 0da95ed13b
Merge pull request #717 from baiyfbupt/slim_qat
6 years ago
WenmuZhou 5d248b168f 解决冲突
6 years ago
WenmuZhou 99f253bc41 添加方向分类器inference文档
6 years ago
WenmuZhou c7819af417 对输出的scores和label进行顺序判断
6 years ago
WenmuZhou 25ff7eb517 添加方向分类器导出支持
6 years ago
tink2123 f8e01b2ea7 polish doc
6 years ago
MissPenguin 00a889e166
Merge pull request #610 from BeyondYourself/develop
6 years ago
Double_V a88764eae4
Merge pull request #721 from littletomatodonkey/fix_mkldnn
6 years ago
littletomatodonkey dbbfe96761
Merge pull request #722 from LDOUBLEV/fixocr
6 years ago
littletomatodonkey 2aa0c8eb2d remove re-init
6 years ago
littletomatodonkey 5858441b3d add notes
6 years ago
littletomatodonkey f78678dd66 fix py infer
6 years ago
LDOUBLEV 74f983d182 mv docker to deploy/docker
6 years ago
littletomatodonkey a7e915bf7b fix mklnn memory leak
6 years ago
yukavio d4f1758d55 add slim/prune
6 years ago
baiyfbupt 14dfa73e07 fix issue
6 years ago
baiyfbupt 2ac3ec96f4 fix issue
6 years ago
tink2123 eafa136cf1 update doc for saving log
6 years ago
baiyfbupt 2c6f0b0d55 add slim quantization
6 years ago
WenmuZhou f3f2b38efb 方向分类器设为默认不启用
6 years ago
WenmuZhou 03979d71d2 修改文件头
6 years ago
WenmuZhou 742cb9a3c6 移除注释和删掉不用的代码
6 years ago
WenmuZhou 74f6a5cb3d merge paddleocr
6 years ago
WenmuZhou 144b022fb6 添加分类模型
6 years ago
xiaoting ed6b2f0c71
Merge pull request #700 from tink2123/fix_doc
6 years ago
tink2123 fc9933354d update rec doc
6 years ago
Double_V d31effaf97
Merge pull request #600 from LDOUBLEV/fixocr
6 years ago
xiaoting 5fb3c419c9
Merge pull request #665 from tink2123/support_srn_inference
6 years ago
tink2123 5fc9fff98f Merge branch 'support_srn_inference' of https://github.com/tink2123/PaddleOCR
6 years ago
tink2123 29e2fed39c update code
6 years ago
xiaoting f265f94c65
Merge branch 'develop' into support_srn_inference
6 years ago
tink2123 aa7e9ac34e polish code
6 years ago
tink2123 bc1ad20701 support srn inference
6 years ago
littletomatodonkey 21af7660b5
Merge pull request #662 from littletomatodonkey/rm_readme
6 years ago
littletomatodonkey 7165f5899d rm duplicate readme
6 years ago
MissPenguin 4009fcf3d0
Merge pull request #654 from LiXiaYu/patch-1
6 years ago
dyning 3ebf46dae6
Update README_en.md
6 years ago
LiXiaYu f76ef16e9f
Update serving.md
6 years ago
WenmuZhou 567c74c508 修复cpp_infer的bug
6 years ago
WenmuZhou 54d562bfd9 merge PaddleOCR
6 years ago
dyning c75ad203e9
Update README_en.md
6 years ago
dyning e33026f38a
Update README.md
6 years ago
dyning 78f894f607
Merge pull request #648 from grasswolfs/revise_joinus_png
6 years ago
grasswolfs 725b17a111 test=develop, test=document_fix
6 years ago
WenmuZhou e11b2108fa 添加分类模型
6 years ago
shaohua.zhang f7cf83eab3
Merge pull request #15 from BeyondYourself/revert-14-BeyondYourself-patch-1
6 years ago
shaohua.zhang 7bfbbe47bc
Revert "fix the path "
6 years ago
shaohua.zhang bf9833bd94
Merge pull request #14 from BeyondYourself/BeyondYourself-patch-1
6 years ago
shaohua.zhang 935966a2c2
fix the path
6 years ago
shaohua.zhang e0bf9c9cfa
Merge pull request #13 from PaddlePaddle/develop
6 years ago
LDOUBLEV fef18931bd fix faq
6 years ago
LDOUBLEV f893d5bb86 fix FAQ
6 years ago
LDOUBLEV ff6ba9edcc Merge branch 'develop' of https://github.com/PaddlePaddle/PaddleOCR into fixocr
6 years ago
shaohua.zhang 6887a320a5
Delete duplicate function
6 years ago
shaohua.zhang ea91f26f06
Merge pull request #12 from PaddlePaddle/develop
6 years ago
LDOUBLEV 59cdce6a88 fix bug in randomcropdata func
6 years ago
shaohua.zhang 91341b81bd
Merge pull request #11 from PaddlePaddle/develop
6 years ago

File diff suppressed because it is too large Load Diff

@ -0,0 +1,150 @@
[English](README.md) | 简体中文
## 简介
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库助力使用者训练出更好的模型并应用落地。
**近期更新**
- 2020.9.22 更新PP-OCR技术文章https://arxiv.org/abs/2009.09941
- 2020.9.19 更新超轻量压缩ppocr_mobile_slim系列模型整体模型3.5M(详见[PP-OCR Pipline](#PP-OCR)),适合在移动端部署使用。[模型下载](#模型下载)
- 2020.9.17 更新超轻量ppocr_mobile系列和通用ppocr_server系列中英文ocr模型媲美商业效果。[模型下载](#模型下载)
- 2020.9.17 更新[英文识别模型](./doc/doc_ch/models_list.md#英文识别模型)和[多语言识别模型](doc/doc_ch/models_list.md#多语言识别模型),已支持`德语、法语、日语、韩语`,更多语种识别模型将持续更新。
- 2020.8.26 更新OCR相关的84个常见问题及解答具体参考[FAQ](./doc/doc_ch/FAQ.md)
- 2020.8.24 支持通过whl包安装使用PaddleOCR具体参考[Paddleocr Package使用说明](./doc/doc_ch/whl.md)
- 2020.8.21 更新8月18日B站直播课回放和PPT课节2易学易用的OCR工具大礼包[获取地址](https://aistudio.baidu.com/aistudio/education/group/info/1519)
- [More](./doc/doc_ch/update.md)
## 特性
- PPOCR系列高质量预训练模型准确的识别效果
- 超轻量ppocr_mobile移动端系列检测2.6M+方向分类器0.9M+ 识别4.6M= 8.1M
- 通用ppocr_server系列检测47.2M+方向分类器0.9M+ 识别107M= 155.1M
- 超轻量压缩ppocr_mobile_slim系列检测1.4M+方向分类器0.5M+ 识别1.6M= 3.5M
- 支持中英文数字组合识别、竖排文本识别、长文本识别
- 支持多语言识别:韩语、日语、德语、法语
- 支持用户自定义训练,提供丰富的预测推理部署方案
- 支持PIP快速安装使用
- 可运行于Linux、Windows、MacOS等多种系统
## 效果展示
<div align="center">
<img src="doc/imgs_results/1101.jpg" width="800">
<img src="doc/imgs_results/1103.jpg" width="800">
</div>
上图是通用ppocr_server模型效果展示更多效果图请见[效果展示页面](./doc/doc_ch/visualization.md)。
## 快速体验
- PC端超轻量级中文OCR在线体验地址https://www.paddlepaddle.org.cn/hub/scene/ocr
- 移动端:[安装包DEMO下载地址](https://ai.baidu.com/easyedge/app/openSource?from=paddlelite)(基于EasyEdge和Paddle-Lite, 支持iOS和Android系统)Android手机也可以直接扫描下面二维码安装体验。
<div align="center">
<img src="./doc/ocr-android-easyedge.png" width = "200" height = "200" />
</div>
- 代码体验:从[快速安装](./doc/doc_ch/installation.md) 开始
<a name="模型下载"></a>
## PP-OCR 1.1系列模型列表9月17日更新
| 模型简介 | 模型名称 |推荐场景 | 检测模型 | 方向分类器 | 识别模型 |
| ------------ | --------------- | ----------------|---- | ---------- | -------- |
| 中英文超轻量OCR模型8.1M | ch_ppocr_mobile_v1.1_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_train.tar)|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_train.tar) |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_pre.tar) |
| 中英文通用OCR模型155.1M |ch_ppocr_server_v1.1_xx|服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_train.tar) |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_train.tar) |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_pre.tar) |
| 中英文超轻量压缩OCR模型3.5M | ch_ppocr_mobile_slim_v1.1_xx| 移动端 |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/det/ch_ppocr_mobile_v1.1_det_prune_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_prune_opt.nb) |[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_quant_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_quant_opt.nb)| [推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/rec/ch_ppocr_mobile_v1.1_rec_quant_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_quant_opt.nb)|
更多模型下载(包括多语言),可以参考[PP-OCR v1.1 系列模型下载](./doc/doc_ch/models_list.md)
## 文档教程
- [快速安装](./doc/doc_ch/installation.md)
- [中文OCR模型快速使用](./doc/doc_ch/quickstart.md)
- [代码组织结构](./doc/doc_ch/tree.md)
- 算法介绍
- [文本检测](./doc/doc_ch/algorithm_overview.md)
- [文本识别](./doc/doc_ch/algorithm_overview.md)
- [PP-OCR Pipline](#PP-OCR)
- 模型训练/评估
- [文本检测](./doc/doc_ch/detection.md)
- [文本识别](./doc/doc_ch/recognition.md)
- [方向分类器](./doc/doc_ch/angle_class.md)
- [yml参数配置文件介绍](./doc/doc_ch/config.md)
- 预测部署
- [基于pip安装whl包快速推理](./doc/doc_ch/whl.md)
- [基于Python脚本预测引擎推理](./doc/doc_ch/inference.md)
- [基于C++预测引擎推理](./deploy/cpp_infer/readme.md)
- [服务化部署](./deploy/hubserving/readme.md)
- [端侧部署](./deploy/lite/readme.md)
- [模型量化](./deploy/slim/quantization/README.md)
- [模型裁剪](./deploy/slim/prune/README.md)
- [Benchmark](./doc/doc_ch/benchmark.md)
- 数据集
- [通用中英文OCR数据集](./doc/doc_ch/datasets.md)
- [手写中文OCR数据集](./doc/doc_ch/handwritten_datasets.md)
- [垂类多语言OCR数据集](./doc/doc_ch/vertical_and_multilingual_datasets.md)
- [常用数据标注工具](./doc/doc_ch/data_annotation.md)
- [常用数据合成工具](./doc/doc_ch/data_synthesis.md)
- [效果展示](#效果展示)
- FAQ
- [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md)
- [【理论篇】OCR通用21个问题](./doc/doc_ch/FAQ.md)
- [【实战篇】PaddleOCR实战53个问题](./doc/doc_ch/FAQ.md)
- [技术交流群](#欢迎加入PaddleOCR技术交流群)
- [参考文献](./doc/doc_ch/reference.md)
- [许可证书](#许可证书)
- [贡献代码](#贡献代码)
<a name="PP-OCR"></a>
## PP-OCR Pipline
<div align="center">
<img src="./doc/ppocr_framework.png" width="800">
</div>
PP-OCR是一个实用的超轻量OCR系统。主要由DB文本检测、检测框矫正和CRNN文本识别三部分组成。该系统从骨干网络选择和调整、预测头部的设计、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型自动裁剪量化8个方面采用19个有效策略对各个模块的模型进行效果调优和瘦身最终得到整体大小为3.5M的超轻量中英文OCR和2.8M的英文数字OCR。更多细节请参考PP-OCR技术方案 https://arxiv.org/abs/2009.09941 。其中FPGM裁剪器和PACT量化的实现可以参考[PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim)。
<a name="效果展示"></a>
## 效果展示 [more](./doc/doc_ch/visualization.md)
- 中文模型
<div align="center">
<img src="./doc/imgs_results/1102.jpg" width="800">
<img src="./doc/imgs_results/1104.jpg" width="800">
<img src="./doc/imgs_results/1106.jpg" width="800">
<img src="./doc/imgs_results/1105.jpg" width="800">
</div>
- 英文模型
<div align="center">
<img src="./doc/imgs_results/img_12.jpg" width="800">
</div>
- 其他语言模型
<div align="center">
<img src="./doc/imgs_results/1110.jpg" width="800">
<img src="./doc/imgs_results/1112.jpg" width="800">
</div>
<a name="欢迎加入PaddleOCR技术交流群"></a>
## 欢迎加入PaddleOCR技术交流群
请扫描下面二维码完成问卷填写获取加群二维码和OCR方向的炼丹秘籍
<div align="center">
<img src="./doc/joinus.PNG" width = "200" height = "200" />
</div>
<a name="许可证书"></a>
## 许可证书
本项目的发布受<a href="https://github.com/PaddlePaddle/PaddleOCR/blob/master/LICENSE">Apache 2.0 license</a>许可认证。
<a name="贡献代码"></a>
## 贡献代码
我们非常欢迎你为PaddleOCR贡献代码也十分感谢你的反馈。
- 非常感谢 [Khanh Tran](https://github.com/xxxpsyduck) 和 [Karl Horky](https://github.com/karlhorky) 贡献修改英文文档
- 非常感谢 [zhangxin](https://github.com/ZhangXinNan)([Blog](https://blog.csdn.net/sdlypyzq)) 贡献新的可视化方式、添加.gitgnore、处理手动设置PYTHONPATH环境变量的问题
- 非常感谢 [lyl120117](https://github.com/lyl120117) 贡献打印网络结构的代码
- 非常感谢 [xiangyubo](https://github.com/xiangyubo) 贡献手写中文OCR数据集
- 非常感谢 [authorfu](https://github.com/authorfu) 贡献Android和[xiadeye](https://github.com/xiadeye) 贡献IOS的demo代码
- 非常感谢 [BeyondYourself](https://github.com/BeyondYourself) 给PaddleOCR提了很多非常棒的建议并简化了PaddleOCR的部分代码风格。
- 非常感谢 [tangmq](https://gitee.com/tangmq) 给PaddleOCR增加Docker化部署服务支持快速发布可调用的Restful API服务。

@ -1,231 +0,0 @@
English | [简体中文](README.md)
## Introduction
PaddleOCR aims to create rich, leading, and practical OCR tools that help users train better models and apply them into practice.
**Recent updates**
- 2020.8.24 Support the use of PaddleOCR through whl package installationpelease refer [PaddleOCR Package](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_en/whl_en.md)
- 2020.8.16, Release text detection algorithm [SAST](https://arxiv.org/abs/1908.05498) and text recognition algorithm [SRN](https://arxiv.org/abs/2003.12294)
- 2020.7.23, Release the playback and PPT of live class on BiliBili station, PaddleOCR Introduction, [address](https://aistudio.baidu.com/aistudio/course/introduce/1519)
- 2020.7.15, Add mobile App demo , support both iOS and Android ( based on easyedge and Paddle Lite)
- 2020.7.15, Improve the deployment ability, add the C + + inference , serving deployment. In addition, the benchmarks of the ultra-lightweight OCR model are provided.
- 2020.7.15, Add several related datasets, data annotation and synthesis tools.
- [more](./doc/doc_en/update_en.md)
## Features
- Ultra-lightweight OCR model, total model size is only 8.6M
- Single model supports Chinese/English numbers combination recognition, vertical text recognition, long text recognition
- Detection model DB (4.1M) + recognition model CRNN (4.5M)
- Various text detection algorithms: EAST, DB
- Various text recognition algorithms: Rosetta, CRNN, STAR-Net, RARE
- Support Linux, Windows, macOS and other systems.
## Visualization
![](doc/imgs_results/11.jpg)
![](doc/imgs_results/img_10.jpg)
[More visualization](./doc/doc_en/visualization_en.md)
You can also quickly experience the ultra-lightweight OCR : [Online Experience](https://www.paddlepaddle.org.cn/hub/scene/ocr)
Mobile DEMO experience (based on EasyEdge and Paddle-Lite, supports iOS and Android systems): [Sign in to the website to obtain the QR code for installing the App](https://ai.baidu.com/easyedge/app/openSource?from=paddlelite)
Also, you can scan the QR code below to install the App (**Android support only**)
<div align="center">
<img src="./doc/ocr-android-easyedge.png" width = "200" height = "200" />
</div>
- [**OCR Quick Start**](./doc/doc_en/quickstart_en.md)
<a name="Supported-Chinese-model-list"></a>
### Supported Models:
|Model Name|Description |Detection Model link|Recognition Model link| Support for space Recognition Model link|
|-|-|-|-|-|
|db_crnn_mobile|ultra-lightweight OCR model|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance_infer.tar) / [pre-train model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance.tar)
|db_crnn_server|General OCR model|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance_infer.tar) / [pre-train model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance.tar)
## Tutorials
- [Installation](./doc/doc_en/installation_en.md)
- [Quick Start](./doc/doc_en/quickstart_en.md)
- Algorithm introduction
- [Text Detection Algorithm](#TEXTDETECTIONALGORITHM)
- [Text Recognition Algorithm](#TEXTRECOGNITIONALGORITHM)
- [END-TO-END OCR Algorithm](#ENDENDOCRALGORITHM)
- Model training/evaluation
- [Text Detection](./doc/doc_en/detection_en.md)
- [Text Recognition](./doc/doc_en/recognition_en.md)
- [Yml Configuration](./doc/doc_en/config_en.md)
- [Tricks](./doc/doc_en/tricks_en.md)
- Deployment
- [Python Inference](./doc/doc_en/inference_en.md)
- [C++ Inference](./deploy/cpp_infer/readme_en.md)
- [Serving](./doc/doc_en/serving_en.md)
- [Mobile](./deploy/lite/readme_en.md)
- Model Quantization and Compression (coming soon)
- [Benchmark](./doc/doc_en/benchmark_en.md)
- Datasets
- [General OCR Datasets(Chinese/English)](./doc/doc_en/datasets_en.md)
- [HandWritten_OCR_Datasets(Chinese)](./doc/doc_en/handwritten_datasets_en.md)
- [Various OCR Datasets(multilingual)](./doc/doc_en/vertical_and_multilingual_datasets_en.md)
- [Data Annotation Tools](./doc/doc_en/data_annotation_en.md)
- [Data Synthesis Tools](./doc/doc_en/data_synthesis_en.md)
- [FAQ](#FAQ)
- Visualization
- [Ultra-lightweight Chinese/English OCR Visualization](#UCOCRVIS)
- [General Chinese/English OCR Visualization](#GeOCRVIS)
- [Chinese/English OCR Visualization (Support Space Recognition )](#SpaceOCRVIS)
- [Community](#Community)
- [References](./doc/doc_en/reference_en.md)
- [License](#LICENSE)
- [Contribution](#CONTRIBUTION)
<a name="TEXTDETECTIONALGORITHM"></a>
## Text Detection Algorithm
PaddleOCR open source text detection algorithms list:
- [x] EAST([paper](https://arxiv.org/abs/1704.03155))
- [x] DB([paper](https://arxiv.org/abs/1911.08947))
- [x] SAST([paper](https://arxiv.org/abs/1908.05498))(Baidu Self-Research)
On the ICDAR2015 dataset, the text detection result is as follows:
|Model|Backbone|precision|recall|Hmean|Download link|
|-|-|-|-|-|-|
|EAST|ResNet50_vd|88.18%|85.51%|86.82%|[Download link](https://paddleocr.bj.bcebos.com/det_r50_vd_east.tar)|
|EAST|MobileNetV3|81.67%|79.83%|80.74%|[Download link](https://paddleocr.bj.bcebos.com/det_mv3_east.tar)|
|DB|ResNet50_vd|83.79%|80.65%|82.19%|[Download link](https://paddleocr.bj.bcebos.com/det_r50_vd_db.tar)|
|DB|MobileNetV3|75.92%|73.18%|74.53%|[Download link](https://paddleocr.bj.bcebos.com/det_mv3_db.tar)|
|SAST|ResNet50_vd|92.18%|82.96%|87.33%|[Download link](https://paddleocr.bj.bcebos.com/SAST/sast_r50_vd_icdar2015.tar)|
On Total-Text dataset, the text detection result is as follows:
|Model|Backbone|precision|recall|Hmean|Download link|
|-|-|-|-|-|-|
|SAST|ResNet50_vd|88.74%|79.80%|84.03%|[Download link](https://paddleocr.bj.bcebos.com/SAST/sast_r50_vd_total_text.tar)|
**Note** Additional data, like icdar2013, icdar2017, COCO-Text, ArT, was added to the model training of SAST. Download English public dataset in organized format used by PaddleOCR from [Baidu Drive](https://pan.baidu.com/s/12cPnZcVuV1zn5DOd4mqjVw) (download code: 2bpi).
For use of [LSVT](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_en/datasets_en.md#1-icdar2019-lsvt) street view dataset with a total of 3w training datathe related configuration and pre-trained models for text detection task are as follows:
|Model|Backbone|Configuration file|Pre-trained model|
|-|-|-|-|
|ultra-lightweight OCR model|MobileNetV3|det_mv3_db.yml|[Download link](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db.tar)|
|General OCR model|ResNet50_vd|det_r50_vd_db.yml|[Download link](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db.tar)|
* Note: For the training and evaluation of the above DB model, post-processing parameters box_thresh=0.6 and unclip_ratio=1.5 need to be set. If using different datasets and different models for training, these two parameters can be adjusted for better result.
For the training guide and use of PaddleOCR text detection algorithms, please refer to the document [Text detection model training/evaluation/prediction](./doc/doc_en/detection_en.md)
<a name="TEXTRECOGNITIONALGORITHM"></a>
## Text Recognition Algorithm
PaddleOCR open-source text recognition algorithms list:
- [x] CRNN([paper](https://arxiv.org/abs/1507.05717))
- [x] Rosetta([paper](https://arxiv.org/abs/1910.05085))
- [x] STAR-Net([paper](http://www.bmva.org/bmvc/2016/papers/paper043/index.html))
- [x] RARE([paper](https://arxiv.org/abs/1603.03915v1))
- [x] SRN([paper](https://arxiv.org/abs/2003.12294))(Baidu Self-Research)
Refer to [DTRB](https://arxiv.org/abs/1904.01906), the training and evaluation result of these above text recognition (using MJSynth and SynthText for training, evaluate on IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE) is as follow:
|Model|Backbone|Avg Accuracy|Module combination|Download link|
|-|-|-|-|-|
|Rosetta|Resnet34_vd|80.24%|rec_r34_vd_none_none_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_r34_vd_none_none_ctc.tar)|
|Rosetta|MobileNetV3|78.16%|rec_mv3_none_none_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_mv3_none_none_ctc.tar)|
|CRNN|Resnet34_vd|82.20%|rec_r34_vd_none_bilstm_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_r34_vd_none_bilstm_ctc.tar)|
|CRNN|MobileNetV3|79.37%|rec_mv3_none_bilstm_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar)|
|STAR-Net|Resnet34_vd|83.93%|rec_r34_vd_tps_bilstm_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_r34_vd_tps_bilstm_ctc.tar)|
|STAR-Net|MobileNetV3|81.56%|rec_mv3_tps_bilstm_ctc|[Download link](https://paddleocr.bj.bcebos.com/rec_mv3_tps_bilstm_ctc.tar)|
|RARE|Resnet34_vd|84.90%|rec_r34_vd_tps_bilstm_attn|[Download link](https://paddleocr.bj.bcebos.com/rec_r34_vd_tps_bilstm_attn.tar)|
|RARE|MobileNetV3|83.32%|rec_mv3_tps_bilstm_attn|[Download link](https://paddleocr.bj.bcebos.com/rec_mv3_tps_bilstm_attn.tar)|
|SRN|Resnet50_vd_fpn|88.33%|rec_r50fpn_vd_none_srn|[Download link](https://paddleocr.bj.bcebos.com/SRN/rec_r50fpn_vd_none_srn.tar)|
**Note** SRN model uses data expansion method to expand the two training sets mentioned above, and the expanded data can be downloaded from [Baidu Drive](https://pan.baidu.com/s/1-HSZ-ZVdqBF2HaBZ5pRAKA) (download code: y3ry).
The average accuracy of the two-stage training in the original paper is 89.74%, and that of one stage training in paddleocr is 88.33%. Both pre-trained weights can be downloaded [here](https://paddleocr.bj.bcebos.com/SRN/rec_r50fpn_vd_none_srn.tar).
We use [LSVT](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_en/datasets_en.md#1-icdar2019-lsvt) dataset and cropout 30w training data from original photos by using position groundtruth and make some calibration needed. In addition, based on the LSVT corpus, 500w synthetic data is generated to train the model. The related configuration and pre-trained models are as follows:
|Model|Backbone|Configuration file|Pre-trained model|
|-|-|-|-|
|ultra-lightweight OCR model|MobileNetV3|rec_chinese_lite_train.yml|[Download link](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance_infer.tar) & [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance.tar)|
|General OCR model|Resnet34_vd|rec_chinese_common_train.yml|[Download link](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn.tar)|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance_infer.tar) & [pre-trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance.tar)|
Please refer to the document for training guide and use of PaddleOCR text recognition algorithms [Text recognition model training/evaluation/prediction](./doc/doc_en/recognition_en.md)
<a name="ENDENDOCRALGORITHM"></a>
## END-TO-END OCR Algorithm
- [ ] [End2End-PSL](https://arxiv.org/abs/1909.07808)(Baidu Self-Research, coming soon)
## Visualization
<a name="UCOCRVIS"></a>
### 1.Ultra-lightweight Chinese/English OCR Visualization [more](./doc/doc_en/visualization_en.md)
<div align="center">
<img src="doc/imgs_results/1.jpg" width="800">
</div>
<a name="GeOCRVIS"></a>
### 2. General Chinese/English OCR Visualization [more](./doc/doc_en/visualization_en.md)
<div align="center">
<img src="doc/imgs_results/chinese_db_crnn_server/11.jpg" width="800">
</div>
<a name="SpaceOCRVIS"></a>
### 3.Chinese/English OCR Visualization (Space_support) [more](./doc/doc_en/visualization_en.md)
<div align="center">
<img src="doc/imgs_results/chinese_db_crnn_server/en_paper.jpg" width="800">
</div>
<a name="FAQ"></a>
## FAQ
1. Error when using attention-based recognition model: KeyError: 'predict'
The inference of recognition model based on attention loss is still being debugged. For Chinese text recognition, it is recommended to choose the recognition model based on CTC loss first. In practice, it is also found that the recognition model based on attention loss is not as effective as the one based on CTC loss.
2. About inference speed
When there are a lot of texts in the picture, the prediction time will increase. You can use `--rec_batch_num` to set a smaller prediction batch size. The default value is 30, which can be changed to 10 or other values.
3. Service deployment and mobile deployment
It is expected that the service deployment based on Serving and the mobile deployment based on Paddle Lite will be released successively in mid-to-late June. Stay tuned for more updates.
4. Release time of self-developed algorithm
Baidu Self-developed algorithms such as SAST, SRN and end2end PSL will be released in June or July. Please be patient.
[more](./doc/doc_en/FAQ_en.md)
<a name="Community"></a>
## Community
Scan the QR code below with your wechat and completing the questionnaire, you can access to offical technical exchange group.
<div align="center">
<img src="./doc/joinus.jpg" width = "200" height = "200" />
</div>
<a name="LICENSE"></a>
## License
This project is released under <a href="https://github.com/PaddlePaddle/PaddleOCR/blob/master/LICENSE">Apache 2.0 license</a>
<a name="CONTRIBUTION"></a>
## Contribution
We welcome all the contributions to PaddleOCR and appreciate for your feedback very much.
- Many thanks to [Khanh Tran](https://github.com/xxxpsyduck) and [Karl Horky](https://github.com/karlhorky) for contributing and revising the English documentation.
- Many thanks to [zhangxin](https://github.com/ZhangXinNan) for contributing the new visualize function、add .gitgnore and discard set PYTHONPATH manually.
- Many thanks to [lyl120117](https://github.com/lyl120117) for contributing the code for printing the network structure.
- Thanks [xiangyubo](https://github.com/xiangyubo) for contributing the handwritten Chinese OCR datasets.
- Thanks [authorfu](https://github.com/authorfu) for contributing Android demo and [xiadeye](https://github.com/xiadeye) contributing iOS demo, respectively.
- Thanks [BeyondYourself](https://github.com/BeyondYourself) for contributing many great suggestions and simplifying part of the code style.
- Thanks [tangmq](https://gitee.com/tangmq) for contributing Dockerized deployment services to PaddleOCR and supporting the rapid release of callable Restful API services.

@ -0,0 +1,44 @@
Global:
algorithm: CLS
use_gpu: False
epoch_num: 100
log_smooth_window: 20
print_batch_step: 100
save_model_dir: output/cls_mv3
save_epoch_step: 3
eval_batch_step: 500
train_batch_size_per_card: 512
test_batch_size_per_card: 512
image_shape: [3, 48, 192]
label_list: ['0','180']
distort: True
reader_yml: ./configs/cls/cls_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.cls_model,ClsModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.35
model_name: small
Head:
function: ppocr.modeling.heads.cls_head,ClsHead
class_dim: 2
Loss:
function: ppocr.modeling.losses.cls_loss,ClsLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay
step_each_epoch: 1169
total_epoch: 100

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.cls.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data/cls
label_file_path: ./train_data/cls/train.txt
EvalReader:
reader_function: ppocr.data.cls.dataset_traversal,SimpleReader
img_set_dir: ./train_data/cls
label_file_path: ./train_data/cls/test.txt
TestReader:
reader_function: ppocr.data.cls.dataset_traversal,SimpleReader

@ -49,6 +49,6 @@ Optimizer:
PostProcess:
function: ppocr.postprocess.db_postprocess,DBPostProcess
thresh: 0.3
box_thresh: 0.7
box_thresh: 0.6
max_candidates: 1000
unclip_ratio: 2.0
unclip_ratio: 1.5

@ -0,0 +1,59 @@
Global:
algorithm: DB
use_gpu: true
epoch_num: 1200
log_smooth_window: 20
print_batch_step: 2
save_model_dir: ./output/det_db/
save_epoch_step: 200
# evaluation is run every 5000 iterations after the 4000th iteration
eval_batch_step: [4000, 5000]
train_batch_size_per_card: 16
test_batch_size_per_card: 16
image_shape: [3, 640, 640]
reader_yml: ./configs/det/det_db_icdar15_reader.yml
pretrain_weights: ./pretrain_models/MobileNetV3_large_x0_5_pretrained/
checkpoints:
save_res_path: ./output/det_db/predicts_db.txt
save_inference_dir:
Architecture:
function: ppocr.modeling.architectures.det_model,DetModel
Backbone:
function: ppocr.modeling.backbones.det_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: large
disable_se: true
Head:
function: ppocr.modeling.heads.det_db_head,DBHead
model_name: large
k: 50
inner_channels: 96
out_channels: 2
Loss:
function: ppocr.modeling.losses.det_db_loss,DBLoss
balance_loss: true
main_loss_type: DiceLoss
alpha: 5
beta: 10
ohem_ratio: 3
Optimizer:
function: ppocr.optimizer,AdamDecay
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay_warmup
step_each_epoch: 16
total_epoch: 1200
PostProcess:
function: ppocr.postprocess.db_postprocess,DBPostProcess
thresh: 0.3
box_thresh: 0.6
max_candidates: 1000
unclip_ratio: 1.5

@ -0,0 +1,57 @@
Global:
algorithm: DB
use_gpu: true
epoch_num: 1200
log_smooth_window: 20
print_batch_step: 2
save_model_dir: ./output/det_r_18_vd_db/
save_epoch_step: 200
eval_batch_step: [3000, 2000]
train_batch_size_per_card: 8
test_batch_size_per_card: 1
image_shape: [3, 640, 640]
reader_yml: ./configs/det/det_db_icdar15_reader.yml
pretrain_weights: ./pretrain_models/ResNet18_vd_pretrained/
save_res_path: ./output/det_r18_vd_db/predicts_db.txt
checkpoints:
save_inference_dir:
Architecture:
function: ppocr.modeling.architectures.det_model,DetModel
Backbone:
function: ppocr.modeling.backbones.det_resnet_vd,ResNet
layers: 18
Head:
function: ppocr.modeling.heads.det_db_head,DBHead
model_name: large
k: 50
inner_channels: 256
out_channels: 2
Loss:
function: ppocr.modeling.losses.det_db_loss,DBLoss
balance_loss: true
main_loss_type: DiceLoss
alpha: 5
beta: 10
ohem_ratio: 3
Optimizer:
function: ppocr.optimizer,AdamDecay
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay_warmup
step_each_epoch: 32
total_epoch: 1200
PostProcess:
function: ppocr.postprocess.db_postprocess,DBPostProcess
thresh: 0.3
box_thresh: 0.6
max_candidates: 1000
unclip_ratio: 1.5

@ -0,0 +1,52 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_CRNN
save_epoch_step: 3
eval_batch_step: 2000
train_batch_size_per_card: 128
test_batch_size_per_card: 128
image_shape: [3, 32, 320]
max_text_length: 25
character_type: ch
character_dict_path: ./ppocr/utils/ppocr_keys_v1.txt
loss_type: ctc
distort: true
use_space_char: true
reader_yml: ./configs/rec/rec_chinese_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_resnet_vd,ResNet
layers: 34
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
fc_decay: 0.00004
SeqRNN:
hidden_size: 256
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
base_lr: 0.0005
l2_decay: 0.00004
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay_warmup
step_each_epoch: 254
total_epoch: 500
warmup_minibatch: 1000

@ -0,0 +1,54 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_CRNN
save_epoch_step: 3
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 25
character_type: ch
character_dict_path: ./ppocr/utils/ppocr_keys_v1.txt
loss_type: ctc
distort: true
use_space_char: true
reader_yml: ./configs/rec/rec_chinese_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
fc_decay: 0.00001
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
base_lr: 0.0005
l2_decay: 0.00001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay_warmup
step_each_epoch: 254
total_epoch: 500
warmup_minibatch: 1000

@ -0,0 +1,53 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/en_number
save_epoch_step: 3
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 30
character_type: ch
character_dict_path: ./ppocr/utils/ic15_dict.txt
loss_type: ctc
distort: false
use_space_char: false
reader_yml: ./configs/rec/multi_languages/rec_en_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
l2_decay: 0.00001
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay_warmup
warmup_minibatch: 1000
step_each_epoch: 6530
total_epoch: 500

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data
label_file_path: ./train_data/en_train.txt
EvalReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
img_set_dir: ./train_data
label_file_path: ./train_data/en_eval.txt
TestReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader

@ -0,0 +1,52 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_french
save_epoch_step: 1
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 25
character_type: french
character_dict_path: ./ppocr/utils/french_dict.txt
loss_type: ctc
distort: true
use_space_char: false
reader_yml: ./configs/rec/multi_languages/rec_french_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
l2_decay: 0.00001
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay
step_each_epoch: 254
total_epoch: 500

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data
label_file_path: ./train_data/french_train.txt
EvalReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
img_set_dir: ./train_data
label_file_path: ./train_data/french_eval.txt
TestReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader

@ -0,0 +1,52 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_german
save_epoch_step: 1
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 25
character_type: german
character_dict_path: ./ppocr/utils/german_dict.txt
loss_type: ctc
distort: true
use_space_char: false
reader_yml: ./configs/rec/multi_languages/rec_ger_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
l2_decay: 0.00001
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay
step_each_epoch: 254
total_epoch: 500

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data
label_file_path: ./train_data/de_train.txt
EvalReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
img_set_dir: ./train_data
label_file_path: ./train_data/de_eval.txt
TestReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader

@ -0,0 +1,52 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_japan
save_epoch_step: 1
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 25
character_type: japan
character_dict_path: ./ppocr/utils/japan_dict.txt
loss_type: ctc
distort: true
use_space_char: false
reader_yml: ./configs/rec/multi_languages/rec_japan_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
l2_decay: 0.00001
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay
step_each_epoch: 254
total_epoch: 500

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data
label_file_path: ./train_data/japan_train.txt
EvalReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
img_set_dir: ./train_data
label_file_path: ./train_data/japan_eval.txt
TestReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader

@ -0,0 +1,52 @@
Global:
algorithm: CRNN
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_korean
save_epoch_step: 1
eval_batch_step: 2000
train_batch_size_per_card: 256
test_batch_size_per_card: 256
image_shape: [3, 32, 320]
max_text_length: 25
character_type: korean
character_dict_path: ./ppocr/utils/korean_dict.txt
loss_type: ctc
distort: true
use_space_char: false
reader_yml: ./configs/rec/multi_languages/rec_korean_reader.yml
pretrain_weights:
checkpoints:
save_inference_dir:
infer_img:
Architecture:
function: ppocr.modeling.architectures.rec_model,RecModel
Backbone:
function: ppocr.modeling.backbones.rec_mobilenet_v3,MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Head:
function: ppocr.modeling.heads.rec_ctc_head,CTCPredict
encoder_type: rnn
SeqRNN:
hidden_size: 48
Loss:
function: ppocr.modeling.losses.rec_ctc_loss,CTCLoss
Optimizer:
function: ppocr.optimizer,AdamDecay
l2_decay: 0.00001
base_lr: 0.001
beta1: 0.9
beta2: 0.999
decay:
function: cosine_decay
step_each_epoch: 254
total_epoch: 500

@ -0,0 +1,13 @@
TrainReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
num_workers: 8
img_set_dir: ./train_data
label_file_path: ./train_data/korean_train.txt
EvalReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader
img_set_dir: ./train_data
label_file_path: ./train_data/korean_eval.txt
TestReader:
reader_function: ppocr.data.rec.dataset_traversal,SimpleReader

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

@ -4,29 +4,29 @@
#include "native.h"
#include "ocr_ppredictor.h"
#include <string>
#include <algorithm>
#include <paddle_api.h>
#include <string>
static paddle::lite_api::PowerMode str_to_cpu_mode(const std::string &cpu_mode);
extern "C"
JNIEXPORT jlong JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_init(JNIEnv *env, jobject thiz,
jstring j_det_model_path,
jstring j_rec_model_path,
jint j_thread_num,
jstring j_cpu_mode) {
std::string det_model_path = jstring_to_cpp_string(env, j_det_model_path);
std::string rec_model_path = jstring_to_cpp_string(env, j_rec_model_path);
int thread_num = j_thread_num;
std::string cpu_mode = jstring_to_cpp_string(env, j_cpu_mode);
ppredictor::OCR_Config conf;
conf.thread_num = thread_num;
conf.mode = str_to_cpu_mode(cpu_mode);
ppredictor::OCR_PPredictor *orc_predictor = new ppredictor::OCR_PPredictor{conf};
orc_predictor->init_from_file(det_model_path, rec_model_path);
return reinterpret_cast<jlong>(orc_predictor);
extern "C" JNIEXPORT jlong JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_init(
JNIEnv *env, jobject thiz, jstring j_det_model_path,
jstring j_rec_model_path, jstring j_cls_model_path, jint j_thread_num,
jstring j_cpu_mode) {
std::string det_model_path = jstring_to_cpp_string(env, j_det_model_path);
std::string rec_model_path = jstring_to_cpp_string(env, j_rec_model_path);
std::string cls_model_path = jstring_to_cpp_string(env, j_cls_model_path);
int thread_num = j_thread_num;
std::string cpu_mode = jstring_to_cpp_string(env, j_cpu_mode);
ppredictor::OCR_Config conf;
conf.thread_num = thread_num;
conf.mode = str_to_cpu_mode(cpu_mode);
ppredictor::OCR_PPredictor *orc_predictor =
new ppredictor::OCR_PPredictor{conf};
orc_predictor->init_from_file(det_model_path, rec_model_path, cls_model_path);
return reinterpret_cast<jlong>(orc_predictor);
}
/**
@ -34,82 +34,81 @@ Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_init(JNIEnv *env, jobject
* @param cpu_mode
* @return
*/
static paddle::lite_api::PowerMode str_to_cpu_mode(const std::string &cpu_mode) {
static std::map<std::string, paddle::lite_api::PowerMode> cpu_mode_map{
{"LITE_POWER_HIGH", paddle::lite_api::LITE_POWER_HIGH},
{"LITE_POWER_LOW", paddle::lite_api::LITE_POWER_HIGH},
{"LITE_POWER_FULL", paddle::lite_api::LITE_POWER_FULL},
{"LITE_POWER_NO_BIND", paddle::lite_api::LITE_POWER_NO_BIND},
{"LITE_POWER_RAND_HIGH", paddle::lite_api::LITE_POWER_RAND_HIGH},
{"LITE_POWER_RAND_LOW", paddle::lite_api::LITE_POWER_RAND_LOW}
};
std::string upper_key;
std::transform(cpu_mode.cbegin(), cpu_mode.cend(), upper_key.begin(), ::toupper);
auto index = cpu_mode_map.find(upper_key);
if (index == cpu_mode_map.end()) {
LOGE("cpu_mode not found %s", upper_key.c_str());
return paddle::lite_api::LITE_POWER_HIGH;
} else {
return index->second;
}
static paddle::lite_api::PowerMode
str_to_cpu_mode(const std::string &cpu_mode) {
static std::map<std::string, paddle::lite_api::PowerMode> cpu_mode_map{
{"LITE_POWER_HIGH", paddle::lite_api::LITE_POWER_HIGH},
{"LITE_POWER_LOW", paddle::lite_api::LITE_POWER_HIGH},
{"LITE_POWER_FULL", paddle::lite_api::LITE_POWER_FULL},
{"LITE_POWER_NO_BIND", paddle::lite_api::LITE_POWER_NO_BIND},
{"LITE_POWER_RAND_HIGH", paddle::lite_api::LITE_POWER_RAND_HIGH},
{"LITE_POWER_RAND_LOW", paddle::lite_api::LITE_POWER_RAND_LOW}};
std::string upper_key;
std::transform(cpu_mode.cbegin(), cpu_mode.cend(), upper_key.begin(),
::toupper);
auto index = cpu_mode_map.find(upper_key);
if (index == cpu_mode_map.end()) {
LOGE("cpu_mode not found %s", upper_key.c_str());
return paddle::lite_api::LITE_POWER_HIGH;
} else {
return index->second;
}
}
extern "C"
JNIEXPORT jfloatArray JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_forward(JNIEnv *env, jobject thiz,
jlong java_pointer, jfloatArray buf,
jfloatArray ddims,
jobject original_image) {
LOGI("begin to run native forward");
if (java_pointer == 0) {
LOGE("JAVA pointer is NULL");
return cpp_array_to_jfloatarray(env, nullptr, 0);
}
cv::Mat origin = bitmap_to_cv_mat(env, original_image);
if (origin.size == 0) {
LOGE("origin bitmap cannot convert to CV Mat");
return cpp_array_to_jfloatarray(env, nullptr, 0);
}
ppredictor::OCR_PPredictor *ppredictor = (ppredictor::OCR_PPredictor *) java_pointer;
std::vector<float> dims_float_arr = jfloatarray_to_float_vector(env, ddims);
std::vector<int64_t> dims_arr;
dims_arr.resize(dims_float_arr.size());
std::copy(dims_float_arr.cbegin(), dims_float_arr.cend(), dims_arr.begin());
extern "C" JNIEXPORT jfloatArray JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_forward(
JNIEnv *env, jobject thiz, jlong java_pointer, jfloatArray buf,
jfloatArray ddims, jobject original_image) {
LOGI("begin to run native forward");
if (java_pointer == 0) {
LOGE("JAVA pointer is NULL");
return cpp_array_to_jfloatarray(env, nullptr, 0);
}
cv::Mat origin = bitmap_to_cv_mat(env, original_image);
if (origin.size == 0) {
LOGE("origin bitmap cannot convert to CV Mat");
return cpp_array_to_jfloatarray(env, nullptr, 0);
}
ppredictor::OCR_PPredictor *ppredictor =
(ppredictor::OCR_PPredictor *)java_pointer;
std::vector<float> dims_float_arr = jfloatarray_to_float_vector(env, ddims);
std::vector<int64_t> dims_arr;
dims_arr.resize(dims_float_arr.size());
std::copy(dims_float_arr.cbegin(), dims_float_arr.cend(), dims_arr.begin());
// 这里值有点大就不调用jfloatarray_to_float_vector了
int64_t buf_len = (int64_t) env->GetArrayLength(buf);
jfloat *buf_data = env->GetFloatArrayElements(buf, JNI_FALSE);
float *data = (jfloat *) buf_data;
std::vector<ppredictor::OCRPredictResult> results = ppredictor->infer_ocr(dims_arr, data,
buf_len,
NET_OCR, origin);
LOGI("infer_ocr finished with boxes %ld", results.size());
// 这里将std::vector<ppredictor::OCRPredictResult> 序列化成 float数组传输到java层再反序列化
std::vector<float> float_arr;
for (const ppredictor::OCRPredictResult &r :results) {
float_arr.push_back(r.points.size());
float_arr.push_back(r.word_index.size());
float_arr.push_back(r.score);
for (const std::vector<int> &point : r.points) {
float_arr.push_back(point.at(0));
float_arr.push_back(point.at(1));
}
for (int index: r.word_index) {
float_arr.push_back(index);
}
// 这里值有点大就不调用jfloatarray_to_float_vector了
int64_t buf_len = (int64_t)env->GetArrayLength(buf);
jfloat *buf_data = env->GetFloatArrayElements(buf, JNI_FALSE);
float *data = (jfloat *)buf_data;
std::vector<ppredictor::OCRPredictResult> results =
ppredictor->infer_ocr(dims_arr, data, buf_len, NET_OCR, origin);
LOGI("infer_ocr finished with boxes %ld", results.size());
// 这里将std::vector<ppredictor::OCRPredictResult> 序列化成
// float数组传输到java层再反序列化
std::vector<float> float_arr;
for (const ppredictor::OCRPredictResult &r : results) {
float_arr.push_back(r.points.size());
float_arr.push_back(r.word_index.size());
float_arr.push_back(r.score);
for (const std::vector<int> &point : r.points) {
float_arr.push_back(point.at(0));
float_arr.push_back(point.at(1));
}
return cpp_array_to_jfloatarray(env, float_arr.data(), float_arr.size());
for (int index : r.word_index) {
float_arr.push_back(index);
}
}
return cpp_array_to_jfloatarray(env, float_arr.data(), float_arr.size());
}
extern "C"
JNIEXPORT void JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_release(JNIEnv *env, jobject thiz,
jlong java_pointer){
if (java_pointer == 0) {
LOGE("JAVA pointer is NULL");
return;
}
ppredictor::OCR_PPredictor *ppredictor = (ppredictor::OCR_PPredictor *) java_pointer;
delete ppredictor;
extern "C" JNIEXPORT void JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_release(
JNIEnv *env, jobject thiz, jlong java_pointer) {
if (java_pointer == 0) {
LOGE("JAVA pointer is NULL");
return;
}
ppredictor::OCR_PPredictor *ppredictor =
(ppredictor::OCR_PPredictor *)java_pointer;
delete ppredictor;
}

@ -0,0 +1,46 @@
// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "ocr_cls_process.h"
#include <cmath>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iostream>
#include <vector>
const std::vector<int> CLS_IMAGE_SHAPE = {3, 48, 192};
cv::Mat cls_resize_img(const cv::Mat &img) {
int imgC = CLS_IMAGE_SHAPE[0];
int imgW = CLS_IMAGE_SHAPE[2];
int imgH = CLS_IMAGE_SHAPE[1];
float ratio = float(img.cols) / float(img.rows);
int resize_w = 0;
if (ceilf(imgH * ratio) > imgW)
resize_w = imgW;
else
resize_w = int(ceilf(imgH * ratio));
cv::Mat resize_img;
cv::resize(img, resize_img, cv::Size(resize_w, imgH), 0.f, 0.f,
cv::INTER_CUBIC);
if (resize_w < imgW) {
cv::copyMakeBorder(resize_img, resize_img, 0, 0, 0, int(imgW - resize_w),
cv::BORDER_CONSTANT, {0, 0, 0});
}
return resize_img;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save