Spaces:
Running
Running
Upload folder using huggingface_hub (part 4)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- ocr-studio/PaddleOCR/README.md +257 -0
- ocr-studio/PaddleOCR/README_ch.md +254 -0
- ocr-studio/PaddleOCR/README_en.md +270 -0
- ocr-studio/PaddleOCR/RELEASING.md +194 -0
- ocr-studio/PaddleOCR/RELEASING_cn.md +194 -0
- ocr-studio/PaddleOCR/TEST_REPORT.md +71 -0
- ocr-studio/PaddleOCR/ppocr/optimizer/regularizer.py +51 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/__init__.py +73 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/cls_postprocess.py +42 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/ct_postprocess.py +154 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/db_postprocess.py +276 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/drrg_postprocess.py +325 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/east_postprocess.py +145 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/fce_postprocess.py +241 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/locality_aware_nms.py +200 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pg_postprocess.py +63 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/picodet_postprocess.py +250 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/__init__.py +15 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/README.md +6 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/__init__.py +29 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/pse.pyx +70 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/setup.py +14 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse_postprocess.py +120 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/rec_postprocess.py +1221 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/sast_postprocess.py +357 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/table_postprocess.py +186 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/vqa_token_re_layoutlm_postprocess.py +95 -0
- ocr-studio/PaddleOCR/ppocr/postprocess/vqa_token_ser_layoutlm_postprocess.py +117 -0
- ocr-studio/PaddleOCR/ppocr/utils/EN_symbol_dict.txt +94 -0
- ocr-studio/PaddleOCR/ppocr/utils/__init__.py +13 -0
- ocr-studio/PaddleOCR/ppocr/utils/corpus/fi_corpus.txt +0 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/README.md +5 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/ar_dict.txt +117 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/arabic_dict.txt +161 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/be_dict.txt +145 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/bengali_dict.txt +74 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/bg_dict.txt +140 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/bm_dict.txt +160 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/bm_dict_add.txt +3219 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/bn_dict.txt +477 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/chinese_cht_dict.txt +8421 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/confuse.pkl +3 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/cyrillic_dict.txt +163 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/devanagari_dict.txt +167 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/en_dict.txt +63 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/fa_dict.txt +136 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/fi_dict.txt +80 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/french_dict.txt +136 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/german_dict.txt +143 -0
- ocr-studio/PaddleOCR/ppocr/utils/dict/gujarati_dict.txt +48 -0
ocr-studio/PaddleOCR/README.md
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[English](README_en.md) | 简体中文 | [हिन्दी](./doc/doc_i18n/README_हिन्द.md) | [日本語](./doc/doc_i18n/README_日本語.md) | [한국인](./doc/doc_i18n/README_한국어.md) | [Pу́сский язы́к](./doc/doc_i18n/README_Ру́сский_язы́к.md)
|
| 2 |
+
|
| 3 |
+
<p align="center">
|
| 4 |
+
<img src="./doc/PaddleOCR_log.png" align="middle" width = "600"/>
|
| 5 |
+
<p align="center">
|
| 6 |
+
<p align="left">
|
| 7 |
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-dfd.svg"></a>
|
| 8 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/releases"><img src="https://img.shields.io/github/v/release/PaddlePaddle/PaddleOCR?color=ffa"></a>
|
| 9 |
+
<a href=""><img src="https://img.shields.io/badge/python-3.7+-aff.svg"></a>
|
| 10 |
+
<a href=""><img src="https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg"></a>
|
| 11 |
+
<a href=""><img src="https://img.shields.io/pypi/format/PaddleOCR?color=c77"></a>
|
| 12 |
+
<a href="https://pypi.org/project/PaddleOCR/"><img src="https://img.shields.io/pypi/dm/PaddleOCR?color=9cf"></a>
|
| 13 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/stargazers"><img src="https://img.shields.io/github/stars/PaddlePaddle/PaddleOCR?color=ccf"></a>
|
| 14 |
+
</p>
|
| 15 |
+
|
| 16 |
+
## 简介
|
| 17 |
+
|
| 18 |
+
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。
|
| 19 |
+
|
| 20 |
+
<div align="center">
|
| 21 |
+
<img src="./doc/imgs_results/ch_ppocr_mobile_v2.0/test_add_91.jpg" width="800">
|
| 22 |
+
</div>
|
| 23 |
+
|
| 24 |
+
<div align="center">
|
| 25 |
+
<img src="./doc/imgs_results/ch_ppocr_mobile_v2.0/00006737.jpg" width="800">
|
| 26 |
+
</div>
|
| 27 |
+
|
| 28 |
+
## 📣 近期更新
|
| 29 |
+
- **🔥[PaddleOCR 算法模型挑战赛](https://competition.atomgit.com/competitionInfo?id=d25e62a0d7f27876a8c4219bfc0be90e)** 火热开启!报名时间1/15-3/31,30万元奖金池!快来一展身手吧😎!
|
| 30 |
+
- **🔨2023.11 发布 [PP-ChatOCRv2](https://aistudio.baidu.com/application/detail/10368)**: 一个SDK,覆盖20+高频应用场景,支持5种文本图像智能分析能力和部署,包括通用场景关键信息抽取(快递单、营业执照和机动车行驶证等)、复杂文档场景关键信息抽取(解决生僻字、特殊标点、多页pdf、表格等难点问题)、通用OCR、文档场景专用OCR、通用表格识别。针对垂类业务场景,也支持模型训练、微调和Prompt优化。
|
| 31 |
+
- **🔥2023.8.7 发布 PaddleOCR [release/2.7](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7)**
|
| 32 |
+
- 发布[PP-OCRv4](./doc/doc_ch/PP-OCRv4_introduction.md),提供mobile和server两种模型
|
| 33 |
+
- PP-OCRv4-mobile:速度可比情况下,中文场景效果相比于PP-OCRv3再提升4.5%,英文场景提升10%,80语种多语言模型平均识别准确率提升8%以上
|
| 34 |
+
- PP-OCRv4-server:发布了目前精度最高的OCR模型,中英文场景上检测模型精度提升4.9%, 识别模型精度提升2%
|
| 35 |
+
可参考[快速开始](./doc/doc_ch/quickstart.md) 一行命令快速使用,同时也可在飞桨AI套件(PaddleX)中的[通用OCR产业方案](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=286)中低代码完成模型训练、推理、高性能部署全流程
|
| 36 |
+
- 发布[PP-ChatOCR](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=332) ,使用融合PP-OCR模型和文心大模型的通用场景关键信息抽取全新方案
|
| 37 |
+
- 🔨**2022.11 新增实现[4种前沿算法](doc/doc_ch/algorithm_overview.md)**:文本检测 [DRRG](doc/doc_ch/algorithm_det_drrg.md), 文本识别 [RFL](doc/doc_ch/algorithm_rec_rfl.md), 文本超分[Text Telescope](doc/doc_ch/algorithm_sr_telescope.md),公式识别[CAN](doc/doc_ch/algorithm_rec_can.md)
|
| 38 |
+
- **2022.10 优化[JS版PP-OCRv3模型](./deploy/paddlejs/README_ch.md)**:模型大小仅4.3M,预测速度提升8倍,配套web demo开箱即用
|
| 39 |
+
- **💥 直播回放:PaddleOCR研发团队详解PP-StructureV2优化策略**。微信扫描[下方二维码](#开源社区),关注公众号并填写问卷后进入官方交流群,获取直播回放链接与20G重磅OCR学习大礼包(内含PDF转Word应用程序、10种垂类模型、《动手学OCR》电子书等)
|
| 40 |
+
- **🔥2022.8.24 发布 PaddleOCR [release/2.6](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.6)**
|
| 41 |
+
- 发布[PP-StructureV2](./ppstructure/README_ch.md),系统功能性能全面升级,适配中文场景,新增支持[版面复原](./ppstructure/recovery/README_ch.md),支持**一行命令完成PDF转Word**;
|
| 42 |
+
- [版面分析](./ppstructure/layout/README_ch.md)模型优化:模型存储减少95%,速度提升11倍,平均CPU耗时仅需41ms;
|
| 43 |
+
- [表格识别](./ppstructure/table/README_ch.md)模型优化:设计3大优化策略,预测耗时不变情况下,模型精度提升6%;
|
| 44 |
+
- [关键信息抽取](./ppstructure/kie/README_ch.md)模型优化:设计视觉无关模型结构,语义实体识别精度提升2.8%,关系抽取精度提升9.1%。
|
| 45 |
+
- 🔥**2022.8 发布 [OCR场景应用集合](./applications)**:包含数码管、液晶屏、车牌、高精度SVTR模型、手写体识别等**9���垂类模型**,覆盖通用,制造、金融、交通行业的主要OCR垂类应用。
|
| 46 |
+
|
| 47 |
+
> [更多](./doc/doc_ch/update.md)
|
| 48 |
+
|
| 49 |
+
## 🌟 特性
|
| 50 |
+
|
| 51 |
+
支持多种OCR相关前沿算法,在此基础上打造产业级特色模型[PP-OCR](./doc/doc_ch/ppocr_introduction.md)、[PP-Structure](./ppstructure/README_ch.md)和[PP-ChatOCRv2](https://aistudio.baidu.com/projectdetail/paddlex/7050167),并打通数据生产、模型训练、压缩、预测部署全流程。
|
| 52 |
+
|
| 53 |
+
<div align="center">
|
| 54 |
+
<img src="https://raw.githubusercontent.com/tink2123/test/master/ppocrv4.png">
|
| 55 |
+
</div>
|
| 56 |
+
|
| 57 |
+
> 上述内容的使用方法建议从文档教程中的快速开始体验
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
## ⚡ 快速开始
|
| 61 |
+
|
| 62 |
+
- 在线免费体验:
|
| 63 |
+
- PP-OCRv4 在线体验地址:https://aistudio.baidu.com/application/detail/7658
|
| 64 |
+
- PP-ChatOCRv2 在线体验地址:https://aistudio.baidu.com/application/detail/10368
|
| 65 |
+
|
| 66 |
+
- 一行命令快速使用:[快速开始(中英文/多语言/文档分析)](./doc/doc_ch/quickstart.md)
|
| 67 |
+
- 移动端demo体验:[安装包DEMO下载地址](https://ai.baidu.com/easyedge/app/openSource?from=paddlelite)(基于EasyEdge和Paddle-Lite, 支持iOS和Android系统)
|
| 68 |
+
|
| 69 |
+
<a name="技术交流合作"></a>
|
| 70 |
+
## 📖 技术交流合作
|
| 71 |
+
- 飞桨AI套件([PaddleX](http://10.136.157.23:8080/paddle/paddleX))提供了飞桨模型训压推一站式全流程高效率开发平台,其使命是助力AI技术快速落地,愿景是使人人成为AI Developer!
|
| 72 |
+
- PaddleX 目前覆盖图像分类、目标检测、图像分割、3D、OCR和时序预测等领域方向,已内置了36种基础单模型,例如RT-DETR、PP-YOLOE、PP-HGNet、PP-LCNet、PP-LiteSeg等;集成了12种实用的产业方案,例如PP-OCRv4、PP-ChatOCR、PP-ShiTu、PP-TS、车载路面垃圾检测、野生动物违禁制品识别等。
|
| 73 |
+
- PaddleX 提供了“工具箱”和“开发者”两种AI开发模式。工具箱模式可以无代码调优关键超参,开发者模式可以低代码进行单模型训压推和多模型串联推理,同时支持云端和本地端。
|
| 74 |
+
- PaddleX 还支持联创开发,利润分成!目前 PaddleX 正在快速迭代,欢迎广大的个人开发者和企业开发者参与进来,共创繁荣的 AI 技术生态!
|
| 75 |
+
|
| 76 |
+
- PaddleX官网地址:https://aistudio.baidu.com/intro/paddlex
|
| 77 |
+
|
| 78 |
+
- PaddleX官方交流频道:https://aistudio.baidu.com/community/channel/610
|
| 79 |
+
|
| 80 |
+
<a name="电子书"></a>
|
| 81 |
+
## 📚《动手学OCR》电子书
|
| 82 |
+
- [《动手学OCR》电子书](./doc/doc_ch/ocr_book.md)
|
| 83 |
+
|
| 84 |
+
<a name="开源共建"></a>
|
| 85 |
+
## 🚀 开源共建
|
| 86 |
+
- **👫 加入社区**:感谢大家长久以来对 PaddleOCR 的支持和关注,与广大开发者共同构建一个专业、和谐、相互帮助的开源社区是 PaddleOCR 的目标。我们非常欢迎各位开发者参与到飞桨社区的开源建设中,加入开源、共建飞桨。**为感谢社区开发者在 PaddleOCR release2.7 中做出的代码贡献,我们将为贡献者制作与邮寄[开源贡献证书](https://github.com/PaddlePaddle/community/blob/master/contributors/certificate-inspection.md),烦请[填写问卷](https://paddle.wjx.cn/vm/wFNr6w7.aspx)提供必要的邮寄信息。**
|
| 87 |
+
- **🤩 社区活动**:飞桨开源社区长期运营与发布各类丰富的活动与开发任务,在 PaddleOCR 社区,你可以关注以下社区活动,并选择自己感兴趣的内容参与开源共建:
|
| 88 |
+
- **🎁 飞桨套件快乐开源常规赛 | [传送门](https://github.com/PaddlePaddle/PaddleOCR/issues/10223)**:OCR 社区常规赛升级版,以建设更好用的 OCR 套件为目标,包括但不限于学术前沿模型训练与推理、打磨优化 OCR 工具与应用项目开发等,任何有利于社区意见流动和问题解决的行为都热切希望大家的参与。让我们共同成长为飞桨套件的重要 Contributor 🎉🎉🎉。
|
| 89 |
+
- **💡 新需求征集 | [传送门](https://github.com/PaddlePaddle/PaddleOCR/issues/10334)**:你在日常研究和实践深度学习过程中,有哪些你期望的 feature 亟待实现?请按照格式描述你想实现的 feature 和你提出的初步实现思路,我们会定期沟通与讨论这些需求,并将其纳入未来的版本规划中。
|
| 90 |
+
- **💬 PP-SIG 技术研讨会 | [传送门](https://github.com/PaddlePaddle/community/tree/master/ppsigs)**:PP-SIG 是飞桨社区开发者由于相同的兴趣汇聚在一起形成的虚拟组织,通过定期召开技术研讨会的方式,分享行业前沿动态、探讨社区需求与技术开发细节、发起社区联合贡献任务。PaddleOCR 希望可以通过 AI 的力量助力任何一位有梦想的开发者实现自己的想法,享受创造价值带来的愉悦。
|
| 91 |
+
- **📑 项目合作**:如果你有企业中明确的 OCR 垂类应用需求,我们推荐你使用训压推一站式全流程高效率开发平台 PaddleX,助力 AI 技术快速落地。PaddleX 还支持联创开发,利润分成!欢迎广大的个人开发者和企业开发者参与进来,共创繁荣的 AI 技术生态!
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
<a name="模型下��"></a>
|
| 95 |
+
## 🛠️ PP-OCR系列模型列表(更新中)
|
| 96 |
+
|
| 97 |
+
| 模型简介 | 模型名称 | 推荐场景 | 检测模型 | 方向分类器 | 识别模型 |
|
| 98 |
+
| ------------------------------------- | ----------------------- | --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
| 99 |
+
| 中英文超轻量PP-OCRv4模型(15.8M) | ch_PP-OCRv4_xx | 移动端&服务器端 | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_train.tar) |
|
| 100 |
+
| 中英文超轻量PP-OCRv3模型(16.2M) | ch_PP-OCRv3_xx | 移动端&服务器端 | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar) |
|
| 101 |
+
| 英文超轻量PP-OCRv3模型(13.4M) | en_PP-OCRv3_xx | 移动端&服务器端 | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_distill_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar) |
|
| 102 |
+
|
| 103 |
+
- 超轻量OCR系列更多模型下载(包括多语言),可以参考[PP-OCR系列模型下载](./doc/doc_ch/models_list.md),文档分析相关模型参考[PP-Structure系列模型下载](./ppstructure/docs/models_list.md)
|
| 104 |
+
|
| 105 |
+
### PaddleOCR场景应用模型
|
| 106 |
+
|
| 107 |
+
| 行业 | 类别 | 亮点 | 文档说明 | 模型下载 |
|
| 108 |
+
| ---- | ------------ | ---------------------------------- | ------------------------------------------------------------ | --------------------------------------------- |
|
| 109 |
+
| 制造 | 数码管识别 | 数码管数据合成、漏识别调优 | [光功率计数码管字符识别](./applications/光功率计数码管字符识别/光功率计数码管字符识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 110 |
+
| 金融 | 通用表单识别 | 多模态通用表单结构化提取 | [多模态表单识别](./applications/多模态表单识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 111 |
+
| 交通 | 车牌识别 | 多角度图像处理、轻量模型、端侧部署 | [轻量级车牌识别](./applications/轻量级车牌识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 112 |
+
|
| 113 |
+
- 更多制造、金融、交通行业的主要OCR垂类应用模型(如电表、液晶屏、高精度SVTR模型等),可参考[场景应用模型下载](./applications)
|
| 114 |
+
|
| 115 |
+
<a name="文档教程"></a>
|
| 116 |
+
|
| 117 |
+
## 📖 文档教程
|
| 118 |
+
|
| 119 |
+
- [运行环境准备](./doc/doc_ch/environment.md)
|
| 120 |
+
- [PP-OCR文本检测识别🔥](./doc/doc_ch/ppocr_introduction.md)
|
| 121 |
+
- [快速开始](./doc/doc_ch/quickstart.md)
|
| 122 |
+
- [模型库](./doc/doc_ch/models_list.md)
|
| 123 |
+
- [模型训练](./doc/doc_ch/training.md)
|
| 124 |
+
- [文本检测](./doc/doc_ch/detection.md)
|
| 125 |
+
- [文本识别](./doc/doc_ch/recognition.md)
|
| 126 |
+
- [文本方向分类器](./doc/doc_ch/angle_class.md)
|
| 127 |
+
- 模型压缩
|
| 128 |
+
- [模型量化](./deploy/slim/quantization/README.md)
|
| 129 |
+
- [模型裁剪](./deploy/slim/prune/README.md)
|
| 130 |
+
- [知识蒸馏](./doc/doc_ch/knowledge_distillation.md)
|
| 131 |
+
- [推理部署](./deploy/README_ch.md)
|
| 132 |
+
- [基于Python预测引擎推理](./doc/doc_ch/inference_ppocr.md)
|
| 133 |
+
- [基于C++预测引擎推理](./deploy/cpp_infer/readme_ch.md)
|
| 134 |
+
- [服务化部署](./deploy/pdserving/README_CN.md)
|
| 135 |
+
- [端侧部署](./deploy/lite/readme.md)
|
| 136 |
+
- [Paddle2ONNX模型转化与预测](./deploy/paddle2onnx/readme.md)
|
| 137 |
+
- [云上飞桨部署工具](./deploy/paddlecloud/README.md)
|
| 138 |
+
- [Benchmark](./doc/doc_ch/benchmark.md)
|
| 139 |
+
- [PP-Structure文档分析🔥](./ppstructure/README_ch.md)
|
| 140 |
+
- [快速开始](./ppstructure/docs/quickstart.md)
|
| 141 |
+
- [模型库](./ppstructure/docs/models_list.md)
|
| 142 |
+
- [模型训练](./doc/doc_ch/training.md)
|
| 143 |
+
- [版面分析](./ppstructure/layout/README_ch.md)
|
| 144 |
+
- [表格识别](./ppstructure/table/README_ch.md)
|
| 145 |
+
- [关键信息提取](./ppstructure/kie/README_ch.md)
|
| 146 |
+
- [推理部署](./deploy/README_ch.md)
|
| 147 |
+
- [基于Python预测引擎推理](./ppstructure/docs/inference.md)
|
| 148 |
+
- [基于C++预测引擎推理](./deploy/cpp_infer/readme_ch.md)
|
| 149 |
+
- [服务化部署](./deploy/hubserving/readme.md)
|
| 150 |
+
- [前沿算法与模型🚀](./doc/doc_ch/algorithm_overview.md)
|
| 151 |
+
- [文本检测算法](./doc/doc_ch/algorithm_overview.md)
|
| 152 |
+
- [文本识别算法](./doc/doc_ch/algorithm_overview.md)
|
| 153 |
+
- [端到端OCR算法](./doc/doc_ch/algorithm_overview.md)
|
| 154 |
+
- [表格识别算法](./doc/doc_ch/algorithm_overview.md)
|
| 155 |
+
- [关键信息抽取算法](./doc/doc_ch/algorithm_overview.md)
|
| 156 |
+
- [使用PaddleOCR架构添加新算法](./doc/doc_ch/add_new_algorithm.md)
|
| 157 |
+
- [场景应用](./applications)
|
| 158 |
+
- 数据标注与合成
|
| 159 |
+
- [半自动标注工具PPOCRLabel](./PPOCRLabel/README_ch.md)
|
| 160 |
+
- [数据合成工具Style-Text](./StyleText/README_ch.md)
|
| 161 |
+
- [其它数据标注工具](./doc/doc_ch/data_annotation.md)
|
| 162 |
+
- [其它数据合成工具](./doc/doc_ch/data_synthesis.md)
|
| 163 |
+
- 数据集
|
| 164 |
+
- [通用中英文OCR数据集](doc/doc_ch/dataset/datasets.md)
|
| 165 |
+
- [手写中文OCR数据集](doc/doc_ch/dataset/handwritten_datasets.md)
|
| 166 |
+
- [垂类多语言OCR数据集](doc/doc_ch/dataset/vertical_and_multilingual_datasets.md)
|
| 167 |
+
- [版面分析数据集](doc/doc_ch/dataset/layout_datasets.md)
|
| 168 |
+
- [表格识别数据集](doc/doc_ch/dataset/table_datasets.md)
|
| 169 |
+
- [关键信息提取数据集](doc/doc_ch/dataset/kie_datasets.md)
|
| 170 |
+
- [代码组织结构](./doc/doc_ch/tree.md)
|
| 171 |
+
- [效果展示](#效果展示)
|
| 172 |
+
- [《动手学OCR》电子书📚](./doc/doc_ch/ocr_book.md)
|
| 173 |
+
- [开源社区](#开源社区)
|
| 174 |
+
- FAQ
|
| 175 |
+
- [通用问题](./doc/doc_ch/FAQ.md)
|
| 176 |
+
- [PaddleOCR实战问题](./doc/doc_ch/FAQ.md)
|
| 177 |
+
- [参考文献](./doc/doc_ch/reference.md)
|
| 178 |
+
- [许可证书](#许可证书)
|
| 179 |
+
|
| 180 |
+
|
| 181 |
+
<a name="效果展示"></a>
|
| 182 |
+
|
| 183 |
+
## 👀 效果展示 [more](./doc/doc_ch/visualization.md)
|
| 184 |
+
|
| 185 |
+
<details open>
|
| 186 |
+
<summary>PP-OCRv3 中文模型</summary>
|
| 187 |
+
|
| 188 |
+
<div align="center">
|
| 189 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic001.jpg" width="800">
|
| 190 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic002.jpg" width="800">
|
| 191 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic003.jpg" width="800">
|
| 192 |
+
</div>
|
| 193 |
+
|
| 194 |
+
</details>
|
| 195 |
+
|
| 196 |
+
|
| 197 |
+
<details open>
|
| 198 |
+
<summary>PP-OCRv3 英文模型</summary>
|
| 199 |
+
|
| 200 |
+
<div align="center">
|
| 201 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_1.png" width="800">
|
| 202 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_2.png" width="800">
|
| 203 |
+
</div>
|
| 204 |
+
|
| 205 |
+
</details>
|
| 206 |
+
|
| 207 |
+
|
| 208 |
+
<details open>
|
| 209 |
+
<summary>PP-OCRv3 多语言模型</summary>
|
| 210 |
+
|
| 211 |
+
<div align="center">
|
| 212 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/japan_2.jpg" width="800">
|
| 213 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/korean_1.jpg" width="800">
|
| 214 |
+
</div>
|
| 215 |
+
|
| 216 |
+
</details>
|
| 217 |
+
|
| 218 |
+
<details open>
|
| 219 |
+
<summary>PP-Structure 文档分析</summary>
|
| 220 |
+
|
| 221 |
+
- 版面分析+表格识别
|
| 222 |
+
<div align="center">
|
| 223 |
+
<img src="./ppstructure/docs/table/ppstructure.GIF" width="800">
|
| 224 |
+
</div>
|
| 225 |
+
|
| 226 |
+
- SER(语义实体识别)
|
| 227 |
+
<div align="center">
|
| 228 |
+
<img src="https://user-images.githubusercontent.com/14270174/185310636-6ce02f7c-790d-479f-b163-ea97a5a04808.jpg" width="600">
|
| 229 |
+
</div>
|
| 230 |
+
|
| 231 |
+
<div align="center">
|
| 232 |
+
<img src="https://user-images.githubusercontent.com/14270174/185539517-ccf2372a-f026-4a7c-ad28-c741c770f60a.png" width="600">
|
| 233 |
+
</div>
|
| 234 |
+
|
| 235 |
+
<div align="center">
|
| 236 |
+
<img src="https://user-images.githubusercontent.com/14270174/197464552-69de557f-edff-4c7f-acbf-069df1ba097f.png" width="600">
|
| 237 |
+
</div>
|
| 238 |
+
|
| 239 |
+
- RE(关系提取)
|
| 240 |
+
<div align="center">
|
| 241 |
+
<img src="https://user-images.githubusercontent.com/14270174/185393805-c67ff571-cf7e-4217-a4b0-8b396c4f22bb.jpg" width="600">
|
| 242 |
+
</div>
|
| 243 |
+
|
| 244 |
+
<div align="center">
|
| 245 |
+
<img src="https://user-images.githubusercontent.com/14270174/185540080-0431e006-9235-4b6d-b63d-0b3c6e1de48f.jpg" width="600">
|
| 246 |
+
</div>
|
| 247 |
+
|
| 248 |
+
<div align="center">
|
| 249 |
+
<img src="https://user-images.githubusercontent.com/25809855/186094813-3a8e16cc-42e5-4982-b9f4-0134dfb5688d.png" width="600">
|
| 250 |
+
</div>
|
| 251 |
+
|
| 252 |
+
</details>
|
| 253 |
+
|
| 254 |
+
<a name="许可证书"></a>
|
| 255 |
+
|
| 256 |
+
## 许可证书
|
| 257 |
+
本项目的发布受<a href="https://github.com/PaddlePaddle/PaddleOCR/blob/master/LICENSE">Apache 2.0 license</a>许可认证。
|
ocr-studio/PaddleOCR/README_ch.md
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[English](README.md) | 简体中文 | [हिन्दी](./doc/doc_i18n/README_हिन्द.md) | [日本語](./doc/doc_i18n/README_日本語.md) | [한국인](./doc/doc_i18n/README_한국어.md) | [Pу́сский язы́к](./doc/doc_i18n/README_Ру́сский_язы́к.md)
|
| 2 |
+
|
| 3 |
+
<p align="center">
|
| 4 |
+
<img src="./doc/PaddleOCR_log.png" align="middle" width = "600"/>
|
| 5 |
+
<p align="center">
|
| 6 |
+
<p align="left">
|
| 7 |
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-dfd.svg"></a>
|
| 8 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/releases"><img src="https://img.shields.io/github/v/release/PaddlePaddle/PaddleOCR?color=ffa"></a>
|
| 9 |
+
<a href=""><img src="https://img.shields.io/badge/python-3.7+-aff.svg"></a>
|
| 10 |
+
<a href=""><img src="https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg"></a>
|
| 11 |
+
<a href=""><img src="https://img.shields.io/pypi/format/PaddleOCR?color=c77"></a>
|
| 12 |
+
<a href="https://pypi.org/project/PaddleOCR/"><img src="https://img.shields.io/pypi/dm/PaddleOCR?color=9cf"></a>
|
| 13 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/stargazers"><img src="https://img.shields.io/github/stars/PaddlePaddle/PaddleOCR?color=ccf"></a>
|
| 14 |
+
</p>
|
| 15 |
+
|
| 16 |
+
## 简介
|
| 17 |
+
|
| 18 |
+
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。
|
| 19 |
+
|
| 20 |
+
<div align="center">
|
| 21 |
+
<img src="./doc/imgs_results/ch_ppocr_mobile_v2.0/test_add_91.jpg" width="800">
|
| 22 |
+
</div>
|
| 23 |
+
|
| 24 |
+
<div align="center">
|
| 25 |
+
<img src="./doc/imgs_results/ch_ppocr_mobile_v2.0/00006737.jpg" width="800">
|
| 26 |
+
</div>
|
| 27 |
+
|
| 28 |
+
## 📣 近期更新
|
| 29 |
+
|
| 30 |
+
- **🔥2023.3.10 PaddleOCR集成了高性能、全场景模型部署方案FastDeploy,欢迎参考[指南](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/deploy/fastdeploy)试用(注意使用dygraph分支)。**
|
| 31 |
+
- 📚**2022.12 发布[《OCR产业范例20讲》电子书](./applications/README.md)**,新增蒙古文、身份证、液晶屏缺陷等**7个场景应用范例**
|
| 32 |
+
- 🔨**2022.11 新增实现[4种前沿算法](doc/doc_ch/algorithm_overview.md)**:文本检测 [DRRG](doc/doc_ch/algorithm_det_drrg.md), 文本识别 [RFL](doc/doc_ch/algorithm_rec_rfl.md), 文本超分[Text Telescope](doc/doc_ch/algorithm_sr_telescope.md),公式识别[CAN](doc/doc_ch/algorithm_rec_can.md)
|
| 33 |
+
- **2022.10 优化[JS版PP-OCRv3模型](./deploy/paddlejs/README_ch.md)**:模型大小仅4.3M,预测速度提升8倍,配套web demo开箱即用
|
| 34 |
+
- **💥 直播回放:PaddleOCR研发团队详解PP-StructureV2优化策略**。微信扫描[下方二维码](#开源社区),关注公众号并填写问卷后进入官方交流群,获取直播回放链接与20G重磅OCR学习大礼包(内含PDF转Word应用程序、10种垂类模型、《动手学OCR》电子书等)
|
| 35 |
+
|
| 36 |
+
- **🔥2022.8.24 发布 PaddleOCR [release/2.6](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.6)**
|
| 37 |
+
- 发布[PP-StructureV2](./ppstructure/README_ch.md),系统功能性能全面升级,适配中文场景,新增支持[版面复原](./ppstructure/recovery/README_ch.md),支持**一行命令完成PDF转Word**;
|
| 38 |
+
- [版面分析](./ppstructure/layout/README_ch.md)模型优化:模型存储减少95%,速度提升11倍,平均CPU耗时仅需41ms;
|
| 39 |
+
- [表格识别](./ppstructure/table/README_ch.md)模型优化:设计3大优化策略,预测耗时不变情况下,模型精度提升6%;
|
| 40 |
+
- [关键信息抽取](./ppstructure/kie/README_ch.md)模型优化:设计视觉无关模型结构,语义实体识别精度提升2.8%,关系抽取精度提升9.1%。
|
| 41 |
+
- **2022.8 发布 [OCR场景应用集合](./applications)**:包含数码管、液晶屏、车牌、高精度SVTR模型、手写体识别等**9个垂类模型**,覆盖通用,制造、金融、交通行业的主要OCR垂类应用。
|
| 42 |
+
- **2022.8 新增实现[8种前沿算法](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_overview.md)**
|
| 43 |
+
- 文本检测:[FCENet](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_det_fcenet.md), [DB++](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_det_db.md)
|
| 44 |
+
- 文本识别:[ViTSTR](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_rec_vitstr.md), [ABINet](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_rec_abinet.md), [VisionLAN](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_rec_visionlan.md), [SPIN](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_rec_spin.md), [RobustScanner](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_rec_robustscanner.md)
|
| 45 |
+
- 表格识别:[TableMaster](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6rc/doc/doc_ch/algorithm_table_master.md)
|
| 46 |
+
|
| 47 |
+
- **2022.5.9 发布 PaddleOCR [release/2.5](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.5)**
|
| 48 |
+
- 发布[PP-OCRv3](./doc/doc_ch/ppocr_introduction.md#pp-ocrv3),速度可比情况下,中文场景效果相比于PP-OCRv2再提升5%,英文场景提升11%,80语种多语言模型平均识别准确率提升5%以上;
|
| 49 |
+
- 发布半自动标注工具[PPOCRLabelv2](./PPOCRLabel):新增表格文字图像、图像关键信息抽取任务和不规则文字图像的标注功能;
|
| 50 |
+
- 发布OCR产业落地工具集:打通22种训练部署软硬件环境与方式,覆盖企业90%的训练部署环境需求;
|
| 51 |
+
- 发布交互式OCR开源电子书[《动手学OCR》](./doc/doc_ch/ocr_book.md),覆盖OCR全栈技术的前沿理论与代码实践,并配套教学视频。
|
| 52 |
+
|
| 53 |
+
> [更多](./doc/doc_ch/update.md)
|
| 54 |
+
|
| 55 |
+
## 🌟 特性
|
| 56 |
+
|
| 57 |
+
支持多种OCR相关前沿算法,在此基础上打造产业级特色模型[PP-OCR](./doc/doc_ch/ppocr_introduction.md)和[PP-Structure](./ppstructure/README_ch.md),并打通数据生产、模型训练、压缩、预测部署全流程。
|
| 58 |
+
|
| 59 |
+
<div align="center">
|
| 60 |
+
<img src="https://user-images.githubusercontent.com/25809855/186170862-b8f80f6c-fee7-4b26-badc-de9c327c76ce.png">
|
| 61 |
+
</div>
|
| 62 |
+
|
| 63 |
+
> 上述内容的使用方法建议从文档教程中的快速开始体验
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
## ⚡ 快速开始
|
| 67 |
+
|
| 68 |
+
- 在线网站体验:超轻量PP-OCR mobile模型体验地址:https://www.paddlepaddle.org.cn/hub/scene/ocr
|
| 69 |
+
- 移动端demo体验:[安装包DEMO下载地址](https://ai.baidu.com/easyedge/app/openSource?from=paddlelite)(基于EasyEdge和Paddle-Lite, 支持iOS和Android系统)
|
| 70 |
+
- 一行命令快速使用:[快速开始(中英文/多语言/文档分析)](./doc/doc_ch/quickstart.md)
|
| 71 |
+
|
| 72 |
+
<a name="电子书"></a>
|
| 73 |
+
## 📚《动手学OCR》电子书
|
| 74 |
+
- [《动手学OCR》电子书](./doc/doc_ch/ocr_book.md)
|
| 75 |
+
|
| 76 |
+
<a name="开源社区"></a>
|
| 77 |
+
|
| 78 |
+
## 👫 开源社区
|
| 79 |
+
- **📑项目合作:** 如果您是企业开发者且有明确的OCR垂类应用需求,填写[问卷](https://paddle.wjx.cn/vj/QwF7GKw.aspx)后可免费与官方团队展开不同层次的合作。
|
| 80 |
+
- **👫加入社区:** **微信扫描二维码并填写问卷之后,加入交流群领取20G重磅OCR学习大礼包**
|
| 81 |
+
- **包括《动手学OCR》电子书** ,配套讲解视频和notebook项目;**PaddleOCR历次发版直播课回放链接**;
|
| 82 |
+
- **OCR场景应用模型集合:** 包含数码管、液晶屏、车牌、高精度SVTR模型、手写体识别等垂类模型,覆盖通用,制造、金融、交通行业的主要OCR垂类应用。
|
| 83 |
+
- PDF2Word应用程序;OCR社区优秀开发者项目分享视频。
|
| 84 |
+
- **🏅️社区项目**:[社区项目](./doc/doc_ch/thirdparty.md)文档中包含了社区用户**使用PaddleOCR开发的各种工具、应用**以及**为PaddleOCR贡献的功能、优化的文档与代码**等,是官方为社区开发者打造的荣誉墙,也是帮助优质项目宣传的广播站。
|
| 85 |
+
- **🎁社区常规赛**:社区常规赛是面向OCR开发者的积分赛事,覆盖文档、代码、模型和应用四大类型,以季度为单位评选并发放奖励,赛题详情与报名方法可参考[链接](https://github.com/PaddlePaddle/PaddleOCR/issues/4982)。
|
| 86 |
+
|
| 87 |
+
<div align="center">
|
| 88 |
+
<img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/dygraph/doc/joinus.PNG" width = "150" height = "150",caption='' />
|
| 89 |
+
<p>PaddleOCR官方交流群二维码</p>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
<a name="模型下载"></a>
|
| 93 |
+
## 🛠️ PP-OCR系列模型列表(更新中)
|
| 94 |
+
|
| 95 |
+
| 模型简介 | 模型名称 | 推荐场景 | 检测模型 | 方向分类器 | 识别模型 |
|
| 96 |
+
| ------------------------------------- | ----------------------- | --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
| 97 |
+
| 中英文超轻量PP-OCRv3模型(16.2M) | ch_PP-OCRv3_xx | 移动端&服务器端 | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar) |
|
| 98 |
+
| 英文超轻量PP-OCRv3模型(13.4M) | en_PP-OCRv3_xx | 移动端&服务器端 | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_distill_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [推理模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar) |
|
| 99 |
+
|
| 100 |
+
- 超轻量OCR系列更多模型下载(包括多语言),可以参考[PP-OCR系列模型下载](./doc/doc_ch/models_list.md),文档分析相关模型参考[PP-Structure系列模型下载](./ppstructure/docs/models_list.md)
|
| 101 |
+
|
| 102 |
+
### PaddleOCR场景应用模型
|
| 103 |
+
|
| 104 |
+
| 行业 | 类别 | 亮点 | 文档说明 | 模型下载 |
|
| 105 |
+
| ---- | ------------ | ---------------------------------- | ------------------------------------------------------------ | --------------------------------------------- |
|
| 106 |
+
| 制造 | 数码管识别 | 数码管数据合成、漏识别调优 | [光功率计数码管字符识别](./applications/光功率计数码管字符识别/光功率计数码管字符识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 107 |
+
| 金融 | 通用表单识别 | 多模态通用表单结构化提取 | [多模态表单识别](./applications/多模态表单识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 108 |
+
| 交通 | 车牌识别 | 多角度图像处理、轻量模型、端侧部署 | [轻量级车牌识别](./applications/轻量级车牌识别.md) | [下载链接](./applications/README.md#模型下载) |
|
| 109 |
+
|
| 110 |
+
- 更多制造、金融、交通行业的主要OCR垂类应用模型(如电表、液晶屏、高精度SVTR模型等),可参考[场景应用模型下载](./applications)
|
| 111 |
+
|
| 112 |
+
<a name="文档教程"></a>
|
| 113 |
+
|
| 114 |
+
## 📖 文档教程
|
| 115 |
+
|
| 116 |
+
- [运行环境准备](./doc/doc_ch/environment.md)
|
| 117 |
+
- [PP-OCR文本检测识别🔥](./doc/doc_ch/ppocr_introduction.md)
|
| 118 |
+
- [快速开始](./doc/doc_ch/quickstart.md)
|
| 119 |
+
- [模型库](./doc/doc_ch/models_list.md)
|
| 120 |
+
- [模型训练](./doc/doc_ch/training.md)
|
| 121 |
+
- [文本检测](./doc/doc_ch/detection.md)
|
| 122 |
+
- [文本识别](./doc/doc_ch/recognition.md)
|
| 123 |
+
- [文本方向分类器](./doc/doc_ch/angle_class.md)
|
| 124 |
+
- 模型压缩
|
| 125 |
+
- [模型量化](./deploy/slim/quantization/README.md)
|
| 126 |
+
- [模型裁剪](./deploy/slim/prune/README.md)
|
| 127 |
+
- [知识蒸馏](./doc/doc_ch/knowledge_distillation.md)
|
| 128 |
+
- [推理部署](./deploy/README_ch.md)
|
| 129 |
+
- [基于Python预测引擎推理](./doc/doc_ch/inference_ppocr.md)
|
| 130 |
+
- [基于C++预测引擎推理](./deploy/cpp_infer/readme_ch.md)
|
| 131 |
+
- [服务化部署](./deploy/pdserving/README_CN.md)
|
| 132 |
+
- [端侧部署](./deploy/lite/readme.md)
|
| 133 |
+
- [Paddle2ONNX模型转化与预测](./deploy/paddle2onnx/readme.md)
|
| 134 |
+
- [云上飞桨部署工具](./deploy/paddlecloud/README.md)
|
| 135 |
+
- [Benchmark](./doc/doc_ch/benchmark.md)
|
| 136 |
+
- [PP-Structure文档分析🔥](./ppstructure/README_ch.md)
|
| 137 |
+
- [快速开始](./ppstructure/docs/quickstart.md)
|
| 138 |
+
- [模型库](./ppstructure/docs/models_list.md)
|
| 139 |
+
- [模型训练](./doc/doc_ch/training.md)
|
| 140 |
+
- [版面分析](./ppstructure/layout/README_ch.md)
|
| 141 |
+
- [表格识别](./ppstructure/table/README_ch.md)
|
| 142 |
+
- [关键信息提取](./ppstructure/kie/README_ch.md)
|
| 143 |
+
- [推理部署](./deploy/README_ch.md)
|
| 144 |
+
- [基于Python预测引擎推理](./ppstructure/docs/inference.md)
|
| 145 |
+
- [基于C++预测引擎推理](./deploy/cpp_infer/readme_ch.md)
|
| 146 |
+
- [服务化部署](./deploy/hubserving/readme.md)
|
| 147 |
+
- [前沿算法与模型🚀](./doc/doc_ch/algorithm_overview.md)
|
| 148 |
+
- [文本检测算法](./doc/doc_ch/algorithm_overview.md)
|
| 149 |
+
- [文本识别算法](./doc/doc_ch/algorithm_overview.md)
|
| 150 |
+
- [端到端OCR算法](./doc/doc_ch/algorithm_overview.md)
|
| 151 |
+
- [表格识别算法](./doc/doc_ch/algorithm_overview.md)
|
| 152 |
+
- [关键信息抽取算法](./doc/doc_ch/algorithm_overview.md)
|
| 153 |
+
- [使用PaddleOCR架构添加新算法](./doc/doc_ch/add_new_algorithm.md)
|
| 154 |
+
- [场景应用](./applications)
|
| 155 |
+
- 数据标注与合成
|
| 156 |
+
- [半自动标注工具PPOCRLabel](./PPOCRLabel/README_ch.md)
|
| 157 |
+
- [数据合成工具Style-Text](./StyleText/README_ch.md)
|
| 158 |
+
- [其它数据标注工具](./doc/doc_ch/data_annotation.md)
|
| 159 |
+
- [其它数据合成工具](./doc/doc_ch/data_synthesis.md)
|
| 160 |
+
- 数据集
|
| 161 |
+
- [通用中英文OCR数据集](doc/doc_ch/dataset/datasets.md)
|
| 162 |
+
- [手写中文OCR数据集](doc/doc_ch/dataset/handwritten_datasets.md)
|
| 163 |
+
- [垂类多语言OCR数据集](doc/doc_ch/dataset/vertical_and_multilingual_datasets.md)
|
| 164 |
+
- [版面分析数据集](doc/doc_ch/dataset/layout_datasets.md)
|
| 165 |
+
- [表格识别数据集](doc/doc_ch/dataset/table_datasets.md)
|
| 166 |
+
- [关键信息提取数据集](doc/doc_ch/dataset/kie_datasets.md)
|
| 167 |
+
- [代码组织结构](./doc/doc_ch/tree.md)
|
| 168 |
+
- [效果展示](#效果展示)
|
| 169 |
+
- [《动手学OCR》电子书📚](./doc/doc_ch/ocr_book.md)
|
| 170 |
+
- [开源社区](#开源社区)
|
| 171 |
+
- FAQ
|
| 172 |
+
- [通用问题](./doc/doc_ch/FAQ.md)
|
| 173 |
+
- [PaddleOCR实战问题](./doc/doc_ch/FAQ.md)
|
| 174 |
+
- [参考文献](./doc/doc_ch/reference.md)
|
| 175 |
+
- [许可证书](#许可证书)
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
<a name="效果展示"></a>
|
| 179 |
+
|
| 180 |
+
## 👀 效果展示 [more](./doc/doc_ch/visualization.md)
|
| 181 |
+
|
| 182 |
+
<details open>
|
| 183 |
+
<summary>PP-OCRv3 中文模型</summary>
|
| 184 |
+
|
| 185 |
+
<div align="center">
|
| 186 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic001.jpg" width="800">
|
| 187 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic002.jpg" width="800">
|
| 188 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic003.jpg" width="800">
|
| 189 |
+
</div>
|
| 190 |
+
|
| 191 |
+
</details>
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
<details open>
|
| 195 |
+
<summary>PP-OCRv3 英文模型</summary>
|
| 196 |
+
|
| 197 |
+
<div align="center">
|
| 198 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_1.png" width="800">
|
| 199 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_2.png" width="800">
|
| 200 |
+
</div>
|
| 201 |
+
|
| 202 |
+
</details>
|
| 203 |
+
|
| 204 |
+
|
| 205 |
+
<details open>
|
| 206 |
+
<summary>PP-OCRv3 多语言模型</summary>
|
| 207 |
+
|
| 208 |
+
<div align="center">
|
| 209 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/japan_2.jpg" width="800">
|
| 210 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/korean_1.jpg" width="800">
|
| 211 |
+
</div>
|
| 212 |
+
|
| 213 |
+
</details>
|
| 214 |
+
|
| 215 |
+
<details open>
|
| 216 |
+
<summary>PP-Structure 文档分析</summary>
|
| 217 |
+
|
| 218 |
+
- 版面分析+表格识别
|
| 219 |
+
<div align="center">
|
| 220 |
+
<img src="./ppstructure/docs/table/ppstructure.GIF" width="800">
|
| 221 |
+
</div>
|
| 222 |
+
|
| 223 |
+
- SER(语义实体识别)
|
| 224 |
+
<div align="center">
|
| 225 |
+
<img src="https://user-images.githubusercontent.com/14270174/185310636-6ce02f7c-790d-479f-b163-ea97a5a04808.jpg" width="600">
|
| 226 |
+
</div>
|
| 227 |
+
|
| 228 |
+
<div align="center">
|
| 229 |
+
<img src="https://user-images.githubusercontent.com/14270174/185539517-ccf2372a-f026-4a7c-ad28-c741c770f60a.png" width="600">
|
| 230 |
+
</div>
|
| 231 |
+
|
| 232 |
+
<div align="center">
|
| 233 |
+
<img src="https://user-images.githubusercontent.com/14270174/197464552-69de557f-edff-4c7f-acbf-069df1ba097f.png" width="600">
|
| 234 |
+
</div>
|
| 235 |
+
|
| 236 |
+
- RE(关系提取)
|
| 237 |
+
<div align="center">
|
| 238 |
+
<img src="https://user-images.githubusercontent.com/14270174/185393805-c67ff571-cf7e-4217-a4b0-8b396c4f22bb.jpg" width="600">
|
| 239 |
+
</div>
|
| 240 |
+
|
| 241 |
+
<div align="center">
|
| 242 |
+
<img src="https://user-images.githubusercontent.com/14270174/185540080-0431e006-9235-4b6d-b63d-0b3c6e1de48f.jpg" width="600">
|
| 243 |
+
</div>
|
| 244 |
+
|
| 245 |
+
<div align="center">
|
| 246 |
+
<img src="https://user-images.githubusercontent.com/25809855/186094813-3a8e16cc-42e5-4982-b9f4-0134dfb5688d.png" width="600">
|
| 247 |
+
</div>
|
| 248 |
+
|
| 249 |
+
</details>
|
| 250 |
+
|
| 251 |
+
<a name="许可证书"></a>
|
| 252 |
+
|
| 253 |
+
## 许可证书
|
| 254 |
+
本项目的发布受<a href="https://github.com/PaddlePaddle/PaddleOCR/blob/master/LICENSE">Apache 2.0 license</a>许可认证。
|
ocr-studio/PaddleOCR/README_en.md
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
English | [简体中文](README_ch.md) | [हिन्दी](./doc/doc_i18n/README_हिन्द.md) | [日本語](./doc/doc_i18n/README_日本語.md) | [한국인](./doc/doc_i18n/README_한국어.md) | [Pу́сский язы́к](./doc/doc_i18n/README_Ру́сский_язы́к.md)
|
| 2 |
+
|
| 3 |
+
<p align="center">
|
| 4 |
+
<img src="./doc/PaddleOCR_log.png" align="middle" width = "600"/>
|
| 5 |
+
<p align="center">
|
| 6 |
+
<p align="left">
|
| 7 |
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-dfd.svg"></a>
|
| 8 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/releases"><img src="https://img.shields.io/github/v/release/PaddlePaddle/PaddleOCR?color=ffa"></a>
|
| 9 |
+
<a href=""><img src="https://img.shields.io/badge/python-3.7+-aff.svg"></a>
|
| 10 |
+
<a href=""><img src="https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg"></a>
|
| 11 |
+
<a href=""><img src="https://img.shields.io/pypi/format/PaddleOCR?color=c77"></a>
|
| 12 |
+
<a href="https://pypi.org/project/PaddleOCR/"><img src="https://img.shields.io/pypi/dm/PaddleOCR?color=9cf"></a>
|
| 13 |
+
<a href="https://github.com/PaddlePaddle/PaddleOCR/stargazers"><img src="https://img.shields.io/github/stars/PaddlePaddle/PaddleOCR?color=ccf"></a>
|
| 14 |
+
</p>
|
| 15 |
+
|
| 16 |
+
## Introduction
|
| 17 |
+
|
| 18 |
+
PaddleOCR aims to create multilingual, awesome, leading, and practical OCR tools that help users train better models and apply them into practice.
|
| 19 |
+
|
| 20 |
+
<div align="center">
|
| 21 |
+
<img src="./doc/imgs_results/PP-OCRv3/en/en_4.png" width="800">
|
| 22 |
+
</div>
|
| 23 |
+
|
| 24 |
+
<div align="center">
|
| 25 |
+
<img src="./doc/imgs_results/ch_ppocr_mobile_v2.0/00006737.jpg" width="800">
|
| 26 |
+
</div>
|
| 27 |
+
|
| 28 |
+
## 📣 Recent updates
|
| 29 |
+
- **🔥2023.8.7 Release PaddleOCR[release/2.7](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7)**
|
| 30 |
+
- Release [PP-OCRv4](./doc/doc_ch/PP-OCRv4_introduction.md), support mobile version and server version
|
| 31 |
+
- PP-OCRv4-mobile:When the speed is comparable, the effect of the Chinese scene is improved by 4.5% compared with PP-OCRv3, the English scene is improved by 10%, and the average recognition accuracy of the 80-language multilingual model is increased by more than 8%.
|
| 32 |
+
- PP-OCRv4-server:Release the OCR model with the highest accuracy at present, the detection model accuracy increased by 4.9% in the Chinese and English scenes, and the recognition model accuracy increased by 2%
|
| 33 |
+
refer [quickstart](./doc/doc_en/quickstart_en.md) quick use by one line command, At the same time, the whole process of model training, reasoning, and high-performance deployment can also be completed with few code in the [General OCR Industry Solution](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=286) in PaddleX.
|
| 34 |
+
- Release[PP-ChatOCR](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=332), a new scheme for extracting key information of general scenes using PP-OCR model and ERNIE LLM.
|
| 35 |
+
- 🔨**2022.11 Add implementation of [4 cutting-edge algorithms](doc/doc_ch/algorithm_overview_en.md)**:Text Detection [DRRG](doc/doc_en/algorithm_det_drrg_en.md), Text Recognition [RFL](./doc/doc_en/algorithm_rec_rfl_en.md), Image Super-Resolution [Text Telescope](doc/doc_en/algorithm_sr_telescope_en.md),Handwritten Mathematical Expression Recognition [CAN](doc/doc_en/algorithm_rec_can_en.md)
|
| 36 |
+
- **2022.10 release [optimized JS version PP-OCRv3 model](./deploy/paddlejs/README.md)** with 4.3M model size, 8x faster inference time, and a ready-to-use web demo
|
| 37 |
+
- 💥 **Live Playback: Introduction to PP-StructureV2 optimization strategy**. Scan [the QR code below](#Community) using WeChat, follow the PaddlePaddle official account and fill out the questionnaire to join the WeChat group, get the live link and 20G OCR learning materials (including PDF2Word application, 10 models in vertical scenarios, etc.)
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
- **🔥2022.8.24 Release PaddleOCR [release/2.6](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.6)**
|
| 41 |
+
- Release [PP-StructureV2](./ppstructure/),with functions and performance fully upgraded, adapted to Chinese scenes, and new support for [Layout Recovery](./ppstructure/recovery) and **one line command to convert PDF to Word**;
|
| 42 |
+
- [Layout Analysis](./ppstructure/layout) optimization: model storage reduced by 95%, while speed increased by 11 times, and the average CPU time-cost is only 41ms;
|
| 43 |
+
- [Table Recognition](./ppstructure/table) optimization: 3 optimization strategies are designed, and the model accuracy is improved by 6% under comparable time consumption;
|
| 44 |
+
- [Key Information Extraction](./ppstructure/kie) optimization:a visual-independent model structure is designed, the accuracy of semantic entity recognition is increased by 2.8%, and the accuracy of relation extraction is increased by 9.1%.
|
| 45 |
+
- **🔥2022.8 Release [OCR scene application collection](./applications/README_en.md)**
|
| 46 |
+
- Release **9 vertical models** such as digital tube, LCD screen, license plate, handwriting recognition model, high-precision SVTR model, etc, covering the main OCR vertical applications in general, manufacturing, finance, and transportation industries.
|
| 47 |
+
- **2022.8 Add implementation of [8 cutting-edge algorithms](doc/doc_en/algorithm_overview_en.md)**
|
| 48 |
+
- Text Detection: [FCENet](doc/doc_en/algorithm_det_fcenet_en.md), [DB++](doc/doc_en/algorithm_det_db_en.md)
|
| 49 |
+
- Text Recognition: [ViTSTR](doc/doc_en/algorithm_rec_vitstr_en.md), [ABINet](doc/doc_en/algorithm_rec_abinet_en.md), [VisionLAN](doc/doc_en/algorithm_rec_visionlan_en.md), [SPIN](doc/doc_en/algorithm_rec_spin_en.md), [RobustScanner](doc/doc_en/algorithm_rec_robustscanner_en.md)
|
| 50 |
+
- Table Recognition: [TableMaster](doc/doc_en/algorithm_table_master_en.md)
|
| 51 |
+
- **2022.5.9 Release PaddleOCR [release/2.5](https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.5)**
|
| 52 |
+
- Release [PP-OCRv3](./doc/doc_en/ppocr_introduction_en.md#pp-ocrv3): With comparable speed, the effect of Chinese scene is further improved by 5% compared with PP-OCRv2, the effect of English scene is improved by 11%, and the average recognition accuracy of 80 language multilingual models is improved by more than 5%.
|
| 53 |
+
- Release [PPOCRLabelv2](./PPOCRLabel): Add the annotation function for table recognition task, key information extraction task and irregular text image.
|
| 54 |
+
- Release interactive e-book [*"Dive into OCR"*](./doc/doc_en/ocr_book_en.md), covers the cutting-edge theory and code practice of OCR full stack technology.
|
| 55 |
+
- [more](./doc/doc_en/update_en.md)
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
## 🌟 Features
|
| 59 |
+
|
| 60 |
+
PaddleOCR support a variety of cutting-edge algorithms related to OCR, and developed industrial featured models/solution [PP-OCR](./doc/doc_en/ppocr_introduction_en.md)、 [PP-Structure](./ppstructure/README.md) and [PP-ChatOCR](https://aistudio.baidu.com/aistudio/projectdetail/6488689) on this basis, and get through the whole process of data production, model training, compression, inference and deployment.
|
| 61 |
+
|
| 62 |
+
<div align="center">
|
| 63 |
+
<img src="https://user-images.githubusercontent.com/25809855/186171245-40abc4d7-904f-4949-ade1-250f86ed3a90.png">
|
| 64 |
+
</div>
|
| 65 |
+
|
| 66 |
+
> It is recommended to start with the “quick experience” in the document tutorial
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
## ⚡ Quick Experience
|
| 70 |
+
|
| 71 |
+
- Web online experience
|
| 72 |
+
- PP-OCRv4 online experience:https://aistudio.baidu.com/application/detail/7658
|
| 73 |
+
- PP-ChatOCR online experience:https://aistudio.baidu.com/application/detail/7709
|
| 74 |
+
|
| 75 |
+
- One line of code quick use: [Quick Start(Chinese/English/Multilingual/Document Analysis](./doc/doc_en/quickstart_en.md)
|
| 76 |
+
- Full-process experience of training, inference, and high-performance deployment in the Paddle AI suite (PaddleX):
|
| 77 |
+
- PP-OCRv4:https://aistudio.baidu.com/projectdetail/paddlex/6796224
|
| 78 |
+
- PP-ChatOCR:https://aistudio.baidu.com/projectdetail/paddlex/6796372
|
| 79 |
+
- Mobile demo experience:[Installation DEMO](https://ai.baidu.com/easyedge/app/openSource?from=paddlelite)(Based on EasyEdge and Paddle-Lite, support iOS and Android systems)
|
| 80 |
+
|
| 81 |
+
<a name="Technical exchange and cooperation"></a>
|
| 82 |
+
|
| 83 |
+
## 📖 Technical exchange and cooperation
|
| 84 |
+
- PaddleX —— A one-stop development platform for practical models of selected industries. Includes the following features:
|
| 85 |
+
* [High-quality algorithm library] Contains 36 selected models in 10 major task areas, enabling the development of model algorithms for different tasks in one platform. More domain models continue to be enriched! PaddleX also provides complete model training and inference benchmark data, allowing developers to choose the most appropriate model based on business needs.
|
| 86 |
+
* [Simple development method] Toolbox/developer dual-mode linkage, no-code + low-code development method, complete the full process of AI development of data, training, verification, and deployment in four steps.
|
| 87 |
+
* [Efficient training deployment] Precipitate the best tuning strategy of Baidu algorithm team to achieve the fastest and optimal convergence of each model. Complete deployment SDK support enables rapid industrial-level deployment across platforms and hardware (service-based deployment capabilities are being improved).
|
| 88 |
+
* [Rich domestic hardware support] In addition to being used on the AIStudio cloud, PaddleX has also precipitated the Windows local side and is enriching the Linux version, Kunlun Core version, Ascend version, and Cambrian version.
|
| 89 |
+
* [Win-win joint creation and co-construction] In addition to conveniently developing AI applications, PaddleX also provides everyone with opportunities to obtain business benefits and explore more business space for enterprises.
|
| 90 |
+
|
| 91 |
+
PaddleX Official website address:https://www.paddlepaddle.org.cn/paddle/paddleX
|
| 92 |
+
|
| 93 |
+
Scan the QR code below on WeChat to add operation students, and reply [paddlex], operation students will invite you to join the official communication group for more efficient questions and answers.
|
| 94 |
+
|
| 95 |
+
<div align="center">
|
| 96 |
+
<img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/dygraph/doc/joinus_paddlex.jpg" width = "150" height = "150",caption='' />
|
| 97 |
+
<p>[PaddleX] technology exchange group QR code</p>
|
| 98 |
+
</div>
|
| 99 |
+
|
| 100 |
+
<a name="book"></a>
|
| 101 |
+
## 📚 E-book: *Dive Into OCR*
|
| 102 |
+
- [Dive Into OCR ](./doc/doc_en/ocr_book_en.md)
|
| 103 |
+
|
| 104 |
+
<a name="Community"></a>
|
| 105 |
+
|
| 106 |
+
## 👫 Community
|
| 107 |
+
|
| 108 |
+
- For international developers, we regard [PaddleOCR Discussions](https://github.com/PaddlePaddle/PaddleOCR/discussions) as our international community platform. All ideas and questions can be discussed here in English.
|
| 109 |
+
|
| 110 |
+
- For Chinese develops, Scan the QR code below with your Wechat, you can join the official technical discussion group. For richer community content, please refer to [中文README](README_ch.md), looking forward to your participation.
|
| 111 |
+
|
| 112 |
+
<div align="center">
|
| 113 |
+
<img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/dygraph/doc/joinus.PNG" width = "150" height = "150" />
|
| 114 |
+
</div>
|
| 115 |
+
|
| 116 |
+
<a name="Supported-Chinese-model-list"></a>
|
| 117 |
+
|
| 118 |
+
## 🛠️ PP-OCR Series Model List(Update on September 8th)
|
| 119 |
+
|
| 120 |
+
| Model introduction | Model name | Recommended scene | Detection model | Direction classifier | Recognition model |
|
| 121 |
+
| ------------------------------------------------------------ | ---------------------------- | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
| 122 |
+
| Chinese and English ultra-lightweight PP-OCRv4 model(16.2M) | ch_PP-OCRv4_xx | Mobile & Server | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_distill_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_train.tar) |
|
| 123 |
+
| Chinese and English ultra-lightweight PP-OCRv3 model(16.2M) | ch_PP-OCRv3_xx | Mobile & Server | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar) |
|
| 124 |
+
| English ultra-lightweight PP-OCRv3 model(13.4M) | en_PP-OCRv3_xx | Mobile & Server | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_distill_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_train.tar) | [inference model](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar) |
|
| 125 |
+
|
| 126 |
+
- For more model downloads (including multiple languages), please refer to [PP-OCR series model downloads](./doc/doc_en/models_list_en.md).
|
| 127 |
+
- For a new language request, please refer to [Guideline for new language_requests](#language_requests).
|
| 128 |
+
- For structural document analysis models, please refer to [PP-Structure models](./ppstructure/docs/models_list_en.md).
|
| 129 |
+
|
| 130 |
+
<a name="tutorials"></a>
|
| 131 |
+
## 📖 Tutorials
|
| 132 |
+
- [Environment Preparation](./doc/doc_en/environment_en.md)
|
| 133 |
+
- [PP-OCR 🔥](./doc/doc_en/ppocr_introduction_en.md)
|
| 134 |
+
- [Quick Start](./doc/doc_en/quickstart_en.md)
|
| 135 |
+
- [Model Zoo](./doc/doc_en/models_en.md)
|
| 136 |
+
- [Model training](./doc/doc_en/training_en.md)
|
| 137 |
+
- [Text Detection](./doc/doc_en/detection_en.md)
|
| 138 |
+
- [Text Recognition](./doc/doc_en/recognition_en.md)
|
| 139 |
+
- [Text Direction Classification](./doc/doc_en/angle_class_en.md)
|
| 140 |
+
- Model Compression
|
| 141 |
+
- [Model Quantization](./deploy/slim/quantization/README_en.md)
|
| 142 |
+
- [Model Pruning](./deploy/slim/prune/README_en.md)
|
| 143 |
+
- [Knowledge Distillation](./doc/doc_en/knowledge_distillation_en.md)
|
| 144 |
+
- [Inference and Deployment](./deploy/README.md)
|
| 145 |
+
- [Python Inference](./doc/doc_en/inference_ppocr_en.md)
|
| 146 |
+
- [C++ Inference](./deploy/cpp_infer/readme.md)
|
| 147 |
+
- [Serving](./deploy/pdserving/README.md)
|
| 148 |
+
- [Mobile](./deploy/lite/readme.md)
|
| 149 |
+
- [Paddle2ONNX](./deploy/paddle2onnx/readme.md)
|
| 150 |
+
- [PaddleCloud](./deploy/paddlecloud/README.md)
|
| 151 |
+
- [Benchmark](./doc/doc_en/benchmark_en.md)
|
| 152 |
+
- [PP-Structure 🔥](./ppstructure/README.md)
|
| 153 |
+
- [Quick Start](./ppstructure/docs/quickstart_en.md)
|
| 154 |
+
- [Model Zoo](./ppstructure/docs/models_list_en.md)
|
| 155 |
+
- [Model training](./doc/doc_en/training_en.md)
|
| 156 |
+
- [Layout Analysis](./ppstructure/layout/README.md)
|
| 157 |
+
- [Table Recognition](./ppstructure/table/README.md)
|
| 158 |
+
- [Key Information Extraction](./ppstructure/kie/README.md)
|
| 159 |
+
- [Inference and Deployment](./deploy/README.md)
|
| 160 |
+
- [Python Inference](./ppstructure/docs/inference_en.md)
|
| 161 |
+
- [C++ Inference](./deploy/cpp_infer/readme.md)
|
| 162 |
+
- [Serving](./deploy/hubserving/readme_en.md)
|
| 163 |
+
- [Academic Algorithms](./doc/doc_en/algorithm_overview_en.md)
|
| 164 |
+
- [Text detection](./doc/doc_en/algorithm_overview_en.md)
|
| 165 |
+
- [Text recognition](./doc/doc_en/algorithm_overview_en.md)
|
| 166 |
+
- [End-to-end OCR](./doc/doc_en/algorithm_overview_en.md)
|
| 167 |
+
- [Table Recognition](./doc/doc_en/algorithm_overview_en.md)
|
| 168 |
+
- [Key Information Extraction](./doc/doc_en/algorithm_overview_en.md)
|
| 169 |
+
- [Add New Algorithms to PaddleOCR](./doc/doc_en/add_new_algorithm_en.md)
|
| 170 |
+
- Data Annotation and Synthesis
|
| 171 |
+
- [Semi-automatic Annotation Tool: PPOCRLabel](./PPOCRLabel/README.md)
|
| 172 |
+
- [Data Synthesis Tool: Style-Text](./StyleText/README.md)
|
| 173 |
+
- [Other Data Annotation Tools](./doc/doc_en/data_annotation_en.md)
|
| 174 |
+
- [Other Data Synthesis Tools](./doc/doc_en/data_synthesis_en.md)
|
| 175 |
+
- Datasets
|
| 176 |
+
- [General OCR Datasets(Chinese/English)](doc/doc_en/dataset/datasets_en.md)
|
| 177 |
+
- [HandWritten_OCR_Datasets(Chinese)](doc/doc_en/dataset/handwritten_datasets_en.md)
|
| 178 |
+
- [Various OCR Datasets(multilingual)](doc/doc_en/dataset/vertical_and_multilingual_datasets_en.md)
|
| 179 |
+
- [Layout Analysis](doc/doc_en/dataset/layout_datasets_en.md)
|
| 180 |
+
- [Table Recognition](doc/doc_en/dataset/table_datasets_en.md)
|
| 181 |
+
- [Key Information Extraction](doc/doc_en/dataset/kie_datasets_en.md)
|
| 182 |
+
- [Code Structure](./doc/doc_en/tree_en.md)
|
| 183 |
+
- [Visualization](#Visualization)
|
| 184 |
+
- [Community](#Community)
|
| 185 |
+
- [New language requests](#language_requests)
|
| 186 |
+
- [FAQ](./doc/doc_en/FAQ_en.md)
|
| 187 |
+
- [References](./doc/doc_en/reference_en.md)
|
| 188 |
+
- [License](#LICENSE)
|
| 189 |
+
|
| 190 |
+
|
| 191 |
+
<a name="Visualization"></a>
|
| 192 |
+
## 👀 Visualization [more](./doc/doc_en/visualization_en.md)
|
| 193 |
+
|
| 194 |
+
<details open>
|
| 195 |
+
<summary>PP-OCRv3 Chinese model</summary>
|
| 196 |
+
<div align="center">
|
| 197 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic001.jpg" width="800">
|
| 198 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic002.jpg" width="800">
|
| 199 |
+
<img src="doc/imgs_results/PP-OCRv3/ch/PP-OCRv3-pic003.jpg" width="800">
|
| 200 |
+
</div>
|
| 201 |
+
</details>
|
| 202 |
+
|
| 203 |
+
<details open>
|
| 204 |
+
<summary>PP-OCRv3 English model</summary>
|
| 205 |
+
<div align="center">
|
| 206 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_1.png" width="800">
|
| 207 |
+
<img src="doc/imgs_results/PP-OCRv3/en/en_2.png" width="800">
|
| 208 |
+
</div>
|
| 209 |
+
</details>
|
| 210 |
+
|
| 211 |
+
<details open>
|
| 212 |
+
<summary>PP-OCRv3 Multilingual model</summary>
|
| 213 |
+
<div align="center">
|
| 214 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/japan_2.jpg" width="800">
|
| 215 |
+
<img src="doc/imgs_results/PP-OCRv3/multi_lang/korean_1.jpg" width="800">
|
| 216 |
+
</div>
|
| 217 |
+
</details>
|
| 218 |
+
|
| 219 |
+
<details open>
|
| 220 |
+
<summary>PP-StructureV2</summary>
|
| 221 |
+
|
| 222 |
+
- layout analysis + table recognition
|
| 223 |
+
<div align="center">
|
| 224 |
+
<img src="./ppstructure/docs/table/ppstructure.GIF" width="800">
|
| 225 |
+
</div>
|
| 226 |
+
|
| 227 |
+
- SER (Semantic entity recognition)
|
| 228 |
+
<div align="center">
|
| 229 |
+
<img src="https://user-images.githubusercontent.com/14270174/197464552-69de557f-edff-4c7f-acbf-069df1ba097f.png" width="600">
|
| 230 |
+
</div>
|
| 231 |
+
|
| 232 |
+
<div align="center">
|
| 233 |
+
<img src="https://user-images.githubusercontent.com/14270174/185310636-6ce02f7c-790d-479f-b163-ea97a5a04808.jpg" width="600">
|
| 234 |
+
</div>
|
| 235 |
+
|
| 236 |
+
<div align="center">
|
| 237 |
+
<img src="https://user-images.githubusercontent.com/14270174/185539517-ccf2372a-f026-4a7c-ad28-c741c770f60a.png" width="600">
|
| 238 |
+
</div>
|
| 239 |
+
|
| 240 |
+
- RE (Relation Extraction)
|
| 241 |
+
<div align="center">
|
| 242 |
+
<img src="https://user-images.githubusercontent.com/25809855/186094813-3a8e16cc-42e5-4982-b9f4-0134dfb5688d.png" width="600">
|
| 243 |
+
</div>
|
| 244 |
+
|
| 245 |
+
<div align="center">
|
| 246 |
+
<img src="https://user-images.githubusercontent.com/14270174/185393805-c67ff571-cf7e-4217-a4b0-8b396c4f22bb.jpg" width="600">
|
| 247 |
+
</div>
|
| 248 |
+
|
| 249 |
+
<div align="center">
|
| 250 |
+
<img src="https://user-images.githubusercontent.com/14270174/185540080-0431e006-9235-4b6d-b63d-0b3c6e1de48f.jpg" width="600">
|
| 251 |
+
</div>
|
| 252 |
+
|
| 253 |
+
</details>
|
| 254 |
+
|
| 255 |
+
<a name="language_requests"></a>
|
| 256 |
+
## 🇺🇳 Guideline for New Language Requests
|
| 257 |
+
|
| 258 |
+
If you want to request a new language support, a PR with 1 following files are needed:
|
| 259 |
+
|
| 260 |
+
1. In folder [ppocr/utils/dict](./ppocr/utils/dict),
|
| 261 |
+
it is necessary to submit the dict text to this path and name it with `{language}_dict.txt` that contains a list of all characters. Please see the format example from other files in that folder.
|
| 262 |
+
|
| 263 |
+
If your language has unique elements, please tell me in advance within any way, such as useful links, wikipedia and so on.
|
| 264 |
+
|
| 265 |
+
More details, please refer to [Multilingual OCR Development Plan](https://github.com/PaddlePaddle/PaddleOCR/issues/1048).
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
<a name="LICENSE"></a>
|
| 269 |
+
## 📄 License
|
| 270 |
+
This project is released under <a href="https://github.com/PaddlePaddle/PaddleOCR/blob/master/LICENSE">Apache 2.0 license</a>
|
ocr-studio/PaddleOCR/RELEASING.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PaddleOCR Release SOP
|
| 2 |
+
|
| 3 |
+
[中文](./RELEASING_cn.md)
|
| 4 |
+
|
| 5 |
+
## Scope
|
| 6 |
+
|
| 7 |
+
This document describes the standard release process for PaddleOCR.
|
| 8 |
+
|
| 9 |
+
## Release Types
|
| 10 |
+
|
| 11 |
+
The current process supports the following two release types:
|
| 12 |
+
|
| 13 |
+
- `bump patch`: for example, `3.4.0 -> 3.4.1`
|
| 14 |
+
- `bump minor`: for example, `3.4.x -> 3.5.0`
|
| 15 |
+
|
| 16 |
+
For `bump major`:
|
| 17 |
+
|
| 18 |
+
- The current process does not directly support this scenario
|
| 19 |
+
- A major release process should be discussed and designed separately, for example by introducing an additional branch or a new preparation flow
|
| 20 |
+
|
| 21 |
+
## Release Principles
|
| 22 |
+
|
| 23 |
+
- Daily development happens on `main`
|
| 24 |
+
- Official releases are made only from `release/X.Y`
|
| 25 |
+
- Official tags must use `vX.Y.Z`
|
| 26 |
+
- Do not create official release tags on `main`
|
| 27 |
+
|
| 28 |
+
## Standard Release Process
|
| 29 |
+
|
| 30 |
+
### 1. Confirm the release target
|
| 31 |
+
|
| 32 |
+
First confirm which release line this release belongs to and what the target version is.
|
| 33 |
+
|
| 34 |
+
Examples:
|
| 35 |
+
|
| 36 |
+
- Release `3.4.1` on `release/3.4`
|
| 37 |
+
- Release `3.5.0` on `release/3.5`
|
| 38 |
+
|
| 39 |
+
### 2. Create or switch to the release branch
|
| 40 |
+
|
| 41 |
+
If the release line does not exist yet, create the corresponding `release/X.Y` branch from `main`.
|
| 42 |
+
If it already exists, switch to that branch and continue release preparation there.
|
| 43 |
+
|
| 44 |
+
Requirements:
|
| 45 |
+
|
| 46 |
+
- One minor release line corresponds to one fixed `release/X.Y` branch
|
| 47 |
+
- That branch should contain only the release content and patch fixes for that line
|
| 48 |
+
|
| 49 |
+
### 3. Pick release content from main
|
| 50 |
+
|
| 51 |
+
Based on the release scope, `cherry-pick` the required commits from `main` into `release/X.Y` until the release content is ready.
|
| 52 |
+
|
| 53 |
+
Requirements:
|
| 54 |
+
|
| 55 |
+
- Only pick what is needed for the current release
|
| 56 |
+
- Avoid bringing unrelated new features into the release branch
|
| 57 |
+
- If there are release-specific fixes on the release branch, keep them limited to the current release scope
|
| 58 |
+
|
| 59 |
+
### 4. Complete pre-release checks
|
| 60 |
+
|
| 61 |
+
Complete pre-release checks on `release/X.Y`.
|
| 62 |
+
|
| 63 |
+
At minimum, this should include:
|
| 64 |
+
|
| 65 |
+
- The current branch is correct
|
| 66 |
+
- The working tree is clean
|
| 67 |
+
- The version is as expected
|
| 68 |
+
- Key functionality is verified
|
| 69 |
+
- Required tests, builds, packaging, and regression checks have passed
|
| 70 |
+
- Release notes are ready
|
| 71 |
+
|
| 72 |
+
### 5. Create the official tag
|
| 73 |
+
|
| 74 |
+
Once the release is ready, create the official tag on `release/X.Y`:
|
| 75 |
+
|
| 76 |
+
- The tag format must be `vX.Y.Z`
|
| 77 |
+
|
| 78 |
+
Examples:
|
| 79 |
+
|
| 80 |
+
- `v3.4.1`
|
| 81 |
+
- `v3.5.0`
|
| 82 |
+
|
| 83 |
+
Requirements:
|
| 84 |
+
|
| 85 |
+
- The tag must be created on the release branch for the current official release
|
| 86 |
+
- Do not use development tags as official release tags
|
| 87 |
+
|
| 88 |
+
### 6. Publish the GitHub Release
|
| 89 |
+
|
| 90 |
+
Create a GitHub Release based on the official tag for this release.
|
| 91 |
+
|
| 92 |
+
### 7. Update dependency constraints and release notes
|
| 93 |
+
|
| 94 |
+
If this release is the first release of a new minor line, or if it changes PaddleX dependency requirements, update the related release materials before or after the official tag is published.
|
| 95 |
+
|
| 96 |
+
At minimum, this should include:
|
| 97 |
+
|
| 98 |
+
- Checking whether the `paddlex` dependency constraints in `pyproject.toml` match the target release
|
| 99 |
+
- Checking whether installation docs, upgrade notes, and release notes are aligned with the release version
|
| 100 |
+
|
| 101 |
+
Completion criteria:
|
| 102 |
+
|
| 103 |
+
- The `paddlex` dependency constraints match the target release
|
| 104 |
+
- The version information in the documentation matches the released version
|
| 105 |
+
|
| 106 |
+
### 8. Sync the release branch lineage back to main
|
| 107 |
+
|
| 108 |
+
After the first official release of a new `release/X.Y` line is completed, sync the lineage of that `release/X.Y` branch back to `main`.
|
| 109 |
+
|
| 110 |
+
This is a fixed step in the current workflow and should be done at least once for each new minor release line.
|
| 111 |
+
|
| 112 |
+
Purpose:
|
| 113 |
+
|
| 114 |
+
- Ensure `main` correctly reflects that the release line has produced an official version
|
| 115 |
+
- Keep subsequent development and release cadence aligned
|
| 116 |
+
|
| 117 |
+
Requirements:
|
| 118 |
+
|
| 119 |
+
- Perform this once after the first official release of each new `release/X.Y`
|
| 120 |
+
- For later patch releases on the same `release/X.Y`, it is usually not necessary to repeat it
|
| 121 |
+
|
| 122 |
+
### 9. Move on to the next development cycle or patch release
|
| 123 |
+
|
| 124 |
+
After the release:
|
| 125 |
+
|
| 126 |
+
- `main` continues with ongoing development
|
| 127 |
+
- `release/X.Y` continues to maintain that release line
|
| 128 |
+
|
| 129 |
+
If more patch releases are needed later on the same line:
|
| 130 |
+
|
| 131 |
+
- Continue preparing patches on `release/X.Y`
|
| 132 |
+
- `cherry-pick` from `main` as needed
|
| 133 |
+
- Repeat the relevant steps in this SOP
|
| 134 |
+
|
| 135 |
+
## How to Handle Different Bump Types
|
| 136 |
+
|
| 137 |
+
### Patch Release
|
| 138 |
+
|
| 139 |
+
Applicable scenarios:
|
| 140 |
+
|
| 141 |
+
- Fixing production issues
|
| 142 |
+
- Small compatibility fixes
|
| 143 |
+
- Documentation, dependency, or stability patches
|
| 144 |
+
|
| 145 |
+
How to handle it:
|
| 146 |
+
|
| 147 |
+
- Continue preparing changes on the existing `release/X.Y`
|
| 148 |
+
- Create the next patch tag, for example `v3.4.2`
|
| 149 |
+
|
| 150 |
+
### Minor Release
|
| 151 |
+
|
| 152 |
+
Applicable scenarios:
|
| 153 |
+
|
| 154 |
+
- Starting a new release line
|
| 155 |
+
- Releasing the next stable version, for example `3.5.0`
|
| 156 |
+
|
| 157 |
+
How to handle it:
|
| 158 |
+
|
| 159 |
+
- Create a new `release/X.Y` from `main`
|
| 160 |
+
- Prepare the release following the standard process
|
| 161 |
+
- Create the first official tag, for example `v3.5.0`
|
| 162 |
+
- Update `paddlex` dependency constraints if needed
|
| 163 |
+
- Sync the lineage of that release branch back to `main` after the release
|
| 164 |
+
|
| 165 |
+
### Major Release
|
| 166 |
+
|
| 167 |
+
Current conclusion:
|
| 168 |
+
|
| 169 |
+
- It is not included in this SOP for now
|
| 170 |
+
- A separate process needs to be discussed and designed later
|
| 171 |
+
|
| 172 |
+
Before a dedicated solution is defined, do not directly reuse the current minor/patch process for a major release.
|
| 173 |
+
|
| 174 |
+
## Release Checklist
|
| 175 |
+
|
| 176 |
+
Before each release, confirm the following:
|
| 177 |
+
|
| 178 |
+
- The target version and corresponding release branch have been confirmed
|
| 179 |
+
- The content on the release branch is ready
|
| 180 |
+
- The release scope has been finalized
|
| 181 |
+
- Key tests and regression checks have passed
|
| 182 |
+
- Release notes are ready
|
| 183 |
+
- The official tag uses the `vX.Y.Z` format
|
| 184 |
+
- The GitHub Release has been created
|
| 185 |
+
- If this is the first official release on `release/X.Y`, its lineage has been synced back to `main`
|
| 186 |
+
|
| 187 |
+
## Daily Maintenance Recommendations
|
| 188 |
+
|
| 189 |
+
- New features should go to `main` first
|
| 190 |
+
- Official releases should always be performed through `release/X.Y`
|
| 191 |
+
- Patch releases should always be maintained on the corresponding `release/X.Y`
|
| 192 |
+
- For each new `release/X.Y`, sync its lineage once after the first official release
|
| 193 |
+
|
| 194 |
+
If the current process changes, this document should be updated accordingly.
|
ocr-studio/PaddleOCR/RELEASING_cn.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PaddleOCR Release SOP
|
| 2 |
+
|
| 3 |
+
[English](./RELEASING.md)
|
| 4 |
+
|
| 5 |
+
## 适用范围
|
| 6 |
+
|
| 7 |
+
本文档用于说明 PaddleOCR 的标准发版流程。
|
| 8 |
+
|
| 9 |
+
## 版本类型
|
| 10 |
+
|
| 11 |
+
当前流程支持以下两类发布:
|
| 12 |
+
|
| 13 |
+
- `bump patch`:例如 `3.4.0 -> 3.4.1`
|
| 14 |
+
- `bump minor`:例如 `3.4.x -> 3.5.0`
|
| 15 |
+
|
| 16 |
+
对于 `bump major`:
|
| 17 |
+
|
| 18 |
+
- 当前流程暂不支持直接覆盖这类场景
|
| 19 |
+
- 如需发布大版本,需要单独讨论并设计额外流程,例如引入额外分支或新的版本准备方式
|
| 20 |
+
|
| 21 |
+
## 发版原则
|
| 22 |
+
|
| 23 |
+
- 日常开发在 `main` 分支进行
|
| 24 |
+
- 正式发布只在 `release/X.Y` 分支进行
|
| 25 |
+
- 正式标签只使用 `vX.Y.Z`
|
| 26 |
+
- 不在 `main` 分支打正式发布标签
|
| 27 |
+
|
| 28 |
+
## 标准发版流程
|
| 29 |
+
|
| 30 |
+
### 1. 确认发布目标
|
| 31 |
+
|
| 32 |
+
先确认本次发布属于哪一条版本线,以及目标版本号。
|
| 33 |
+
|
| 34 |
+
示例:
|
| 35 |
+
|
| 36 |
+
- 发布 `3.4.1`,对应分支为 `release/3.4`
|
| 37 |
+
- 发布 `3.5.0`,对应分支为 `release/3.5`
|
| 38 |
+
|
| 39 |
+
### 2. 创建或切换到 release 分支
|
| 40 |
+
|
| 41 |
+
如果该版本线尚未建立,则从 `main` 创建对应的 `release/X.Y` 分支。
|
| 42 |
+
如果该版本线已存在,则直接切换到该分支继续发版准备。
|
| 43 |
+
|
| 44 |
+
要求:
|
| 45 |
+
|
| 46 |
+
- 一个 minor 版本线对应一个固定的 `release/X.Y` 分支
|
| 47 |
+
- 该分支只承载该版本线的发布内容和补丁修复
|
| 48 |
+
|
| 49 |
+
### 3. 从 main 挑选发布内容
|
| 50 |
+
|
| 51 |
+
根据本次发布范围,从 `main` 将需要发布的提交按需 `cherry-pick` 到 `release/X.Y`,直到版本内容 ready。
|
| 52 |
+
|
| 53 |
+
要求:
|
| 54 |
+
|
| 55 |
+
- 只挑选本次发布需要的内容
|
| 56 |
+
- 避免把与本次发布无关的新功能带入 release 分支
|
| 57 |
+
- 如果 release 分支上出现专门的发布修复,也应仅限于本次发布范围
|
| 58 |
+
|
| 59 |
+
### 4. 完成发布前检查
|
| 60 |
+
|
| 61 |
+
在 `release/X.Y` 上完成发布前检查。
|
| 62 |
+
|
| 63 |
+
至少应包括:
|
| 64 |
+
|
| 65 |
+
- 当前分支正确
|
| 66 |
+
- 工作区干净
|
| 67 |
+
- 版本号符合预期
|
| 68 |
+
- 关键功能验证通过
|
| 69 |
+
- 必要的测试、构建、打包和回归通过
|
| 70 |
+
- 发布说明已经准备好
|
| 71 |
+
|
| 72 |
+
### 5. 打正式标签
|
| 73 |
+
|
| 74 |
+
确认版本 ready 后,在 `release/X.Y` 分支上打正式标签:
|
| 75 |
+
|
| 76 |
+
- 标签格式必须为 `vX.Y.Z`
|
| 77 |
+
|
| 78 |
+
示例:
|
| 79 |
+
|
| 80 |
+
- `v3.4.1`
|
| 81 |
+
- `v3.5.0`
|
| 82 |
+
|
| 83 |
+
要求:
|
| 84 |
+
|
| 85 |
+
- 标签必须打在本次正式发布对应的 release 分支上
|
| 86 |
+
- 不使用开发态标签作为正式发布标签
|
| 87 |
+
|
| 88 |
+
### 6. 发布 GitHub Release
|
| 89 |
+
|
| 90 |
+
在 GitHub 上基于本次正式标签创建 Release。
|
| 91 |
+
|
| 92 |
+
### 7. 更新依赖约束与发布说明
|
| 93 |
+
|
| 94 |
+
如果本次发布是新的 minor 版本首发,或本次发布涉及 PaddleX 依赖变化,则在正式标签发布前后同步完成相关更新。
|
| 95 |
+
|
| 96 |
+
至少应包括:
|
| 97 |
+
|
| 98 |
+
- 检查 `pyproject.toml` 中 `paddlex` 相关依赖约束是否与本次发布版本匹配
|
| 99 |
+
- 检查安装说明、升级说明和发布说明中的版本信息是否与本次发布一致
|
| 100 |
+
|
| 101 |
+
完成要求:
|
| 102 |
+
|
| 103 |
+
- `paddlex` 相关依赖约束与本次发布目标一致
|
| 104 |
+
- 文档中的版本信息与本次发布版本一致
|
| 105 |
+
|
| 106 |
+
### 8. 将 release 分支的 lineage 同步回 main
|
| 107 |
+
|
| 108 |
+
当一条新的 `release/X.Y` 发布线完成首个正式版本发布后,需要将该 `release/X.Y` 的 lineage 同步回 `main`。
|
| 109 |
+
|
| 110 |
+
这一步是当前流程中的固定步骤,每条新的 minor 发布线至少执行一次。
|
| 111 |
+
|
| 112 |
+
目的:
|
| 113 |
+
|
| 114 |
+
- 让 `main` 正确感知该发布线已经完成的正式版本
|
| 115 |
+
- 保持后续开发与发布节奏一致
|
| 116 |
+
|
| 117 |
+
要求:
|
| 118 |
+
|
| 119 |
+
- 每条新的 `release/X.Y` 在首个正式版本发布后执行一次
|
| 120 |
+
- 同一条 `release/X.Y` 后续如果继续发布补丁版本,通常不要求重复执行
|
| 121 |
+
|
| 122 |
+
### 9. 进入下一轮开发或补丁发布
|
| 123 |
+
|
| 124 |
+
发布完成后:
|
| 125 |
+
|
| 126 |
+
- `main` 继续进行后续开发
|
| 127 |
+
- `release/X.Y` 继续维护该版本线
|
| 128 |
+
|
| 129 |
+
如果后续还要发布该版本线的补丁版本:
|
| 130 |
+
|
| 131 |
+
- 继续在 `release/X.Y` 上准备补丁
|
| 132 |
+
- 从 `main` 按需 `cherry-pick`
|
| 133 |
+
- 重复执行本 SOP 中的发布步骤
|
| 134 |
+
|
| 135 |
+
## 不同 bump 类型的处理方式
|
| 136 |
+
|
| 137 |
+
### Patch 发布
|
| 138 |
+
|
| 139 |
+
适用场景:
|
| 140 |
+
|
| 141 |
+
- 修复线上问题
|
| 142 |
+
- 小范围兼容性修复
|
| 143 |
+
- 文档、依赖或稳定性补丁
|
| 144 |
+
|
| 145 |
+
处理方式:
|
| 146 |
+
|
| 147 |
+
- 在现有 `release/X.Y` 分支上继续准备内容
|
| 148 |
+
- 打下一个 patch 标签,例如 `v3.4.2`
|
| 149 |
+
|
| 150 |
+
### Minor 发布
|
| 151 |
+
|
| 152 |
+
适用场景:
|
| 153 |
+
|
| 154 |
+
- 开启一条新的发布线
|
| 155 |
+
- 发布下一阶段稳定版本,例如 `3.5.0`
|
| 156 |
+
|
| 157 |
+
处理方式:
|
| 158 |
+
|
| 159 |
+
- 从 `main` 建立新的 `release/X.Y`
|
| 160 |
+
- 按标准流程准备版本内容
|
| 161 |
+
- 打首个正式标签,例如 `v3.5.0`
|
| 162 |
+
- 如有需要,同步更新 `paddlex` 相关依赖约束
|
| 163 |
+
- 发布后将该 release 分支的 lineage 同步回 `main`
|
| 164 |
+
|
| 165 |
+
### Major 发布
|
| 166 |
+
|
| 167 |
+
当前结论:
|
| 168 |
+
|
| 169 |
+
- 暂不纳入本 SOP
|
| 170 |
+
- 后续需要单独讨论并设计流程
|
| 171 |
+
|
| 172 |
+
在新的方案明确之前,不建议直接套用当前 minor/patch 的做法处理 major 发布。
|
| 173 |
+
|
| 174 |
+
## 发布检查清单
|
| 175 |
+
|
| 176 |
+
每次发版前,请确认以下事项:
|
| 177 |
+
|
| 178 |
+
- 已确认目标版本号和对应 release 分支
|
| 179 |
+
- release 分支中的内容已经 ready
|
| 180 |
+
- 发布范围已经收敛
|
| 181 |
+
- 关键测试和��归已通过
|
| 182 |
+
- 发布说明已准备完成
|
| 183 |
+
- 正式标签格式为 `vX.Y.Z`
|
| 184 |
+
- GitHub Release 已创建
|
| 185 |
+
- 如本次是该 `release/X.Y` 的首个正式版本,发布完成后已将 lineage 同步回 `main`
|
| 186 |
+
|
| 187 |
+
## 日常维护建议
|
| 188 |
+
|
| 189 |
+
- 新功能优先进入 `main`
|
| 190 |
+
- 正式发布始终通过 `release/X.Y` 执行
|
| 191 |
+
- 补丁版本始终在对应的 `release/X.Y` 上维护
|
| 192 |
+
- 每条新的 `release/X.Y` 在首个正式版本发布后执行一次 lineage 同步
|
| 193 |
+
|
| 194 |
+
如当前流程发生调整,应同步更新本文档。
|
ocr-studio/PaddleOCR/TEST_REPORT.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PaddleOCR API SDK 集成测试报告
|
| 2 |
+
|
| 3 |
+
**测试分支**: feature/api-sdk (PR #18049)
|
| 4 |
+
**测试环境**: macOS Darwin 24.3.0, Python 3.9.6, requests 2.32.5
|
| 5 |
+
**API Endpoint**: https://paddleocr.aistudio-app.com/api/v2/ocr/jobs
|
| 6 |
+
|
| 7 |
+
---
|
| 8 |
+
|
| 9 |
+
## 测试结果总览
|
| 10 |
+
|
| 11 |
+
| # | 测试项 | 结果 | 耗时 | 说明 |
|
| 12 |
+
| -----| ---------------------------------------| --------| ------| ---------------------------------------------------|
|
| 13 |
+
| 1 | OCR URL (PP-OCRv5) | ✅ PASS | 3.6s | URL 输入,默认参数 |
|
| 14 |
+
| 2 | OCR URL + 自定义 Options | ✅ PASS | 3.6s | 设置 use_doc_orientation_classify=True |
|
| 15 |
+
| 3 | Doc Parsing URL (PP-StructureV3) | ✅ PASS | 3.7s | 文档版面解析 |
|
| 16 |
+
| 4 | Submit + Poll 分步调用 | ✅ PASS | 3.7s | 非阻塞 API:submit → get_result → wait_for_result |
|
| 17 |
+
| 5 | OCR 本地文件上传 | ✅ PASS | 4.3s | file_path 模式 |
|
| 18 |
+
| 6 | 错误处理 (无效 token) | ✅ PASS | 0.2s | 正确抛出 AuthError |
|
| 19 |
+
| 7 | 输入校验 | ✅ PASS | 0.0s | 缺少输入 / 互斥参数均正确拦截 |
|
| 20 |
+
| 8 | Context Manager (with) | ✅ PASS | 3.6s | with 语句正常工作 |
|
| 21 |
+
| 9 | PaddleOCR-VL 模型 | ✅ PASS | 3.6s | VL 模型正常返回 markdown |
|
| 22 |
+
| 10 | PaddleOCR-VL-1.5 模型 | ✅ PASS | 3.6s | VL-1.5 模型正常返回 markdown |
|
| 23 |
+
| 11 | Doc Parsing 文件上传 (PP-StructureV3) | ✅ PASS | 4.3s | 本地文件上传 + 文档解析 |
|
| 24 |
+
|
| 25 |
+
**总计: 11 passed, 0 failed**
|
| 26 |
+
|
| 27 |
+
---
|
| 28 |
+
|
| 29 |
+
## 发现的 Bug(已修复验证)
|
| 30 |
+
|
| 31 |
+
### 🔴 阻塞性 Bug: `fetch_jsonl` 请求 BOS 签名 URL 时携带了多余的 Authorization header
|
| 32 |
+
|
| 33 |
+
**文件**: `paddleocr/_api_client/_http.py` (同步) + `async_client.py` (异步)
|
| 34 |
+
|
| 35 |
+
**现象**: 任务提交和轮询均成功,但在最后一步下载 JSONL 结果文件时,SDK 使用带有 `Authorization: bearer <paddle_token>` 的 session 去请求百度 BOS 对象存储的预签名 URL。BOS 不认识这个 header,返回 400 Bad Request。
|
| 36 |
+
|
| 37 |
+
**根因**: `HTTPClient.fetch_jsonl()` 使用 `self._session.get(url)` 发起请求,而 session 在初始化时设置了 `Authorization` header。BOS 的预签名 URL 已经包含了自己的鉴权参数(`authorization=bce-auth-v1/...`),额外的 Authorization header 导致冲突。
|
| 38 |
+
|
| 39 |
+
**修复**: `fetch_jsonl` 应使用不带 auth header 的独立请求:
|
| 40 |
+
```python
|
| 41 |
+
# 修复前
|
| 42 |
+
resp = self._session.get(url, timeout=self._timeout)
|
| 43 |
+
|
| 44 |
+
# 修复后
|
| 45 |
+
resp = requests.get(url, timeout=self._timeout)
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
**影响范围**: 所有实际 API 调用(OCR、Doc Parsing、所有模型)在修复前均无法获取结果。这是一个 **必须在合入前修复的阻塞性 bug**。
|
| 49 |
+
|
| 50 |
+
---
|
| 51 |
+
|
| 52 |
+
## 其他已知问题(非阻塞,可后续迭代)
|
| 53 |
+
|
| 54 |
+
| 严重度 | 语言 | 问题 |
|
| 55 |
+
|--------|------|------|
|
| 56 |
+
| 中 | Python | AsyncAPIClient._poll_until_done 使用硬编码 DEFAULT_MAX_WAIT_TIME,忽略用户设置的 timeout |
|
| 57 |
+
| 中 | Go | submitURL/submitFile/getJobStatus 未使用 http.NewRequestWithContext,context 取消无法中断 HTTP 请求 |
|
| 58 |
+
| 中 | TypeScript | poller.ts 的 sleep 方法 abort listener 未设置 `{ once: true }`,长轮询会泄漏 listener |
|
| 59 |
+
| 中 | TypeScript | http.ts 的 fetchJsonl 未检查 resp.ok(同样的 BOS auth 问题可能也存在于 TS SDK) |
|
| 60 |
+
| 低 | 全部 | 轮询循环先 sleep 再 check,对已完成任务多等 3 秒 |
|
| 61 |
+
| 低 | Python | CLI argparse 的 store_true 传 False 而非 None,导致多余字段发送给 API |
|
| 62 |
+
|
| 63 |
+
---
|
| 64 |
+
|
| 65 |
+
## 结论
|
| 66 |
+
|
| 67 |
+
**修复 `fetch_jsonl` 的 auth header 问题后,Python SDK 的核心功能全部正常工作。** 4 个模型(PP-OCRv5、PP-StructureV3、PaddleOCR-VL、PaddleOCR-VL-1.5)均可正常调用,URL 输入和文件上传两种模式均可用,错误处理和输入校验逻辑正确。
|
| 68 |
+
|
| 69 |
+
**建议**:
|
| 70 |
+
1. ⚠️ **合入前必须修复** `fetch_jsonl` 的 BOS auth header bug(Python 同步 + 异步,以及 Go/TypeScript SDK 中的同类问题)
|
| 71 |
+
2. 其他问题可以合入后迭代修复
|
ocr-studio/PaddleOCR/ppocr/optimizer/regularizer.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from __future__ import absolute_import
|
| 16 |
+
from __future__ import division
|
| 17 |
+
from __future__ import print_function
|
| 18 |
+
from __future__ import unicode_literals
|
| 19 |
+
|
| 20 |
+
import paddle
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
class L1Decay(object):
|
| 24 |
+
"""
|
| 25 |
+
L1 Weight Decay Regularization, which encourages the weights to be sparse.
|
| 26 |
+
Args:
|
| 27 |
+
factor(float): regularization coeff. Default:0.0.
|
| 28 |
+
"""
|
| 29 |
+
|
| 30 |
+
def __init__(self, factor=0.0):
|
| 31 |
+
super(L1Decay, self).__init__()
|
| 32 |
+
self.coeff = factor
|
| 33 |
+
|
| 34 |
+
def __call__(self):
|
| 35 |
+
reg = paddle.regularizer.L1Decay(self.coeff)
|
| 36 |
+
return reg
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
class L2Decay(object):
|
| 40 |
+
"""
|
| 41 |
+
L2 Weight Decay Regularization, which helps to prevent the model over-fitting.
|
| 42 |
+
Args:
|
| 43 |
+
factor(float): regularization coeff. Default:0.0.
|
| 44 |
+
"""
|
| 45 |
+
|
| 46 |
+
def __init__(self, factor=0.0):
|
| 47 |
+
super(L2Decay, self).__init__()
|
| 48 |
+
self.coeff = float(factor)
|
| 49 |
+
|
| 50 |
+
def __call__(self):
|
| 51 |
+
return self.coeff
|
ocr-studio/PaddleOCR/ppocr/postprocess/__init__.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from __future__ import absolute_import
|
| 16 |
+
from __future__ import division
|
| 17 |
+
from __future__ import print_function
|
| 18 |
+
from __future__ import unicode_literals
|
| 19 |
+
|
| 20 |
+
import copy
|
| 21 |
+
|
| 22 |
+
__all__ = ['build_post_process']
|
| 23 |
+
|
| 24 |
+
from .db_postprocess import DBPostProcess, DistillationDBPostProcess
|
| 25 |
+
from .east_postprocess import EASTPostProcess
|
| 26 |
+
from .sast_postprocess import SASTPostProcess
|
| 27 |
+
from .fce_postprocess import FCEPostProcess
|
| 28 |
+
from .rec_postprocess import CTCLabelDecode, AttnLabelDecode, SRNLabelDecode, \
|
| 29 |
+
DistillationCTCLabelDecode, NRTRLabelDecode, SARLabelDecode, \
|
| 30 |
+
SEEDLabelDecode, PRENLabelDecode, ViTSTRLabelDecode, ABINetLabelDecode, \
|
| 31 |
+
SPINLabelDecode, VLLabelDecode, RFLLabelDecode, SATRNLabelDecode, ParseQLabelDecode, \
|
| 32 |
+
CPPDLabelDecode
|
| 33 |
+
from .cls_postprocess import ClsPostProcess
|
| 34 |
+
from .pg_postprocess import PGPostProcess
|
| 35 |
+
from .vqa_token_ser_layoutlm_postprocess import VQASerTokenLayoutLMPostProcess, DistillationSerPostProcess
|
| 36 |
+
from .vqa_token_re_layoutlm_postprocess import VQAReTokenLayoutLMPostProcess, DistillationRePostProcess
|
| 37 |
+
from .table_postprocess import TableMasterLabelDecode, TableLabelDecode
|
| 38 |
+
from .picodet_postprocess import PicoDetPostProcess
|
| 39 |
+
from .ct_postprocess import CTPostProcess
|
| 40 |
+
from .drrg_postprocess import DRRGPostprocess
|
| 41 |
+
from .rec_postprocess import CANLabelDecode
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
def build_post_process(config, global_config=None):
|
| 45 |
+
support_dict = [
|
| 46 |
+
'DBPostProcess', 'EASTPostProcess', 'SASTPostProcess', 'FCEPostProcess',
|
| 47 |
+
'CTCLabelDecode', 'AttnLabelDecode', 'ClsPostProcess', 'SRNLabelDecode',
|
| 48 |
+
'PGPostProcess', 'DistillationCTCLabelDecode', 'TableLabelDecode',
|
| 49 |
+
'DistillationDBPostProcess', 'NRTRLabelDecode', 'SARLabelDecode',
|
| 50 |
+
'SEEDLabelDecode', 'VQASerTokenLayoutLMPostProcess',
|
| 51 |
+
'VQAReTokenLayoutLMPostProcess', 'PRENLabelDecode',
|
| 52 |
+
'DistillationSARLabelDecode', 'ViTSTRLabelDecode', 'ABINetLabelDecode',
|
| 53 |
+
'TableMasterLabelDecode', 'SPINLabelDecode',
|
| 54 |
+
'DistillationSerPostProcess', 'DistillationRePostProcess',
|
| 55 |
+
'VLLabelDecode', 'PicoDetPostProcess', 'CTPostProcess',
|
| 56 |
+
'RFLLabelDecode', 'DRRGPostprocess', 'CANLabelDecode',
|
| 57 |
+
'SATRNLabelDecode', 'ParseQLabelDecode', 'CPPDLabelDecode'
|
| 58 |
+
]
|
| 59 |
+
|
| 60 |
+
if config['name'] == 'PSEPostProcess':
|
| 61 |
+
from .pse_postprocess import PSEPostProcess
|
| 62 |
+
support_dict.append('PSEPostProcess')
|
| 63 |
+
|
| 64 |
+
config = copy.deepcopy(config)
|
| 65 |
+
module_name = config.pop('name')
|
| 66 |
+
if module_name == "None":
|
| 67 |
+
return
|
| 68 |
+
if global_config is not None:
|
| 69 |
+
config.update(global_config)
|
| 70 |
+
assert module_name in support_dict, Exception(
|
| 71 |
+
'post process only support {}'.format(support_dict))
|
| 72 |
+
module_class = eval(module_name)(**config)
|
| 73 |
+
return module_class
|
ocr-studio/PaddleOCR/ppocr/postprocess/cls_postprocess.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
import paddle
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
class ClsPostProcess(object):
|
| 18 |
+
""" Convert between text-label and text-index """
|
| 19 |
+
|
| 20 |
+
def __init__(self, label_list=None, key=None, **kwargs):
|
| 21 |
+
super(ClsPostProcess, self).__init__()
|
| 22 |
+
self.label_list = label_list
|
| 23 |
+
self.key = key
|
| 24 |
+
|
| 25 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 26 |
+
if self.key is not None:
|
| 27 |
+
preds = preds[self.key]
|
| 28 |
+
|
| 29 |
+
label_list = self.label_list
|
| 30 |
+
if label_list is None:
|
| 31 |
+
label_list = {idx: idx for idx in range(preds.shape[-1])}
|
| 32 |
+
|
| 33 |
+
if isinstance(preds, paddle.Tensor):
|
| 34 |
+
preds = preds.numpy()
|
| 35 |
+
|
| 36 |
+
pred_idxs = preds.argmax(axis=1)
|
| 37 |
+
decode_out = [(label_list[idx], preds[i, idx])
|
| 38 |
+
for i, idx in enumerate(pred_idxs)]
|
| 39 |
+
if label is None:
|
| 40 |
+
return decode_out
|
| 41 |
+
label = [(label_list[idx], 1.0) for idx in label]
|
| 42 |
+
return decode_out, label
|
ocr-studio/PaddleOCR/ppocr/postprocess/ct_postprocess.py
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
"""
|
| 15 |
+
This code is refered from:
|
| 16 |
+
https://github.com/shengtao96/CentripetalText/blob/main/test.py
|
| 17 |
+
"""
|
| 18 |
+
|
| 19 |
+
from __future__ import absolute_import
|
| 20 |
+
from __future__ import division
|
| 21 |
+
from __future__ import print_function
|
| 22 |
+
|
| 23 |
+
import os
|
| 24 |
+
import os.path as osp
|
| 25 |
+
import numpy as np
|
| 26 |
+
import cv2
|
| 27 |
+
import paddle
|
| 28 |
+
import pyclipper
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
class CTPostProcess(object):
|
| 32 |
+
"""
|
| 33 |
+
The post process for Centripetal Text (CT).
|
| 34 |
+
"""
|
| 35 |
+
|
| 36 |
+
def __init__(self, min_score=0.88, min_area=16, box_type='poly', **kwargs):
|
| 37 |
+
self.min_score = min_score
|
| 38 |
+
self.min_area = min_area
|
| 39 |
+
self.box_type = box_type
|
| 40 |
+
|
| 41 |
+
self.coord = np.zeros((2, 300, 300), dtype=np.int32)
|
| 42 |
+
for i in range(300):
|
| 43 |
+
for j in range(300):
|
| 44 |
+
self.coord[0, i, j] = j
|
| 45 |
+
self.coord[1, i, j] = i
|
| 46 |
+
|
| 47 |
+
def __call__(self, preds, batch):
|
| 48 |
+
outs = preds['maps']
|
| 49 |
+
out_scores = preds['score']
|
| 50 |
+
|
| 51 |
+
if isinstance(outs, paddle.Tensor):
|
| 52 |
+
outs = outs.numpy()
|
| 53 |
+
if isinstance(out_scores, paddle.Tensor):
|
| 54 |
+
out_scores = out_scores.numpy()
|
| 55 |
+
|
| 56 |
+
batch_size = outs.shape[0]
|
| 57 |
+
boxes_batch = []
|
| 58 |
+
for idx in range(batch_size):
|
| 59 |
+
bboxes = []
|
| 60 |
+
scores = []
|
| 61 |
+
|
| 62 |
+
img_shape = batch[idx]
|
| 63 |
+
|
| 64 |
+
org_img_size = img_shape[:3]
|
| 65 |
+
img_shape = img_shape[3:]
|
| 66 |
+
img_size = img_shape[:2]
|
| 67 |
+
|
| 68 |
+
out = np.expand_dims(outs[idx], axis=0)
|
| 69 |
+
outputs = dict()
|
| 70 |
+
|
| 71 |
+
score = np.expand_dims(out_scores[idx], axis=0)
|
| 72 |
+
|
| 73 |
+
kernel = out[:, 0, :, :] > 0.2
|
| 74 |
+
loc = out[:, 1:, :, :].astype("float32")
|
| 75 |
+
|
| 76 |
+
score = score[0].astype(np.float32)
|
| 77 |
+
kernel = kernel[0].astype(np.uint8)
|
| 78 |
+
loc = loc[0].astype(np.float32)
|
| 79 |
+
|
| 80 |
+
label_num, label_kernel = cv2.connectedComponents(
|
| 81 |
+
kernel, connectivity=4)
|
| 82 |
+
|
| 83 |
+
for i in range(1, label_num):
|
| 84 |
+
ind = (label_kernel == i)
|
| 85 |
+
if ind.sum(
|
| 86 |
+
) < 10: # pixel number less than 10, treated as background
|
| 87 |
+
label_kernel[ind] = 0
|
| 88 |
+
|
| 89 |
+
label = np.zeros_like(label_kernel)
|
| 90 |
+
h, w = label_kernel.shape
|
| 91 |
+
pixels = self.coord[:, :h, :w].reshape(2, -1)
|
| 92 |
+
points = pixels.transpose([1, 0]).astype(np.float32)
|
| 93 |
+
|
| 94 |
+
off_points = (points + 10. / 4. * loc[:, pixels[1], pixels[0]].T
|
| 95 |
+
).astype(np.int32)
|
| 96 |
+
off_points[:, 0] = np.clip(off_points[:, 0], 0, label.shape[1] - 1)
|
| 97 |
+
off_points[:, 1] = np.clip(off_points[:, 1], 0, label.shape[0] - 1)
|
| 98 |
+
|
| 99 |
+
label[pixels[1], pixels[0]] = label_kernel[off_points[:, 1],
|
| 100 |
+
off_points[:, 0]]
|
| 101 |
+
label[label_kernel > 0] = label_kernel[label_kernel > 0]
|
| 102 |
+
|
| 103 |
+
score_pocket = [0.0]
|
| 104 |
+
for i in range(1, label_num):
|
| 105 |
+
ind = (label_kernel == i)
|
| 106 |
+
if ind.sum() == 0:
|
| 107 |
+
score_pocket.append(0.0)
|
| 108 |
+
continue
|
| 109 |
+
score_i = np.mean(score[ind])
|
| 110 |
+
score_pocket.append(score_i)
|
| 111 |
+
|
| 112 |
+
label_num = np.max(label) + 1
|
| 113 |
+
label = cv2.resize(
|
| 114 |
+
label, (img_size[1], img_size[0]),
|
| 115 |
+
interpolation=cv2.INTER_NEAREST)
|
| 116 |
+
|
| 117 |
+
scale = (float(org_img_size[1]) / float(img_size[1]),
|
| 118 |
+
float(org_img_size[0]) / float(img_size[0]))
|
| 119 |
+
|
| 120 |
+
for i in range(1, label_num):
|
| 121 |
+
ind = (label == i)
|
| 122 |
+
points = np.array(np.where(ind)).transpose((1, 0))
|
| 123 |
+
|
| 124 |
+
if points.shape[0] < self.min_area:
|
| 125 |
+
continue
|
| 126 |
+
|
| 127 |
+
score_i = score_pocket[i]
|
| 128 |
+
if score_i < self.min_score:
|
| 129 |
+
continue
|
| 130 |
+
|
| 131 |
+
if self.box_type == 'rect':
|
| 132 |
+
rect = cv2.minAreaRect(points[:, ::-1])
|
| 133 |
+
bbox = cv2.boxPoints(rect) * scale
|
| 134 |
+
z = bbox.mean(0)
|
| 135 |
+
bbox = z + (bbox - z) * 0.85
|
| 136 |
+
elif self.box_type == 'poly':
|
| 137 |
+
binary = np.zeros(label.shape, dtype='uint8')
|
| 138 |
+
binary[ind] = 1
|
| 139 |
+
try:
|
| 140 |
+
_, contours, _ = cv2.findContours(
|
| 141 |
+
binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
| 142 |
+
except BaseException:
|
| 143 |
+
contours, _ = cv2.findContours(
|
| 144 |
+
binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
| 145 |
+
|
| 146 |
+
bbox = contours[0] * scale
|
| 147 |
+
|
| 148 |
+
bbox = bbox.astype('int32')
|
| 149 |
+
bboxes.append(bbox.reshape(-1, 2))
|
| 150 |
+
scores.append(score_i)
|
| 151 |
+
|
| 152 |
+
boxes_batch.append({'points': bboxes})
|
| 153 |
+
|
| 154 |
+
return boxes_batch
|
ocr-studio/PaddleOCR/ppocr/postprocess/db_postprocess.py
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
"""
|
| 15 |
+
This code is refered from:
|
| 16 |
+
https://github.com/WenmuZhou/DBNet.pytorch/blob/master/post_processing/seg_detector_representer.py
|
| 17 |
+
"""
|
| 18 |
+
from __future__ import absolute_import
|
| 19 |
+
from __future__ import division
|
| 20 |
+
from __future__ import print_function
|
| 21 |
+
|
| 22 |
+
import numpy as np
|
| 23 |
+
import cv2
|
| 24 |
+
import paddle
|
| 25 |
+
from shapely.geometry import Polygon
|
| 26 |
+
import pyclipper
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
class DBPostProcess(object):
|
| 30 |
+
"""
|
| 31 |
+
The post process for Differentiable Binarization (DB).
|
| 32 |
+
"""
|
| 33 |
+
|
| 34 |
+
def __init__(self,
|
| 35 |
+
thresh=0.3,
|
| 36 |
+
box_thresh=0.7,
|
| 37 |
+
max_candidates=1000,
|
| 38 |
+
unclip_ratio=2.0,
|
| 39 |
+
use_dilation=False,
|
| 40 |
+
score_mode="fast",
|
| 41 |
+
box_type='quad',
|
| 42 |
+
**kwargs):
|
| 43 |
+
self.thresh = thresh
|
| 44 |
+
self.box_thresh = box_thresh
|
| 45 |
+
self.max_candidates = max_candidates
|
| 46 |
+
self.unclip_ratio = unclip_ratio
|
| 47 |
+
self.min_size = 3
|
| 48 |
+
self.score_mode = score_mode
|
| 49 |
+
self.box_type = box_type
|
| 50 |
+
assert score_mode in [
|
| 51 |
+
"slow", "fast"
|
| 52 |
+
], "Score mode must be in [slow, fast] but got: {}".format(score_mode)
|
| 53 |
+
|
| 54 |
+
self.dilation_kernel = None if not use_dilation else np.array(
|
| 55 |
+
[[1, 1], [1, 1]])
|
| 56 |
+
|
| 57 |
+
def polygons_from_bitmap(self, pred, _bitmap, dest_width, dest_height):
|
| 58 |
+
'''
|
| 59 |
+
_bitmap: single map with shape (1, H, W),
|
| 60 |
+
whose values are binarized as {0, 1}
|
| 61 |
+
'''
|
| 62 |
+
|
| 63 |
+
bitmap = _bitmap
|
| 64 |
+
height, width = bitmap.shape
|
| 65 |
+
|
| 66 |
+
boxes = []
|
| 67 |
+
scores = []
|
| 68 |
+
|
| 69 |
+
contours, _ = cv2.findContours((bitmap * 255).astype(np.uint8),
|
| 70 |
+
cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
|
| 71 |
+
|
| 72 |
+
for contour in contours[:self.max_candidates]:
|
| 73 |
+
epsilon = 0.002 * cv2.arcLength(contour, True)
|
| 74 |
+
approx = cv2.approxPolyDP(contour, epsilon, True)
|
| 75 |
+
points = approx.reshape((-1, 2))
|
| 76 |
+
if points.shape[0] < 4:
|
| 77 |
+
continue
|
| 78 |
+
|
| 79 |
+
score = self.box_score_fast(pred, points.reshape(-1, 2))
|
| 80 |
+
if self.box_thresh > score:
|
| 81 |
+
continue
|
| 82 |
+
|
| 83 |
+
if points.shape[0] > 2:
|
| 84 |
+
box = self.unclip(points, self.unclip_ratio)
|
| 85 |
+
if len(box) > 1:
|
| 86 |
+
continue
|
| 87 |
+
else:
|
| 88 |
+
continue
|
| 89 |
+
box = box.reshape(-1, 2)
|
| 90 |
+
|
| 91 |
+
_, sside = self.get_mini_boxes(box.reshape((-1, 1, 2)))
|
| 92 |
+
if sside < self.min_size + 2:
|
| 93 |
+
continue
|
| 94 |
+
|
| 95 |
+
box = np.array(box)
|
| 96 |
+
box[:, 0] = np.clip(
|
| 97 |
+
np.round(box[:, 0] / width * dest_width), 0, dest_width)
|
| 98 |
+
box[:, 1] = np.clip(
|
| 99 |
+
np.round(box[:, 1] / height * dest_height), 0, dest_height)
|
| 100 |
+
boxes.append(box.tolist())
|
| 101 |
+
scores.append(score)
|
| 102 |
+
return boxes, scores
|
| 103 |
+
|
| 104 |
+
def boxes_from_bitmap(self, pred, _bitmap, dest_width, dest_height):
|
| 105 |
+
'''
|
| 106 |
+
_bitmap: single map with shape (1, H, W),
|
| 107 |
+
whose values are binarized as {0, 1}
|
| 108 |
+
'''
|
| 109 |
+
|
| 110 |
+
bitmap = _bitmap
|
| 111 |
+
height, width = bitmap.shape
|
| 112 |
+
|
| 113 |
+
outs = cv2.findContours((bitmap * 255).astype(np.uint8), cv2.RETR_LIST,
|
| 114 |
+
cv2.CHAIN_APPROX_SIMPLE)
|
| 115 |
+
if len(outs) == 3:
|
| 116 |
+
img, contours, _ = outs[0], outs[1], outs[2]
|
| 117 |
+
elif len(outs) == 2:
|
| 118 |
+
contours, _ = outs[0], outs[1]
|
| 119 |
+
|
| 120 |
+
num_contours = min(len(contours), self.max_candidates)
|
| 121 |
+
|
| 122 |
+
boxes = []
|
| 123 |
+
scores = []
|
| 124 |
+
for index in range(num_contours):
|
| 125 |
+
contour = contours[index]
|
| 126 |
+
points, sside = self.get_mini_boxes(contour)
|
| 127 |
+
if sside < self.min_size:
|
| 128 |
+
continue
|
| 129 |
+
points = np.array(points)
|
| 130 |
+
if self.score_mode == "fast":
|
| 131 |
+
score = self.box_score_fast(pred, points.reshape(-1, 2))
|
| 132 |
+
else:
|
| 133 |
+
score = self.box_score_slow(pred, contour)
|
| 134 |
+
if self.box_thresh > score:
|
| 135 |
+
continue
|
| 136 |
+
|
| 137 |
+
box = self.unclip(points, self.unclip_ratio).reshape(-1, 1, 2)
|
| 138 |
+
box, sside = self.get_mini_boxes(box)
|
| 139 |
+
if sside < self.min_size + 2:
|
| 140 |
+
continue
|
| 141 |
+
box = np.array(box)
|
| 142 |
+
|
| 143 |
+
box[:, 0] = np.clip(
|
| 144 |
+
np.round(box[:, 0] / width * dest_width), 0, dest_width)
|
| 145 |
+
box[:, 1] = np.clip(
|
| 146 |
+
np.round(box[:, 1] / height * dest_height), 0, dest_height)
|
| 147 |
+
boxes.append(box.astype("int32"))
|
| 148 |
+
scores.append(score)
|
| 149 |
+
return np.array(boxes, dtype="int32"), scores
|
| 150 |
+
|
| 151 |
+
def unclip(self, box, unclip_ratio):
|
| 152 |
+
poly = Polygon(box)
|
| 153 |
+
distance = poly.area * unclip_ratio / poly.length
|
| 154 |
+
offset = pyclipper.PyclipperOffset()
|
| 155 |
+
offset.AddPath(box, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
|
| 156 |
+
expanded = np.array(offset.Execute(distance))
|
| 157 |
+
return expanded
|
| 158 |
+
|
| 159 |
+
def get_mini_boxes(self, contour):
|
| 160 |
+
bounding_box = cv2.minAreaRect(contour)
|
| 161 |
+
points = sorted(list(cv2.boxPoints(bounding_box)), key=lambda x: x[0])
|
| 162 |
+
|
| 163 |
+
index_1, index_2, index_3, index_4 = 0, 1, 2, 3
|
| 164 |
+
if points[1][1] > points[0][1]:
|
| 165 |
+
index_1 = 0
|
| 166 |
+
index_4 = 1
|
| 167 |
+
else:
|
| 168 |
+
index_1 = 1
|
| 169 |
+
index_4 = 0
|
| 170 |
+
if points[3][1] > points[2][1]:
|
| 171 |
+
index_2 = 2
|
| 172 |
+
index_3 = 3
|
| 173 |
+
else:
|
| 174 |
+
index_2 = 3
|
| 175 |
+
index_3 = 2
|
| 176 |
+
|
| 177 |
+
box = [
|
| 178 |
+
points[index_1], points[index_2], points[index_3], points[index_4]
|
| 179 |
+
]
|
| 180 |
+
return box, min(bounding_box[1])
|
| 181 |
+
|
| 182 |
+
def box_score_fast(self, bitmap, _box):
|
| 183 |
+
'''
|
| 184 |
+
box_score_fast: use bbox mean score as the mean score
|
| 185 |
+
'''
|
| 186 |
+
h, w = bitmap.shape[:2]
|
| 187 |
+
box = _box.copy()
|
| 188 |
+
xmin = np.clip(np.floor(box[:, 0].min()).astype("int32"), 0, w - 1)
|
| 189 |
+
xmax = np.clip(np.ceil(box[:, 0].max()).astype("int32"), 0, w - 1)
|
| 190 |
+
ymin = np.clip(np.floor(box[:, 1].min()).astype("int32"), 0, h - 1)
|
| 191 |
+
ymax = np.clip(np.ceil(box[:, 1].max()).astype("int32"), 0, h - 1)
|
| 192 |
+
|
| 193 |
+
mask = np.zeros((ymax - ymin + 1, xmax - xmin + 1), dtype=np.uint8)
|
| 194 |
+
box[:, 0] = box[:, 0] - xmin
|
| 195 |
+
box[:, 1] = box[:, 1] - ymin
|
| 196 |
+
cv2.fillPoly(mask, box.reshape(1, -1, 2).astype("int32"), 1)
|
| 197 |
+
return cv2.mean(bitmap[ymin:ymax + 1, xmin:xmax + 1], mask)[0]
|
| 198 |
+
|
| 199 |
+
def box_score_slow(self, bitmap, contour):
|
| 200 |
+
'''
|
| 201 |
+
box_score_slow: use polyon mean score as the mean score
|
| 202 |
+
'''
|
| 203 |
+
h, w = bitmap.shape[:2]
|
| 204 |
+
contour = contour.copy()
|
| 205 |
+
contour = np.reshape(contour, (-1, 2))
|
| 206 |
+
|
| 207 |
+
xmin = np.clip(np.min(contour[:, 0]), 0, w - 1)
|
| 208 |
+
xmax = np.clip(np.max(contour[:, 0]), 0, w - 1)
|
| 209 |
+
ymin = np.clip(np.min(contour[:, 1]), 0, h - 1)
|
| 210 |
+
ymax = np.clip(np.max(contour[:, 1]), 0, h - 1)
|
| 211 |
+
|
| 212 |
+
mask = np.zeros((ymax - ymin + 1, xmax - xmin + 1), dtype=np.uint8)
|
| 213 |
+
|
| 214 |
+
contour[:, 0] = contour[:, 0] - xmin
|
| 215 |
+
contour[:, 1] = contour[:, 1] - ymin
|
| 216 |
+
|
| 217 |
+
cv2.fillPoly(mask, contour.reshape(1, -1, 2).astype("int32"), 1)
|
| 218 |
+
return cv2.mean(bitmap[ymin:ymax + 1, xmin:xmax + 1], mask)[0]
|
| 219 |
+
|
| 220 |
+
def __call__(self, outs_dict, shape_list):
|
| 221 |
+
pred = outs_dict['maps']
|
| 222 |
+
if isinstance(pred, paddle.Tensor):
|
| 223 |
+
pred = pred.numpy()
|
| 224 |
+
pred = pred[:, 0, :, :]
|
| 225 |
+
segmentation = pred > self.thresh
|
| 226 |
+
|
| 227 |
+
boxes_batch = []
|
| 228 |
+
for batch_index in range(pred.shape[0]):
|
| 229 |
+
src_h, src_w, ratio_h, ratio_w = shape_list[batch_index]
|
| 230 |
+
if self.dilation_kernel is not None:
|
| 231 |
+
mask = cv2.dilate(
|
| 232 |
+
np.array(segmentation[batch_index]).astype(np.uint8),
|
| 233 |
+
self.dilation_kernel)
|
| 234 |
+
else:
|
| 235 |
+
mask = segmentation[batch_index]
|
| 236 |
+
if self.box_type == 'poly':
|
| 237 |
+
boxes, scores = self.polygons_from_bitmap(pred[batch_index],
|
| 238 |
+
mask, src_w, src_h)
|
| 239 |
+
elif self.box_type == 'quad':
|
| 240 |
+
boxes, scores = self.boxes_from_bitmap(pred[batch_index], mask,
|
| 241 |
+
src_w, src_h)
|
| 242 |
+
else:
|
| 243 |
+
raise ValueError("box_type can only be one of ['quad', 'poly']")
|
| 244 |
+
|
| 245 |
+
boxes_batch.append({'points': boxes})
|
| 246 |
+
return boxes_batch
|
| 247 |
+
|
| 248 |
+
|
| 249 |
+
class DistillationDBPostProcess(object):
|
| 250 |
+
def __init__(self,
|
| 251 |
+
model_name=["student"],
|
| 252 |
+
key=None,
|
| 253 |
+
thresh=0.3,
|
| 254 |
+
box_thresh=0.6,
|
| 255 |
+
max_candidates=1000,
|
| 256 |
+
unclip_ratio=1.5,
|
| 257 |
+
use_dilation=False,
|
| 258 |
+
score_mode="fast",
|
| 259 |
+
box_type='quad',
|
| 260 |
+
**kwargs):
|
| 261 |
+
self.model_name = model_name
|
| 262 |
+
self.key = key
|
| 263 |
+
self.post_process = DBPostProcess(
|
| 264 |
+
thresh=thresh,
|
| 265 |
+
box_thresh=box_thresh,
|
| 266 |
+
max_candidates=max_candidates,
|
| 267 |
+
unclip_ratio=unclip_ratio,
|
| 268 |
+
use_dilation=use_dilation,
|
| 269 |
+
score_mode=score_mode,
|
| 270 |
+
box_type=box_type)
|
| 271 |
+
|
| 272 |
+
def __call__(self, predicts, shape_list):
|
| 273 |
+
results = {}
|
| 274 |
+
for k in self.model_name:
|
| 275 |
+
results[k] = self.post_process(predicts[k], shape_list=shape_list)
|
| 276 |
+
return results
|
ocr-studio/PaddleOCR/ppocr/postprocess/drrg_postprocess.py
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2022 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
"""
|
| 15 |
+
This code is refer from:
|
| 16 |
+
https://github.com/open-mmlab/mmocr/blob/main/mmocr/models/textdet/postprocess/drrg_postprocessor.py
|
| 17 |
+
"""
|
| 18 |
+
|
| 19 |
+
import functools
|
| 20 |
+
import operator
|
| 21 |
+
|
| 22 |
+
import numpy as np
|
| 23 |
+
import paddle
|
| 24 |
+
from numpy.linalg import norm
|
| 25 |
+
import cv2
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
class Node:
|
| 29 |
+
def __init__(self, ind):
|
| 30 |
+
self.__ind = ind
|
| 31 |
+
self.__links = set()
|
| 32 |
+
|
| 33 |
+
@property
|
| 34 |
+
def ind(self):
|
| 35 |
+
return self.__ind
|
| 36 |
+
|
| 37 |
+
@property
|
| 38 |
+
def links(self):
|
| 39 |
+
return set(self.__links)
|
| 40 |
+
|
| 41 |
+
def add_link(self, link_node):
|
| 42 |
+
self.__links.add(link_node)
|
| 43 |
+
link_node.__links.add(self)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def graph_propagation(edges, scores, text_comps, edge_len_thr=50.):
|
| 47 |
+
assert edges.ndim == 2
|
| 48 |
+
assert edges.shape[1] == 2
|
| 49 |
+
assert edges.shape[0] == scores.shape[0]
|
| 50 |
+
assert text_comps.ndim == 2
|
| 51 |
+
assert isinstance(edge_len_thr, float)
|
| 52 |
+
|
| 53 |
+
edges = np.sort(edges, axis=1)
|
| 54 |
+
score_dict = {}
|
| 55 |
+
for i, edge in enumerate(edges):
|
| 56 |
+
if text_comps is not None:
|
| 57 |
+
box1 = text_comps[edge[0], :8].reshape(4, 2)
|
| 58 |
+
box2 = text_comps[edge[1], :8].reshape(4, 2)
|
| 59 |
+
center1 = np.mean(box1, axis=0)
|
| 60 |
+
center2 = np.mean(box2, axis=0)
|
| 61 |
+
distance = norm(center1 - center2)
|
| 62 |
+
if distance > edge_len_thr:
|
| 63 |
+
scores[i] = 0
|
| 64 |
+
if (edge[0], edge[1]) in score_dict:
|
| 65 |
+
score_dict[edge[0], edge[1]] = 0.5 * (
|
| 66 |
+
score_dict[edge[0], edge[1]] + scores[i])
|
| 67 |
+
else:
|
| 68 |
+
score_dict[edge[0], edge[1]] = scores[i]
|
| 69 |
+
|
| 70 |
+
nodes = np.sort(np.unique(edges.flatten()))
|
| 71 |
+
mapping = -1 * np.ones((np.max(nodes) + 1), dtype=np.int32)
|
| 72 |
+
mapping[nodes] = np.arange(nodes.shape[0])
|
| 73 |
+
order_inds = mapping[edges]
|
| 74 |
+
vertices = [Node(node) for node in nodes]
|
| 75 |
+
for ind in order_inds:
|
| 76 |
+
vertices[ind[0]].add_link(vertices[ind[1]])
|
| 77 |
+
|
| 78 |
+
return vertices, score_dict
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
def connected_components(nodes, score_dict, link_thr):
|
| 82 |
+
assert isinstance(nodes, list)
|
| 83 |
+
assert all([isinstance(node, Node) for node in nodes])
|
| 84 |
+
assert isinstance(score_dict, dict)
|
| 85 |
+
assert isinstance(link_thr, float)
|
| 86 |
+
|
| 87 |
+
clusters = []
|
| 88 |
+
nodes = set(nodes)
|
| 89 |
+
while nodes:
|
| 90 |
+
node = nodes.pop()
|
| 91 |
+
cluster = {node}
|
| 92 |
+
node_queue = [node]
|
| 93 |
+
while node_queue:
|
| 94 |
+
node = node_queue.pop(0)
|
| 95 |
+
neighbors = set([
|
| 96 |
+
neighbor for neighbor in node.links if
|
| 97 |
+
score_dict[tuple(sorted([node.ind, neighbor.ind]))] >= link_thr
|
| 98 |
+
])
|
| 99 |
+
neighbors.difference_update(cluster)
|
| 100 |
+
nodes.difference_update(neighbors)
|
| 101 |
+
cluster.update(neighbors)
|
| 102 |
+
node_queue.extend(neighbors)
|
| 103 |
+
clusters.append(list(cluster))
|
| 104 |
+
return clusters
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
def clusters2labels(clusters, num_nodes):
|
| 108 |
+
assert isinstance(clusters, list)
|
| 109 |
+
assert all([isinstance(cluster, list) for cluster in clusters])
|
| 110 |
+
assert all(
|
| 111 |
+
[isinstance(node, Node) for cluster in clusters for node in cluster])
|
| 112 |
+
assert isinstance(num_nodes, int)
|
| 113 |
+
|
| 114 |
+
node_labels = np.zeros(num_nodes)
|
| 115 |
+
for cluster_ind, cluster in enumerate(clusters):
|
| 116 |
+
for node in cluster:
|
| 117 |
+
node_labels[node.ind] = cluster_ind
|
| 118 |
+
return node_labels
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
def remove_single(text_comps, comp_pred_labels):
|
| 122 |
+
assert text_comps.ndim == 2
|
| 123 |
+
assert text_comps.shape[0] == comp_pred_labels.shape[0]
|
| 124 |
+
|
| 125 |
+
single_flags = np.zeros_like(comp_pred_labels)
|
| 126 |
+
pred_labels = np.unique(comp_pred_labels)
|
| 127 |
+
for label in pred_labels:
|
| 128 |
+
current_label_flag = (comp_pred_labels == label)
|
| 129 |
+
if np.sum(current_label_flag) == 1:
|
| 130 |
+
single_flags[np.where(current_label_flag)[0][0]] = 1
|
| 131 |
+
keep_ind = [i for i in range(len(comp_pred_labels)) if not single_flags[i]]
|
| 132 |
+
filtered_text_comps = text_comps[keep_ind, :]
|
| 133 |
+
filtered_labels = comp_pred_labels[keep_ind]
|
| 134 |
+
|
| 135 |
+
return filtered_text_comps, filtered_labels
|
| 136 |
+
|
| 137 |
+
|
| 138 |
+
def norm2(point1, point2):
|
| 139 |
+
return ((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)**0.5
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
def min_connect_path(points):
|
| 143 |
+
assert isinstance(points, list)
|
| 144 |
+
assert all([isinstance(point, list) for point in points])
|
| 145 |
+
assert all([isinstance(coord, int) for point in points for coord in point])
|
| 146 |
+
|
| 147 |
+
points_queue = points.copy()
|
| 148 |
+
shortest_path = []
|
| 149 |
+
current_edge = [[], []]
|
| 150 |
+
|
| 151 |
+
edge_dict0 = {}
|
| 152 |
+
edge_dict1 = {}
|
| 153 |
+
current_edge[0] = points_queue[0]
|
| 154 |
+
current_edge[1] = points_queue[0]
|
| 155 |
+
points_queue.remove(points_queue[0])
|
| 156 |
+
while points_queue:
|
| 157 |
+
for point in points_queue:
|
| 158 |
+
length0 = norm2(point, current_edge[0])
|
| 159 |
+
edge_dict0[length0] = [point, current_edge[0]]
|
| 160 |
+
length1 = norm2(current_edge[1], point)
|
| 161 |
+
edge_dict1[length1] = [current_edge[1], point]
|
| 162 |
+
key0 = min(edge_dict0.keys())
|
| 163 |
+
key1 = min(edge_dict1.keys())
|
| 164 |
+
|
| 165 |
+
if key0 <= key1:
|
| 166 |
+
start = edge_dict0[key0][0]
|
| 167 |
+
end = edge_dict0[key0][1]
|
| 168 |
+
shortest_path.insert(0, [points.index(start), points.index(end)])
|
| 169 |
+
points_queue.remove(start)
|
| 170 |
+
current_edge[0] = start
|
| 171 |
+
else:
|
| 172 |
+
start = edge_dict1[key1][0]
|
| 173 |
+
end = edge_dict1[key1][1]
|
| 174 |
+
shortest_path.append([points.index(start), points.index(end)])
|
| 175 |
+
points_queue.remove(end)
|
| 176 |
+
current_edge[1] = end
|
| 177 |
+
|
| 178 |
+
edge_dict0 = {}
|
| 179 |
+
edge_dict1 = {}
|
| 180 |
+
|
| 181 |
+
shortest_path = functools.reduce(operator.concat, shortest_path)
|
| 182 |
+
shortest_path = sorted(set(shortest_path), key=shortest_path.index)
|
| 183 |
+
|
| 184 |
+
return shortest_path
|
| 185 |
+
|
| 186 |
+
|
| 187 |
+
def in_contour(cont, point):
|
| 188 |
+
x, y = point
|
| 189 |
+
is_inner = cv2.pointPolygonTest(cont, (int(x), int(y)), False) > 0.5
|
| 190 |
+
return is_inner
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
def fix_corner(top_line, bot_line, start_box, end_box):
|
| 194 |
+
assert isinstance(top_line, list)
|
| 195 |
+
assert all(isinstance(point, list) for point in top_line)
|
| 196 |
+
assert isinstance(bot_line, list)
|
| 197 |
+
assert all(isinstance(point, list) for point in bot_line)
|
| 198 |
+
assert start_box.shape == end_box.shape == (4, 2)
|
| 199 |
+
|
| 200 |
+
contour = np.array(top_line + bot_line[::-1])
|
| 201 |
+
start_left_mid = (start_box[0] + start_box[3]) / 2
|
| 202 |
+
start_right_mid = (start_box[1] + start_box[2]) / 2
|
| 203 |
+
end_left_mid = (end_box[0] + end_box[3]) / 2
|
| 204 |
+
end_right_mid = (end_box[1] + end_box[2]) / 2
|
| 205 |
+
if not in_contour(contour, start_left_mid):
|
| 206 |
+
top_line.insert(0, start_box[0].tolist())
|
| 207 |
+
bot_line.insert(0, start_box[3].tolist())
|
| 208 |
+
elif not in_contour(contour, start_right_mid):
|
| 209 |
+
top_line.insert(0, start_box[1].tolist())
|
| 210 |
+
bot_line.insert(0, start_box[2].tolist())
|
| 211 |
+
if not in_contour(contour, end_left_mid):
|
| 212 |
+
top_line.append(end_box[0].tolist())
|
| 213 |
+
bot_line.append(end_box[3].tolist())
|
| 214 |
+
elif not in_contour(contour, end_right_mid):
|
| 215 |
+
top_line.append(end_box[1].tolist())
|
| 216 |
+
bot_line.append(end_box[2].tolist())
|
| 217 |
+
return top_line, bot_line
|
| 218 |
+
|
| 219 |
+
|
| 220 |
+
def comps2boundaries(text_comps, comp_pred_labels):
|
| 221 |
+
assert text_comps.ndim == 2
|
| 222 |
+
assert len(text_comps) == len(comp_pred_labels)
|
| 223 |
+
boundaries = []
|
| 224 |
+
if len(text_comps) < 1:
|
| 225 |
+
return boundaries
|
| 226 |
+
for cluster_ind in range(0, int(np.max(comp_pred_labels)) + 1):
|
| 227 |
+
cluster_comp_inds = np.where(comp_pred_labels == cluster_ind)
|
| 228 |
+
text_comp_boxes = text_comps[cluster_comp_inds, :8].reshape(
|
| 229 |
+
(-1, 4, 2)).astype(np.int32)
|
| 230 |
+
score = np.mean(text_comps[cluster_comp_inds, -1])
|
| 231 |
+
|
| 232 |
+
if text_comp_boxes.shape[0] < 1:
|
| 233 |
+
continue
|
| 234 |
+
|
| 235 |
+
elif text_comp_boxes.shape[0] > 1:
|
| 236 |
+
centers = np.mean(text_comp_boxes, axis=1).astype(np.int32).tolist()
|
| 237 |
+
shortest_path = min_connect_path(centers)
|
| 238 |
+
text_comp_boxes = text_comp_boxes[shortest_path]
|
| 239 |
+
top_line = np.mean(
|
| 240 |
+
text_comp_boxes[:, 0:2, :], axis=1).astype(np.int32).tolist()
|
| 241 |
+
bot_line = np.mean(
|
| 242 |
+
text_comp_boxes[:, 2:4, :], axis=1).astype(np.int32).tolist()
|
| 243 |
+
top_line, bot_line = fix_corner(
|
| 244 |
+
top_line, bot_line, text_comp_boxes[0], text_comp_boxes[-1])
|
| 245 |
+
boundary_points = top_line + bot_line[::-1]
|
| 246 |
+
|
| 247 |
+
else:
|
| 248 |
+
top_line = text_comp_boxes[0, 0:2, :].astype(np.int32).tolist()
|
| 249 |
+
bot_line = text_comp_boxes[0, 2:4:-1, :].astype(np.int32).tolist()
|
| 250 |
+
boundary_points = top_line + bot_line
|
| 251 |
+
|
| 252 |
+
boundary = [p for coord in boundary_points for p in coord] + [score]
|
| 253 |
+
boundaries.append(boundary)
|
| 254 |
+
|
| 255 |
+
return boundaries
|
| 256 |
+
|
| 257 |
+
|
| 258 |
+
class DRRGPostprocess(object):
|
| 259 |
+
"""Merge text components and construct boundaries of text instances.
|
| 260 |
+
|
| 261 |
+
Args:
|
| 262 |
+
link_thr (float): The edge score threshold.
|
| 263 |
+
"""
|
| 264 |
+
|
| 265 |
+
def __init__(self, link_thr, **kwargs):
|
| 266 |
+
assert isinstance(link_thr, float)
|
| 267 |
+
self.link_thr = link_thr
|
| 268 |
+
|
| 269 |
+
def __call__(self, preds, shape_list):
|
| 270 |
+
"""
|
| 271 |
+
Args:
|
| 272 |
+
edges (ndarray): The edge array of shape N * 2, each row is a node
|
| 273 |
+
index pair that makes up an edge in graph.
|
| 274 |
+
scores (ndarray): The edge score array of shape (N,).
|
| 275 |
+
text_comps (ndarray): The text components.
|
| 276 |
+
|
| 277 |
+
Returns:
|
| 278 |
+
List[list[float]]: The predicted boundaries of text instances.
|
| 279 |
+
"""
|
| 280 |
+
edges, scores, text_comps = preds
|
| 281 |
+
if edges is not None:
|
| 282 |
+
if isinstance(edges, paddle.Tensor):
|
| 283 |
+
edges = edges.numpy()
|
| 284 |
+
if isinstance(scores, paddle.Tensor):
|
| 285 |
+
scores = scores.numpy()
|
| 286 |
+
if isinstance(text_comps, paddle.Tensor):
|
| 287 |
+
text_comps = text_comps.numpy()
|
| 288 |
+
assert len(edges) == len(scores)
|
| 289 |
+
assert text_comps.ndim == 2
|
| 290 |
+
assert text_comps.shape[1] == 9
|
| 291 |
+
|
| 292 |
+
vertices, score_dict = graph_propagation(edges, scores, text_comps)
|
| 293 |
+
clusters = connected_components(vertices, score_dict, self.link_thr)
|
| 294 |
+
pred_labels = clusters2labels(clusters, text_comps.shape[0])
|
| 295 |
+
text_comps, pred_labels = remove_single(text_comps, pred_labels)
|
| 296 |
+
boundaries = comps2boundaries(text_comps, pred_labels)
|
| 297 |
+
else:
|
| 298 |
+
boundaries = []
|
| 299 |
+
|
| 300 |
+
boundaries, scores = self.resize_boundary(
|
| 301 |
+
boundaries, (1 / shape_list[0, 2:]).tolist()[::-1])
|
| 302 |
+
boxes_batch = [dict(points=boundaries, scores=scores)]
|
| 303 |
+
return boxes_batch
|
| 304 |
+
|
| 305 |
+
def resize_boundary(self, boundaries, scale_factor):
|
| 306 |
+
"""Rescale boundaries via scale_factor.
|
| 307 |
+
|
| 308 |
+
Args:
|
| 309 |
+
boundaries (list[list[float]]): The boundary list. Each boundary
|
| 310 |
+
with size 2k+1 with k>=4.
|
| 311 |
+
scale_factor(ndarray): The scale factor of size (4,).
|
| 312 |
+
|
| 313 |
+
Returns:
|
| 314 |
+
boundaries (list[list[float]]): The scaled boundaries.
|
| 315 |
+
"""
|
| 316 |
+
boxes = []
|
| 317 |
+
scores = []
|
| 318 |
+
for b in boundaries:
|
| 319 |
+
sz = len(b)
|
| 320 |
+
scores.append(b[-1])
|
| 321 |
+
b = (np.array(b[:sz - 1]) *
|
| 322 |
+
(np.tile(scale_factor[:2], int(
|
| 323 |
+
(sz - 1) / 2)).reshape(1, sz - 1))).flatten().tolist()
|
| 324 |
+
boxes.append(np.array(b).reshape([-1, 2]))
|
| 325 |
+
return boxes, scores
|
ocr-studio/PaddleOCR/ppocr/postprocess/east_postprocess.py
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from __future__ import absolute_import
|
| 16 |
+
from __future__ import division
|
| 17 |
+
from __future__ import print_function
|
| 18 |
+
|
| 19 |
+
import numpy as np
|
| 20 |
+
from .locality_aware_nms import nms_locality
|
| 21 |
+
import cv2
|
| 22 |
+
import paddle
|
| 23 |
+
|
| 24 |
+
import os
|
| 25 |
+
from ppocr.utils.utility import check_install
|
| 26 |
+
import sys
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
class EASTPostProcess(object):
|
| 30 |
+
"""
|
| 31 |
+
The post process for EAST.
|
| 32 |
+
"""
|
| 33 |
+
|
| 34 |
+
def __init__(self,
|
| 35 |
+
score_thresh=0.8,
|
| 36 |
+
cover_thresh=0.1,
|
| 37 |
+
nms_thresh=0.2,
|
| 38 |
+
**kwargs):
|
| 39 |
+
|
| 40 |
+
self.score_thresh = score_thresh
|
| 41 |
+
self.cover_thresh = cover_thresh
|
| 42 |
+
self.nms_thresh = nms_thresh
|
| 43 |
+
|
| 44 |
+
def restore_rectangle_quad(self, origin, geometry):
|
| 45 |
+
"""
|
| 46 |
+
Restore rectangle from quadrangle.
|
| 47 |
+
"""
|
| 48 |
+
# quad
|
| 49 |
+
origin_concat = np.concatenate(
|
| 50 |
+
(origin, origin, origin, origin), axis=1) # (n, 8)
|
| 51 |
+
pred_quads = origin_concat - geometry
|
| 52 |
+
pred_quads = pred_quads.reshape((-1, 4, 2)) # (n, 4, 2)
|
| 53 |
+
return pred_quads
|
| 54 |
+
|
| 55 |
+
def detect(self,
|
| 56 |
+
score_map,
|
| 57 |
+
geo_map,
|
| 58 |
+
score_thresh=0.8,
|
| 59 |
+
cover_thresh=0.1,
|
| 60 |
+
nms_thresh=0.2):
|
| 61 |
+
"""
|
| 62 |
+
restore text boxes from score map and geo map
|
| 63 |
+
"""
|
| 64 |
+
|
| 65 |
+
score_map = score_map[0]
|
| 66 |
+
geo_map = np.swapaxes(geo_map, 1, 0)
|
| 67 |
+
geo_map = np.swapaxes(geo_map, 1, 2)
|
| 68 |
+
# filter the score map
|
| 69 |
+
xy_text = np.argwhere(score_map > score_thresh)
|
| 70 |
+
if len(xy_text) == 0:
|
| 71 |
+
return []
|
| 72 |
+
# sort the text boxes via the y axis
|
| 73 |
+
xy_text = xy_text[np.argsort(xy_text[:, 0])]
|
| 74 |
+
#restore quad proposals
|
| 75 |
+
text_box_restored = self.restore_rectangle_quad(
|
| 76 |
+
xy_text[:, ::-1] * 4, geo_map[xy_text[:, 0], xy_text[:, 1], :])
|
| 77 |
+
boxes = np.zeros((text_box_restored.shape[0], 9), dtype=np.float32)
|
| 78 |
+
boxes[:, :8] = text_box_restored.reshape((-1, 8))
|
| 79 |
+
boxes[:, 8] = score_map[xy_text[:, 0], xy_text[:, 1]]
|
| 80 |
+
|
| 81 |
+
try:
|
| 82 |
+
check_install('lanms', 'lanms-nova')
|
| 83 |
+
import lanms
|
| 84 |
+
boxes = lanms.merge_quadrangle_n9(boxes, nms_thresh)
|
| 85 |
+
except:
|
| 86 |
+
print(
|
| 87 |
+
'You should install lanms by pip3 install lanms-nova to speed up nms_locality'
|
| 88 |
+
)
|
| 89 |
+
boxes = nms_locality(boxes.astype(np.float64), nms_thresh)
|
| 90 |
+
if boxes.shape[0] == 0:
|
| 91 |
+
return []
|
| 92 |
+
# Here we filter some low score boxes by the average score map,
|
| 93 |
+
# this is different from the orginal paper.
|
| 94 |
+
for i, box in enumerate(boxes):
|
| 95 |
+
mask = np.zeros_like(score_map, dtype=np.uint8)
|
| 96 |
+
cv2.fillPoly(mask, box[:8].reshape(
|
| 97 |
+
(-1, 4, 2)).astype(np.int32) // 4, 1)
|
| 98 |
+
boxes[i, 8] = cv2.mean(score_map, mask)[0]
|
| 99 |
+
boxes = boxes[boxes[:, 8] > cover_thresh]
|
| 100 |
+
return boxes
|
| 101 |
+
|
| 102 |
+
def sort_poly(self, p):
|
| 103 |
+
"""
|
| 104 |
+
Sort polygons.
|
| 105 |
+
"""
|
| 106 |
+
min_axis = np.argmin(np.sum(p, axis=1))
|
| 107 |
+
p = p[[min_axis, (min_axis + 1) % 4,\
|
| 108 |
+
(min_axis + 2) % 4, (min_axis + 3) % 4]]
|
| 109 |
+
if abs(p[0, 0] - p[1, 0]) > abs(p[0, 1] - p[1, 1]):
|
| 110 |
+
return p
|
| 111 |
+
else:
|
| 112 |
+
return p[[0, 3, 2, 1]]
|
| 113 |
+
|
| 114 |
+
def __call__(self, outs_dict, shape_list):
|
| 115 |
+
score_list = outs_dict['f_score']
|
| 116 |
+
geo_list = outs_dict['f_geo']
|
| 117 |
+
if isinstance(score_list, paddle.Tensor):
|
| 118 |
+
score_list = score_list.numpy()
|
| 119 |
+
geo_list = geo_list.numpy()
|
| 120 |
+
img_num = len(shape_list)
|
| 121 |
+
dt_boxes_list = []
|
| 122 |
+
for ino in range(img_num):
|
| 123 |
+
score = score_list[ino]
|
| 124 |
+
geo = geo_list[ino]
|
| 125 |
+
boxes = self.detect(
|
| 126 |
+
score_map=score,
|
| 127 |
+
geo_map=geo,
|
| 128 |
+
score_thresh=self.score_thresh,
|
| 129 |
+
cover_thresh=self.cover_thresh,
|
| 130 |
+
nms_thresh=self.nms_thresh)
|
| 131 |
+
boxes_norm = []
|
| 132 |
+
if len(boxes) > 0:
|
| 133 |
+
h, w = score.shape[1:]
|
| 134 |
+
src_h, src_w, ratio_h, ratio_w = shape_list[ino]
|
| 135 |
+
boxes = boxes[:, :8].reshape((-1, 4, 2))
|
| 136 |
+
boxes[:, :, 0] /= ratio_w
|
| 137 |
+
boxes[:, :, 1] /= ratio_h
|
| 138 |
+
for i_box, box in enumerate(boxes):
|
| 139 |
+
box = self.sort_poly(box.astype(np.int32))
|
| 140 |
+
if np.linalg.norm(box[0] - box[1]) < 5 \
|
| 141 |
+
or np.linalg.norm(box[3] - box[0]) < 5:
|
| 142 |
+
continue
|
| 143 |
+
boxes_norm.append(box)
|
| 144 |
+
dt_boxes_list.append({'points': np.array(boxes_norm)})
|
| 145 |
+
return dt_boxes_list
|
ocr-studio/PaddleOCR/ppocr/postprocess/fce_postprocess.py
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2022 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
"""
|
| 15 |
+
This code is refer from:
|
| 16 |
+
https://github.com/open-mmlab/mmocr/blob/v0.3.0/mmocr/models/textdet/postprocess/wrapper.py
|
| 17 |
+
"""
|
| 18 |
+
|
| 19 |
+
import cv2
|
| 20 |
+
import paddle
|
| 21 |
+
import numpy as np
|
| 22 |
+
from numpy.fft import ifft
|
| 23 |
+
from ppocr.utils.poly_nms import poly_nms, valid_boundary
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def fill_hole(input_mask):
|
| 27 |
+
h, w = input_mask.shape
|
| 28 |
+
canvas = np.zeros((h + 2, w + 2), np.uint8)
|
| 29 |
+
canvas[1:h + 1, 1:w + 1] = input_mask.copy()
|
| 30 |
+
|
| 31 |
+
mask = np.zeros((h + 4, w + 4), np.uint8)
|
| 32 |
+
|
| 33 |
+
cv2.floodFill(canvas, mask, (0, 0), 1)
|
| 34 |
+
canvas = canvas[1:h + 1, 1:w + 1].astype(np.bool_)
|
| 35 |
+
|
| 36 |
+
return ~canvas | input_mask
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
def fourier2poly(fourier_coeff, num_reconstr_points=50):
|
| 40 |
+
""" Inverse Fourier transform
|
| 41 |
+
Args:
|
| 42 |
+
fourier_coeff (ndarray): Fourier coefficients shaped (n, 2k+1),
|
| 43 |
+
with n and k being candidates number and Fourier degree
|
| 44 |
+
respectively.
|
| 45 |
+
num_reconstr_points (int): Number of reconstructed polygon points.
|
| 46 |
+
Returns:
|
| 47 |
+
Polygons (ndarray): The reconstructed polygons shaped (n, n')
|
| 48 |
+
"""
|
| 49 |
+
|
| 50 |
+
a = np.zeros((len(fourier_coeff), num_reconstr_points), dtype='complex')
|
| 51 |
+
k = (len(fourier_coeff[0]) - 1) // 2
|
| 52 |
+
|
| 53 |
+
a[:, 0:k + 1] = fourier_coeff[:, k:]
|
| 54 |
+
a[:, -k:] = fourier_coeff[:, :k]
|
| 55 |
+
|
| 56 |
+
poly_complex = ifft(a) * num_reconstr_points
|
| 57 |
+
polygon = np.zeros((len(fourier_coeff), num_reconstr_points, 2))
|
| 58 |
+
polygon[:, :, 0] = poly_complex.real
|
| 59 |
+
polygon[:, :, 1] = poly_complex.imag
|
| 60 |
+
return polygon.astype('int32').reshape((len(fourier_coeff), -1))
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
class FCEPostProcess(object):
|
| 64 |
+
"""
|
| 65 |
+
The post process for FCENet.
|
| 66 |
+
"""
|
| 67 |
+
|
| 68 |
+
def __init__(self,
|
| 69 |
+
scales,
|
| 70 |
+
fourier_degree=5,
|
| 71 |
+
num_reconstr_points=50,
|
| 72 |
+
decoding_type='fcenet',
|
| 73 |
+
score_thr=0.3,
|
| 74 |
+
nms_thr=0.1,
|
| 75 |
+
alpha=1.0,
|
| 76 |
+
beta=1.0,
|
| 77 |
+
box_type='poly',
|
| 78 |
+
**kwargs):
|
| 79 |
+
|
| 80 |
+
self.scales = scales
|
| 81 |
+
self.fourier_degree = fourier_degree
|
| 82 |
+
self.num_reconstr_points = num_reconstr_points
|
| 83 |
+
self.decoding_type = decoding_type
|
| 84 |
+
self.score_thr = score_thr
|
| 85 |
+
self.nms_thr = nms_thr
|
| 86 |
+
self.alpha = alpha
|
| 87 |
+
self.beta = beta
|
| 88 |
+
self.box_type = box_type
|
| 89 |
+
|
| 90 |
+
def __call__(self, preds, shape_list):
|
| 91 |
+
score_maps = []
|
| 92 |
+
for key, value in preds.items():
|
| 93 |
+
if isinstance(value, paddle.Tensor):
|
| 94 |
+
value = value.numpy()
|
| 95 |
+
cls_res = value[:, :4, :, :]
|
| 96 |
+
reg_res = value[:, 4:, :, :]
|
| 97 |
+
score_maps.append([cls_res, reg_res])
|
| 98 |
+
|
| 99 |
+
return self.get_boundary(score_maps, shape_list)
|
| 100 |
+
|
| 101 |
+
def resize_boundary(self, boundaries, scale_factor):
|
| 102 |
+
"""Rescale boundaries via scale_factor.
|
| 103 |
+
|
| 104 |
+
Args:
|
| 105 |
+
boundaries (list[list[float]]): The boundary list. Each boundary
|
| 106 |
+
with size 2k+1 with k>=4.
|
| 107 |
+
scale_factor(ndarray): The scale factor of size (4,).
|
| 108 |
+
|
| 109 |
+
Returns:
|
| 110 |
+
boundaries (list[list[float]]): The scaled boundaries.
|
| 111 |
+
"""
|
| 112 |
+
boxes = []
|
| 113 |
+
scores = []
|
| 114 |
+
for b in boundaries:
|
| 115 |
+
sz = len(b)
|
| 116 |
+
valid_boundary(b, True)
|
| 117 |
+
scores.append(b[-1])
|
| 118 |
+
b = (np.array(b[:sz - 1]) *
|
| 119 |
+
(np.tile(scale_factor[:2], int(
|
| 120 |
+
(sz - 1) / 2)).reshape(1, sz - 1))).flatten().tolist()
|
| 121 |
+
boxes.append(np.array(b).reshape([-1, 2]))
|
| 122 |
+
|
| 123 |
+
return np.array(boxes, dtype=np.float32), scores
|
| 124 |
+
|
| 125 |
+
def get_boundary(self, score_maps, shape_list):
|
| 126 |
+
assert len(score_maps) == len(self.scales)
|
| 127 |
+
boundaries = []
|
| 128 |
+
for idx, score_map in enumerate(score_maps):
|
| 129 |
+
scale = self.scales[idx]
|
| 130 |
+
boundaries = boundaries + self._get_boundary_single(score_map,
|
| 131 |
+
scale)
|
| 132 |
+
|
| 133 |
+
# nms
|
| 134 |
+
boundaries = poly_nms(boundaries, self.nms_thr)
|
| 135 |
+
boundaries, scores = self.resize_boundary(
|
| 136 |
+
boundaries, (1 / shape_list[0, 2:]).tolist()[::-1])
|
| 137 |
+
|
| 138 |
+
boxes_batch = [dict(points=boundaries, scores=scores)]
|
| 139 |
+
return boxes_batch
|
| 140 |
+
|
| 141 |
+
def _get_boundary_single(self, score_map, scale):
|
| 142 |
+
assert len(score_map) == 2
|
| 143 |
+
assert score_map[1].shape[1] == 4 * self.fourier_degree + 2
|
| 144 |
+
|
| 145 |
+
return self.fcenet_decode(
|
| 146 |
+
preds=score_map,
|
| 147 |
+
fourier_degree=self.fourier_degree,
|
| 148 |
+
num_reconstr_points=self.num_reconstr_points,
|
| 149 |
+
scale=scale,
|
| 150 |
+
alpha=self.alpha,
|
| 151 |
+
beta=self.beta,
|
| 152 |
+
box_type=self.box_type,
|
| 153 |
+
score_thr=self.score_thr,
|
| 154 |
+
nms_thr=self.nms_thr)
|
| 155 |
+
|
| 156 |
+
def fcenet_decode(self,
|
| 157 |
+
preds,
|
| 158 |
+
fourier_degree,
|
| 159 |
+
num_reconstr_points,
|
| 160 |
+
scale,
|
| 161 |
+
alpha=1.0,
|
| 162 |
+
beta=2.0,
|
| 163 |
+
box_type='poly',
|
| 164 |
+
score_thr=0.3,
|
| 165 |
+
nms_thr=0.1):
|
| 166 |
+
"""Decoding predictions of FCENet to instances.
|
| 167 |
+
|
| 168 |
+
Args:
|
| 169 |
+
preds (list(Tensor)): The head output tensors.
|
| 170 |
+
fourier_degree (int): The maximum Fourier transform degree k.
|
| 171 |
+
num_reconstr_points (int): The points number of the polygon
|
| 172 |
+
reconstructed from predicted Fourier coefficients.
|
| 173 |
+
scale (int): The down-sample scale of the prediction.
|
| 174 |
+
alpha (float) : The parameter to calculate final scores. Score_{final}
|
| 175 |
+
= (Score_{text region} ^ alpha)
|
| 176 |
+
* (Score_{text center region}^ beta)
|
| 177 |
+
beta (float) : The parameter to calculate final score.
|
| 178 |
+
box_type (str): Boundary encoding type 'poly' or 'quad'.
|
| 179 |
+
score_thr (float) : The threshold used to filter out the final
|
| 180 |
+
candidates.
|
| 181 |
+
nms_thr (float) : The threshold of nms.
|
| 182 |
+
|
| 183 |
+
Returns:
|
| 184 |
+
boundaries (list[list[float]]): The instance boundary and confidence
|
| 185 |
+
list.
|
| 186 |
+
"""
|
| 187 |
+
assert isinstance(preds, list)
|
| 188 |
+
assert len(preds) == 2
|
| 189 |
+
assert box_type in ['poly', 'quad']
|
| 190 |
+
|
| 191 |
+
cls_pred = preds[0][0]
|
| 192 |
+
tr_pred = cls_pred[0:2]
|
| 193 |
+
tcl_pred = cls_pred[2:]
|
| 194 |
+
|
| 195 |
+
reg_pred = preds[1][0].transpose([1, 2, 0])
|
| 196 |
+
x_pred = reg_pred[:, :, :2 * fourier_degree + 1]
|
| 197 |
+
y_pred = reg_pred[:, :, 2 * fourier_degree + 1:]
|
| 198 |
+
|
| 199 |
+
score_pred = (tr_pred[1]**alpha) * (tcl_pred[1]**beta)
|
| 200 |
+
tr_pred_mask = (score_pred) > score_thr
|
| 201 |
+
tr_mask = fill_hole(tr_pred_mask)
|
| 202 |
+
|
| 203 |
+
tr_contours, _ = cv2.findContours(
|
| 204 |
+
tr_mask.astype(np.uint8), cv2.RETR_TREE,
|
| 205 |
+
cv2.CHAIN_APPROX_SIMPLE) # opencv4
|
| 206 |
+
|
| 207 |
+
mask = np.zeros_like(tr_mask)
|
| 208 |
+
boundaries = []
|
| 209 |
+
for cont in tr_contours:
|
| 210 |
+
deal_map = mask.copy().astype(np.int8)
|
| 211 |
+
cv2.drawContours(deal_map, [cont], -1, 1, -1)
|
| 212 |
+
|
| 213 |
+
score_map = score_pred * deal_map
|
| 214 |
+
score_mask = score_map > 0
|
| 215 |
+
xy_text = np.argwhere(score_mask)
|
| 216 |
+
dxy = xy_text[:, 1] + xy_text[:, 0] * 1j
|
| 217 |
+
|
| 218 |
+
x, y = x_pred[score_mask], y_pred[score_mask]
|
| 219 |
+
c = x + y * 1j
|
| 220 |
+
c[:, fourier_degree] = c[:, fourier_degree] + dxy
|
| 221 |
+
c *= scale
|
| 222 |
+
|
| 223 |
+
polygons = fourier2poly(c, num_reconstr_points)
|
| 224 |
+
score = score_map[score_mask].reshape(-1, 1)
|
| 225 |
+
polygons = poly_nms(np.hstack((polygons, score)).tolist(), nms_thr)
|
| 226 |
+
|
| 227 |
+
boundaries = boundaries + polygons
|
| 228 |
+
|
| 229 |
+
boundaries = poly_nms(boundaries, nms_thr)
|
| 230 |
+
|
| 231 |
+
if box_type == 'quad':
|
| 232 |
+
new_boundaries = []
|
| 233 |
+
for boundary in boundaries:
|
| 234 |
+
poly = np.array(boundary[:-1]).reshape(-1, 2).astype(np.float32)
|
| 235 |
+
score = boundary[-1]
|
| 236 |
+
points = cv2.boxPoints(cv2.minAreaRect(poly))
|
| 237 |
+
points = np.int64(points)
|
| 238 |
+
new_boundaries.append(points.reshape(-1).tolist() + [score])
|
| 239 |
+
boundaries = new_boundaries
|
| 240 |
+
|
| 241 |
+
return boundaries
|
ocr-studio/PaddleOCR/ppocr/postprocess/locality_aware_nms.py
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Locality aware nms.
|
| 3 |
+
This code is refered from: https://github.com/songdejia/EAST/blob/master/locality_aware_nms.py
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import numpy as np
|
| 7 |
+
from shapely.geometry import Polygon
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def intersection(g, p):
|
| 11 |
+
"""
|
| 12 |
+
Intersection.
|
| 13 |
+
"""
|
| 14 |
+
g = Polygon(g[:8].reshape((4, 2)))
|
| 15 |
+
p = Polygon(p[:8].reshape((4, 2)))
|
| 16 |
+
g = g.buffer(0)
|
| 17 |
+
p = p.buffer(0)
|
| 18 |
+
if not g.is_valid or not p.is_valid:
|
| 19 |
+
return 0
|
| 20 |
+
inter = Polygon(g).intersection(Polygon(p)).area
|
| 21 |
+
union = g.area + p.area - inter
|
| 22 |
+
if union == 0:
|
| 23 |
+
return 0
|
| 24 |
+
else:
|
| 25 |
+
return inter / union
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def intersection_iog(g, p):
|
| 29 |
+
"""
|
| 30 |
+
Intersection_iog.
|
| 31 |
+
"""
|
| 32 |
+
g = Polygon(g[:8].reshape((4, 2)))
|
| 33 |
+
p = Polygon(p[:8].reshape((4, 2)))
|
| 34 |
+
if not g.is_valid or not p.is_valid:
|
| 35 |
+
return 0
|
| 36 |
+
inter = Polygon(g).intersection(Polygon(p)).area
|
| 37 |
+
#union = g.area + p.area - inter
|
| 38 |
+
union = p.area
|
| 39 |
+
if union == 0:
|
| 40 |
+
print("p_area is very small")
|
| 41 |
+
return 0
|
| 42 |
+
else:
|
| 43 |
+
return inter / union
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def weighted_merge(g, p):
|
| 47 |
+
"""
|
| 48 |
+
Weighted merge.
|
| 49 |
+
"""
|
| 50 |
+
g[:8] = (g[8] * g[:8] + p[8] * p[:8]) / (g[8] + p[8])
|
| 51 |
+
g[8] = (g[8] + p[8])
|
| 52 |
+
return g
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
def standard_nms(S, thres):
|
| 56 |
+
"""
|
| 57 |
+
Standard nms.
|
| 58 |
+
"""
|
| 59 |
+
order = np.argsort(S[:, 8])[::-1]
|
| 60 |
+
keep = []
|
| 61 |
+
while order.size > 0:
|
| 62 |
+
i = order[0]
|
| 63 |
+
keep.append(i)
|
| 64 |
+
ovr = np.array([intersection(S[i], S[t]) for t in order[1:]])
|
| 65 |
+
|
| 66 |
+
inds = np.where(ovr <= thres)[0]
|
| 67 |
+
order = order[inds + 1]
|
| 68 |
+
|
| 69 |
+
return S[keep]
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
def standard_nms_inds(S, thres):
|
| 73 |
+
"""
|
| 74 |
+
Standard nms, retun inds.
|
| 75 |
+
"""
|
| 76 |
+
order = np.argsort(S[:, 8])[::-1]
|
| 77 |
+
keep = []
|
| 78 |
+
while order.size > 0:
|
| 79 |
+
i = order[0]
|
| 80 |
+
keep.append(i)
|
| 81 |
+
ovr = np.array([intersection(S[i], S[t]) for t in order[1:]])
|
| 82 |
+
|
| 83 |
+
inds = np.where(ovr <= thres)[0]
|
| 84 |
+
order = order[inds + 1]
|
| 85 |
+
|
| 86 |
+
return keep
|
| 87 |
+
|
| 88 |
+
|
| 89 |
+
def nms(S, thres):
|
| 90 |
+
"""
|
| 91 |
+
nms.
|
| 92 |
+
"""
|
| 93 |
+
order = np.argsort(S[:, 8])[::-1]
|
| 94 |
+
keep = []
|
| 95 |
+
while order.size > 0:
|
| 96 |
+
i = order[0]
|
| 97 |
+
keep.append(i)
|
| 98 |
+
ovr = np.array([intersection(S[i], S[t]) for t in order[1:]])
|
| 99 |
+
|
| 100 |
+
inds = np.where(ovr <= thres)[0]
|
| 101 |
+
order = order[inds + 1]
|
| 102 |
+
|
| 103 |
+
return keep
|
| 104 |
+
|
| 105 |
+
|
| 106 |
+
def soft_nms(boxes_in, Nt_thres=0.3, threshold=0.8, sigma=0.5, method=2):
|
| 107 |
+
"""
|
| 108 |
+
soft_nms
|
| 109 |
+
:para boxes_in, N x 9 (coords + score)
|
| 110 |
+
:para threshould, eliminate cases min score(0.001)
|
| 111 |
+
:para Nt_thres, iou_threshi
|
| 112 |
+
:para sigma, gaussian weght
|
| 113 |
+
:method, linear or gaussian
|
| 114 |
+
"""
|
| 115 |
+
boxes = boxes_in.copy()
|
| 116 |
+
N = boxes.shape[0]
|
| 117 |
+
if N is None or N < 1:
|
| 118 |
+
return np.array([])
|
| 119 |
+
pos, maxpos = 0, 0
|
| 120 |
+
weight = 0.0
|
| 121 |
+
inds = np.arange(N)
|
| 122 |
+
tbox, sbox = boxes[0].copy(), boxes[0].copy()
|
| 123 |
+
for i in range(N):
|
| 124 |
+
maxscore = boxes[i, 8]
|
| 125 |
+
maxpos = i
|
| 126 |
+
tbox = boxes[i].copy()
|
| 127 |
+
ti = inds[i]
|
| 128 |
+
pos = i + 1
|
| 129 |
+
#get max box
|
| 130 |
+
while pos < N:
|
| 131 |
+
if maxscore < boxes[pos, 8]:
|
| 132 |
+
maxscore = boxes[pos, 8]
|
| 133 |
+
maxpos = pos
|
| 134 |
+
pos = pos + 1
|
| 135 |
+
#add max box as a detection
|
| 136 |
+
boxes[i, :] = boxes[maxpos, :]
|
| 137 |
+
inds[i] = inds[maxpos]
|
| 138 |
+
#swap
|
| 139 |
+
boxes[maxpos, :] = tbox
|
| 140 |
+
inds[maxpos] = ti
|
| 141 |
+
tbox = boxes[i].copy()
|
| 142 |
+
pos = i + 1
|
| 143 |
+
#NMS iteration
|
| 144 |
+
while pos < N:
|
| 145 |
+
sbox = boxes[pos].copy()
|
| 146 |
+
ts_iou_val = intersection(tbox, sbox)
|
| 147 |
+
if ts_iou_val > 0:
|
| 148 |
+
if method == 1:
|
| 149 |
+
if ts_iou_val > Nt_thres:
|
| 150 |
+
weight = 1 - ts_iou_val
|
| 151 |
+
else:
|
| 152 |
+
weight = 1
|
| 153 |
+
elif method == 2:
|
| 154 |
+
weight = np.exp(-1.0 * ts_iou_val**2 / sigma)
|
| 155 |
+
else:
|
| 156 |
+
if ts_iou_val > Nt_thres:
|
| 157 |
+
weight = 0
|
| 158 |
+
else:
|
| 159 |
+
weight = 1
|
| 160 |
+
boxes[pos, 8] = weight * boxes[pos, 8]
|
| 161 |
+
#if box score falls below thresold, discard the box by
|
| 162 |
+
#swaping last box update N
|
| 163 |
+
if boxes[pos, 8] < threshold:
|
| 164 |
+
boxes[pos, :] = boxes[N - 1, :]
|
| 165 |
+
inds[pos] = inds[N - 1]
|
| 166 |
+
N = N - 1
|
| 167 |
+
pos = pos - 1
|
| 168 |
+
pos = pos + 1
|
| 169 |
+
|
| 170 |
+
return boxes[:N]
|
| 171 |
+
|
| 172 |
+
|
| 173 |
+
def nms_locality(polys, thres=0.3):
|
| 174 |
+
"""
|
| 175 |
+
locality aware nms of EAST
|
| 176 |
+
:param polys: a N*9 numpy array. first 8 coordinates, then prob
|
| 177 |
+
:return: boxes after nms
|
| 178 |
+
"""
|
| 179 |
+
S = []
|
| 180 |
+
p = None
|
| 181 |
+
for g in polys:
|
| 182 |
+
if p is not None and intersection(g, p) > thres:
|
| 183 |
+
p = weighted_merge(g, p)
|
| 184 |
+
else:
|
| 185 |
+
if p is not None:
|
| 186 |
+
S.append(p)
|
| 187 |
+
p = g
|
| 188 |
+
if p is not None:
|
| 189 |
+
S.append(p)
|
| 190 |
+
|
| 191 |
+
if len(S) == 0:
|
| 192 |
+
return np.array([])
|
| 193 |
+
return standard_nms(np.array(S), thres)
|
| 194 |
+
|
| 195 |
+
|
| 196 |
+
if __name__ == '__main__':
|
| 197 |
+
# 343,350,448,135,474,143,369,359
|
| 198 |
+
print(
|
| 199 |
+
Polygon(np.array([[343, 350], [448, 135], [474, 143], [369, 359]]))
|
| 200 |
+
.area)
|
ocr-studio/PaddleOCR/ppocr/postprocess/pg_postprocess.py
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from __future__ import absolute_import
|
| 16 |
+
from __future__ import division
|
| 17 |
+
from __future__ import print_function
|
| 18 |
+
|
| 19 |
+
import os
|
| 20 |
+
import sys
|
| 21 |
+
|
| 22 |
+
__dir__ = os.path.dirname(__file__)
|
| 23 |
+
sys.path.append(__dir__)
|
| 24 |
+
sys.path.append(os.path.join(__dir__, '..'))
|
| 25 |
+
from ppocr.utils.e2e_utils.pgnet_pp_utils import PGNet_PostProcess
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
class PGPostProcess(object):
|
| 29 |
+
"""
|
| 30 |
+
The post process for PGNet.
|
| 31 |
+
"""
|
| 32 |
+
|
| 33 |
+
def __init__(self,
|
| 34 |
+
character_dict_path,
|
| 35 |
+
valid_set,
|
| 36 |
+
score_thresh,
|
| 37 |
+
mode,
|
| 38 |
+
point_gather_mode=None,
|
| 39 |
+
**kwargs):
|
| 40 |
+
self.character_dict_path = character_dict_path
|
| 41 |
+
self.valid_set = valid_set
|
| 42 |
+
self.score_thresh = score_thresh
|
| 43 |
+
self.mode = mode
|
| 44 |
+
self.point_gather_mode = point_gather_mode
|
| 45 |
+
|
| 46 |
+
# c++ la-nms is faster, but only support python 3.5
|
| 47 |
+
self.is_python35 = False
|
| 48 |
+
if sys.version_info.major == 3 and sys.version_info.minor == 5:
|
| 49 |
+
self.is_python35 = True
|
| 50 |
+
|
| 51 |
+
def __call__(self, outs_dict, shape_list):
|
| 52 |
+
post = PGNet_PostProcess(
|
| 53 |
+
self.character_dict_path,
|
| 54 |
+
self.valid_set,
|
| 55 |
+
self.score_thresh,
|
| 56 |
+
outs_dict,
|
| 57 |
+
shape_list,
|
| 58 |
+
point_gather_mode=self.point_gather_mode)
|
| 59 |
+
if self.mode == 'fast':
|
| 60 |
+
data = post.pg_postprocess_fast()
|
| 61 |
+
else:
|
| 62 |
+
data = post.pg_postprocess_slow()
|
| 63 |
+
return data
|
ocr-studio/PaddleOCR/ppocr/postprocess/picodet_postprocess.py
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import numpy as np
|
| 16 |
+
from scipy.special import softmax
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def hard_nms(box_scores, iou_threshold, top_k=-1, candidate_size=200):
|
| 20 |
+
"""
|
| 21 |
+
Args:
|
| 22 |
+
box_scores (N, 5): boxes in corner-form and probabilities.
|
| 23 |
+
iou_threshold: intersection over union threshold.
|
| 24 |
+
top_k: keep top_k results. If k <= 0, keep all the results.
|
| 25 |
+
candidate_size: only consider the candidates with the highest scores.
|
| 26 |
+
Returns:
|
| 27 |
+
picked: a list of indexes of the kept boxes
|
| 28 |
+
"""
|
| 29 |
+
scores = box_scores[:, -1]
|
| 30 |
+
boxes = box_scores[:, :-1]
|
| 31 |
+
picked = []
|
| 32 |
+
indexes = np.argsort(scores)
|
| 33 |
+
indexes = indexes[-candidate_size:]
|
| 34 |
+
while len(indexes) > 0:
|
| 35 |
+
current = indexes[-1]
|
| 36 |
+
picked.append(current)
|
| 37 |
+
if 0 < top_k == len(picked) or len(indexes) == 1:
|
| 38 |
+
break
|
| 39 |
+
current_box = boxes[current, :]
|
| 40 |
+
indexes = indexes[:-1]
|
| 41 |
+
rest_boxes = boxes[indexes, :]
|
| 42 |
+
iou = iou_of(
|
| 43 |
+
rest_boxes,
|
| 44 |
+
np.expand_dims(
|
| 45 |
+
current_box, axis=0), )
|
| 46 |
+
indexes = indexes[iou <= iou_threshold]
|
| 47 |
+
|
| 48 |
+
return box_scores[picked, :]
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
def iou_of(boxes0, boxes1, eps=1e-5):
|
| 52 |
+
"""Return intersection-over-union (Jaccard index) of boxes.
|
| 53 |
+
Args:
|
| 54 |
+
boxes0 (N, 4): ground truth boxes.
|
| 55 |
+
boxes1 (N or 1, 4): predicted boxes.
|
| 56 |
+
eps: a small number to avoid 0 as denominator.
|
| 57 |
+
Returns:
|
| 58 |
+
iou (N): IoU values.
|
| 59 |
+
"""
|
| 60 |
+
overlap_left_top = np.maximum(boxes0[..., :2], boxes1[..., :2])
|
| 61 |
+
overlap_right_bottom = np.minimum(boxes0[..., 2:], boxes1[..., 2:])
|
| 62 |
+
|
| 63 |
+
overlap_area = area_of(overlap_left_top, overlap_right_bottom)
|
| 64 |
+
area0 = area_of(boxes0[..., :2], boxes0[..., 2:])
|
| 65 |
+
area1 = area_of(boxes1[..., :2], boxes1[..., 2:])
|
| 66 |
+
return overlap_area / (area0 + area1 - overlap_area + eps)
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
def area_of(left_top, right_bottom):
|
| 70 |
+
"""Compute the areas of rectangles given two corners.
|
| 71 |
+
Args:
|
| 72 |
+
left_top (N, 2): left top corner.
|
| 73 |
+
right_bottom (N, 2): right bottom corner.
|
| 74 |
+
Returns:
|
| 75 |
+
area (N): return the area.
|
| 76 |
+
"""
|
| 77 |
+
hw = np.clip(right_bottom - left_top, 0.0, None)
|
| 78 |
+
return hw[..., 0] * hw[..., 1]
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
class PicoDetPostProcess(object):
|
| 82 |
+
"""
|
| 83 |
+
Args:
|
| 84 |
+
input_shape (int): network input image size
|
| 85 |
+
ori_shape (int): ori image shape of before padding
|
| 86 |
+
scale_factor (float): scale factor of ori image
|
| 87 |
+
enable_mkldnn (bool): whether to open MKLDNN
|
| 88 |
+
"""
|
| 89 |
+
|
| 90 |
+
def __init__(self,
|
| 91 |
+
layout_dict_path,
|
| 92 |
+
strides=[8, 16, 32, 64],
|
| 93 |
+
score_threshold=0.4,
|
| 94 |
+
nms_threshold=0.5,
|
| 95 |
+
nms_top_k=1000,
|
| 96 |
+
keep_top_k=100):
|
| 97 |
+
self.labels = self.load_layout_dict(layout_dict_path)
|
| 98 |
+
self.strides = strides
|
| 99 |
+
self.score_threshold = score_threshold
|
| 100 |
+
self.nms_threshold = nms_threshold
|
| 101 |
+
self.nms_top_k = nms_top_k
|
| 102 |
+
self.keep_top_k = keep_top_k
|
| 103 |
+
|
| 104 |
+
def load_layout_dict(self, layout_dict_path):
|
| 105 |
+
with open(layout_dict_path, 'r', encoding='utf-8') as fp:
|
| 106 |
+
labels = fp.readlines()
|
| 107 |
+
return [label.strip('\n') for label in labels]
|
| 108 |
+
|
| 109 |
+
def warp_boxes(self, boxes, ori_shape):
|
| 110 |
+
"""Apply transform to boxes
|
| 111 |
+
"""
|
| 112 |
+
width, height = ori_shape[1], ori_shape[0]
|
| 113 |
+
n = len(boxes)
|
| 114 |
+
if n:
|
| 115 |
+
# warp points
|
| 116 |
+
xy = np.ones((n * 4, 3))
|
| 117 |
+
xy[:, :2] = boxes[:, [0, 1, 2, 3, 0, 3, 2, 1]].reshape(
|
| 118 |
+
n * 4, 2) # x1y1, x2y2, x1y2, x2y1
|
| 119 |
+
# xy = xy @ M.T # transform
|
| 120 |
+
xy = (xy[:, :2] / xy[:, 2:3]).reshape(n, 8) # rescale
|
| 121 |
+
# create new boxes
|
| 122 |
+
x = xy[:, [0, 2, 4, 6]]
|
| 123 |
+
y = xy[:, [1, 3, 5, 7]]
|
| 124 |
+
xy = np.concatenate(
|
| 125 |
+
(x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T
|
| 126 |
+
# clip boxes
|
| 127 |
+
xy[:, [0, 2]] = xy[:, [0, 2]].clip(0, width)
|
| 128 |
+
xy[:, [1, 3]] = xy[:, [1, 3]].clip(0, height)
|
| 129 |
+
return xy.astype(np.float32)
|
| 130 |
+
else:
|
| 131 |
+
return boxes
|
| 132 |
+
|
| 133 |
+
def img_info(self, ori_img, img):
|
| 134 |
+
origin_shape = ori_img.shape
|
| 135 |
+
resize_shape = img.shape
|
| 136 |
+
im_scale_y = resize_shape[2] / float(origin_shape[0])
|
| 137 |
+
im_scale_x = resize_shape[3] / float(origin_shape[1])
|
| 138 |
+
scale_factor = np.array([im_scale_y, im_scale_x], dtype=np.float32)
|
| 139 |
+
img_shape = np.array(img.shape[2:], dtype=np.float32)
|
| 140 |
+
|
| 141 |
+
input_shape = np.array(img).astype('float32').shape[2:]
|
| 142 |
+
ori_shape = np.array((img_shape, )).astype('float32')
|
| 143 |
+
scale_factor = np.array((scale_factor, )).astype('float32')
|
| 144 |
+
return ori_shape, input_shape, scale_factor
|
| 145 |
+
|
| 146 |
+
def __call__(self, ori_img, img, preds):
|
| 147 |
+
scores, raw_boxes = preds['boxes'], preds['boxes_num']
|
| 148 |
+
batch_size = raw_boxes[0].shape[0]
|
| 149 |
+
reg_max = int(raw_boxes[0].shape[-1] / 4 - 1)
|
| 150 |
+
out_boxes_num = []
|
| 151 |
+
out_boxes_list = []
|
| 152 |
+
results = []
|
| 153 |
+
ori_shape, input_shape, scale_factor = self.img_info(ori_img, img)
|
| 154 |
+
|
| 155 |
+
for batch_id in range(batch_size):
|
| 156 |
+
# generate centers
|
| 157 |
+
decode_boxes = []
|
| 158 |
+
select_scores = []
|
| 159 |
+
for stride, box_distribute, score in zip(self.strides, raw_boxes,
|
| 160 |
+
scores):
|
| 161 |
+
box_distribute = box_distribute[batch_id]
|
| 162 |
+
score = score[batch_id]
|
| 163 |
+
# centers
|
| 164 |
+
fm_h = input_shape[0] / stride
|
| 165 |
+
fm_w = input_shape[1] / stride
|
| 166 |
+
h_range = np.arange(fm_h)
|
| 167 |
+
w_range = np.arange(fm_w)
|
| 168 |
+
ww, hh = np.meshgrid(w_range, h_range)
|
| 169 |
+
ct_row = (hh.flatten() + 0.5) * stride
|
| 170 |
+
ct_col = (ww.flatten() + 0.5) * stride
|
| 171 |
+
center = np.stack((ct_col, ct_row, ct_col, ct_row), axis=1)
|
| 172 |
+
|
| 173 |
+
# box distribution to distance
|
| 174 |
+
reg_range = np.arange(reg_max + 1)
|
| 175 |
+
box_distance = box_distribute.reshape((-1, reg_max + 1))
|
| 176 |
+
box_distance = softmax(box_distance, axis=1)
|
| 177 |
+
box_distance = box_distance * np.expand_dims(reg_range, axis=0)
|
| 178 |
+
box_distance = np.sum(box_distance, axis=1).reshape((-1, 4))
|
| 179 |
+
box_distance = box_distance * stride
|
| 180 |
+
|
| 181 |
+
# top K candidate
|
| 182 |
+
topk_idx = np.argsort(score.max(axis=1))[::-1]
|
| 183 |
+
topk_idx = topk_idx[:self.nms_top_k]
|
| 184 |
+
center = center[topk_idx]
|
| 185 |
+
score = score[topk_idx]
|
| 186 |
+
box_distance = box_distance[topk_idx]
|
| 187 |
+
|
| 188 |
+
# decode box
|
| 189 |
+
decode_box = center + [-1, -1, 1, 1] * box_distance
|
| 190 |
+
|
| 191 |
+
select_scores.append(score)
|
| 192 |
+
decode_boxes.append(decode_box)
|
| 193 |
+
|
| 194 |
+
# nms
|
| 195 |
+
bboxes = np.concatenate(decode_boxes, axis=0)
|
| 196 |
+
confidences = np.concatenate(select_scores, axis=0)
|
| 197 |
+
picked_box_probs = []
|
| 198 |
+
picked_labels = []
|
| 199 |
+
for class_index in range(0, confidences.shape[1]):
|
| 200 |
+
probs = confidences[:, class_index]
|
| 201 |
+
mask = probs > self.score_threshold
|
| 202 |
+
probs = probs[mask]
|
| 203 |
+
if probs.shape[0] == 0:
|
| 204 |
+
continue
|
| 205 |
+
subset_boxes = bboxes[mask, :]
|
| 206 |
+
box_probs = np.concatenate(
|
| 207 |
+
[subset_boxes, probs.reshape(-1, 1)], axis=1)
|
| 208 |
+
box_probs = hard_nms(
|
| 209 |
+
box_probs,
|
| 210 |
+
iou_threshold=self.nms_threshold,
|
| 211 |
+
top_k=self.keep_top_k, )
|
| 212 |
+
picked_box_probs.append(box_probs)
|
| 213 |
+
picked_labels.extend([class_index] * box_probs.shape[0])
|
| 214 |
+
|
| 215 |
+
if len(picked_box_probs) == 0:
|
| 216 |
+
out_boxes_list.append(np.empty((0, 4)))
|
| 217 |
+
out_boxes_num.append(0)
|
| 218 |
+
|
| 219 |
+
else:
|
| 220 |
+
picked_box_probs = np.concatenate(picked_box_probs)
|
| 221 |
+
|
| 222 |
+
# resize output boxes
|
| 223 |
+
picked_box_probs[:, :4] = self.warp_boxes(
|
| 224 |
+
picked_box_probs[:, :4], ori_shape[batch_id])
|
| 225 |
+
im_scale = np.concatenate([
|
| 226 |
+
scale_factor[batch_id][::-1], scale_factor[batch_id][::-1]
|
| 227 |
+
])
|
| 228 |
+
picked_box_probs[:, :4] /= im_scale
|
| 229 |
+
# clas score box
|
| 230 |
+
out_boxes_list.append(
|
| 231 |
+
np.concatenate(
|
| 232 |
+
[
|
| 233 |
+
np.expand_dims(
|
| 234 |
+
np.array(picked_labels),
|
| 235 |
+
axis=-1), np.expand_dims(
|
| 236 |
+
picked_box_probs[:, 4], axis=-1),
|
| 237 |
+
picked_box_probs[:, :4]
|
| 238 |
+
],
|
| 239 |
+
axis=1))
|
| 240 |
+
out_boxes_num.append(len(picked_labels))
|
| 241 |
+
|
| 242 |
+
out_boxes_list = np.concatenate(out_boxes_list, axis=0)
|
| 243 |
+
out_boxes_num = np.asarray(out_boxes_num).astype(np.int32)
|
| 244 |
+
|
| 245 |
+
for dt in out_boxes_list:
|
| 246 |
+
clsid, bbox, score = int(dt[0]), dt[2:], dt[1]
|
| 247 |
+
label = self.labels[clsid]
|
| 248 |
+
result = {'bbox': bbox, 'label': label}
|
| 249 |
+
results.append(result)
|
| 250 |
+
return results
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/__init__.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from .pse_postprocess import PSEPostProcess
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/README.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
## 编译
|
| 2 |
+
This code is refer from:
|
| 3 |
+
https://github.com/whai362/PSENet/blob/python3/models/post_processing/pse
|
| 4 |
+
```python
|
| 5 |
+
python3 setup.py build_ext --inplace
|
| 6 |
+
```
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/__init__.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
import sys
|
| 15 |
+
import os
|
| 16 |
+
import subprocess
|
| 17 |
+
|
| 18 |
+
python_path = sys.executable
|
| 19 |
+
|
| 20 |
+
ori_path = os.getcwd()
|
| 21 |
+
os.chdir('ppocr/postprocess/pse_postprocess/pse')
|
| 22 |
+
if subprocess.call(
|
| 23 |
+
'{} setup.py build_ext --inplace'.format(python_path), shell=True) != 0:
|
| 24 |
+
raise RuntimeError(
|
| 25 |
+
'Cannot compile pse: {}, if your system is windows, you need to install all the default components of `desktop development using C++` in visual studio 2019+'.
|
| 26 |
+
format(os.path.dirname(os.path.realpath(__file__))))
|
| 27 |
+
os.chdir(ori_path)
|
| 28 |
+
|
| 29 |
+
from .pse import pse
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/pse.pyx
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
import numpy as np
|
| 3 |
+
import cv2
|
| 4 |
+
cimport numpy as np
|
| 5 |
+
cimport cython
|
| 6 |
+
cimport libcpp
|
| 7 |
+
cimport libcpp.pair
|
| 8 |
+
cimport libcpp.queue
|
| 9 |
+
from libcpp.pair cimport *
|
| 10 |
+
from libcpp.queue cimport *
|
| 11 |
+
|
| 12 |
+
@cython.boundscheck(False)
|
| 13 |
+
@cython.wraparound(False)
|
| 14 |
+
cdef np.ndarray[np.int32_t, ndim=2] _pse(np.ndarray[np.uint8_t, ndim=3] kernels,
|
| 15 |
+
np.ndarray[np.int32_t, ndim=2] label,
|
| 16 |
+
int kernel_num,
|
| 17 |
+
int label_num,
|
| 18 |
+
float min_area=0):
|
| 19 |
+
cdef np.ndarray[np.int32_t, ndim=2] pred
|
| 20 |
+
pred = np.zeros((label.shape[0], label.shape[1]), dtype=np.int32)
|
| 21 |
+
|
| 22 |
+
for label_idx in range(1, label_num):
|
| 23 |
+
if np.sum(label == label_idx) < min_area:
|
| 24 |
+
label[label == label_idx] = 0
|
| 25 |
+
|
| 26 |
+
cdef libcpp.queue.queue[libcpp.pair.pair[np.int16_t,np.int16_t]] que = \
|
| 27 |
+
queue[libcpp.pair.pair[np.int16_t,np.int16_t]]()
|
| 28 |
+
cdef libcpp.queue.queue[libcpp.pair.pair[np.int16_t,np.int16_t]] nxt_que = \
|
| 29 |
+
queue[libcpp.pair.pair[np.int16_t,np.int16_t]]()
|
| 30 |
+
cdef np.int16_t* dx = [-1, 1, 0, 0]
|
| 31 |
+
cdef np.int16_t* dy = [0, 0, -1, 1]
|
| 32 |
+
cdef np.int16_t tmpx, tmpy
|
| 33 |
+
|
| 34 |
+
points = np.array(np.where(label > 0)).transpose((1, 0))
|
| 35 |
+
for point_idx in range(points.shape[0]):
|
| 36 |
+
tmpx, tmpy = points[point_idx, 0], points[point_idx, 1]
|
| 37 |
+
que.push(pair[np.int16_t,np.int16_t](tmpx, tmpy))
|
| 38 |
+
pred[tmpx, tmpy] = label[tmpx, tmpy]
|
| 39 |
+
|
| 40 |
+
cdef libcpp.pair.pair[np.int16_t,np.int16_t] cur
|
| 41 |
+
cdef int cur_label
|
| 42 |
+
for kernel_idx in range(kernel_num - 1, -1, -1):
|
| 43 |
+
while not que.empty():
|
| 44 |
+
cur = que.front()
|
| 45 |
+
que.pop()
|
| 46 |
+
cur_label = pred[cur.first, cur.second]
|
| 47 |
+
|
| 48 |
+
is_edge = True
|
| 49 |
+
for j in range(4):
|
| 50 |
+
tmpx = cur.first + dx[j]
|
| 51 |
+
tmpy = cur.second + dy[j]
|
| 52 |
+
if tmpx < 0 or tmpx >= label.shape[0] or tmpy < 0 or tmpy >= label.shape[1]:
|
| 53 |
+
continue
|
| 54 |
+
if kernels[kernel_idx, tmpx, tmpy] == 0 or pred[tmpx, tmpy] > 0:
|
| 55 |
+
continue
|
| 56 |
+
|
| 57 |
+
que.push(pair[np.int16_t,np.int16_t](tmpx, tmpy))
|
| 58 |
+
pred[tmpx, tmpy] = cur_label
|
| 59 |
+
is_edge = False
|
| 60 |
+
if is_edge:
|
| 61 |
+
nxt_que.push(cur)
|
| 62 |
+
|
| 63 |
+
que, nxt_que = nxt_que, que
|
| 64 |
+
|
| 65 |
+
return pred
|
| 66 |
+
|
| 67 |
+
def pse(kernels, min_area):
|
| 68 |
+
kernel_num = kernels.shape[0]
|
| 69 |
+
label_num, label = cv2.connectedComponents(kernels[-1], connectivity=4)
|
| 70 |
+
return _pse(kernels[:-1], label, kernel_num, label_num, min_area)
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse/setup.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from distutils.core import setup, Extension
|
| 2 |
+
from Cython.Build import cythonize
|
| 3 |
+
import numpy
|
| 4 |
+
|
| 5 |
+
setup(ext_modules=cythonize(Extension(
|
| 6 |
+
'pse',
|
| 7 |
+
sources=['pse.pyx'],
|
| 8 |
+
language='c++',
|
| 9 |
+
include_dirs=[numpy.get_include()],
|
| 10 |
+
library_dirs=[],
|
| 11 |
+
libraries=[],
|
| 12 |
+
extra_compile_args=['-O3'],
|
| 13 |
+
extra_link_args=[]
|
| 14 |
+
)))
|
ocr-studio/PaddleOCR/ppocr/postprocess/pse_postprocess/pse_postprocess.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
"""
|
| 15 |
+
This code is refer from:
|
| 16 |
+
https://github.com/whai362/PSENet/blob/python3/models/head/psenet_head.py
|
| 17 |
+
"""
|
| 18 |
+
|
| 19 |
+
from __future__ import absolute_import
|
| 20 |
+
from __future__ import division
|
| 21 |
+
from __future__ import print_function
|
| 22 |
+
|
| 23 |
+
import numpy as np
|
| 24 |
+
import cv2
|
| 25 |
+
import paddle
|
| 26 |
+
from paddle.nn import functional as F
|
| 27 |
+
|
| 28 |
+
from ppocr.postprocess.pse_postprocess.pse import pse
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
class PSEPostProcess(object):
|
| 32 |
+
"""
|
| 33 |
+
The post process for PSE.
|
| 34 |
+
"""
|
| 35 |
+
|
| 36 |
+
def __init__(self,
|
| 37 |
+
thresh=0.5,
|
| 38 |
+
box_thresh=0.85,
|
| 39 |
+
min_area=16,
|
| 40 |
+
box_type='quad',
|
| 41 |
+
scale=4,
|
| 42 |
+
**kwargs):
|
| 43 |
+
assert box_type in ['quad', 'poly'], 'Only quad and poly is supported'
|
| 44 |
+
self.thresh = thresh
|
| 45 |
+
self.box_thresh = box_thresh
|
| 46 |
+
self.min_area = min_area
|
| 47 |
+
self.box_type = box_type
|
| 48 |
+
self.scale = scale
|
| 49 |
+
|
| 50 |
+
def __call__(self, outs_dict, shape_list):
|
| 51 |
+
pred = outs_dict['maps']
|
| 52 |
+
if not isinstance(pred, paddle.Tensor):
|
| 53 |
+
pred = paddle.to_tensor(pred)
|
| 54 |
+
pred = F.interpolate(
|
| 55 |
+
pred, scale_factor=4 // self.scale, mode='bilinear')
|
| 56 |
+
|
| 57 |
+
score = F.sigmoid(pred[:, 0, :, :])
|
| 58 |
+
|
| 59 |
+
kernels = (pred > self.thresh).astype('float32')
|
| 60 |
+
text_mask = kernels[:, 0, :, :]
|
| 61 |
+
text_mask = paddle.unsqueeze(text_mask, axis=1)
|
| 62 |
+
|
| 63 |
+
kernels[:, 0:, :, :] = kernels[:, 0:, :, :] * text_mask
|
| 64 |
+
|
| 65 |
+
score = score.numpy()
|
| 66 |
+
kernels = kernels.numpy().astype(np.uint8)
|
| 67 |
+
|
| 68 |
+
boxes_batch = []
|
| 69 |
+
for batch_index in range(pred.shape[0]):
|
| 70 |
+
boxes, scores = self.boxes_from_bitmap(score[batch_index],
|
| 71 |
+
kernels[batch_index],
|
| 72 |
+
shape_list[batch_index])
|
| 73 |
+
|
| 74 |
+
boxes_batch.append({'points': boxes, 'scores': scores})
|
| 75 |
+
return boxes_batch
|
| 76 |
+
|
| 77 |
+
def boxes_from_bitmap(self, score, kernels, shape):
|
| 78 |
+
label = pse(kernels, self.min_area)
|
| 79 |
+
return self.generate_box(score, label, shape)
|
| 80 |
+
|
| 81 |
+
def generate_box(self, score, label, shape):
|
| 82 |
+
src_h, src_w, ratio_h, ratio_w = shape
|
| 83 |
+
label_num = np.max(label) + 1
|
| 84 |
+
|
| 85 |
+
boxes = []
|
| 86 |
+
scores = []
|
| 87 |
+
for i in range(1, label_num):
|
| 88 |
+
ind = label == i
|
| 89 |
+
points = np.array(np.where(ind)).transpose((1, 0))[:, ::-1]
|
| 90 |
+
|
| 91 |
+
if points.shape[0] < self.min_area:
|
| 92 |
+
label[ind] = 0
|
| 93 |
+
continue
|
| 94 |
+
|
| 95 |
+
score_i = np.mean(score[ind])
|
| 96 |
+
if score_i < self.box_thresh:
|
| 97 |
+
label[ind] = 0
|
| 98 |
+
continue
|
| 99 |
+
|
| 100 |
+
if self.box_type == 'quad':
|
| 101 |
+
rect = cv2.minAreaRect(points)
|
| 102 |
+
bbox = cv2.boxPoints(rect)
|
| 103 |
+
elif self.box_type == 'poly':
|
| 104 |
+
box_height = np.max(points[:, 1]) + 10
|
| 105 |
+
box_width = np.max(points[:, 0]) + 10
|
| 106 |
+
|
| 107 |
+
mask = np.zeros((box_height, box_width), np.uint8)
|
| 108 |
+
mask[points[:, 1], points[:, 0]] = 255
|
| 109 |
+
|
| 110 |
+
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL,
|
| 111 |
+
cv2.CHAIN_APPROX_SIMPLE)
|
| 112 |
+
bbox = np.squeeze(contours[0], 1)
|
| 113 |
+
else:
|
| 114 |
+
raise NotImplementedError
|
| 115 |
+
|
| 116 |
+
bbox[:, 0] = np.clip(np.round(bbox[:, 0] / ratio_w), 0, src_w)
|
| 117 |
+
bbox[:, 1] = np.clip(np.round(bbox[:, 1] / ratio_h), 0, src_h)
|
| 118 |
+
boxes.append(bbox)
|
| 119 |
+
scores.append(score_i)
|
| 120 |
+
return boxes, scores
|
ocr-studio/PaddleOCR/ppocr/postprocess/rec_postprocess.py
ADDED
|
@@ -0,0 +1,1221 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import numpy as np
|
| 16 |
+
import paddle
|
| 17 |
+
from paddle.nn import functional as F
|
| 18 |
+
import re
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
class BaseRecLabelDecode(object):
|
| 22 |
+
""" Convert between text-label and text-index """
|
| 23 |
+
|
| 24 |
+
def __init__(self, character_dict_path=None, use_space_char=False):
|
| 25 |
+
self.beg_str = "sos"
|
| 26 |
+
self.end_str = "eos"
|
| 27 |
+
self.reverse = False
|
| 28 |
+
self.character_str = []
|
| 29 |
+
|
| 30 |
+
if character_dict_path is None:
|
| 31 |
+
self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz"
|
| 32 |
+
dict_character = list(self.character_str)
|
| 33 |
+
else:
|
| 34 |
+
with open(character_dict_path, "rb") as fin:
|
| 35 |
+
lines = fin.readlines()
|
| 36 |
+
for line in lines:
|
| 37 |
+
line = line.decode('utf-8').strip("\n").strip("\r\n")
|
| 38 |
+
self.character_str.append(line)
|
| 39 |
+
if use_space_char:
|
| 40 |
+
self.character_str.append(" ")
|
| 41 |
+
dict_character = list(self.character_str)
|
| 42 |
+
if 'arabic' in character_dict_path:
|
| 43 |
+
self.reverse = True
|
| 44 |
+
|
| 45 |
+
dict_character = self.add_special_char(dict_character)
|
| 46 |
+
self.dict = {}
|
| 47 |
+
for i, char in enumerate(dict_character):
|
| 48 |
+
self.dict[char] = i
|
| 49 |
+
self.character = dict_character
|
| 50 |
+
|
| 51 |
+
def pred_reverse(self, pred):
|
| 52 |
+
pred_re = []
|
| 53 |
+
c_current = ''
|
| 54 |
+
for c in pred:
|
| 55 |
+
if not bool(re.search('[a-zA-Z0-9 :*./%+-]', c)):
|
| 56 |
+
if c_current != '':
|
| 57 |
+
pred_re.append(c_current)
|
| 58 |
+
pred_re.append(c)
|
| 59 |
+
c_current = ''
|
| 60 |
+
else:
|
| 61 |
+
c_current += c
|
| 62 |
+
if c_current != '':
|
| 63 |
+
pred_re.append(c_current)
|
| 64 |
+
|
| 65 |
+
return ''.join(pred_re[::-1])
|
| 66 |
+
|
| 67 |
+
def add_special_char(self, dict_character):
|
| 68 |
+
return dict_character
|
| 69 |
+
|
| 70 |
+
def get_word_info(self, text, selection):
|
| 71 |
+
"""
|
| 72 |
+
Group the decoded characters and record the corresponding decoded positions.
|
| 73 |
+
|
| 74 |
+
Args:
|
| 75 |
+
text: the decoded text
|
| 76 |
+
selection: the bool array that identifies which columns of features are decoded as non-separated characters
|
| 77 |
+
Returns:
|
| 78 |
+
word_list: list of the grouped words
|
| 79 |
+
word_col_list: list of decoding positions corresponding to each character in the grouped word
|
| 80 |
+
state_list: list of marker to identify the type of grouping words, including two types of grouping words:
|
| 81 |
+
- 'cn': continous chinese characters (e.g., 你好啊)
|
| 82 |
+
- 'en&num': continous english characters (e.g., hello), number (e.g., 123, 1.123), or mixed of them connected by '-' (e.g., VGG-16)
|
| 83 |
+
The remaining characters in text are treated as separators between groups (e.g., space, '(', ')', etc.).
|
| 84 |
+
"""
|
| 85 |
+
state = None
|
| 86 |
+
word_content = []
|
| 87 |
+
word_col_content = []
|
| 88 |
+
word_list = []
|
| 89 |
+
word_col_list = []
|
| 90 |
+
state_list = []
|
| 91 |
+
valid_col = np.where(selection==True)[0]
|
| 92 |
+
|
| 93 |
+
for c_i, char in enumerate(text):
|
| 94 |
+
if '\u4e00' <= char <= '\u9fff':
|
| 95 |
+
c_state = 'cn'
|
| 96 |
+
elif bool(re.search('[a-zA-Z0-9]', char)):
|
| 97 |
+
c_state = 'en&num'
|
| 98 |
+
else:
|
| 99 |
+
c_state = 'splitter'
|
| 100 |
+
|
| 101 |
+
if char == '.' and state == 'en&num' and c_i + 1 < len(text) and bool(re.search('[0-9]', text[c_i+1])): # grouping floting number
|
| 102 |
+
c_state = 'en&num'
|
| 103 |
+
if char == '-' and state == "en&num": # grouping word with '-', such as 'state-of-the-art'
|
| 104 |
+
c_state = 'en&num'
|
| 105 |
+
|
| 106 |
+
if state == None:
|
| 107 |
+
state = c_state
|
| 108 |
+
|
| 109 |
+
if state != c_state:
|
| 110 |
+
if len(word_content) != 0:
|
| 111 |
+
word_list.append(word_content)
|
| 112 |
+
word_col_list.append(word_col_content)
|
| 113 |
+
state_list.append(state)
|
| 114 |
+
word_content = []
|
| 115 |
+
word_col_content = []
|
| 116 |
+
state = c_state
|
| 117 |
+
|
| 118 |
+
if state != "splitter":
|
| 119 |
+
word_content.append(char)
|
| 120 |
+
word_col_content.append(valid_col[c_i])
|
| 121 |
+
|
| 122 |
+
if len(word_content) != 0:
|
| 123 |
+
word_list.append(word_content)
|
| 124 |
+
word_col_list.append(word_col_content)
|
| 125 |
+
state_list.append(state)
|
| 126 |
+
|
| 127 |
+
return word_list, word_col_list, state_list
|
| 128 |
+
|
| 129 |
+
def decode(self,
|
| 130 |
+
text_index,
|
| 131 |
+
text_prob=None,
|
| 132 |
+
is_remove_duplicate=False,
|
| 133 |
+
return_word_box=False):
|
| 134 |
+
""" convert text-index into text-label. """
|
| 135 |
+
result_list = []
|
| 136 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 137 |
+
batch_size = len(text_index)
|
| 138 |
+
for batch_idx in range(batch_size):
|
| 139 |
+
selection = np.ones(len(text_index[batch_idx]), dtype=bool)
|
| 140 |
+
if is_remove_duplicate:
|
| 141 |
+
selection[1:] = text_index[batch_idx][1:] != text_index[
|
| 142 |
+
batch_idx][:-1]
|
| 143 |
+
for ignored_token in ignored_tokens:
|
| 144 |
+
selection &= text_index[batch_idx] != ignored_token
|
| 145 |
+
|
| 146 |
+
char_list = [
|
| 147 |
+
self.character[text_id]
|
| 148 |
+
for text_id in text_index[batch_idx][selection]
|
| 149 |
+
]
|
| 150 |
+
if text_prob is not None:
|
| 151 |
+
conf_list = text_prob[batch_idx][selection]
|
| 152 |
+
else:
|
| 153 |
+
conf_list = [1] * len(selection)
|
| 154 |
+
if len(conf_list) == 0:
|
| 155 |
+
conf_list = [0]
|
| 156 |
+
|
| 157 |
+
text = ''.join(char_list)
|
| 158 |
+
|
| 159 |
+
if self.reverse: # for arabic rec
|
| 160 |
+
text = self.pred_reverse(text)
|
| 161 |
+
|
| 162 |
+
if return_word_box:
|
| 163 |
+
word_list, word_col_list, state_list = self.get_word_info(
|
| 164 |
+
text, selection)
|
| 165 |
+
result_list.append((text, np.mean(conf_list).tolist(), [
|
| 166 |
+
len(text_index[batch_idx]), word_list, word_col_list,
|
| 167 |
+
state_list
|
| 168 |
+
]))
|
| 169 |
+
else:
|
| 170 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 171 |
+
return result_list
|
| 172 |
+
|
| 173 |
+
def get_ignored_tokens(self):
|
| 174 |
+
return [0] # for ctc blank
|
| 175 |
+
|
| 176 |
+
|
| 177 |
+
class CTCLabelDecode(BaseRecLabelDecode):
|
| 178 |
+
""" Convert between text-label and text-index """
|
| 179 |
+
|
| 180 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 181 |
+
**kwargs):
|
| 182 |
+
super(CTCLabelDecode, self).__init__(character_dict_path,
|
| 183 |
+
use_space_char)
|
| 184 |
+
|
| 185 |
+
def __call__(self,
|
| 186 |
+
preds,
|
| 187 |
+
label=None,
|
| 188 |
+
return_word_box=False,
|
| 189 |
+
*args,
|
| 190 |
+
**kwargs):
|
| 191 |
+
if isinstance(preds, tuple) or isinstance(preds, list):
|
| 192 |
+
preds = preds[-1]
|
| 193 |
+
if isinstance(preds, paddle.Tensor):
|
| 194 |
+
preds = preds.numpy()
|
| 195 |
+
preds_idx = preds.argmax(axis=2)
|
| 196 |
+
preds_prob = preds.max(axis=2)
|
| 197 |
+
text = self.decode(
|
| 198 |
+
preds_idx,
|
| 199 |
+
preds_prob,
|
| 200 |
+
is_remove_duplicate=True,
|
| 201 |
+
return_word_box=return_word_box)
|
| 202 |
+
if return_word_box:
|
| 203 |
+
for rec_idx, rec in enumerate(text):
|
| 204 |
+
wh_ratio = kwargs['wh_ratio_list'][rec_idx]
|
| 205 |
+
max_wh_ratio = kwargs['max_wh_ratio']
|
| 206 |
+
rec[2][0] = rec[2][0] * (wh_ratio / max_wh_ratio)
|
| 207 |
+
if label is None:
|
| 208 |
+
return text
|
| 209 |
+
label = self.decode(label)
|
| 210 |
+
return text, label
|
| 211 |
+
|
| 212 |
+
def add_special_char(self, dict_character):
|
| 213 |
+
dict_character = ['blank'] + dict_character
|
| 214 |
+
return dict_character
|
| 215 |
+
|
| 216 |
+
|
| 217 |
+
class DistillationCTCLabelDecode(CTCLabelDecode):
|
| 218 |
+
"""
|
| 219 |
+
Convert
|
| 220 |
+
Convert between text-label and text-index
|
| 221 |
+
"""
|
| 222 |
+
|
| 223 |
+
def __init__(self,
|
| 224 |
+
character_dict_path=None,
|
| 225 |
+
use_space_char=False,
|
| 226 |
+
model_name=["student"],
|
| 227 |
+
key=None,
|
| 228 |
+
multi_head=False,
|
| 229 |
+
**kwargs):
|
| 230 |
+
super(DistillationCTCLabelDecode, self).__init__(character_dict_path,
|
| 231 |
+
use_space_char)
|
| 232 |
+
if not isinstance(model_name, list):
|
| 233 |
+
model_name = [model_name]
|
| 234 |
+
self.model_name = model_name
|
| 235 |
+
|
| 236 |
+
self.key = key
|
| 237 |
+
self.multi_head = multi_head
|
| 238 |
+
|
| 239 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 240 |
+
output = dict()
|
| 241 |
+
for name in self.model_name:
|
| 242 |
+
pred = preds[name]
|
| 243 |
+
if self.key is not None:
|
| 244 |
+
pred = pred[self.key]
|
| 245 |
+
if self.multi_head and isinstance(pred, dict):
|
| 246 |
+
pred = pred['ctc']
|
| 247 |
+
output[name] = super().__call__(pred, label=label, *args, **kwargs)
|
| 248 |
+
return output
|
| 249 |
+
|
| 250 |
+
|
| 251 |
+
class AttnLabelDecode(BaseRecLabelDecode):
|
| 252 |
+
""" Convert between text-label and text-index """
|
| 253 |
+
|
| 254 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 255 |
+
**kwargs):
|
| 256 |
+
super(AttnLabelDecode, self).__init__(character_dict_path,
|
| 257 |
+
use_space_char)
|
| 258 |
+
|
| 259 |
+
def add_special_char(self, dict_character):
|
| 260 |
+
self.beg_str = "sos"
|
| 261 |
+
self.end_str = "eos"
|
| 262 |
+
dict_character = dict_character
|
| 263 |
+
dict_character = [self.beg_str] + dict_character + [self.end_str]
|
| 264 |
+
return dict_character
|
| 265 |
+
|
| 266 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 267 |
+
""" convert text-index into text-label. """
|
| 268 |
+
result_list = []
|
| 269 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 270 |
+
[beg_idx, end_idx] = self.get_ignored_tokens()
|
| 271 |
+
batch_size = len(text_index)
|
| 272 |
+
for batch_idx in range(batch_size):
|
| 273 |
+
char_list = []
|
| 274 |
+
conf_list = []
|
| 275 |
+
for idx in range(len(text_index[batch_idx])):
|
| 276 |
+
if text_index[batch_idx][idx] in ignored_tokens:
|
| 277 |
+
continue
|
| 278 |
+
if int(text_index[batch_idx][idx]) == int(end_idx):
|
| 279 |
+
break
|
| 280 |
+
if is_remove_duplicate:
|
| 281 |
+
# only for predict
|
| 282 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 283 |
+
batch_idx][idx]:
|
| 284 |
+
continue
|
| 285 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 286 |
+
idx])])
|
| 287 |
+
if text_prob is not None:
|
| 288 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 289 |
+
else:
|
| 290 |
+
conf_list.append(1)
|
| 291 |
+
text = ''.join(char_list)
|
| 292 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 293 |
+
return result_list
|
| 294 |
+
|
| 295 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 296 |
+
"""
|
| 297 |
+
text = self.decode(text)
|
| 298 |
+
if label is None:
|
| 299 |
+
return text
|
| 300 |
+
else:
|
| 301 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 302 |
+
return text, label
|
| 303 |
+
"""
|
| 304 |
+
if isinstance(preds, paddle.Tensor):
|
| 305 |
+
preds = preds.numpy()
|
| 306 |
+
|
| 307 |
+
preds_idx = preds.argmax(axis=2)
|
| 308 |
+
preds_prob = preds.max(axis=2)
|
| 309 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 310 |
+
if label is None:
|
| 311 |
+
return text
|
| 312 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 313 |
+
return text, label
|
| 314 |
+
|
| 315 |
+
def get_ignored_tokens(self):
|
| 316 |
+
beg_idx = self.get_beg_end_flag_idx("beg")
|
| 317 |
+
end_idx = self.get_beg_end_flag_idx("end")
|
| 318 |
+
return [beg_idx, end_idx]
|
| 319 |
+
|
| 320 |
+
def get_beg_end_flag_idx(self, beg_or_end):
|
| 321 |
+
if beg_or_end == "beg":
|
| 322 |
+
idx = np.array(self.dict[self.beg_str])
|
| 323 |
+
elif beg_or_end == "end":
|
| 324 |
+
idx = np.array(self.dict[self.end_str])
|
| 325 |
+
else:
|
| 326 |
+
assert False, "unsupport type %s in get_beg_end_flag_idx" \
|
| 327 |
+
% beg_or_end
|
| 328 |
+
return idx
|
| 329 |
+
|
| 330 |
+
|
| 331 |
+
class RFLLabelDecode(BaseRecLabelDecode):
|
| 332 |
+
""" Convert between text-label and text-index """
|
| 333 |
+
|
| 334 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 335 |
+
**kwargs):
|
| 336 |
+
super(RFLLabelDecode, self).__init__(character_dict_path,
|
| 337 |
+
use_space_char)
|
| 338 |
+
|
| 339 |
+
def add_special_char(self, dict_character):
|
| 340 |
+
self.beg_str = "sos"
|
| 341 |
+
self.end_str = "eos"
|
| 342 |
+
dict_character = dict_character
|
| 343 |
+
dict_character = [self.beg_str] + dict_character + [self.end_str]
|
| 344 |
+
return dict_character
|
| 345 |
+
|
| 346 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 347 |
+
""" convert text-index into text-label. """
|
| 348 |
+
result_list = []
|
| 349 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 350 |
+
[beg_idx, end_idx] = self.get_ignored_tokens()
|
| 351 |
+
batch_size = len(text_index)
|
| 352 |
+
for batch_idx in range(batch_size):
|
| 353 |
+
char_list = []
|
| 354 |
+
conf_list = []
|
| 355 |
+
for idx in range(len(text_index[batch_idx])):
|
| 356 |
+
if text_index[batch_idx][idx] in ignored_tokens:
|
| 357 |
+
continue
|
| 358 |
+
if int(text_index[batch_idx][idx]) == int(end_idx):
|
| 359 |
+
break
|
| 360 |
+
if is_remove_duplicate:
|
| 361 |
+
# only for predict
|
| 362 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 363 |
+
batch_idx][idx]:
|
| 364 |
+
continue
|
| 365 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 366 |
+
idx])])
|
| 367 |
+
if text_prob is not None:
|
| 368 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 369 |
+
else:
|
| 370 |
+
conf_list.append(1)
|
| 371 |
+
text = ''.join(char_list)
|
| 372 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 373 |
+
return result_list
|
| 374 |
+
|
| 375 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 376 |
+
# if seq_outputs is not None:
|
| 377 |
+
if isinstance(preds, tuple) or isinstance(preds, list):
|
| 378 |
+
cnt_outputs, seq_outputs = preds
|
| 379 |
+
if isinstance(seq_outputs, paddle.Tensor):
|
| 380 |
+
seq_outputs = seq_outputs.numpy()
|
| 381 |
+
preds_idx = seq_outputs.argmax(axis=2)
|
| 382 |
+
preds_prob = seq_outputs.max(axis=2)
|
| 383 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 384 |
+
|
| 385 |
+
if label is None:
|
| 386 |
+
return text
|
| 387 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 388 |
+
return text, label
|
| 389 |
+
|
| 390 |
+
else:
|
| 391 |
+
cnt_outputs = preds
|
| 392 |
+
if isinstance(cnt_outputs, paddle.Tensor):
|
| 393 |
+
cnt_outputs = cnt_outputs.numpy()
|
| 394 |
+
cnt_length = []
|
| 395 |
+
for lens in cnt_outputs:
|
| 396 |
+
length = round(np.sum(lens))
|
| 397 |
+
cnt_length.append(length)
|
| 398 |
+
if label is None:
|
| 399 |
+
return cnt_length
|
| 400 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 401 |
+
length = [len(res[0]) for res in label]
|
| 402 |
+
return cnt_length, length
|
| 403 |
+
|
| 404 |
+
def get_ignored_tokens(self):
|
| 405 |
+
beg_idx = self.get_beg_end_flag_idx("beg")
|
| 406 |
+
end_idx = self.get_beg_end_flag_idx("end")
|
| 407 |
+
return [beg_idx, end_idx]
|
| 408 |
+
|
| 409 |
+
def get_beg_end_flag_idx(self, beg_or_end):
|
| 410 |
+
if beg_or_end == "beg":
|
| 411 |
+
idx = np.array(self.dict[self.beg_str])
|
| 412 |
+
elif beg_or_end == "end":
|
| 413 |
+
idx = np.array(self.dict[self.end_str])
|
| 414 |
+
else:
|
| 415 |
+
assert False, "unsupport type %s in get_beg_end_flag_idx" \
|
| 416 |
+
% beg_or_end
|
| 417 |
+
return idx
|
| 418 |
+
|
| 419 |
+
|
| 420 |
+
class SEEDLabelDecode(BaseRecLabelDecode):
|
| 421 |
+
""" Convert between text-label and text-index """
|
| 422 |
+
|
| 423 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 424 |
+
**kwargs):
|
| 425 |
+
super(SEEDLabelDecode, self).__init__(character_dict_path,
|
| 426 |
+
use_space_char)
|
| 427 |
+
|
| 428 |
+
def add_special_char(self, dict_character):
|
| 429 |
+
self.padding_str = "padding"
|
| 430 |
+
self.end_str = "eos"
|
| 431 |
+
self.unknown = "unknown"
|
| 432 |
+
dict_character = dict_character + [
|
| 433 |
+
self.end_str, self.padding_str, self.unknown
|
| 434 |
+
]
|
| 435 |
+
return dict_character
|
| 436 |
+
|
| 437 |
+
def get_ignored_tokens(self):
|
| 438 |
+
end_idx = self.get_beg_end_flag_idx("eos")
|
| 439 |
+
return [end_idx]
|
| 440 |
+
|
| 441 |
+
def get_beg_end_flag_idx(self, beg_or_end):
|
| 442 |
+
if beg_or_end == "sos":
|
| 443 |
+
idx = np.array(self.dict[self.beg_str])
|
| 444 |
+
elif beg_or_end == "eos":
|
| 445 |
+
idx = np.array(self.dict[self.end_str])
|
| 446 |
+
else:
|
| 447 |
+
assert False, "unsupport type %s in get_beg_end_flag_idx" % beg_or_end
|
| 448 |
+
return idx
|
| 449 |
+
|
| 450 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 451 |
+
""" convert text-index into text-label. """
|
| 452 |
+
result_list = []
|
| 453 |
+
[end_idx] = self.get_ignored_tokens()
|
| 454 |
+
batch_size = len(text_index)
|
| 455 |
+
for batch_idx in range(batch_size):
|
| 456 |
+
char_list = []
|
| 457 |
+
conf_list = []
|
| 458 |
+
for idx in range(len(text_index[batch_idx])):
|
| 459 |
+
if int(text_index[batch_idx][idx]) == int(end_idx):
|
| 460 |
+
break
|
| 461 |
+
if is_remove_duplicate:
|
| 462 |
+
# only for predict
|
| 463 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 464 |
+
batch_idx][idx]:
|
| 465 |
+
continue
|
| 466 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 467 |
+
idx])])
|
| 468 |
+
if text_prob is not None:
|
| 469 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 470 |
+
else:
|
| 471 |
+
conf_list.append(1)
|
| 472 |
+
text = ''.join(char_list)
|
| 473 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 474 |
+
return result_list
|
| 475 |
+
|
| 476 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 477 |
+
"""
|
| 478 |
+
text = self.decode(text)
|
| 479 |
+
if label is None:
|
| 480 |
+
return text
|
| 481 |
+
else:
|
| 482 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 483 |
+
return text, label
|
| 484 |
+
"""
|
| 485 |
+
preds_idx = preds["rec_pred"]
|
| 486 |
+
if isinstance(preds_idx, paddle.Tensor):
|
| 487 |
+
preds_idx = preds_idx.numpy()
|
| 488 |
+
if "rec_pred_scores" in preds:
|
| 489 |
+
preds_idx = preds["rec_pred"]
|
| 490 |
+
preds_prob = preds["rec_pred_scores"]
|
| 491 |
+
else:
|
| 492 |
+
preds_idx = preds["rec_pred"].argmax(axis=2)
|
| 493 |
+
preds_prob = preds["rec_pred"].max(axis=2)
|
| 494 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 495 |
+
if label is None:
|
| 496 |
+
return text
|
| 497 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 498 |
+
return text, label
|
| 499 |
+
|
| 500 |
+
|
| 501 |
+
class SRNLabelDecode(BaseRecLabelDecode):
|
| 502 |
+
""" Convert between text-label and text-index """
|
| 503 |
+
|
| 504 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 505 |
+
**kwargs):
|
| 506 |
+
super(SRNLabelDecode, self).__init__(character_dict_path,
|
| 507 |
+
use_space_char)
|
| 508 |
+
self.max_text_length = kwargs.get('max_text_length', 25)
|
| 509 |
+
|
| 510 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 511 |
+
pred = preds['predict']
|
| 512 |
+
char_num = len(self.character_str) + 2
|
| 513 |
+
if isinstance(pred, paddle.Tensor):
|
| 514 |
+
pred = pred.numpy()
|
| 515 |
+
pred = np.reshape(pred, [-1, char_num])
|
| 516 |
+
|
| 517 |
+
preds_idx = np.argmax(pred, axis=1)
|
| 518 |
+
preds_prob = np.max(pred, axis=1)
|
| 519 |
+
|
| 520 |
+
preds_idx = np.reshape(preds_idx, [-1, self.max_text_length])
|
| 521 |
+
|
| 522 |
+
preds_prob = np.reshape(preds_prob, [-1, self.max_text_length])
|
| 523 |
+
|
| 524 |
+
text = self.decode(preds_idx, preds_prob)
|
| 525 |
+
|
| 526 |
+
if label is None:
|
| 527 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 528 |
+
return text
|
| 529 |
+
label = self.decode(label)
|
| 530 |
+
return text, label
|
| 531 |
+
|
| 532 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 533 |
+
""" convert text-index into text-label. """
|
| 534 |
+
result_list = []
|
| 535 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 536 |
+
batch_size = len(text_index)
|
| 537 |
+
|
| 538 |
+
for batch_idx in range(batch_size):
|
| 539 |
+
char_list = []
|
| 540 |
+
conf_list = []
|
| 541 |
+
for idx in range(len(text_index[batch_idx])):
|
| 542 |
+
if text_index[batch_idx][idx] in ignored_tokens:
|
| 543 |
+
continue
|
| 544 |
+
if is_remove_duplicate:
|
| 545 |
+
# only for predict
|
| 546 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 547 |
+
batch_idx][idx]:
|
| 548 |
+
continue
|
| 549 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 550 |
+
idx])])
|
| 551 |
+
if text_prob is not None:
|
| 552 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 553 |
+
else:
|
| 554 |
+
conf_list.append(1)
|
| 555 |
+
|
| 556 |
+
text = ''.join(char_list)
|
| 557 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 558 |
+
return result_list
|
| 559 |
+
|
| 560 |
+
def add_special_char(self, dict_character):
|
| 561 |
+
dict_character = dict_character + [self.beg_str, self.end_str]
|
| 562 |
+
return dict_character
|
| 563 |
+
|
| 564 |
+
def get_ignored_tokens(self):
|
| 565 |
+
beg_idx = self.get_beg_end_flag_idx("beg")
|
| 566 |
+
end_idx = self.get_beg_end_flag_idx("end")
|
| 567 |
+
return [beg_idx, end_idx]
|
| 568 |
+
|
| 569 |
+
def get_beg_end_flag_idx(self, beg_or_end):
|
| 570 |
+
if beg_or_end == "beg":
|
| 571 |
+
idx = np.array(self.dict[self.beg_str])
|
| 572 |
+
elif beg_or_end == "end":
|
| 573 |
+
idx = np.array(self.dict[self.end_str])
|
| 574 |
+
else:
|
| 575 |
+
assert False, "unsupport type %s in get_beg_end_flag_idx" \
|
| 576 |
+
% beg_or_end
|
| 577 |
+
return idx
|
| 578 |
+
|
| 579 |
+
|
| 580 |
+
class ParseQLabelDecode(BaseRecLabelDecode):
|
| 581 |
+
""" Convert between text-label and text-index """
|
| 582 |
+
BOS = '[B]'
|
| 583 |
+
EOS = '[E]'
|
| 584 |
+
PAD = '[P]'
|
| 585 |
+
|
| 586 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 587 |
+
**kwargs):
|
| 588 |
+
super(ParseQLabelDecode, self).__init__(character_dict_path,
|
| 589 |
+
use_space_char)
|
| 590 |
+
self.max_text_length = kwargs.get('max_text_length', 25)
|
| 591 |
+
|
| 592 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 593 |
+
if isinstance(preds, dict):
|
| 594 |
+
pred = preds['predict']
|
| 595 |
+
else:
|
| 596 |
+
pred = preds
|
| 597 |
+
|
| 598 |
+
char_num = len(
|
| 599 |
+
self.character_str
|
| 600 |
+
) + 1 # We don't predict <bos> nor <pad>, with only addition <eos>
|
| 601 |
+
if isinstance(pred, paddle.Tensor):
|
| 602 |
+
pred = pred.numpy()
|
| 603 |
+
B, L = pred.shape[:2]
|
| 604 |
+
pred = np.reshape(pred, [-1, char_num])
|
| 605 |
+
|
| 606 |
+
preds_idx = np.argmax(pred, axis=1)
|
| 607 |
+
preds_prob = np.max(pred, axis=1)
|
| 608 |
+
|
| 609 |
+
preds_idx = np.reshape(preds_idx, [B, L])
|
| 610 |
+
preds_prob = np.reshape(preds_prob, [B, L])
|
| 611 |
+
|
| 612 |
+
if label is None:
|
| 613 |
+
text = self.decode(preds_idx, preds_prob, raw=False)
|
| 614 |
+
return text
|
| 615 |
+
|
| 616 |
+
text = self.decode(preds_idx, preds_prob, raw=False)
|
| 617 |
+
label = self.decode(label, None, False)
|
| 618 |
+
|
| 619 |
+
return text, label
|
| 620 |
+
|
| 621 |
+
def decode(self, text_index, text_prob=None, raw=False):
|
| 622 |
+
""" convert text-index into text-label. """
|
| 623 |
+
result_list = []
|
| 624 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 625 |
+
batch_size = len(text_index)
|
| 626 |
+
|
| 627 |
+
for batch_idx in range(batch_size):
|
| 628 |
+
char_list = []
|
| 629 |
+
conf_list = []
|
| 630 |
+
|
| 631 |
+
index = text_index[batch_idx, :]
|
| 632 |
+
prob = None
|
| 633 |
+
if text_prob is not None:
|
| 634 |
+
prob = text_prob[batch_idx, :]
|
| 635 |
+
|
| 636 |
+
if not raw:
|
| 637 |
+
index, prob = self._filter(index, prob)
|
| 638 |
+
|
| 639 |
+
for idx in range(len(index)):
|
| 640 |
+
if index[idx] in ignored_tokens:
|
| 641 |
+
continue
|
| 642 |
+
char_list.append(self.character[int(index[idx])])
|
| 643 |
+
if text_prob is not None:
|
| 644 |
+
conf_list.append(prob[idx])
|
| 645 |
+
else:
|
| 646 |
+
conf_list.append(1)
|
| 647 |
+
|
| 648 |
+
text = ''.join(char_list)
|
| 649 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 650 |
+
|
| 651 |
+
return result_list
|
| 652 |
+
|
| 653 |
+
def add_special_char(self, dict_character):
|
| 654 |
+
dict_character = [self.EOS] + dict_character + [self.BOS, self.PAD]
|
| 655 |
+
return dict_character
|
| 656 |
+
|
| 657 |
+
def _filter(self, ids, probs=None):
|
| 658 |
+
ids = ids.tolist()
|
| 659 |
+
try:
|
| 660 |
+
eos_idx = ids.index(self.dict[self.EOS])
|
| 661 |
+
except ValueError:
|
| 662 |
+
eos_idx = len(ids) # Nothing to truncate.
|
| 663 |
+
# Truncate after EOS
|
| 664 |
+
ids = ids[:eos_idx]
|
| 665 |
+
if probs is not None:
|
| 666 |
+
probs = probs[:eos_idx +
|
| 667 |
+
1] # but include prob. for EOS (if it exists)
|
| 668 |
+
return ids, probs
|
| 669 |
+
|
| 670 |
+
def get_ignored_tokens(self):
|
| 671 |
+
return [self.dict[self.BOS], self.dict[self.EOS], self.dict[self.PAD]]
|
| 672 |
+
|
| 673 |
+
|
| 674 |
+
class SARLabelDecode(BaseRecLabelDecode):
|
| 675 |
+
""" Convert between text-label and text-index """
|
| 676 |
+
|
| 677 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 678 |
+
**kwargs):
|
| 679 |
+
super(SARLabelDecode, self).__init__(character_dict_path,
|
| 680 |
+
use_space_char)
|
| 681 |
+
|
| 682 |
+
self.rm_symbol = kwargs.get('rm_symbol', False)
|
| 683 |
+
|
| 684 |
+
def add_special_char(self, dict_character):
|
| 685 |
+
beg_end_str = "<BOS/EOS>"
|
| 686 |
+
unknown_str = "<UKN>"
|
| 687 |
+
padding_str = "<PAD>"
|
| 688 |
+
dict_character = dict_character + [unknown_str]
|
| 689 |
+
self.unknown_idx = len(dict_character) - 1
|
| 690 |
+
dict_character = dict_character + [beg_end_str]
|
| 691 |
+
self.start_idx = len(dict_character) - 1
|
| 692 |
+
self.end_idx = len(dict_character) - 1
|
| 693 |
+
dict_character = dict_character + [padding_str]
|
| 694 |
+
self.padding_idx = len(dict_character) - 1
|
| 695 |
+
return dict_character
|
| 696 |
+
|
| 697 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 698 |
+
""" convert text-index into text-label. """
|
| 699 |
+
result_list = []
|
| 700 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 701 |
+
|
| 702 |
+
batch_size = len(text_index)
|
| 703 |
+
for batch_idx in range(batch_size):
|
| 704 |
+
char_list = []
|
| 705 |
+
conf_list = []
|
| 706 |
+
for idx in range(len(text_index[batch_idx])):
|
| 707 |
+
if text_index[batch_idx][idx] in ignored_tokens:
|
| 708 |
+
continue
|
| 709 |
+
if int(text_index[batch_idx][idx]) == int(self.end_idx):
|
| 710 |
+
if text_prob is None and idx == 0:
|
| 711 |
+
continue
|
| 712 |
+
else:
|
| 713 |
+
break
|
| 714 |
+
if is_remove_duplicate:
|
| 715 |
+
# only for predict
|
| 716 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 717 |
+
batch_idx][idx]:
|
| 718 |
+
continue
|
| 719 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 720 |
+
idx])])
|
| 721 |
+
if text_prob is not None:
|
| 722 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 723 |
+
else:
|
| 724 |
+
conf_list.append(1)
|
| 725 |
+
text = ''.join(char_list)
|
| 726 |
+
if self.rm_symbol:
|
| 727 |
+
comp = re.compile('[^A-Z^a-z^0-9^\u4e00-\u9fa5]')
|
| 728 |
+
text = text.lower()
|
| 729 |
+
text = comp.sub('', text)
|
| 730 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 731 |
+
return result_list
|
| 732 |
+
|
| 733 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 734 |
+
if isinstance(preds, paddle.Tensor):
|
| 735 |
+
preds = preds.numpy()
|
| 736 |
+
preds_idx = preds.argmax(axis=2)
|
| 737 |
+
preds_prob = preds.max(axis=2)
|
| 738 |
+
|
| 739 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 740 |
+
|
| 741 |
+
if label is None:
|
| 742 |
+
return text
|
| 743 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 744 |
+
return text, label
|
| 745 |
+
|
| 746 |
+
def get_ignored_tokens(self):
|
| 747 |
+
return [self.padding_idx]
|
| 748 |
+
|
| 749 |
+
|
| 750 |
+
class SATRNLabelDecode(BaseRecLabelDecode):
|
| 751 |
+
""" Convert between text-label and text-index """
|
| 752 |
+
|
| 753 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 754 |
+
**kwargs):
|
| 755 |
+
super(SATRNLabelDecode, self).__init__(character_dict_path,
|
| 756 |
+
use_space_char)
|
| 757 |
+
|
| 758 |
+
self.rm_symbol = kwargs.get('rm_symbol', False)
|
| 759 |
+
|
| 760 |
+
def add_special_char(self, dict_character):
|
| 761 |
+
beg_end_str = "<BOS/EOS>"
|
| 762 |
+
unknown_str = "<UKN>"
|
| 763 |
+
padding_str = "<PAD>"
|
| 764 |
+
dict_character = dict_character + [unknown_str]
|
| 765 |
+
self.unknown_idx = len(dict_character) - 1
|
| 766 |
+
dict_character = dict_character + [beg_end_str]
|
| 767 |
+
self.start_idx = len(dict_character) - 1
|
| 768 |
+
self.end_idx = len(dict_character) - 1
|
| 769 |
+
dict_character = dict_character + [padding_str]
|
| 770 |
+
self.padding_idx = len(dict_character) - 1
|
| 771 |
+
return dict_character
|
| 772 |
+
|
| 773 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 774 |
+
""" convert text-index into text-label. """
|
| 775 |
+
result_list = []
|
| 776 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 777 |
+
|
| 778 |
+
batch_size = len(text_index)
|
| 779 |
+
for batch_idx in range(batch_size):
|
| 780 |
+
char_list = []
|
| 781 |
+
conf_list = []
|
| 782 |
+
for idx in range(len(text_index[batch_idx])):
|
| 783 |
+
if text_index[batch_idx][idx] in ignored_tokens:
|
| 784 |
+
continue
|
| 785 |
+
if int(text_index[batch_idx][idx]) == int(self.end_idx):
|
| 786 |
+
if text_prob is None and idx == 0:
|
| 787 |
+
continue
|
| 788 |
+
else:
|
| 789 |
+
break
|
| 790 |
+
if is_remove_duplicate:
|
| 791 |
+
# only for predict
|
| 792 |
+
if idx > 0 and text_index[batch_idx][idx - 1] == text_index[
|
| 793 |
+
batch_idx][idx]:
|
| 794 |
+
continue
|
| 795 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 796 |
+
idx])])
|
| 797 |
+
if text_prob is not None:
|
| 798 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 799 |
+
else:
|
| 800 |
+
conf_list.append(1)
|
| 801 |
+
text = ''.join(char_list)
|
| 802 |
+
if self.rm_symbol:
|
| 803 |
+
comp = re.compile('[^A-Z^a-z^0-9^\u4e00-\u9fa5]')
|
| 804 |
+
text = text.lower()
|
| 805 |
+
text = comp.sub('', text)
|
| 806 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 807 |
+
return result_list
|
| 808 |
+
|
| 809 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 810 |
+
if isinstance(preds, paddle.Tensor):
|
| 811 |
+
preds = preds.numpy()
|
| 812 |
+
preds_idx = preds.argmax(axis=2)
|
| 813 |
+
preds_prob = preds.max(axis=2)
|
| 814 |
+
|
| 815 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 816 |
+
|
| 817 |
+
if label is None:
|
| 818 |
+
return text
|
| 819 |
+
label = self.decode(label, is_remove_duplicate=False)
|
| 820 |
+
return text, label
|
| 821 |
+
|
| 822 |
+
def get_ignored_tokens(self):
|
| 823 |
+
return [self.padding_idx]
|
| 824 |
+
|
| 825 |
+
|
| 826 |
+
class DistillationSARLabelDecode(SARLabelDecode):
|
| 827 |
+
"""
|
| 828 |
+
Convert
|
| 829 |
+
Convert between text-label and text-index
|
| 830 |
+
"""
|
| 831 |
+
|
| 832 |
+
def __init__(self,
|
| 833 |
+
character_dict_path=None,
|
| 834 |
+
use_space_char=False,
|
| 835 |
+
model_name=["student"],
|
| 836 |
+
key=None,
|
| 837 |
+
multi_head=False,
|
| 838 |
+
**kwargs):
|
| 839 |
+
super(DistillationSARLabelDecode, self).__init__(character_dict_path,
|
| 840 |
+
use_space_char)
|
| 841 |
+
if not isinstance(model_name, list):
|
| 842 |
+
model_name = [model_name]
|
| 843 |
+
self.model_name = model_name
|
| 844 |
+
|
| 845 |
+
self.key = key
|
| 846 |
+
self.multi_head = multi_head
|
| 847 |
+
|
| 848 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 849 |
+
output = dict()
|
| 850 |
+
for name in self.model_name:
|
| 851 |
+
pred = preds[name]
|
| 852 |
+
if self.key is not None:
|
| 853 |
+
pred = pred[self.key]
|
| 854 |
+
if self.multi_head and isinstance(pred, dict):
|
| 855 |
+
pred = pred['sar']
|
| 856 |
+
output[name] = super().__call__(pred, label=label, *args, **kwargs)
|
| 857 |
+
return output
|
| 858 |
+
|
| 859 |
+
|
| 860 |
+
class PRENLabelDecode(BaseRecLabelDecode):
|
| 861 |
+
""" Convert between text-label and text-index """
|
| 862 |
+
|
| 863 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 864 |
+
**kwargs):
|
| 865 |
+
super(PRENLabelDecode, self).__init__(character_dict_path,
|
| 866 |
+
use_space_char)
|
| 867 |
+
|
| 868 |
+
def add_special_char(self, dict_character):
|
| 869 |
+
padding_str = '<PAD>' # 0
|
| 870 |
+
end_str = '<EOS>' # 1
|
| 871 |
+
unknown_str = '<UNK>' # 2
|
| 872 |
+
|
| 873 |
+
dict_character = [padding_str, end_str, unknown_str] + dict_character
|
| 874 |
+
self.padding_idx = 0
|
| 875 |
+
self.end_idx = 1
|
| 876 |
+
self.unknown_idx = 2
|
| 877 |
+
|
| 878 |
+
return dict_character
|
| 879 |
+
|
| 880 |
+
def decode(self, text_index, text_prob=None):
|
| 881 |
+
""" convert text-index into text-label. """
|
| 882 |
+
result_list = []
|
| 883 |
+
batch_size = len(text_index)
|
| 884 |
+
|
| 885 |
+
for batch_idx in range(batch_size):
|
| 886 |
+
char_list = []
|
| 887 |
+
conf_list = []
|
| 888 |
+
for idx in range(len(text_index[batch_idx])):
|
| 889 |
+
if text_index[batch_idx][idx] == self.end_idx:
|
| 890 |
+
break
|
| 891 |
+
if text_index[batch_idx][idx] in \
|
| 892 |
+
[self.padding_idx, self.unknown_idx]:
|
| 893 |
+
continue
|
| 894 |
+
char_list.append(self.character[int(text_index[batch_idx][
|
| 895 |
+
idx])])
|
| 896 |
+
if text_prob is not None:
|
| 897 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 898 |
+
else:
|
| 899 |
+
conf_list.append(1)
|
| 900 |
+
|
| 901 |
+
text = ''.join(char_list)
|
| 902 |
+
if len(text) > 0:
|
| 903 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 904 |
+
else:
|
| 905 |
+
# here confidence of empty recog result is 1
|
| 906 |
+
result_list.append(('', 1))
|
| 907 |
+
return result_list
|
| 908 |
+
|
| 909 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 910 |
+
if isinstance(preds, paddle.Tensor):
|
| 911 |
+
preds = preds.numpy()
|
| 912 |
+
preds_idx = preds.argmax(axis=2)
|
| 913 |
+
preds_prob = preds.max(axis=2)
|
| 914 |
+
text = self.decode(preds_idx, preds_prob)
|
| 915 |
+
if label is None:
|
| 916 |
+
return text
|
| 917 |
+
label = self.decode(label)
|
| 918 |
+
return text, label
|
| 919 |
+
|
| 920 |
+
|
| 921 |
+
class NRTRLabelDecode(BaseRecLabelDecode):
|
| 922 |
+
""" Convert between text-label and text-index """
|
| 923 |
+
|
| 924 |
+
def __init__(self, character_dict_path=None, use_space_char=True, **kwargs):
|
| 925 |
+
super(NRTRLabelDecode, self).__init__(character_dict_path,
|
| 926 |
+
use_space_char)
|
| 927 |
+
|
| 928 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 929 |
+
|
| 930 |
+
if len(preds) == 2:
|
| 931 |
+
preds_id = preds[0]
|
| 932 |
+
preds_prob = preds[1]
|
| 933 |
+
if isinstance(preds_id, paddle.Tensor):
|
| 934 |
+
preds_id = preds_id.numpy()
|
| 935 |
+
if isinstance(preds_prob, paddle.Tensor):
|
| 936 |
+
preds_prob = preds_prob.numpy()
|
| 937 |
+
if preds_id[0][0] == 2:
|
| 938 |
+
preds_idx = preds_id[:, 1:]
|
| 939 |
+
preds_prob = preds_prob[:, 1:]
|
| 940 |
+
else:
|
| 941 |
+
preds_idx = preds_id
|
| 942 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 943 |
+
if label is None:
|
| 944 |
+
return text
|
| 945 |
+
label = self.decode(label[:, 1:])
|
| 946 |
+
else:
|
| 947 |
+
if isinstance(preds, paddle.Tensor):
|
| 948 |
+
preds = preds.numpy()
|
| 949 |
+
preds_idx = preds.argmax(axis=2)
|
| 950 |
+
preds_prob = preds.max(axis=2)
|
| 951 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 952 |
+
if label is None:
|
| 953 |
+
return text
|
| 954 |
+
label = self.decode(label[:, 1:])
|
| 955 |
+
return text, label
|
| 956 |
+
|
| 957 |
+
def add_special_char(self, dict_character):
|
| 958 |
+
dict_character = ['blank', '<unk>', '<s>', '</s>'] + dict_character
|
| 959 |
+
return dict_character
|
| 960 |
+
|
| 961 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 962 |
+
""" convert text-index into text-label. """
|
| 963 |
+
result_list = []
|
| 964 |
+
batch_size = len(text_index)
|
| 965 |
+
for batch_idx in range(batch_size):
|
| 966 |
+
char_list = []
|
| 967 |
+
conf_list = []
|
| 968 |
+
for idx in range(len(text_index[batch_idx])):
|
| 969 |
+
try:
|
| 970 |
+
char_idx = self.character[int(text_index[batch_idx][idx])]
|
| 971 |
+
except:
|
| 972 |
+
continue
|
| 973 |
+
if char_idx == '</s>': # end
|
| 974 |
+
break
|
| 975 |
+
char_list.append(char_idx)
|
| 976 |
+
if text_prob is not None:
|
| 977 |
+
conf_list.append(text_prob[batch_idx][idx])
|
| 978 |
+
else:
|
| 979 |
+
conf_list.append(1)
|
| 980 |
+
text = ''.join(char_list)
|
| 981 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 982 |
+
return result_list
|
| 983 |
+
|
| 984 |
+
|
| 985 |
+
class ViTSTRLabelDecode(NRTRLabelDecode):
|
| 986 |
+
""" Convert between text-label and text-index """
|
| 987 |
+
|
| 988 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 989 |
+
**kwargs):
|
| 990 |
+
super(ViTSTRLabelDecode, self).__init__(character_dict_path,
|
| 991 |
+
use_space_char)
|
| 992 |
+
|
| 993 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 994 |
+
if isinstance(preds, paddle.Tensor):
|
| 995 |
+
preds = preds[:, 1:].numpy()
|
| 996 |
+
else:
|
| 997 |
+
preds = preds[:, 1:]
|
| 998 |
+
preds_idx = preds.argmax(axis=2)
|
| 999 |
+
preds_prob = preds.max(axis=2)
|
| 1000 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 1001 |
+
if label is None:
|
| 1002 |
+
return text
|
| 1003 |
+
label = self.decode(label[:, 1:])
|
| 1004 |
+
return text, label
|
| 1005 |
+
|
| 1006 |
+
def add_special_char(self, dict_character):
|
| 1007 |
+
dict_character = ['<s>', '</s>'] + dict_character
|
| 1008 |
+
return dict_character
|
| 1009 |
+
|
| 1010 |
+
|
| 1011 |
+
class ABINetLabelDecode(NRTRLabelDecode):
|
| 1012 |
+
""" Convert between text-label and text-index """
|
| 1013 |
+
|
| 1014 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 1015 |
+
**kwargs):
|
| 1016 |
+
super(ABINetLabelDecode, self).__init__(character_dict_path,
|
| 1017 |
+
use_space_char)
|
| 1018 |
+
|
| 1019 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 1020 |
+
if isinstance(preds, dict):
|
| 1021 |
+
preds = preds['align'][-1].numpy()
|
| 1022 |
+
elif isinstance(preds, paddle.Tensor):
|
| 1023 |
+
preds = preds.numpy()
|
| 1024 |
+
else:
|
| 1025 |
+
preds = preds
|
| 1026 |
+
|
| 1027 |
+
preds_idx = preds.argmax(axis=2)
|
| 1028 |
+
preds_prob = preds.max(axis=2)
|
| 1029 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 1030 |
+
if label is None:
|
| 1031 |
+
return text
|
| 1032 |
+
label = self.decode(label)
|
| 1033 |
+
return text, label
|
| 1034 |
+
|
| 1035 |
+
def add_special_char(self, dict_character):
|
| 1036 |
+
dict_character = ['</s>'] + dict_character
|
| 1037 |
+
return dict_character
|
| 1038 |
+
|
| 1039 |
+
|
| 1040 |
+
class SPINLabelDecode(AttnLabelDecode):
|
| 1041 |
+
""" Convert between text-label and text-index """
|
| 1042 |
+
|
| 1043 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 1044 |
+
**kwargs):
|
| 1045 |
+
super(SPINLabelDecode, self).__init__(character_dict_path,
|
| 1046 |
+
use_space_char)
|
| 1047 |
+
|
| 1048 |
+
def add_special_char(self, dict_character):
|
| 1049 |
+
self.beg_str = "sos"
|
| 1050 |
+
self.end_str = "eos"
|
| 1051 |
+
dict_character = dict_character
|
| 1052 |
+
dict_character = [self.beg_str] + [self.end_str] + dict_character
|
| 1053 |
+
return dict_character
|
| 1054 |
+
|
| 1055 |
+
|
| 1056 |
+
class VLLabelDecode(BaseRecLabelDecode):
|
| 1057 |
+
""" Convert between text-label and text-index """
|
| 1058 |
+
|
| 1059 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 1060 |
+
**kwargs):
|
| 1061 |
+
super(VLLabelDecode, self).__init__(character_dict_path, use_space_char)
|
| 1062 |
+
self.max_text_length = kwargs.get('max_text_length', 25)
|
| 1063 |
+
self.nclass = len(self.character) + 1
|
| 1064 |
+
|
| 1065 |
+
def decode(self, text_index, text_prob=None, is_remove_duplicate=False):
|
| 1066 |
+
""" convert text-index into text-label. """
|
| 1067 |
+
result_list = []
|
| 1068 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 1069 |
+
batch_size = len(text_index)
|
| 1070 |
+
for batch_idx in range(batch_size):
|
| 1071 |
+
selection = np.ones(len(text_index[batch_idx]), dtype=bool)
|
| 1072 |
+
if is_remove_duplicate:
|
| 1073 |
+
selection[1:] = text_index[batch_idx][1:] != text_index[
|
| 1074 |
+
batch_idx][:-1]
|
| 1075 |
+
for ignored_token in ignored_tokens:
|
| 1076 |
+
selection &= text_index[batch_idx] != ignored_token
|
| 1077 |
+
|
| 1078 |
+
char_list = [
|
| 1079 |
+
self.character[text_id - 1]
|
| 1080 |
+
for text_id in text_index[batch_idx][selection]
|
| 1081 |
+
]
|
| 1082 |
+
if text_prob is not None:
|
| 1083 |
+
conf_list = text_prob[batch_idx][selection]
|
| 1084 |
+
else:
|
| 1085 |
+
conf_list = [1] * len(selection)
|
| 1086 |
+
if len(conf_list) == 0:
|
| 1087 |
+
conf_list = [0]
|
| 1088 |
+
|
| 1089 |
+
text = ''.join(char_list)
|
| 1090 |
+
result_list.append((text, np.mean(conf_list).tolist()))
|
| 1091 |
+
return result_list
|
| 1092 |
+
|
| 1093 |
+
def __call__(self, preds, label=None, length=None, *args, **kwargs):
|
| 1094 |
+
if len(preds) == 2: # eval mode
|
| 1095 |
+
text_pre, x = preds
|
| 1096 |
+
b = text_pre.shape[1]
|
| 1097 |
+
lenText = self.max_text_length
|
| 1098 |
+
nsteps = self.max_text_length
|
| 1099 |
+
|
| 1100 |
+
if not isinstance(text_pre, paddle.Tensor):
|
| 1101 |
+
text_pre = paddle.to_tensor(text_pre, dtype='float32')
|
| 1102 |
+
|
| 1103 |
+
out_res = paddle.zeros(
|
| 1104 |
+
shape=[lenText, b, self.nclass], dtype=x.dtype)
|
| 1105 |
+
out_length = paddle.zeros(shape=[b], dtype=x.dtype)
|
| 1106 |
+
now_step = 0
|
| 1107 |
+
for _ in range(nsteps):
|
| 1108 |
+
if 0 in out_length and now_step < nsteps:
|
| 1109 |
+
tmp_result = text_pre[now_step, :, :]
|
| 1110 |
+
out_res[now_step] = tmp_result
|
| 1111 |
+
tmp_result = tmp_result.topk(1)[1].squeeze(axis=1)
|
| 1112 |
+
for j in range(b):
|
| 1113 |
+
if out_length[j] == 0 and tmp_result[j] == 0:
|
| 1114 |
+
out_length[j] = now_step + 1
|
| 1115 |
+
now_step += 1
|
| 1116 |
+
for j in range(0, b):
|
| 1117 |
+
if int(out_length[j]) == 0:
|
| 1118 |
+
out_length[j] = nsteps
|
| 1119 |
+
start = 0
|
| 1120 |
+
output = paddle.zeros(
|
| 1121 |
+
shape=[int(out_length.sum()), self.nclass], dtype=x.dtype)
|
| 1122 |
+
for i in range(0, b):
|
| 1123 |
+
cur_length = int(out_length[i])
|
| 1124 |
+
output[start:start + cur_length] = out_res[0:cur_length, i, :]
|
| 1125 |
+
start += cur_length
|
| 1126 |
+
net_out = output
|
| 1127 |
+
length = out_length
|
| 1128 |
+
|
| 1129 |
+
else: # train mode
|
| 1130 |
+
net_out = preds[0]
|
| 1131 |
+
length = length
|
| 1132 |
+
net_out = paddle.concat([t[:l] for t, l in zip(net_out, length)])
|
| 1133 |
+
text = []
|
| 1134 |
+
if not isinstance(net_out, paddle.Tensor):
|
| 1135 |
+
net_out = paddle.to_tensor(net_out, dtype='float32')
|
| 1136 |
+
net_out = F.softmax(net_out, axis=1)
|
| 1137 |
+
for i in range(0, length.shape[0]):
|
| 1138 |
+
if i == 0:
|
| 1139 |
+
start_idx = 0
|
| 1140 |
+
end_idx = int(length[i])
|
| 1141 |
+
else:
|
| 1142 |
+
start_idx = int(length[:i].sum())
|
| 1143 |
+
end_idx = int(length[:i].sum() + length[i])
|
| 1144 |
+
preds_idx = net_out[start_idx:end_idx].topk(1)[1][:, 0].tolist()
|
| 1145 |
+
preds_text = ''.join([
|
| 1146 |
+
self.character[idx - 1]
|
| 1147 |
+
if idx > 0 and idx <= len(self.character) else ''
|
| 1148 |
+
for idx in preds_idx
|
| 1149 |
+
])
|
| 1150 |
+
preds_prob = net_out[start_idx:end_idx].topk(1)[0][:, 0]
|
| 1151 |
+
preds_prob = paddle.exp(
|
| 1152 |
+
paddle.log(preds_prob).sum() / (preds_prob.shape[0] + 1e-6))
|
| 1153 |
+
text.append((preds_text, float(preds_prob)))
|
| 1154 |
+
if label is None:
|
| 1155 |
+
return text
|
| 1156 |
+
label = self.decode(label)
|
| 1157 |
+
return text, label
|
| 1158 |
+
|
| 1159 |
+
|
| 1160 |
+
class CANLabelDecode(BaseRecLabelDecode):
|
| 1161 |
+
""" Convert between latex-symbol and symbol-index """
|
| 1162 |
+
|
| 1163 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 1164 |
+
**kwargs):
|
| 1165 |
+
super(CANLabelDecode, self).__init__(character_dict_path,
|
| 1166 |
+
use_space_char)
|
| 1167 |
+
|
| 1168 |
+
def decode(self, text_index, preds_prob=None):
|
| 1169 |
+
result_list = []
|
| 1170 |
+
batch_size = len(text_index)
|
| 1171 |
+
for batch_idx in range(batch_size):
|
| 1172 |
+
seq_end = text_index[batch_idx].argmin(0)
|
| 1173 |
+
idx_list = text_index[batch_idx][:seq_end].tolist()
|
| 1174 |
+
symbol_list = [self.character[idx] for idx in idx_list]
|
| 1175 |
+
probs = []
|
| 1176 |
+
if preds_prob is not None:
|
| 1177 |
+
probs = preds_prob[batch_idx][:len(symbol_list)].tolist()
|
| 1178 |
+
|
| 1179 |
+
result_list.append([' '.join(symbol_list), probs])
|
| 1180 |
+
return result_list
|
| 1181 |
+
|
| 1182 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 1183 |
+
pred_prob, _, _, _ = preds
|
| 1184 |
+
preds_idx = pred_prob.argmax(axis=2)
|
| 1185 |
+
|
| 1186 |
+
text = self.decode(preds_idx)
|
| 1187 |
+
if label is None:
|
| 1188 |
+
return text
|
| 1189 |
+
label = self.decode(label)
|
| 1190 |
+
return text, label
|
| 1191 |
+
|
| 1192 |
+
|
| 1193 |
+
class CPPDLabelDecode(NRTRLabelDecode):
|
| 1194 |
+
""" Convert between text-label and text-index """
|
| 1195 |
+
|
| 1196 |
+
def __init__(self, character_dict_path=None, use_space_char=False,
|
| 1197 |
+
**kwargs):
|
| 1198 |
+
super(CPPDLabelDecode, self).__init__(character_dict_path,
|
| 1199 |
+
use_space_char)
|
| 1200 |
+
|
| 1201 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 1202 |
+
if isinstance(preds, tuple):
|
| 1203 |
+
if isinstance(preds[-1], dict):
|
| 1204 |
+
preds = preds[-1]['align'][-1].numpy()
|
| 1205 |
+
else:
|
| 1206 |
+
preds = preds[-1].numpy()
|
| 1207 |
+
if isinstance(preds, paddle.Tensor):
|
| 1208 |
+
preds = preds.numpy()
|
| 1209 |
+
else:
|
| 1210 |
+
preds = preds
|
| 1211 |
+
preds_idx = preds.argmax(axis=2)
|
| 1212 |
+
preds_prob = preds.max(axis=2)
|
| 1213 |
+
text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False)
|
| 1214 |
+
if label is None:
|
| 1215 |
+
return text
|
| 1216 |
+
label = self.decode(label)
|
| 1217 |
+
return text, label
|
| 1218 |
+
|
| 1219 |
+
def add_special_char(self, dict_character):
|
| 1220 |
+
dict_character = ['</s>'] + dict_character
|
| 1221 |
+
return dict_character
|
ocr-studio/PaddleOCR/ppocr/postprocess/sast_postprocess.py
ADDED
|
@@ -0,0 +1,357 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from __future__ import absolute_import
|
| 16 |
+
from __future__ import division
|
| 17 |
+
from __future__ import print_function
|
| 18 |
+
|
| 19 |
+
import os
|
| 20 |
+
import sys
|
| 21 |
+
|
| 22 |
+
__dir__ = os.path.dirname(__file__)
|
| 23 |
+
sys.path.append(__dir__)
|
| 24 |
+
sys.path.append(os.path.join(__dir__, '..'))
|
| 25 |
+
|
| 26 |
+
import numpy as np
|
| 27 |
+
from .locality_aware_nms import nms_locality
|
| 28 |
+
import paddle
|
| 29 |
+
import cv2
|
| 30 |
+
import time
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
class SASTPostProcess(object):
|
| 34 |
+
"""
|
| 35 |
+
The post process for SAST.
|
| 36 |
+
"""
|
| 37 |
+
|
| 38 |
+
def __init__(self,
|
| 39 |
+
score_thresh=0.5,
|
| 40 |
+
nms_thresh=0.2,
|
| 41 |
+
sample_pts_num=2,
|
| 42 |
+
shrink_ratio_of_width=0.3,
|
| 43 |
+
expand_scale=1.0,
|
| 44 |
+
tcl_map_thresh=0.5,
|
| 45 |
+
**kwargs):
|
| 46 |
+
|
| 47 |
+
self.score_thresh = score_thresh
|
| 48 |
+
self.nms_thresh = nms_thresh
|
| 49 |
+
self.sample_pts_num = sample_pts_num
|
| 50 |
+
self.shrink_ratio_of_width = shrink_ratio_of_width
|
| 51 |
+
self.expand_scale = expand_scale
|
| 52 |
+
self.tcl_map_thresh = tcl_map_thresh
|
| 53 |
+
|
| 54 |
+
# c++ la-nms is faster, but only support python 3.5
|
| 55 |
+
self.is_python35 = False
|
| 56 |
+
if sys.version_info.major == 3 and sys.version_info.minor == 5:
|
| 57 |
+
self.is_python35 = True
|
| 58 |
+
|
| 59 |
+
def point_pair2poly(self, point_pair_list):
|
| 60 |
+
"""
|
| 61 |
+
Transfer vertical point_pairs into poly point in clockwise.
|
| 62 |
+
"""
|
| 63 |
+
# constract poly
|
| 64 |
+
point_num = len(point_pair_list) * 2
|
| 65 |
+
point_list = [0] * point_num
|
| 66 |
+
for idx, point_pair in enumerate(point_pair_list):
|
| 67 |
+
point_list[idx] = point_pair[0]
|
| 68 |
+
point_list[point_num - 1 - idx] = point_pair[1]
|
| 69 |
+
return np.array(point_list).reshape(-1, 2)
|
| 70 |
+
|
| 71 |
+
def shrink_quad_along_width(self,
|
| 72 |
+
quad,
|
| 73 |
+
begin_width_ratio=0.,
|
| 74 |
+
end_width_ratio=1.):
|
| 75 |
+
"""
|
| 76 |
+
Generate shrink_quad_along_width.
|
| 77 |
+
"""
|
| 78 |
+
ratio_pair = np.array(
|
| 79 |
+
[[begin_width_ratio], [end_width_ratio]], dtype=np.float32)
|
| 80 |
+
p0_1 = quad[0] + (quad[1] - quad[0]) * ratio_pair
|
| 81 |
+
p3_2 = quad[3] + (quad[2] - quad[3]) * ratio_pair
|
| 82 |
+
return np.array([p0_1[0], p0_1[1], p3_2[1], p3_2[0]])
|
| 83 |
+
|
| 84 |
+
def expand_poly_along_width(self, poly, shrink_ratio_of_width=0.3):
|
| 85 |
+
"""
|
| 86 |
+
expand poly along width.
|
| 87 |
+
"""
|
| 88 |
+
point_num = poly.shape[0]
|
| 89 |
+
left_quad = np.array(
|
| 90 |
+
[poly[0], poly[1], poly[-2], poly[-1]], dtype=np.float32)
|
| 91 |
+
left_ratio = -shrink_ratio_of_width * np.linalg.norm(left_quad[0] - left_quad[3]) / \
|
| 92 |
+
(np.linalg.norm(left_quad[0] - left_quad[1]) + 1e-6)
|
| 93 |
+
left_quad_expand = self.shrink_quad_along_width(left_quad, left_ratio,
|
| 94 |
+
1.0)
|
| 95 |
+
right_quad = np.array(
|
| 96 |
+
[
|
| 97 |
+
poly[point_num // 2 - 2], poly[point_num // 2 - 1],
|
| 98 |
+
poly[point_num // 2], poly[point_num // 2 + 1]
|
| 99 |
+
],
|
| 100 |
+
dtype=np.float32)
|
| 101 |
+
right_ratio = 1.0 + \
|
| 102 |
+
shrink_ratio_of_width * np.linalg.norm(right_quad[0] - right_quad[3]) / \
|
| 103 |
+
(np.linalg.norm(right_quad[0] - right_quad[1]) + 1e-6)
|
| 104 |
+
right_quad_expand = self.shrink_quad_along_width(right_quad, 0.0,
|
| 105 |
+
right_ratio)
|
| 106 |
+
poly[0] = left_quad_expand[0]
|
| 107 |
+
poly[-1] = left_quad_expand[-1]
|
| 108 |
+
poly[point_num // 2 - 1] = right_quad_expand[1]
|
| 109 |
+
poly[point_num // 2] = right_quad_expand[2]
|
| 110 |
+
return poly
|
| 111 |
+
|
| 112 |
+
def restore_quad(self, tcl_map, tcl_map_thresh, tvo_map):
|
| 113 |
+
"""Restore quad."""
|
| 114 |
+
xy_text = np.argwhere(tcl_map[:, :, 0] > tcl_map_thresh)
|
| 115 |
+
xy_text = xy_text[:, ::-1] # (n, 2)
|
| 116 |
+
|
| 117 |
+
# Sort the text boxes via the y axis
|
| 118 |
+
xy_text = xy_text[np.argsort(xy_text[:, 1])]
|
| 119 |
+
|
| 120 |
+
scores = tcl_map[xy_text[:, 1], xy_text[:, 0], 0]
|
| 121 |
+
scores = scores[:, np.newaxis]
|
| 122 |
+
|
| 123 |
+
# Restore
|
| 124 |
+
point_num = int(tvo_map.shape[-1] / 2)
|
| 125 |
+
assert point_num == 4
|
| 126 |
+
tvo_map = tvo_map[xy_text[:, 1], xy_text[:, 0], :]
|
| 127 |
+
xy_text_tile = np.tile(xy_text, (1, point_num)) # (n, point_num * 2)
|
| 128 |
+
quads = xy_text_tile - tvo_map
|
| 129 |
+
|
| 130 |
+
return scores, quads, xy_text
|
| 131 |
+
|
| 132 |
+
def quad_area(self, quad):
|
| 133 |
+
"""
|
| 134 |
+
compute area of a quad.
|
| 135 |
+
"""
|
| 136 |
+
edge = [(quad[1][0] - quad[0][0]) * (quad[1][1] + quad[0][1]),
|
| 137 |
+
(quad[2][0] - quad[1][0]) * (quad[2][1] + quad[1][1]),
|
| 138 |
+
(quad[3][0] - quad[2][0]) * (quad[3][1] + quad[2][1]),
|
| 139 |
+
(quad[0][0] - quad[3][0]) * (quad[0][1] + quad[3][1])]
|
| 140 |
+
return np.sum(edge) / 2.
|
| 141 |
+
|
| 142 |
+
def nms(self, dets):
|
| 143 |
+
if self.is_python35:
|
| 144 |
+
from ppocr.utils.utility import check_install
|
| 145 |
+
check_install('lanms', 'lanms-nova')
|
| 146 |
+
import lanms
|
| 147 |
+
dets = lanms.merge_quadrangle_n9(dets, self.nms_thresh)
|
| 148 |
+
else:
|
| 149 |
+
dets = nms_locality(dets, self.nms_thresh)
|
| 150 |
+
return dets
|
| 151 |
+
|
| 152 |
+
def cluster_by_quads_tco(self, tcl_map, tcl_map_thresh, quads, tco_map):
|
| 153 |
+
"""
|
| 154 |
+
Cluster pixels in tcl_map based on quads.
|
| 155 |
+
"""
|
| 156 |
+
instance_count = quads.shape[0] + 1 # contain background
|
| 157 |
+
instance_label_map = np.zeros(tcl_map.shape[:2], dtype=np.int32)
|
| 158 |
+
if instance_count == 1:
|
| 159 |
+
return instance_count, instance_label_map
|
| 160 |
+
|
| 161 |
+
# predict text center
|
| 162 |
+
xy_text = np.argwhere(tcl_map[:, :, 0] > tcl_map_thresh)
|
| 163 |
+
n = xy_text.shape[0]
|
| 164 |
+
xy_text = xy_text[:, ::-1] # (n, 2)
|
| 165 |
+
tco = tco_map[xy_text[:, 1], xy_text[:, 0], :] # (n, 2)
|
| 166 |
+
pred_tc = xy_text - tco
|
| 167 |
+
|
| 168 |
+
# get gt text center
|
| 169 |
+
m = quads.shape[0]
|
| 170 |
+
gt_tc = np.mean(quads, axis=1) # (m, 2)
|
| 171 |
+
|
| 172 |
+
pred_tc_tile = np.tile(pred_tc[:, np.newaxis, :],
|
| 173 |
+
(1, m, 1)) # (n, m, 2)
|
| 174 |
+
gt_tc_tile = np.tile(gt_tc[np.newaxis, :, :], (n, 1, 1)) # (n, m, 2)
|
| 175 |
+
dist_mat = np.linalg.norm(pred_tc_tile - gt_tc_tile, axis=2) # (n, m)
|
| 176 |
+
xy_text_assign = np.argmin(dist_mat, axis=1) + 1 # (n,)
|
| 177 |
+
|
| 178 |
+
instance_label_map[xy_text[:, 1], xy_text[:, 0]] = xy_text_assign
|
| 179 |
+
return instance_count, instance_label_map
|
| 180 |
+
|
| 181 |
+
def estimate_sample_pts_num(self, quad, xy_text):
|
| 182 |
+
"""
|
| 183 |
+
Estimate sample points number.
|
| 184 |
+
"""
|
| 185 |
+
eh = (np.linalg.norm(quad[0] - quad[3]) +
|
| 186 |
+
np.linalg.norm(quad[1] - quad[2])) / 2.0
|
| 187 |
+
ew = (np.linalg.norm(quad[0] - quad[1]) +
|
| 188 |
+
np.linalg.norm(quad[2] - quad[3])) / 2.0
|
| 189 |
+
|
| 190 |
+
dense_sample_pts_num = max(2, int(ew))
|
| 191 |
+
dense_xy_center_line = xy_text[np.linspace(
|
| 192 |
+
0,
|
| 193 |
+
xy_text.shape[0] - 1,
|
| 194 |
+
dense_sample_pts_num,
|
| 195 |
+
endpoint=True,
|
| 196 |
+
dtype=np.float32).astype(np.int32)]
|
| 197 |
+
|
| 198 |
+
dense_xy_center_line_diff = dense_xy_center_line[
|
| 199 |
+
1:] - dense_xy_center_line[:-1]
|
| 200 |
+
estimate_arc_len = np.sum(
|
| 201 |
+
np.linalg.norm(
|
| 202 |
+
dense_xy_center_line_diff, axis=1))
|
| 203 |
+
|
| 204 |
+
sample_pts_num = max(2, int(estimate_arc_len / eh))
|
| 205 |
+
return sample_pts_num
|
| 206 |
+
|
| 207 |
+
def detect_sast(self,
|
| 208 |
+
tcl_map,
|
| 209 |
+
tvo_map,
|
| 210 |
+
tbo_map,
|
| 211 |
+
tco_map,
|
| 212 |
+
ratio_w,
|
| 213 |
+
ratio_h,
|
| 214 |
+
src_w,
|
| 215 |
+
src_h,
|
| 216 |
+
shrink_ratio_of_width=0.3,
|
| 217 |
+
tcl_map_thresh=0.5,
|
| 218 |
+
offset_expand=1.0,
|
| 219 |
+
out_strid=4.0):
|
| 220 |
+
"""
|
| 221 |
+
first resize the tcl_map, tvo_map and tbo_map to the input_size, then restore the polys
|
| 222 |
+
"""
|
| 223 |
+
# restore quad
|
| 224 |
+
scores, quads, xy_text = self.restore_quad(tcl_map, tcl_map_thresh,
|
| 225 |
+
tvo_map)
|
| 226 |
+
dets = np.hstack((quads, scores)).astype(np.float32, copy=False)
|
| 227 |
+
dets = self.nms(dets)
|
| 228 |
+
if dets.shape[0] == 0:
|
| 229 |
+
return []
|
| 230 |
+
quads = dets[:, :-1].reshape(-1, 4, 2)
|
| 231 |
+
|
| 232 |
+
# Compute quad area
|
| 233 |
+
quad_areas = []
|
| 234 |
+
for quad in quads:
|
| 235 |
+
quad_areas.append(-self.quad_area(quad))
|
| 236 |
+
|
| 237 |
+
# instance segmentation
|
| 238 |
+
# instance_count, instance_label_map = cv2.connectedComponents(tcl_map.astype(np.uint8), connectivity=8)
|
| 239 |
+
instance_count, instance_label_map = self.cluster_by_quads_tco(
|
| 240 |
+
tcl_map, tcl_map_thresh, quads, tco_map)
|
| 241 |
+
|
| 242 |
+
# restore single poly with tcl instance.
|
| 243 |
+
poly_list = []
|
| 244 |
+
for instance_idx in range(1, instance_count):
|
| 245 |
+
xy_text = np.argwhere(instance_label_map == instance_idx)[:, ::-1]
|
| 246 |
+
quad = quads[instance_idx - 1]
|
| 247 |
+
q_area = quad_areas[instance_idx - 1]
|
| 248 |
+
if q_area < 5:
|
| 249 |
+
continue
|
| 250 |
+
|
| 251 |
+
#
|
| 252 |
+
len1 = float(np.linalg.norm(quad[0] - quad[1]))
|
| 253 |
+
len2 = float(np.linalg.norm(quad[1] - quad[2]))
|
| 254 |
+
min_len = min(len1, len2)
|
| 255 |
+
if min_len < 3:
|
| 256 |
+
continue
|
| 257 |
+
|
| 258 |
+
# filter small CC
|
| 259 |
+
if xy_text.shape[0] <= 0:
|
| 260 |
+
continue
|
| 261 |
+
|
| 262 |
+
# filter low confidence instance
|
| 263 |
+
xy_text_scores = tcl_map[xy_text[:, 1], xy_text[:, 0], 0]
|
| 264 |
+
if np.sum(xy_text_scores) / quad_areas[instance_idx - 1] < 0.1:
|
| 265 |
+
# if np.sum(xy_text_scores) / quad_areas[instance_idx - 1] < 0.05:
|
| 266 |
+
continue
|
| 267 |
+
|
| 268 |
+
# sort xy_text
|
| 269 |
+
left_center_pt = np.array(
|
| 270 |
+
[[(quad[0, 0] + quad[-1, 0]) / 2.0,
|
| 271 |
+
(quad[0, 1] + quad[-1, 1]) / 2.0]]) # (1, 2)
|
| 272 |
+
right_center_pt = np.array(
|
| 273 |
+
[[(quad[1, 0] + quad[2, 0]) / 2.0,
|
| 274 |
+
(quad[1, 1] + quad[2, 1]) / 2.0]]) # (1, 2)
|
| 275 |
+
proj_unit_vec = (right_center_pt - left_center_pt) / \
|
| 276 |
+
(np.linalg.norm(right_center_pt - left_center_pt) + 1e-6)
|
| 277 |
+
proj_value = np.sum(xy_text * proj_unit_vec, axis=1)
|
| 278 |
+
xy_text = xy_text[np.argsort(proj_value)]
|
| 279 |
+
|
| 280 |
+
# Sample pts in tcl map
|
| 281 |
+
if self.sample_pts_num == 0:
|
| 282 |
+
sample_pts_num = self.estimate_sample_pts_num(quad, xy_text)
|
| 283 |
+
else:
|
| 284 |
+
sample_pts_num = self.sample_pts_num
|
| 285 |
+
xy_center_line = xy_text[np.linspace(
|
| 286 |
+
0,
|
| 287 |
+
xy_text.shape[0] - 1,
|
| 288 |
+
sample_pts_num,
|
| 289 |
+
endpoint=True,
|
| 290 |
+
dtype=np.float32).astype(np.int32)]
|
| 291 |
+
|
| 292 |
+
point_pair_list = []
|
| 293 |
+
for x, y in xy_center_line:
|
| 294 |
+
# get corresponding offset
|
| 295 |
+
offset = tbo_map[y, x, :].reshape(2, 2)
|
| 296 |
+
if offset_expand != 1.0:
|
| 297 |
+
offset_length = np.linalg.norm(
|
| 298 |
+
offset, axis=1, keepdims=True)
|
| 299 |
+
expand_length = np.clip(
|
| 300 |
+
offset_length * (offset_expand - 1),
|
| 301 |
+
a_min=0.5,
|
| 302 |
+
a_max=3.0)
|
| 303 |
+
offset_detal = offset / offset_length * expand_length
|
| 304 |
+
offset = offset + offset_detal
|
| 305 |
+
# original point
|
| 306 |
+
ori_yx = np.array([y, x], dtype=np.float32)
|
| 307 |
+
point_pair = (ori_yx + offset)[:, ::-1] * out_strid / np.array(
|
| 308 |
+
[ratio_w, ratio_h]).reshape(-1, 2)
|
| 309 |
+
point_pair_list.append(point_pair)
|
| 310 |
+
|
| 311 |
+
# ndarry: (x, 2), expand poly along width
|
| 312 |
+
detected_poly = self.point_pair2poly(point_pair_list)
|
| 313 |
+
detected_poly = self.expand_poly_along_width(detected_poly,
|
| 314 |
+
shrink_ratio_of_width)
|
| 315 |
+
detected_poly[:, 0] = np.clip(
|
| 316 |
+
detected_poly[:, 0], a_min=0, a_max=src_w)
|
| 317 |
+
detected_poly[:, 1] = np.clip(
|
| 318 |
+
detected_poly[:, 1], a_min=0, a_max=src_h)
|
| 319 |
+
poly_list.append(detected_poly)
|
| 320 |
+
|
| 321 |
+
return poly_list
|
| 322 |
+
|
| 323 |
+
def __call__(self, outs_dict, shape_list):
|
| 324 |
+
score_list = outs_dict['f_score']
|
| 325 |
+
border_list = outs_dict['f_border']
|
| 326 |
+
tvo_list = outs_dict['f_tvo']
|
| 327 |
+
tco_list = outs_dict['f_tco']
|
| 328 |
+
if isinstance(score_list, paddle.Tensor):
|
| 329 |
+
score_list = score_list.numpy()
|
| 330 |
+
border_list = border_list.numpy()
|
| 331 |
+
tvo_list = tvo_list.numpy()
|
| 332 |
+
tco_list = tco_list.numpy()
|
| 333 |
+
|
| 334 |
+
img_num = len(shape_list)
|
| 335 |
+
poly_lists = []
|
| 336 |
+
for ino in range(img_num):
|
| 337 |
+
p_score = score_list[ino].transpose((1, 2, 0))
|
| 338 |
+
p_border = border_list[ino].transpose((1, 2, 0))
|
| 339 |
+
p_tvo = tvo_list[ino].transpose((1, 2, 0))
|
| 340 |
+
p_tco = tco_list[ino].transpose((1, 2, 0))
|
| 341 |
+
src_h, src_w, ratio_h, ratio_w = shape_list[ino]
|
| 342 |
+
|
| 343 |
+
poly_list = self.detect_sast(
|
| 344 |
+
p_score,
|
| 345 |
+
p_tvo,
|
| 346 |
+
p_border,
|
| 347 |
+
p_tco,
|
| 348 |
+
ratio_w,
|
| 349 |
+
ratio_h,
|
| 350 |
+
src_w,
|
| 351 |
+
src_h,
|
| 352 |
+
shrink_ratio_of_width=self.shrink_ratio_of_width,
|
| 353 |
+
tcl_map_thresh=self.tcl_map_thresh,
|
| 354 |
+
offset_expand=self.expand_scale)
|
| 355 |
+
poly_lists.append({'points': np.array(poly_list)})
|
| 356 |
+
|
| 357 |
+
return poly_lists
|
ocr-studio/PaddleOCR/ppocr/postprocess/table_postprocess.py
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import numpy as np
|
| 16 |
+
import paddle
|
| 17 |
+
|
| 18 |
+
from .rec_postprocess import AttnLabelDecode
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
class TableLabelDecode(AttnLabelDecode):
|
| 22 |
+
""" """
|
| 23 |
+
|
| 24 |
+
def __init__(self,
|
| 25 |
+
character_dict_path,
|
| 26 |
+
merge_no_span_structure=False,
|
| 27 |
+
**kwargs):
|
| 28 |
+
dict_character = []
|
| 29 |
+
with open(character_dict_path, "rb") as fin:
|
| 30 |
+
lines = fin.readlines()
|
| 31 |
+
for line in lines:
|
| 32 |
+
line = line.decode('utf-8').strip("\n").strip("\r\n")
|
| 33 |
+
dict_character.append(line)
|
| 34 |
+
|
| 35 |
+
if merge_no_span_structure:
|
| 36 |
+
if "<td></td>" not in dict_character:
|
| 37 |
+
dict_character.append("<td></td>")
|
| 38 |
+
if "<td>" in dict_character:
|
| 39 |
+
dict_character.remove("<td>")
|
| 40 |
+
|
| 41 |
+
dict_character = self.add_special_char(dict_character)
|
| 42 |
+
self.dict = {}
|
| 43 |
+
for i, char in enumerate(dict_character):
|
| 44 |
+
self.dict[char] = i
|
| 45 |
+
self.character = dict_character
|
| 46 |
+
self.td_token = ['<td>', '<td', '<td></td>']
|
| 47 |
+
|
| 48 |
+
def __call__(self, preds, batch=None):
|
| 49 |
+
structure_probs = preds['structure_probs']
|
| 50 |
+
bbox_preds = preds['loc_preds']
|
| 51 |
+
if isinstance(structure_probs, paddle.Tensor):
|
| 52 |
+
structure_probs = structure_probs.numpy()
|
| 53 |
+
if isinstance(bbox_preds, paddle.Tensor):
|
| 54 |
+
bbox_preds = bbox_preds.numpy()
|
| 55 |
+
shape_list = batch[-1]
|
| 56 |
+
result = self.decode(structure_probs, bbox_preds, shape_list)
|
| 57 |
+
if len(batch) == 1: # only contains shape
|
| 58 |
+
return result
|
| 59 |
+
|
| 60 |
+
label_decode_result = self.decode_label(batch)
|
| 61 |
+
return result, label_decode_result
|
| 62 |
+
|
| 63 |
+
def decode(self, structure_probs, bbox_preds, shape_list):
|
| 64 |
+
"""convert text-label into text-index.
|
| 65 |
+
"""
|
| 66 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 67 |
+
end_idx = self.dict[self.end_str]
|
| 68 |
+
|
| 69 |
+
structure_idx = structure_probs.argmax(axis=2)
|
| 70 |
+
structure_probs = structure_probs.max(axis=2)
|
| 71 |
+
|
| 72 |
+
structure_batch_list = []
|
| 73 |
+
bbox_batch_list = []
|
| 74 |
+
batch_size = len(structure_idx)
|
| 75 |
+
for batch_idx in range(batch_size):
|
| 76 |
+
structure_list = []
|
| 77 |
+
bbox_list = []
|
| 78 |
+
score_list = []
|
| 79 |
+
for idx in range(len(structure_idx[batch_idx])):
|
| 80 |
+
char_idx = int(structure_idx[batch_idx][idx])
|
| 81 |
+
if idx > 0 and char_idx == end_idx:
|
| 82 |
+
break
|
| 83 |
+
if char_idx in ignored_tokens:
|
| 84 |
+
continue
|
| 85 |
+
text = self.character[char_idx]
|
| 86 |
+
if text in self.td_token:
|
| 87 |
+
bbox = bbox_preds[batch_idx, idx]
|
| 88 |
+
bbox = self._bbox_decode(bbox, shape_list[batch_idx])
|
| 89 |
+
bbox_list.append(bbox)
|
| 90 |
+
structure_list.append(text)
|
| 91 |
+
score_list.append(structure_probs[batch_idx, idx])
|
| 92 |
+
structure_batch_list.append([structure_list, np.mean(score_list)])
|
| 93 |
+
bbox_batch_list.append(np.array(bbox_list))
|
| 94 |
+
result = {
|
| 95 |
+
'bbox_batch_list': bbox_batch_list,
|
| 96 |
+
'structure_batch_list': structure_batch_list,
|
| 97 |
+
}
|
| 98 |
+
return result
|
| 99 |
+
|
| 100 |
+
def decode_label(self, batch):
|
| 101 |
+
"""convert text-label into text-index.
|
| 102 |
+
"""
|
| 103 |
+
structure_idx = batch[1]
|
| 104 |
+
gt_bbox_list = batch[2]
|
| 105 |
+
shape_list = batch[-1]
|
| 106 |
+
ignored_tokens = self.get_ignored_tokens()
|
| 107 |
+
end_idx = self.dict[self.end_str]
|
| 108 |
+
|
| 109 |
+
structure_batch_list = []
|
| 110 |
+
bbox_batch_list = []
|
| 111 |
+
batch_size = len(structure_idx)
|
| 112 |
+
for batch_idx in range(batch_size):
|
| 113 |
+
structure_list = []
|
| 114 |
+
bbox_list = []
|
| 115 |
+
for idx in range(len(structure_idx[batch_idx])):
|
| 116 |
+
char_idx = int(structure_idx[batch_idx][idx])
|
| 117 |
+
if idx > 0 and char_idx == end_idx:
|
| 118 |
+
break
|
| 119 |
+
if char_idx in ignored_tokens:
|
| 120 |
+
continue
|
| 121 |
+
structure_list.append(self.character[char_idx])
|
| 122 |
+
|
| 123 |
+
bbox = gt_bbox_list[batch_idx][idx]
|
| 124 |
+
if bbox.sum() != 0:
|
| 125 |
+
bbox = self._bbox_decode(bbox, shape_list[batch_idx])
|
| 126 |
+
bbox_list.append(bbox)
|
| 127 |
+
structure_batch_list.append(structure_list)
|
| 128 |
+
bbox_batch_list.append(bbox_list)
|
| 129 |
+
result = {
|
| 130 |
+
'bbox_batch_list': bbox_batch_list,
|
| 131 |
+
'structure_batch_list': structure_batch_list,
|
| 132 |
+
}
|
| 133 |
+
return result
|
| 134 |
+
|
| 135 |
+
def _bbox_decode(self, bbox, shape):
|
| 136 |
+
h, w, ratio_h, ratio_w, pad_h, pad_w = shape
|
| 137 |
+
bbox[0::2] *= w
|
| 138 |
+
bbox[1::2] *= h
|
| 139 |
+
return bbox
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
class TableMasterLabelDecode(TableLabelDecode):
|
| 143 |
+
""" """
|
| 144 |
+
|
| 145 |
+
def __init__(self,
|
| 146 |
+
character_dict_path,
|
| 147 |
+
box_shape='ori',
|
| 148 |
+
merge_no_span_structure=True,
|
| 149 |
+
**kwargs):
|
| 150 |
+
super(TableMasterLabelDecode, self).__init__(character_dict_path,
|
| 151 |
+
merge_no_span_structure)
|
| 152 |
+
self.box_shape = box_shape
|
| 153 |
+
assert box_shape in [
|
| 154 |
+
'ori', 'pad'
|
| 155 |
+
], 'The shape used for box normalization must be ori or pad'
|
| 156 |
+
|
| 157 |
+
def add_special_char(self, dict_character):
|
| 158 |
+
self.beg_str = '<SOS>'
|
| 159 |
+
self.end_str = '<EOS>'
|
| 160 |
+
self.unknown_str = '<UKN>'
|
| 161 |
+
self.pad_str = '<PAD>'
|
| 162 |
+
dict_character = dict_character
|
| 163 |
+
dict_character = dict_character + [
|
| 164 |
+
self.unknown_str, self.beg_str, self.end_str, self.pad_str
|
| 165 |
+
]
|
| 166 |
+
return dict_character
|
| 167 |
+
|
| 168 |
+
def get_ignored_tokens(self):
|
| 169 |
+
pad_idx = self.dict[self.pad_str]
|
| 170 |
+
start_idx = self.dict[self.beg_str]
|
| 171 |
+
end_idx = self.dict[self.end_str]
|
| 172 |
+
unknown_idx = self.dict[self.unknown_str]
|
| 173 |
+
return [start_idx, end_idx, pad_idx, unknown_idx]
|
| 174 |
+
|
| 175 |
+
def _bbox_decode(self, bbox, shape):
|
| 176 |
+
h, w, ratio_h, ratio_w, pad_h, pad_w = shape
|
| 177 |
+
if self.box_shape == 'pad':
|
| 178 |
+
h, w = pad_h, pad_w
|
| 179 |
+
bbox[0::2] *= w
|
| 180 |
+
bbox[1::2] *= h
|
| 181 |
+
bbox[0::2] /= ratio_w
|
| 182 |
+
bbox[1::2] /= ratio_h
|
| 183 |
+
x, y, w, h = bbox
|
| 184 |
+
x1, y1, x2, y2 = x - w // 2, y - h // 2, x + w // 2, y + h // 2
|
| 185 |
+
bbox = np.array([x1, y1, x2, y2])
|
| 186 |
+
return bbox
|
ocr-studio/PaddleOCR/ppocr/postprocess/vqa_token_re_layoutlm_postprocess.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
import paddle
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
class VQAReTokenLayoutLMPostProcess(object):
|
| 18 |
+
""" Convert between text-label and text-index """
|
| 19 |
+
|
| 20 |
+
def __init__(self, **kwargs):
|
| 21 |
+
super(VQAReTokenLayoutLMPostProcess, self).__init__()
|
| 22 |
+
|
| 23 |
+
def __call__(self, preds, label=None, *args, **kwargs):
|
| 24 |
+
pred_relations = preds['pred_relations']
|
| 25 |
+
if isinstance(preds['pred_relations'], paddle.Tensor):
|
| 26 |
+
pred_relations = pred_relations.numpy()
|
| 27 |
+
pred_relations = self.decode_pred(pred_relations)
|
| 28 |
+
|
| 29 |
+
if label is not None:
|
| 30 |
+
return self._metric(pred_relations, label)
|
| 31 |
+
else:
|
| 32 |
+
return self._infer(pred_relations, *args, **kwargs)
|
| 33 |
+
|
| 34 |
+
def _metric(self, pred_relations, label):
|
| 35 |
+
return pred_relations, label[-1], label[-2]
|
| 36 |
+
|
| 37 |
+
def _infer(self, pred_relations, *args, **kwargs):
|
| 38 |
+
ser_results = kwargs['ser_results']
|
| 39 |
+
entity_idx_dict_batch = kwargs['entity_idx_dict_batch']
|
| 40 |
+
|
| 41 |
+
# merge relations and ocr info
|
| 42 |
+
results = []
|
| 43 |
+
for pred_relation, ser_result, entity_idx_dict in zip(
|
| 44 |
+
pred_relations, ser_results, entity_idx_dict_batch):
|
| 45 |
+
result = []
|
| 46 |
+
used_tail_id = []
|
| 47 |
+
for relation in pred_relation:
|
| 48 |
+
if relation['tail_id'] in used_tail_id:
|
| 49 |
+
continue
|
| 50 |
+
used_tail_id.append(relation['tail_id'])
|
| 51 |
+
ocr_info_head = ser_result[entity_idx_dict[relation['head_id']]]
|
| 52 |
+
ocr_info_tail = ser_result[entity_idx_dict[relation['tail_id']]]
|
| 53 |
+
result.append((ocr_info_head, ocr_info_tail))
|
| 54 |
+
results.append(result)
|
| 55 |
+
return results
|
| 56 |
+
|
| 57 |
+
def decode_pred(self, pred_relations):
|
| 58 |
+
pred_relations_new = []
|
| 59 |
+
for pred_relation in pred_relations:
|
| 60 |
+
pred_relation_new = []
|
| 61 |
+
pred_relation = pred_relation[1:pred_relation[0, 0, 0] + 1]
|
| 62 |
+
for relation in pred_relation:
|
| 63 |
+
relation_new = dict()
|
| 64 |
+
relation_new['head_id'] = relation[0, 0]
|
| 65 |
+
relation_new['head'] = tuple(relation[1])
|
| 66 |
+
relation_new['head_type'] = relation[2, 0]
|
| 67 |
+
relation_new['tail_id'] = relation[3, 0]
|
| 68 |
+
relation_new['tail'] = tuple(relation[4])
|
| 69 |
+
relation_new['tail_type'] = relation[5, 0]
|
| 70 |
+
relation_new['type'] = relation[6, 0]
|
| 71 |
+
pred_relation_new.append(relation_new)
|
| 72 |
+
pred_relations_new.append(pred_relation_new)
|
| 73 |
+
return pred_relations_new
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
class DistillationRePostProcess(VQAReTokenLayoutLMPostProcess):
|
| 77 |
+
"""
|
| 78 |
+
DistillationRePostProcess
|
| 79 |
+
"""
|
| 80 |
+
|
| 81 |
+
def __init__(self, model_name=["Student"], key=None, **kwargs):
|
| 82 |
+
super().__init__(**kwargs)
|
| 83 |
+
if not isinstance(model_name, list):
|
| 84 |
+
model_name = [model_name]
|
| 85 |
+
self.model_name = model_name
|
| 86 |
+
self.key = key
|
| 87 |
+
|
| 88 |
+
def __call__(self, preds, *args, **kwargs):
|
| 89 |
+
output = dict()
|
| 90 |
+
for name in self.model_name:
|
| 91 |
+
pred = preds[name]
|
| 92 |
+
if self.key is not None:
|
| 93 |
+
pred = pred[self.key]
|
| 94 |
+
output[name] = super().__call__(pred, *args, **kwargs)
|
| 95 |
+
return output
|
ocr-studio/PaddleOCR/ppocr/postprocess/vqa_token_ser_layoutlm_postprocess.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
import numpy as np
|
| 15 |
+
import paddle
|
| 16 |
+
from ppocr.utils.utility import load_vqa_bio_label_maps
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
class VQASerTokenLayoutLMPostProcess(object):
|
| 20 |
+
""" Convert between text-label and text-index """
|
| 21 |
+
|
| 22 |
+
def __init__(self, class_path, **kwargs):
|
| 23 |
+
super(VQASerTokenLayoutLMPostProcess, self).__init__()
|
| 24 |
+
label2id_map, self.id2label_map = load_vqa_bio_label_maps(class_path)
|
| 25 |
+
|
| 26 |
+
self.label2id_map_for_draw = dict()
|
| 27 |
+
for key in label2id_map:
|
| 28 |
+
if key.startswith("I-"):
|
| 29 |
+
self.label2id_map_for_draw[key] = label2id_map["B" + key[1:]]
|
| 30 |
+
else:
|
| 31 |
+
self.label2id_map_for_draw[key] = label2id_map[key]
|
| 32 |
+
|
| 33 |
+
self.id2label_map_for_show = dict()
|
| 34 |
+
for key in self.label2id_map_for_draw:
|
| 35 |
+
val = self.label2id_map_for_draw[key]
|
| 36 |
+
if key == "O":
|
| 37 |
+
self.id2label_map_for_show[val] = key
|
| 38 |
+
if key.startswith("B-") or key.startswith("I-"):
|
| 39 |
+
self.id2label_map_for_show[val] = key[2:]
|
| 40 |
+
else:
|
| 41 |
+
self.id2label_map_for_show[val] = key
|
| 42 |
+
|
| 43 |
+
def __call__(self, preds, batch=None, *args, **kwargs):
|
| 44 |
+
if isinstance(preds, tuple):
|
| 45 |
+
preds = preds[0]
|
| 46 |
+
if isinstance(preds, paddle.Tensor):
|
| 47 |
+
preds = preds.numpy()
|
| 48 |
+
|
| 49 |
+
if batch is not None:
|
| 50 |
+
return self._metric(preds, batch[5])
|
| 51 |
+
else:
|
| 52 |
+
return self._infer(preds, **kwargs)
|
| 53 |
+
|
| 54 |
+
def _metric(self, preds, label):
|
| 55 |
+
pred_idxs = preds.argmax(axis=2)
|
| 56 |
+
decode_out_list = [[] for _ in range(pred_idxs.shape[0])]
|
| 57 |
+
label_decode_out_list = [[] for _ in range(pred_idxs.shape[0])]
|
| 58 |
+
|
| 59 |
+
for i in range(pred_idxs.shape[0]):
|
| 60 |
+
for j in range(pred_idxs.shape[1]):
|
| 61 |
+
if label[i, j] != -100:
|
| 62 |
+
label_decode_out_list[i].append(self.id2label_map[label[i,
|
| 63 |
+
j]])
|
| 64 |
+
decode_out_list[i].append(self.id2label_map[pred_idxs[i,
|
| 65 |
+
j]])
|
| 66 |
+
return decode_out_list, label_decode_out_list
|
| 67 |
+
|
| 68 |
+
def _infer(self, preds, segment_offset_ids, ocr_infos):
|
| 69 |
+
results = []
|
| 70 |
+
|
| 71 |
+
for pred, segment_offset_id, ocr_info in zip(preds, segment_offset_ids,
|
| 72 |
+
ocr_infos):
|
| 73 |
+
pred = np.argmax(pred, axis=1)
|
| 74 |
+
pred = [self.id2label_map[idx] for idx in pred]
|
| 75 |
+
|
| 76 |
+
for idx in range(len(segment_offset_id)):
|
| 77 |
+
if idx == 0:
|
| 78 |
+
start_id = 0
|
| 79 |
+
else:
|
| 80 |
+
start_id = segment_offset_id[idx - 1]
|
| 81 |
+
|
| 82 |
+
end_id = segment_offset_id[idx]
|
| 83 |
+
|
| 84 |
+
curr_pred = pred[start_id:end_id]
|
| 85 |
+
curr_pred = [self.label2id_map_for_draw[p] for p in curr_pred]
|
| 86 |
+
|
| 87 |
+
if len(curr_pred) <= 0:
|
| 88 |
+
pred_id = 0
|
| 89 |
+
else:
|
| 90 |
+
counts = np.bincount(curr_pred)
|
| 91 |
+
pred_id = np.argmax(counts)
|
| 92 |
+
ocr_info[idx]["pred_id"] = int(pred_id)
|
| 93 |
+
ocr_info[idx]["pred"] = self.id2label_map_for_show[int(pred_id)]
|
| 94 |
+
results.append(ocr_info)
|
| 95 |
+
return results
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
class DistillationSerPostProcess(VQASerTokenLayoutLMPostProcess):
|
| 99 |
+
"""
|
| 100 |
+
DistillationSerPostProcess
|
| 101 |
+
"""
|
| 102 |
+
|
| 103 |
+
def __init__(self, class_path, model_name=["Student"], key=None, **kwargs):
|
| 104 |
+
super().__init__(class_path, **kwargs)
|
| 105 |
+
if not isinstance(model_name, list):
|
| 106 |
+
model_name = [model_name]
|
| 107 |
+
self.model_name = model_name
|
| 108 |
+
self.key = key
|
| 109 |
+
|
| 110 |
+
def __call__(self, preds, batch=None, *args, **kwargs):
|
| 111 |
+
output = dict()
|
| 112 |
+
for name in self.model_name:
|
| 113 |
+
pred = preds[name]
|
| 114 |
+
if self.key is not None:
|
| 115 |
+
pred = pred[self.key]
|
| 116 |
+
output[name] = super().__call__(pred, batch=batch, *args, **kwargs)
|
| 117 |
+
return output
|
ocr-studio/PaddleOCR/ppocr/utils/EN_symbol_dict.txt
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
0
|
| 2 |
+
1
|
| 3 |
+
2
|
| 4 |
+
3
|
| 5 |
+
4
|
| 6 |
+
5
|
| 7 |
+
6
|
| 8 |
+
7
|
| 9 |
+
8
|
| 10 |
+
9
|
| 11 |
+
a
|
| 12 |
+
b
|
| 13 |
+
c
|
| 14 |
+
d
|
| 15 |
+
e
|
| 16 |
+
f
|
| 17 |
+
g
|
| 18 |
+
h
|
| 19 |
+
i
|
| 20 |
+
j
|
| 21 |
+
k
|
| 22 |
+
l
|
| 23 |
+
m
|
| 24 |
+
n
|
| 25 |
+
o
|
| 26 |
+
p
|
| 27 |
+
q
|
| 28 |
+
r
|
| 29 |
+
s
|
| 30 |
+
t
|
| 31 |
+
u
|
| 32 |
+
v
|
| 33 |
+
w
|
| 34 |
+
x
|
| 35 |
+
y
|
| 36 |
+
z
|
| 37 |
+
A
|
| 38 |
+
B
|
| 39 |
+
C
|
| 40 |
+
D
|
| 41 |
+
E
|
| 42 |
+
F
|
| 43 |
+
G
|
| 44 |
+
H
|
| 45 |
+
I
|
| 46 |
+
J
|
| 47 |
+
K
|
| 48 |
+
L
|
| 49 |
+
M
|
| 50 |
+
N
|
| 51 |
+
O
|
| 52 |
+
P
|
| 53 |
+
Q
|
| 54 |
+
R
|
| 55 |
+
S
|
| 56 |
+
T
|
| 57 |
+
U
|
| 58 |
+
V
|
| 59 |
+
W
|
| 60 |
+
X
|
| 61 |
+
Y
|
| 62 |
+
Z
|
| 63 |
+
!
|
| 64 |
+
"
|
| 65 |
+
#
|
| 66 |
+
$
|
| 67 |
+
%
|
| 68 |
+
&
|
| 69 |
+
'
|
| 70 |
+
(
|
| 71 |
+
)
|
| 72 |
+
*
|
| 73 |
+
+
|
| 74 |
+
,
|
| 75 |
+
-
|
| 76 |
+
.
|
| 77 |
+
/
|
| 78 |
+
:
|
| 79 |
+
;
|
| 80 |
+
<
|
| 81 |
+
=
|
| 82 |
+
>
|
| 83 |
+
?
|
| 84 |
+
@
|
| 85 |
+
[
|
| 86 |
+
\
|
| 87 |
+
]
|
| 88 |
+
^
|
| 89 |
+
_
|
| 90 |
+
`
|
| 91 |
+
{
|
| 92 |
+
|
|
| 93 |
+
}
|
| 94 |
+
~
|
ocr-studio/PaddleOCR/ppocr/utils/__init__.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
ocr-studio/PaddleOCR/ppocr/utils/corpus/fi_corpus.txt
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
ocr-studio/PaddleOCR/ppocr/utils/dict/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
## Dictionary and Corpus
|
| 2 |
+
|
| 3 |
+
Dictionary files (usually character level vocabulary) are included here for easier configuration. Corpus contributed by OSS contributors are listed here, please respect copyrights when using them at your own risk.
|
| 4 |
+
|
| 5 |
+
- Burmese corpus: https://github.com/1chimaruGin/BurmeseCorpus
|
ocr-studio/PaddleOCR/ppocr/utils/dict/ar_dict.txt
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
a
|
| 2 |
+
r
|
| 3 |
+
b
|
| 4 |
+
i
|
| 5 |
+
c
|
| 6 |
+
_
|
| 7 |
+
m
|
| 8 |
+
g
|
| 9 |
+
/
|
| 10 |
+
1
|
| 11 |
+
0
|
| 12 |
+
I
|
| 13 |
+
L
|
| 14 |
+
S
|
| 15 |
+
V
|
| 16 |
+
R
|
| 17 |
+
C
|
| 18 |
+
2
|
| 19 |
+
v
|
| 20 |
+
l
|
| 21 |
+
6
|
| 22 |
+
3
|
| 23 |
+
9
|
| 24 |
+
.
|
| 25 |
+
j
|
| 26 |
+
p
|
| 27 |
+
ا
|
| 28 |
+
ل
|
| 29 |
+
م
|
| 30 |
+
ر
|
| 31 |
+
ج
|
| 32 |
+
و
|
| 33 |
+
ح
|
| 34 |
+
ي
|
| 35 |
+
ة
|
| 36 |
+
5
|
| 37 |
+
8
|
| 38 |
+
7
|
| 39 |
+
أ
|
| 40 |
+
ب
|
| 41 |
+
ض
|
| 42 |
+
4
|
| 43 |
+
ك
|
| 44 |
+
س
|
| 45 |
+
ه
|
| 46 |
+
ث
|
| 47 |
+
ن
|
| 48 |
+
ط
|
| 49 |
+
ع
|
| 50 |
+
ت
|
| 51 |
+
غ
|
| 52 |
+
خ
|
| 53 |
+
ف
|
| 54 |
+
ئ
|
| 55 |
+
ز
|
| 56 |
+
إ
|
| 57 |
+
د
|
| 58 |
+
ص
|
| 59 |
+
ظ
|
| 60 |
+
ذ
|
| 61 |
+
ش
|
| 62 |
+
ى
|
| 63 |
+
ق
|
| 64 |
+
ؤ
|
| 65 |
+
آ
|
| 66 |
+
ء
|
| 67 |
+
s
|
| 68 |
+
e
|
| 69 |
+
n
|
| 70 |
+
w
|
| 71 |
+
t
|
| 72 |
+
u
|
| 73 |
+
z
|
| 74 |
+
d
|
| 75 |
+
A
|
| 76 |
+
N
|
| 77 |
+
G
|
| 78 |
+
h
|
| 79 |
+
o
|
| 80 |
+
E
|
| 81 |
+
T
|
| 82 |
+
H
|
| 83 |
+
O
|
| 84 |
+
B
|
| 85 |
+
y
|
| 86 |
+
F
|
| 87 |
+
U
|
| 88 |
+
J
|
| 89 |
+
X
|
| 90 |
+
W
|
| 91 |
+
P
|
| 92 |
+
Z
|
| 93 |
+
M
|
| 94 |
+
k
|
| 95 |
+
q
|
| 96 |
+
Y
|
| 97 |
+
Q
|
| 98 |
+
D
|
| 99 |
+
f
|
| 100 |
+
K
|
| 101 |
+
x
|
| 102 |
+
'
|
| 103 |
+
%
|
| 104 |
+
-
|
| 105 |
+
#
|
| 106 |
+
@
|
| 107 |
+
!
|
| 108 |
+
&
|
| 109 |
+
$
|
| 110 |
+
,
|
| 111 |
+
:
|
| 112 |
+
é
|
| 113 |
+
?
|
| 114 |
+
+
|
| 115 |
+
É
|
| 116 |
+
(
|
| 117 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/arabic_dict.txt
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
!
|
| 2 |
+
#
|
| 3 |
+
$
|
| 4 |
+
%
|
| 5 |
+
&
|
| 6 |
+
'
|
| 7 |
+
(
|
| 8 |
+
+
|
| 9 |
+
,
|
| 10 |
+
-
|
| 11 |
+
.
|
| 12 |
+
/
|
| 13 |
+
0
|
| 14 |
+
1
|
| 15 |
+
2
|
| 16 |
+
3
|
| 17 |
+
4
|
| 18 |
+
5
|
| 19 |
+
6
|
| 20 |
+
7
|
| 21 |
+
8
|
| 22 |
+
9
|
| 23 |
+
:
|
| 24 |
+
?
|
| 25 |
+
@
|
| 26 |
+
A
|
| 27 |
+
B
|
| 28 |
+
C
|
| 29 |
+
D
|
| 30 |
+
E
|
| 31 |
+
F
|
| 32 |
+
G
|
| 33 |
+
H
|
| 34 |
+
I
|
| 35 |
+
J
|
| 36 |
+
K
|
| 37 |
+
L
|
| 38 |
+
M
|
| 39 |
+
N
|
| 40 |
+
O
|
| 41 |
+
P
|
| 42 |
+
Q
|
| 43 |
+
R
|
| 44 |
+
S
|
| 45 |
+
T
|
| 46 |
+
U
|
| 47 |
+
V
|
| 48 |
+
W
|
| 49 |
+
X
|
| 50 |
+
Y
|
| 51 |
+
Z
|
| 52 |
+
_
|
| 53 |
+
a
|
| 54 |
+
b
|
| 55 |
+
c
|
| 56 |
+
d
|
| 57 |
+
e
|
| 58 |
+
f
|
| 59 |
+
g
|
| 60 |
+
h
|
| 61 |
+
i
|
| 62 |
+
j
|
| 63 |
+
k
|
| 64 |
+
l
|
| 65 |
+
m
|
| 66 |
+
n
|
| 67 |
+
o
|
| 68 |
+
p
|
| 69 |
+
q
|
| 70 |
+
r
|
| 71 |
+
s
|
| 72 |
+
t
|
| 73 |
+
u
|
| 74 |
+
v
|
| 75 |
+
w
|
| 76 |
+
x
|
| 77 |
+
y
|
| 78 |
+
z
|
| 79 |
+
É
|
| 80 |
+
é
|
| 81 |
+
ء
|
| 82 |
+
آ
|
| 83 |
+
أ
|
| 84 |
+
ؤ
|
| 85 |
+
إ
|
| 86 |
+
ئ
|
| 87 |
+
ا
|
| 88 |
+
ب
|
| 89 |
+
ة
|
| 90 |
+
ت
|
| 91 |
+
ث
|
| 92 |
+
ج
|
| 93 |
+
ح
|
| 94 |
+
خ
|
| 95 |
+
د
|
| 96 |
+
ذ
|
| 97 |
+
ر
|
| 98 |
+
ز
|
| 99 |
+
س
|
| 100 |
+
ش
|
| 101 |
+
ص
|
| 102 |
+
ض
|
| 103 |
+
ط
|
| 104 |
+
ظ
|
| 105 |
+
ع
|
| 106 |
+
غ
|
| 107 |
+
ف
|
| 108 |
+
ق
|
| 109 |
+
ك
|
| 110 |
+
ل
|
| 111 |
+
م
|
| 112 |
+
ن
|
| 113 |
+
ه
|
| 114 |
+
و
|
| 115 |
+
ى
|
| 116 |
+
ي
|
| 117 |
+
ً
|
| 118 |
+
ٌ
|
| 119 |
+
ٍ
|
| 120 |
+
َ
|
| 121 |
+
ُ
|
| 122 |
+
ِ
|
| 123 |
+
ّ
|
| 124 |
+
ْ
|
| 125 |
+
ٓ
|
| 126 |
+
ٔ
|
| 127 |
+
ٰ
|
| 128 |
+
ٱ
|
| 129 |
+
ٹ
|
| 130 |
+
پ
|
| 131 |
+
چ
|
| 132 |
+
ڈ
|
| 133 |
+
ڑ
|
| 134 |
+
ژ
|
| 135 |
+
ک
|
| 136 |
+
ڭ
|
| 137 |
+
گ
|
| 138 |
+
ں
|
| 139 |
+
ھ
|
| 140 |
+
ۀ
|
| 141 |
+
ہ
|
| 142 |
+
ۂ
|
| 143 |
+
ۃ
|
| 144 |
+
ۆ
|
| 145 |
+
ۇ
|
| 146 |
+
ۈ
|
| 147 |
+
ۋ
|
| 148 |
+
ی
|
| 149 |
+
ې
|
| 150 |
+
ے
|
| 151 |
+
ۓ
|
| 152 |
+
ە
|
| 153 |
+
١
|
| 154 |
+
٢
|
| 155 |
+
٣
|
| 156 |
+
٤
|
| 157 |
+
٥
|
| 158 |
+
٦
|
| 159 |
+
٧
|
| 160 |
+
٨
|
| 161 |
+
٩
|
ocr-studio/PaddleOCR/ppocr/utils/dict/be_dict.txt
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
b
|
| 2 |
+
e
|
| 3 |
+
_
|
| 4 |
+
i
|
| 5 |
+
m
|
| 6 |
+
g
|
| 7 |
+
/
|
| 8 |
+
2
|
| 9 |
+
0
|
| 10 |
+
I
|
| 11 |
+
L
|
| 12 |
+
S
|
| 13 |
+
V
|
| 14 |
+
R
|
| 15 |
+
C
|
| 16 |
+
1
|
| 17 |
+
v
|
| 18 |
+
a
|
| 19 |
+
l
|
| 20 |
+
6
|
| 21 |
+
9
|
| 22 |
+
4
|
| 23 |
+
3
|
| 24 |
+
.
|
| 25 |
+
j
|
| 26 |
+
p
|
| 27 |
+
п
|
| 28 |
+
а
|
| 29 |
+
з
|
| 30 |
+
б
|
| 31 |
+
у
|
| 32 |
+
г
|
| 33 |
+
н
|
| 34 |
+
ц
|
| 35 |
+
ь
|
| 36 |
+
8
|
| 37 |
+
м
|
| 38 |
+
л
|
| 39 |
+
і
|
| 40 |
+
о
|
| 41 |
+
ў
|
| 42 |
+
ы
|
| 43 |
+
7
|
| 44 |
+
5
|
| 45 |
+
М
|
| 46 |
+
х
|
| 47 |
+
с
|
| 48 |
+
р
|
| 49 |
+
ф
|
| 50 |
+
я
|
| 51 |
+
е
|
| 52 |
+
д
|
| 53 |
+
ж
|
| 54 |
+
ю
|
| 55 |
+
ч
|
| 56 |
+
й
|
| 57 |
+
к
|
| 58 |
+
Д
|
| 59 |
+
в
|
| 60 |
+
Б
|
| 61 |
+
т
|
| 62 |
+
І
|
| 63 |
+
ш
|
| 64 |
+
ё
|
| 65 |
+
э
|
| 66 |
+
К
|
| 67 |
+
Л
|
| 68 |
+
Н
|
| 69 |
+
А
|
| 70 |
+
Ж
|
| 71 |
+
Г
|
| 72 |
+
В
|
| 73 |
+
П
|
| 74 |
+
З
|
| 75 |
+
Е
|
| 76 |
+
О
|
| 77 |
+
Р
|
| 78 |
+
С
|
| 79 |
+
У
|
| 80 |
+
Ё
|
| 81 |
+
Й
|
| 82 |
+
Т
|
| 83 |
+
Ч
|
| 84 |
+
Э
|
| 85 |
+
Ц
|
| 86 |
+
Ю
|
| 87 |
+
Ш
|
| 88 |
+
Ф
|
| 89 |
+
Х
|
| 90 |
+
Я
|
| 91 |
+
Ь
|
| 92 |
+
Ы
|
| 93 |
+
Ў
|
| 94 |
+
s
|
| 95 |
+
c
|
| 96 |
+
n
|
| 97 |
+
w
|
| 98 |
+
M
|
| 99 |
+
o
|
| 100 |
+
t
|
| 101 |
+
T
|
| 102 |
+
E
|
| 103 |
+
A
|
| 104 |
+
B
|
| 105 |
+
u
|
| 106 |
+
h
|
| 107 |
+
y
|
| 108 |
+
k
|
| 109 |
+
r
|
| 110 |
+
H
|
| 111 |
+
d
|
| 112 |
+
Y
|
| 113 |
+
O
|
| 114 |
+
U
|
| 115 |
+
F
|
| 116 |
+
f
|
| 117 |
+
x
|
| 118 |
+
D
|
| 119 |
+
G
|
| 120 |
+
N
|
| 121 |
+
K
|
| 122 |
+
P
|
| 123 |
+
z
|
| 124 |
+
J
|
| 125 |
+
X
|
| 126 |
+
W
|
| 127 |
+
Z
|
| 128 |
+
Q
|
| 129 |
+
%
|
| 130 |
+
-
|
| 131 |
+
q
|
| 132 |
+
@
|
| 133 |
+
'
|
| 134 |
+
!
|
| 135 |
+
#
|
| 136 |
+
&
|
| 137 |
+
,
|
| 138 |
+
:
|
| 139 |
+
$
|
| 140 |
+
(
|
| 141 |
+
?
|
| 142 |
+
é
|
| 143 |
+
+
|
| 144 |
+
É
|
| 145 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/bengali_dict.txt
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
হ
|
| 2 |
+
থ
|
| 3 |
+
শ
|
| 4 |
+
৫
|
| 5 |
+
ক
|
| 6 |
+
ও
|
| 7 |
+
য
|
| 8 |
+
০
|
| 9 |
+
গ
|
| 10 |
+
দ
|
| 11 |
+
ড়
|
| 12 |
+
খ
|
| 13 |
+
য়
|
| 14 |
+
ঋ
|
| 15 |
+
ন
|
| 16 |
+
অ
|
| 17 |
+
৪
|
| 18 |
+
এ
|
| 19 |
+
ব
|
| 20 |
+
ঠ
|
| 21 |
+
ঢ
|
| 22 |
+
৭
|
| 23 |
+
৯
|
| 24 |
+
ধ
|
| 25 |
+
ঙ
|
| 26 |
+
ট
|
| 27 |
+
ঝ
|
| 28 |
+
ৎ
|
| 29 |
+
ণ
|
| 30 |
+
ত
|
| 31 |
+
র
|
| 32 |
+
২
|
| 33 |
+
চ
|
| 34 |
+
ঌ
|
| 35 |
+
ড
|
| 36 |
+
৬
|
| 37 |
+
ঔ
|
| 38 |
+
প
|
| 39 |
+
ভ
|
| 40 |
+
ম
|
| 41 |
+
ঢ়
|
| 42 |
+
ঈ
|
| 43 |
+
৮
|
| 44 |
+
ঘ
|
| 45 |
+
১
|
| 46 |
+
ষ
|
| 47 |
+
৩
|
| 48 |
+
ফ
|
| 49 |
+
ছ
|
| 50 |
+
ল
|
| 51 |
+
জ
|
| 52 |
+
আ
|
| 53 |
+
।
|
| 54 |
+
ঊ
|
| 55 |
+
ই
|
| 56 |
+
স
|
| 57 |
+
ঐ
|
| 58 |
+
উ
|
| 59 |
+
ঞ
|
| 60 |
+
া
|
| 61 |
+
্
|
| 62 |
+
ু
|
| 63 |
+
ী
|
| 64 |
+
ে
|
| 65 |
+
ং
|
| 66 |
+
ি
|
| 67 |
+
়
|
| 68 |
+
ঁ
|
| 69 |
+
ৃ
|
| 70 |
+
ো
|
| 71 |
+
ূ
|
| 72 |
+
ৈ
|
| 73 |
+
ৌ
|
| 74 |
+
ঃ
|
ocr-studio/PaddleOCR/ppocr/utils/dict/bg_dict.txt
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
!
|
| 2 |
+
#
|
| 3 |
+
$
|
| 4 |
+
%
|
| 5 |
+
&
|
| 6 |
+
'
|
| 7 |
+
(
|
| 8 |
+
+
|
| 9 |
+
,
|
| 10 |
+
-
|
| 11 |
+
.
|
| 12 |
+
/
|
| 13 |
+
0
|
| 14 |
+
1
|
| 15 |
+
2
|
| 16 |
+
3
|
| 17 |
+
4
|
| 18 |
+
5
|
| 19 |
+
6
|
| 20 |
+
7
|
| 21 |
+
8
|
| 22 |
+
9
|
| 23 |
+
:
|
| 24 |
+
?
|
| 25 |
+
@
|
| 26 |
+
A
|
| 27 |
+
B
|
| 28 |
+
C
|
| 29 |
+
D
|
| 30 |
+
E
|
| 31 |
+
F
|
| 32 |
+
G
|
| 33 |
+
H
|
| 34 |
+
I
|
| 35 |
+
J
|
| 36 |
+
K
|
| 37 |
+
L
|
| 38 |
+
M
|
| 39 |
+
N
|
| 40 |
+
O
|
| 41 |
+
P
|
| 42 |
+
Q
|
| 43 |
+
R
|
| 44 |
+
S
|
| 45 |
+
T
|
| 46 |
+
U
|
| 47 |
+
V
|
| 48 |
+
W
|
| 49 |
+
X
|
| 50 |
+
Y
|
| 51 |
+
Z
|
| 52 |
+
_
|
| 53 |
+
a
|
| 54 |
+
b
|
| 55 |
+
c
|
| 56 |
+
d
|
| 57 |
+
e
|
| 58 |
+
f
|
| 59 |
+
g
|
| 60 |
+
h
|
| 61 |
+
i
|
| 62 |
+
j
|
| 63 |
+
k
|
| 64 |
+
l
|
| 65 |
+
m
|
| 66 |
+
n
|
| 67 |
+
o
|
| 68 |
+
p
|
| 69 |
+
q
|
| 70 |
+
r
|
| 71 |
+
s
|
| 72 |
+
t
|
| 73 |
+
u
|
| 74 |
+
v
|
| 75 |
+
w
|
| 76 |
+
x
|
| 77 |
+
y
|
| 78 |
+
z
|
| 79 |
+
É
|
| 80 |
+
é
|
| 81 |
+
А
|
| 82 |
+
Б
|
| 83 |
+
В
|
| 84 |
+
Г
|
| 85 |
+
Д
|
| 86 |
+
Е
|
| 87 |
+
Ж
|
| 88 |
+
З
|
| 89 |
+
И
|
| 90 |
+
Й
|
| 91 |
+
К
|
| 92 |
+
Л
|
| 93 |
+
М
|
| 94 |
+
Н
|
| 95 |
+
О
|
| 96 |
+
П
|
| 97 |
+
Р
|
| 98 |
+
С
|
| 99 |
+
Т
|
| 100 |
+
У
|
| 101 |
+
Ф
|
| 102 |
+
Х
|
| 103 |
+
Ц
|
| 104 |
+
Ч
|
| 105 |
+
Ш
|
| 106 |
+
Щ
|
| 107 |
+
Ъ
|
| 108 |
+
Ю
|
| 109 |
+
Я
|
| 110 |
+
а
|
| 111 |
+
б
|
| 112 |
+
в
|
| 113 |
+
г
|
| 114 |
+
д
|
| 115 |
+
е
|
| 116 |
+
ж
|
| 117 |
+
з
|
| 118 |
+
и
|
| 119 |
+
й
|
| 120 |
+
к
|
| 121 |
+
л
|
| 122 |
+
м
|
| 123 |
+
н
|
| 124 |
+
о
|
| 125 |
+
п
|
| 126 |
+
р
|
| 127 |
+
с
|
| 128 |
+
т
|
| 129 |
+
у
|
| 130 |
+
ф
|
| 131 |
+
х
|
| 132 |
+
ц
|
| 133 |
+
ч
|
| 134 |
+
ш
|
| 135 |
+
щ
|
| 136 |
+
ъ
|
| 137 |
+
ь
|
| 138 |
+
ю
|
| 139 |
+
я
|
| 140 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/bm_dict.txt
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
က
|
| 2 |
+
ခ
|
| 3 |
+
ဂ
|
| 4 |
+
ဃ
|
| 5 |
+
င
|
| 6 |
+
စ
|
| 7 |
+
ဆ
|
| 8 |
+
ဇ
|
| 9 |
+
ဈ
|
| 10 |
+
ဉ
|
| 11 |
+
ည
|
| 12 |
+
ဋ
|
| 13 |
+
ဌ
|
| 14 |
+
ဍ
|
| 15 |
+
ဎ
|
| 16 |
+
ဏ
|
| 17 |
+
တ
|
| 18 |
+
ထ
|
| 19 |
+
ဒ
|
| 20 |
+
ဓ
|
| 21 |
+
န
|
| 22 |
+
ပ
|
| 23 |
+
ဖ
|
| 24 |
+
ဗ
|
| 25 |
+
ဘ
|
| 26 |
+
မ
|
| 27 |
+
ယ
|
| 28 |
+
ရ
|
| 29 |
+
လ
|
| 30 |
+
ဝ
|
| 31 |
+
သ
|
| 32 |
+
ဟ
|
| 33 |
+
ဠ
|
| 34 |
+
အ
|
| 35 |
+
ဢ
|
| 36 |
+
ဣ
|
| 37 |
+
ဤ
|
| 38 |
+
ဥ
|
| 39 |
+
ဦ
|
| 40 |
+
ဧ
|
| 41 |
+
ဨ
|
| 42 |
+
ဩ
|
| 43 |
+
ဪ
|
| 44 |
+
ါ
|
| 45 |
+
ာ
|
| 46 |
+
ိ
|
| 47 |
+
ီ
|
| 48 |
+
ု
|
| 49 |
+
ူ
|
| 50 |
+
ေ
|
| 51 |
+
ဲ
|
| 52 |
+
ဳ
|
| 53 |
+
ဴ
|
| 54 |
+
ဵ
|
| 55 |
+
ံ
|
| 56 |
+
့
|
| 57 |
+
း
|
| 58 |
+
္
|
| 59 |
+
်
|
| 60 |
+
ျ
|
| 61 |
+
ြ
|
| 62 |
+
ွ
|
| 63 |
+
ှ
|
| 64 |
+
ဿ
|
| 65 |
+
၀
|
| 66 |
+
၁
|
| 67 |
+
၂
|
| 68 |
+
၃
|
| 69 |
+
၄
|
| 70 |
+
၅
|
| 71 |
+
၆
|
| 72 |
+
၇
|
| 73 |
+
၈
|
| 74 |
+
၉
|
| 75 |
+
၊
|
| 76 |
+
။
|
| 77 |
+
၌
|
| 78 |
+
၍
|
| 79 |
+
၎
|
| 80 |
+
၏
|
| 81 |
+
ၐ
|
| 82 |
+
ၑ
|
| 83 |
+
ၒ
|
| 84 |
+
ၓ
|
| 85 |
+
ၔ
|
| 86 |
+
ၕ
|
| 87 |
+
ၖ
|
| 88 |
+
ၗ
|
| 89 |
+
ၘ
|
| 90 |
+
ၙ
|
| 91 |
+
ၚ
|
| 92 |
+
ၛ
|
| 93 |
+
ၜ
|
| 94 |
+
ၝ
|
| 95 |
+
ၞ
|
| 96 |
+
ၟ
|
| 97 |
+
ၠ
|
| 98 |
+
ၡ
|
| 99 |
+
ၢ
|
| 100 |
+
ၣ
|
| 101 |
+
ၤ
|
| 102 |
+
ၥ
|
| 103 |
+
ၦ
|
| 104 |
+
ၧ
|
| 105 |
+
ၨ
|
| 106 |
+
ၩ
|
| 107 |
+
ၪ
|
| 108 |
+
ၫ
|
| 109 |
+
ၬ
|
| 110 |
+
ၭ
|
| 111 |
+
ၮ
|
| 112 |
+
ၯ
|
| 113 |
+
ၰ
|
| 114 |
+
ၱ
|
| 115 |
+
ၲ
|
| 116 |
+
ၳ
|
| 117 |
+
ၴ
|
| 118 |
+
ၵ
|
| 119 |
+
ၶ
|
| 120 |
+
ၷ
|
| 121 |
+
ၸ
|
| 122 |
+
ၹ
|
| 123 |
+
ၺ
|
| 124 |
+
ၻ
|
| 125 |
+
ၼ
|
| 126 |
+
ၽ
|
| 127 |
+
ၾ
|
| 128 |
+
ၿ
|
| 129 |
+
ႀ
|
| 130 |
+
ႁ
|
| 131 |
+
ႂ
|
| 132 |
+
ႃ
|
| 133 |
+
ႄ
|
| 134 |
+
ႅ
|
| 135 |
+
ႆ
|
| 136 |
+
ႇ
|
| 137 |
+
ႈ
|
| 138 |
+
ႉ
|
| 139 |
+
ႊ
|
| 140 |
+
ႋ
|
| 141 |
+
ႌ
|
| 142 |
+
ႍ
|
| 143 |
+
ႎ
|
| 144 |
+
ႏ
|
| 145 |
+
႐
|
| 146 |
+
႑
|
| 147 |
+
႒
|
| 148 |
+
႓
|
| 149 |
+
႔
|
| 150 |
+
႕
|
| 151 |
+
႖
|
| 152 |
+
႗
|
| 153 |
+
႘
|
| 154 |
+
႙
|
| 155 |
+
ႚ
|
| 156 |
+
ႛ
|
| 157 |
+
ႜ
|
| 158 |
+
ႝ
|
| 159 |
+
႞
|
| 160 |
+
႟
|
ocr-studio/PaddleOCR/ppocr/utils/dict/bm_dict_add.txt
ADDED
|
@@ -0,0 +1,3219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
က
|
| 2 |
+
ခ
|
| 3 |
+
ဂ
|
| 4 |
+
ဃ
|
| 5 |
+
င
|
| 6 |
+
စ
|
| 7 |
+
ဆ
|
| 8 |
+
ဇ
|
| 9 |
+
ဈ
|
| 10 |
+
ဉ
|
| 11 |
+
ည
|
| 12 |
+
ဋ
|
| 13 |
+
ဌ
|
| 14 |
+
ဍ
|
| 15 |
+
ဎ
|
| 16 |
+
ဏ
|
| 17 |
+
တ
|
| 18 |
+
ထ
|
| 19 |
+
ဒ
|
| 20 |
+
ဓ
|
| 21 |
+
န
|
| 22 |
+
ပ
|
| 23 |
+
ဖ
|
| 24 |
+
ဗ
|
| 25 |
+
ဘ
|
| 26 |
+
မ
|
| 27 |
+
ယ
|
| 28 |
+
ရ
|
| 29 |
+
လ
|
| 30 |
+
ဝ
|
| 31 |
+
သ
|
| 32 |
+
ဟ
|
| 33 |
+
ဠ
|
| 34 |
+
အ
|
| 35 |
+
ဢ
|
| 36 |
+
ဣ
|
| 37 |
+
ဤ
|
| 38 |
+
ဥ
|
| 39 |
+
ဦ
|
| 40 |
+
ဧ
|
| 41 |
+
ဨ
|
| 42 |
+
ဩ
|
| 43 |
+
ဪ
|
| 44 |
+
ါ
|
| 45 |
+
ာ
|
| 46 |
+
ိ
|
| 47 |
+
ီ
|
| 48 |
+
ု
|
| 49 |
+
ူ
|
| 50 |
+
ေ
|
| 51 |
+
ဲ
|
| 52 |
+
ဳ
|
| 53 |
+
ဴ
|
| 54 |
+
ဵ
|
| 55 |
+
ံ
|
| 56 |
+
့
|
| 57 |
+
း
|
| 58 |
+
္
|
| 59 |
+
်
|
| 60 |
+
ျ
|
| 61 |
+
ြ
|
| 62 |
+
ွ
|
| 63 |
+
ှ
|
| 64 |
+
ဿ
|
| 65 |
+
၀
|
| 66 |
+
၁
|
| 67 |
+
၂
|
| 68 |
+
၃
|
| 69 |
+
၄
|
| 70 |
+
၅
|
| 71 |
+
၆
|
| 72 |
+
၇
|
| 73 |
+
၈
|
| 74 |
+
၉
|
| 75 |
+
၊
|
| 76 |
+
။
|
| 77 |
+
၌
|
| 78 |
+
၍
|
| 79 |
+
၎
|
| 80 |
+
၏
|
| 81 |
+
ၐ
|
| 82 |
+
ၑ
|
| 83 |
+
ၒ
|
| 84 |
+
ၓ
|
| 85 |
+
ၔ
|
| 86 |
+
ၕ
|
| 87 |
+
ၖ
|
| 88 |
+
ၗ
|
| 89 |
+
ၘ
|
| 90 |
+
ၙ
|
| 91 |
+
ၚ
|
| 92 |
+
ၛ
|
| 93 |
+
ၜ
|
| 94 |
+
ၝ
|
| 95 |
+
ၞ
|
| 96 |
+
ၟ
|
| 97 |
+
ၠ
|
| 98 |
+
ၡ
|
| 99 |
+
ၢ
|
| 100 |
+
ၣ
|
| 101 |
+
ၤ
|
| 102 |
+
ၥ
|
| 103 |
+
ၦ
|
| 104 |
+
ၧ
|
| 105 |
+
ၨ
|
| 106 |
+
ၩ
|
| 107 |
+
ၪ
|
| 108 |
+
ၫ
|
| 109 |
+
ၬ
|
| 110 |
+
ၭ
|
| 111 |
+
ၮ
|
| 112 |
+
ၯ
|
| 113 |
+
ၰ
|
| 114 |
+
ၱ
|
| 115 |
+
ၲ
|
| 116 |
+
ၳ
|
| 117 |
+
ၴ
|
| 118 |
+
ၵ
|
| 119 |
+
ၶ
|
| 120 |
+
ၷ
|
| 121 |
+
ၸ
|
| 122 |
+
ၹ
|
| 123 |
+
ၺ
|
| 124 |
+
ၻ
|
| 125 |
+
ၼ
|
| 126 |
+
ၽ
|
| 127 |
+
ၾ
|
| 128 |
+
ၿ
|
| 129 |
+
ႀ
|
| 130 |
+
ႁ
|
| 131 |
+
ႂ
|
| 132 |
+
ႃ
|
| 133 |
+
ႄ
|
| 134 |
+
ႅ
|
| 135 |
+
ႆ
|
| 136 |
+
ႇ
|
| 137 |
+
ႈ
|
| 138 |
+
ႉ
|
| 139 |
+
ႊ
|
| 140 |
+
ႋ
|
| 141 |
+
ႌ
|
| 142 |
+
ႍ
|
| 143 |
+
ႎ
|
| 144 |
+
ႏ
|
| 145 |
+
႐
|
| 146 |
+
႑
|
| 147 |
+
႒
|
| 148 |
+
႓
|
| 149 |
+
႔
|
| 150 |
+
႕
|
| 151 |
+
႖
|
| 152 |
+
႗
|
| 153 |
+
႘
|
| 154 |
+
႙
|
| 155 |
+
ႚ
|
| 156 |
+
ႛ
|
| 157 |
+
ႜ
|
| 158 |
+
ႝ
|
| 159 |
+
႞
|
| 160 |
+
႟
|
| 161 |
+
|
| 162 |
+
Ⴀ
|
| 163 |
+
Ⴁ
|
| 164 |
+
Ⴂ
|
| 165 |
+
Ⴃ
|
| 166 |
+
Ⴄ
|
| 167 |
+
Ⴅ
|
| 168 |
+
Ⴆ
|
| 169 |
+
Ⴇ
|
| 170 |
+
Ⴈ
|
| 171 |
+
Ⴉ
|
| 172 |
+
Ⴊ
|
| 173 |
+
Ⴋ
|
| 174 |
+
ᄀ
|
| 175 |
+
ᄁ
|
| 176 |
+
ᄂ
|
| 177 |
+
ᄃ
|
| 178 |
+
ᄄ
|
| 179 |
+
ᄅ
|
| 180 |
+
ᄆ
|
| 181 |
+
ᄇ
|
| 182 |
+
ᄈ
|
| 183 |
+
ᄉ
|
| 184 |
+
ᄊ
|
| 185 |
+
ᄋ
|
| 186 |
+
ᄌ
|
| 187 |
+
ᄍ
|
| 188 |
+
ᄎ
|
| 189 |
+
ᄏ
|
| 190 |
+
ᄐ
|
| 191 |
+
ᄑ
|
| 192 |
+
ᄒ
|
| 193 |
+
|
| 194 |
+
ဠ
|
| 195 |
+
အ
|
| 196 |
+
ဢ
|
| 197 |
+
ဣ
|
| 198 |
+
ဤ
|
| 199 |
+
ဥ
|
| 200 |
+
ဦ
|
| 201 |
+
ဧ
|
| 202 |
+
ဨ
|
| 203 |
+
ဩ
|
| 204 |
+
ဪ
|
| 205 |
+
ါ
|
| 206 |
+
ာ
|
| 207 |
+
ိ
|
| 208 |
+
ီ
|
| 209 |
+
ု
|
| 210 |
+
ူ
|
| 211 |
+
ေ
|
| 212 |
+
ဲ
|
| 213 |
+
ဳ
|
| 214 |
+
ဴ
|
| 215 |
+
ဵ
|
| 216 |
+
ံ
|
| 217 |
+
့
|
| 218 |
+
း
|
| 219 |
+
္
|
| 220 |
+
်
|
| 221 |
+
ျ
|
| 222 |
+
ြ
|
| 223 |
+
ွ
|
| 224 |
+
ှ
|
| 225 |
+
ဿ
|
| 226 |
+
၀
|
| 227 |
+
၁
|
| 228 |
+
၂
|
| 229 |
+
၃
|
| 230 |
+
၄
|
| 231 |
+
၅
|
| 232 |
+
၆
|
| 233 |
+
၇
|
| 234 |
+
၈
|
| 235 |
+
၉
|
| 236 |
+
၊
|
| 237 |
+
။
|
| 238 |
+
၌
|
| 239 |
+
၍
|
| 240 |
+
၎
|
| 241 |
+
၏
|
| 242 |
+
ၐ
|
| 243 |
+
ၑ
|
| 244 |
+
ၒ
|
| 245 |
+
ၓ
|
| 246 |
+
ၔ
|
| 247 |
+
ၕ
|
| 248 |
+
ၖ
|
| 249 |
+
ၗ
|
| 250 |
+
ၘ
|
| 251 |
+
ၙ
|
| 252 |
+
ၚ
|
| 253 |
+
ၛ
|
| 254 |
+
ၜ
|
| 255 |
+
ၝ
|
| 256 |
+
ၞ
|
| 257 |
+
ၟ
|
| 258 |
+
ၠ
|
| 259 |
+
ၡ
|
| 260 |
+
ၢ
|
| 261 |
+
ၣ
|
| 262 |
+
ၤ
|
| 263 |
+
ၥ
|
| 264 |
+
ၦ
|
| 265 |
+
ၧ
|
| 266 |
+
ၨ
|
| 267 |
+
ၩ
|
| 268 |
+
ၪ
|
| 269 |
+
ၫ
|
| 270 |
+
ၬ
|
| 271 |
+
ၭ
|
| 272 |
+
ၮ
|
| 273 |
+
ၯ
|
| 274 |
+
ၰ
|
| 275 |
+
ၱ
|
| 276 |
+
ၲ
|
| 277 |
+
ၳ
|
| 278 |
+
ၴ
|
| 279 |
+
ၵ
|
| 280 |
+
ၶ
|
| 281 |
+
ၷ
|
| 282 |
+
ၸ
|
| 283 |
+
ၹ
|
| 284 |
+
ၺ
|
| 285 |
+
ၻ
|
| 286 |
+
ၼ
|
| 287 |
+
ၽ
|
| 288 |
+
ၾ
|
| 289 |
+
ၿ
|
| 290 |
+
ႀ
|
| 291 |
+
ႁ
|
| 292 |
+
ႂ
|
| 293 |
+
ႃ
|
| 294 |
+
ႄ
|
| 295 |
+
ႅ
|
| 296 |
+
ႆ
|
| 297 |
+
ႇ
|
| 298 |
+
ႈ
|
| 299 |
+
ႉ
|
| 300 |
+
ႊ
|
| 301 |
+
ႋ
|
| 302 |
+
ႌ
|
| 303 |
+
ႍ
|
| 304 |
+
ႎ
|
| 305 |
+
ႏ
|
| 306 |
+
႐
|
| 307 |
+
႑
|
| 308 |
+
႒
|
| 309 |
+
႓
|
| 310 |
+
႔
|
| 311 |
+
႕
|
| 312 |
+
႖
|
| 313 |
+
႗
|
| 314 |
+
႘
|
| 315 |
+
႙
|
| 316 |
+
ႚ
|
| 317 |
+
ႛ
|
| 318 |
+
ႜ
|
| 319 |
+
ႝ
|
| 320 |
+
႞
|
| 321 |
+
႟
|
| 322 |
+
|
| 323 |
+
က
|
| 324 |
+
ခ
|
| 325 |
+
ဂ
|
| 326 |
+
ဃ
|
| 327 |
+
င
|
| 328 |
+
စ
|
| 329 |
+
ဆ
|
| 330 |
+
ဇ
|
| 331 |
+
ဈ
|
| 332 |
+
ဉ
|
| 333 |
+
ည
|
| 334 |
+
ဋ
|
| 335 |
+
ဌ
|
| 336 |
+
ဍ
|
| 337 |
+
ဎ
|
| 338 |
+
ဏ
|
| 339 |
+
တ
|
| 340 |
+
ထ
|
| 341 |
+
ဒ
|
| 342 |
+
ဓ
|
| 343 |
+
န
|
| 344 |
+
ပ
|
| 345 |
+
ဖ
|
| 346 |
+
ဗ
|
| 347 |
+
ဘ
|
| 348 |
+
မ
|
| 349 |
+
ယ
|
| 350 |
+
ရ
|
| 351 |
+
လ
|
| 352 |
+
ဝ
|
| 353 |
+
သ
|
| 354 |
+
ဟ
|
| 355 |
+
ဠ
|
| 356 |
+
အ
|
| 357 |
+
ဢ
|
| 358 |
+
ဣ
|
| 359 |
+
ဤ
|
| 360 |
+
ဥ
|
| 361 |
+
ဦ
|
| 362 |
+
ဧ
|
| 363 |
+
ဨ
|
| 364 |
+
ဩ
|
| 365 |
+
ဪ
|
| 366 |
+
ါ
|
| 367 |
+
ာ
|
| 368 |
+
ိ
|
| 369 |
+
ီ
|
| 370 |
+
ု
|
| 371 |
+
ူ
|
| 372 |
+
ေ
|
| 373 |
+
ဲ
|
| 374 |
+
ဳ
|
| 375 |
+
ဴ
|
| 376 |
+
ဵ
|
| 377 |
+
ံ
|
| 378 |
+
့
|
| 379 |
+
း
|
| 380 |
+
္
|
| 381 |
+
်
|
| 382 |
+
ျ
|
| 383 |
+
ြ
|
| 384 |
+
ွ
|
| 385 |
+
ှ
|
| 386 |
+
ဿ
|
| 387 |
+
၀
|
| 388 |
+
၁
|
| 389 |
+
၂
|
| 390 |
+
၃
|
| 391 |
+
၄
|
| 392 |
+
၅
|
| 393 |
+
၆
|
| 394 |
+
၇
|
| 395 |
+
၈
|
| 396 |
+
၉
|
| 397 |
+
၊
|
| 398 |
+
။
|
| 399 |
+
၌
|
| 400 |
+
၍
|
| 401 |
+
၎
|
| 402 |
+
၏
|
| 403 |
+
ၐ
|
| 404 |
+
ၑ
|
| 405 |
+
ၒ
|
| 406 |
+
ၓ
|
| 407 |
+
ၔ
|
| 408 |
+
ၕ
|
| 409 |
+
ၖ
|
| 410 |
+
ၗ
|
| 411 |
+
ၘ
|
| 412 |
+
ၙ
|
| 413 |
+
ၚ
|
| 414 |
+
ၛ
|
| 415 |
+
ၜ
|
| 416 |
+
ၝ
|
| 417 |
+
ၞ
|
| 418 |
+
ၟ
|
| 419 |
+
ၠ
|
| 420 |
+
ၡ
|
| 421 |
+
ၢ
|
| 422 |
+
ၣ
|
| 423 |
+
ၤ
|
| 424 |
+
ၥ
|
| 425 |
+
ၦ
|
| 426 |
+
ၧ
|
| 427 |
+
ၨ
|
| 428 |
+
ၩ
|
| 429 |
+
ၪ
|
| 430 |
+
ၫ
|
| 431 |
+
ၬ
|
| 432 |
+
ၭ
|
| 433 |
+
ၮ
|
| 434 |
+
ၯ
|
| 435 |
+
ၰ
|
| 436 |
+
ၱ
|
| 437 |
+
ၲ
|
| 438 |
+
ၳ
|
| 439 |
+
ၴ
|
| 440 |
+
ၵ
|
| 441 |
+
ၶ
|
| 442 |
+
ၷ
|
| 443 |
+
ၸ
|
| 444 |
+
ၹ
|
| 445 |
+
ၺ
|
| 446 |
+
ၻ
|
| 447 |
+
ၼ
|
| 448 |
+
ၽ
|
| 449 |
+
ၾ
|
| 450 |
+
ၿ
|
| 451 |
+
ႀ
|
| 452 |
+
ႁ
|
| 453 |
+
ႂ
|
| 454 |
+
ႃ
|
| 455 |
+
ႄ
|
| 456 |
+
ႅ
|
| 457 |
+
ႆ
|
| 458 |
+
ႇ
|
| 459 |
+
ႈ
|
| 460 |
+
ႉ
|
| 461 |
+
ႊ
|
| 462 |
+
ႋ
|
| 463 |
+
ႌ
|
| 464 |
+
ႍ
|
| 465 |
+
ႎ
|
| 466 |
+
ႏ
|
| 467 |
+
႐
|
| 468 |
+
႑
|
| 469 |
+
႒
|
| 470 |
+
႓
|
| 471 |
+
႔
|
| 472 |
+
႕
|
| 473 |
+
႖
|
| 474 |
+
႗
|
| 475 |
+
႘
|
| 476 |
+
႙
|
| 477 |
+
ႚ
|
| 478 |
+
ႛ
|
| 479 |
+
ႜ
|
| 480 |
+
ႝ
|
| 481 |
+
႞
|
| 482 |
+
႟
|
| 483 |
+
|
| 484 |
+
Ⴀ
|
| 485 |
+
Ⴁ
|
| 486 |
+
Ⴂ
|
| 487 |
+
Ⴃ
|
| 488 |
+
Ⴄ
|
| 489 |
+
Ⴅ
|
| 490 |
+
Ⴆ
|
| 491 |
+
Ⴇ
|
| 492 |
+
Ⴈ
|
| 493 |
+
Ⴉ
|
| 494 |
+
Ⴊ
|
| 495 |
+
Ⴋ
|
| 496 |
+
ᄀ
|
| 497 |
+
ᄁ
|
| 498 |
+
ᄂ
|
| 499 |
+
ᄃ
|
| 500 |
+
ᄄ
|
| 501 |
+
ᄅ
|
| 502 |
+
ᄆ
|
| 503 |
+
ᄇ
|
| 504 |
+
ᄈ
|
| 505 |
+
ᄉ
|
| 506 |
+
ᄊ
|
| 507 |
+
ᄋ
|
| 508 |
+
ᄌ
|
| 509 |
+
ᄍ
|
| 510 |
+
ᄎ
|
| 511 |
+
ᄏ
|
| 512 |
+
ᄐ
|
| 513 |
+
ᄑ
|
| 514 |
+
ᄒ
|
| 515 |
+
|
| 516 |
+
ဠ
|
| 517 |
+
အ
|
| 518 |
+
ဢ
|
| 519 |
+
ဣ
|
| 520 |
+
ဤ
|
| 521 |
+
ဥ
|
| 522 |
+
ဦ
|
| 523 |
+
ဧ
|
| 524 |
+
ဨ
|
| 525 |
+
ဩ
|
| 526 |
+
ဪ
|
| 527 |
+
ါ
|
| 528 |
+
ာ
|
| 529 |
+
ိ
|
| 530 |
+
ီ
|
| 531 |
+
ု
|
| 532 |
+
ူ
|
| 533 |
+
ေ
|
| 534 |
+
ဲ
|
| 535 |
+
ဳ
|
| 536 |
+
ဴ
|
| 537 |
+
ဵ
|
| 538 |
+
ံ
|
| 539 |
+
့
|
| 540 |
+
း
|
| 541 |
+
္
|
| 542 |
+
်
|
| 543 |
+
ျ
|
| 544 |
+
ြ
|
| 545 |
+
ွ
|
| 546 |
+
ှ
|
| 547 |
+
ဿ
|
| 548 |
+
၀
|
| 549 |
+
၁
|
| 550 |
+
၂
|
| 551 |
+
၃
|
| 552 |
+
၄
|
| 553 |
+
၅
|
| 554 |
+
၆
|
| 555 |
+
၇
|
| 556 |
+
၈
|
| 557 |
+
၉
|
| 558 |
+
၊
|
| 559 |
+
။
|
| 560 |
+
၌
|
| 561 |
+
၍
|
| 562 |
+
၎
|
| 563 |
+
၏
|
| 564 |
+
ၐ
|
| 565 |
+
ၑ
|
| 566 |
+
ၒ
|
| 567 |
+
ၓ
|
| 568 |
+
ၔ
|
| 569 |
+
ၕ
|
| 570 |
+
ၖ
|
| 571 |
+
ၗ
|
| 572 |
+
ၘ
|
| 573 |
+
ၙ
|
| 574 |
+
ၚ
|
| 575 |
+
ၛ
|
| 576 |
+
ၜ
|
| 577 |
+
ၝ
|
| 578 |
+
ၞ
|
| 579 |
+
ၟ
|
| 580 |
+
ၠ
|
| 581 |
+
ၡ
|
| 582 |
+
ၢ
|
| 583 |
+
ၣ
|
| 584 |
+
ၤ
|
| 585 |
+
ၥ
|
| 586 |
+
ၦ
|
| 587 |
+
ၧ
|
| 588 |
+
ၨ
|
| 589 |
+
ၩ
|
| 590 |
+
ၪ
|
| 591 |
+
ၫ
|
| 592 |
+
ၬ
|
| 593 |
+
ၭ
|
| 594 |
+
ၮ
|
| 595 |
+
ၯ
|
| 596 |
+
ၰ
|
| 597 |
+
ၱ
|
| 598 |
+
ၲ
|
| 599 |
+
ၳ
|
| 600 |
+
ၴ
|
| 601 |
+
ၵ
|
| 602 |
+
ၶ
|
| 603 |
+
ၷ
|
| 604 |
+
ၸ
|
| 605 |
+
ၹ
|
| 606 |
+
ၺ
|
| 607 |
+
ၻ
|
| 608 |
+
ၼ
|
| 609 |
+
ၽ
|
| 610 |
+
ၾ
|
| 611 |
+
ၿ
|
| 612 |
+
ႀ
|
| 613 |
+
ႁ
|
| 614 |
+
ႂ
|
| 615 |
+
ႃ
|
| 616 |
+
ႄ
|
| 617 |
+
ႅ
|
| 618 |
+
ႆ
|
| 619 |
+
ႇ
|
| 620 |
+
ႈ
|
| 621 |
+
ႉ
|
| 622 |
+
ႊ
|
| 623 |
+
ႋ
|
| 624 |
+
ႌ
|
| 625 |
+
ႍ
|
| 626 |
+
ႎ
|
| 627 |
+
ႏ
|
| 628 |
+
႐
|
| 629 |
+
႑
|
| 630 |
+
႒
|
| 631 |
+
႓
|
| 632 |
+
႔
|
| 633 |
+
႕
|
| 634 |
+
႖
|
| 635 |
+
႗
|
| 636 |
+
႘
|
| 637 |
+
႙
|
| 638 |
+
ႚ
|
| 639 |
+
ႛ
|
| 640 |
+
ႜ
|
| 641 |
+
ႝ
|
| 642 |
+
႞
|
| 643 |
+
႟
|
| 644 |
+
|
| 645 |
+
က
|
| 646 |
+
ခ
|
| 647 |
+
ဂ
|
| 648 |
+
ဃ
|
| 649 |
+
င
|
| 650 |
+
စ
|
| 651 |
+
ဆ
|
| 652 |
+
ဇ
|
| 653 |
+
ဈ
|
| 654 |
+
ဉ
|
| 655 |
+
ည
|
| 656 |
+
ဋ
|
| 657 |
+
ဌ
|
| 658 |
+
ဍ
|
| 659 |
+
ဎ
|
| 660 |
+
ဏ
|
| 661 |
+
တ
|
| 662 |
+
ထ
|
| 663 |
+
ဒ
|
| 664 |
+
ဓ
|
| 665 |
+
န
|
| 666 |
+
ပ
|
| 667 |
+
ဖ
|
| 668 |
+
ဗ
|
| 669 |
+
ဘ
|
| 670 |
+
မ
|
| 671 |
+
ယ
|
| 672 |
+
ရ
|
| 673 |
+
လ
|
| 674 |
+
ဝ
|
| 675 |
+
သ
|
| 676 |
+
ဟ
|
| 677 |
+
ဠ
|
| 678 |
+
အ
|
| 679 |
+
ဢ
|
| 680 |
+
ဣ
|
| 681 |
+
ဤ
|
| 682 |
+
ဥ
|
| 683 |
+
ဦ
|
| 684 |
+
ဧ
|
| 685 |
+
ဨ
|
| 686 |
+
ဩ
|
| 687 |
+
ဪ
|
| 688 |
+
ါ
|
| 689 |
+
ာ
|
| 690 |
+
ိ
|
| 691 |
+
ီ
|
| 692 |
+
ု
|
| 693 |
+
ူ
|
| 694 |
+
ေ
|
| 695 |
+
ဲ
|
| 696 |
+
ဳ
|
| 697 |
+
ဴ
|
| 698 |
+
ဵ
|
| 699 |
+
ံ
|
| 700 |
+
့
|
| 701 |
+
း
|
| 702 |
+
္
|
| 703 |
+
်
|
| 704 |
+
ျ
|
| 705 |
+
ြ
|
| 706 |
+
ွ
|
| 707 |
+
ှ
|
| 708 |
+
ဿ
|
| 709 |
+
၀
|
| 710 |
+
၁
|
| 711 |
+
၂
|
| 712 |
+
၃
|
| 713 |
+
၄
|
| 714 |
+
၅
|
| 715 |
+
၆
|
| 716 |
+
၇
|
| 717 |
+
၈
|
| 718 |
+
၉
|
| 719 |
+
၊
|
| 720 |
+
။
|
| 721 |
+
၌
|
| 722 |
+
၍
|
| 723 |
+
၎
|
| 724 |
+
၏
|
| 725 |
+
ၐ
|
| 726 |
+
ၑ
|
| 727 |
+
ၒ
|
| 728 |
+
ၓ
|
| 729 |
+
ၔ
|
| 730 |
+
ၕ
|
| 731 |
+
ၖ
|
| 732 |
+
ၗ
|
| 733 |
+
ၘ
|
| 734 |
+
ၙ
|
| 735 |
+
ၚ
|
| 736 |
+
ၛ
|
| 737 |
+
ၜ
|
| 738 |
+
ၝ
|
| 739 |
+
ၞ
|
| 740 |
+
ၟ
|
| 741 |
+
ၠ
|
| 742 |
+
ၡ
|
| 743 |
+
ၢ
|
| 744 |
+
ၣ
|
| 745 |
+
ၤ
|
| 746 |
+
ၥ
|
| 747 |
+
ၦ
|
| 748 |
+
ၧ
|
| 749 |
+
ၨ
|
| 750 |
+
ၩ
|
| 751 |
+
ၪ
|
| 752 |
+
ၫ
|
| 753 |
+
ၬ
|
| 754 |
+
ၭ
|
| 755 |
+
ၮ
|
| 756 |
+
ၯ
|
| 757 |
+
ၰ
|
| 758 |
+
ၱ
|
| 759 |
+
ၲ
|
| 760 |
+
ၳ
|
| 761 |
+
ၴ
|
| 762 |
+
ၵ
|
| 763 |
+
ၶ
|
| 764 |
+
ၷ
|
| 765 |
+
ၸ
|
| 766 |
+
ၹ
|
| 767 |
+
ၺ
|
| 768 |
+
ၻ
|
| 769 |
+
ၼ
|
| 770 |
+
ၽ
|
| 771 |
+
ၾ
|
| 772 |
+
ၿ
|
| 773 |
+
ႀ
|
| 774 |
+
ႁ
|
| 775 |
+
ႂ
|
| 776 |
+
ႃ
|
| 777 |
+
ႄ
|
| 778 |
+
ႅ
|
| 779 |
+
ႆ
|
| 780 |
+
ႇ
|
| 781 |
+
ႈ
|
| 782 |
+
ႉ
|
| 783 |
+
ႊ
|
| 784 |
+
ႋ
|
| 785 |
+
ႌ
|
| 786 |
+
ႍ
|
| 787 |
+
ႎ
|
| 788 |
+
ႏ
|
| 789 |
+
႐
|
| 790 |
+
႑
|
| 791 |
+
႒
|
| 792 |
+
႓
|
| 793 |
+
႔
|
| 794 |
+
႕
|
| 795 |
+
႖
|
| 796 |
+
႗
|
| 797 |
+
႘
|
| 798 |
+
႙
|
| 799 |
+
ႚ
|
| 800 |
+
ႛ
|
| 801 |
+
ႜ
|
| 802 |
+
ႝ
|
| 803 |
+
႞
|
| 804 |
+
႟
|
| 805 |
+
|
| 806 |
+
Ⴀ
|
| 807 |
+
Ⴁ
|
| 808 |
+
Ⴂ
|
| 809 |
+
Ⴃ
|
| 810 |
+
Ⴄ
|
| 811 |
+
Ⴅ
|
| 812 |
+
Ⴆ
|
| 813 |
+
Ⴇ
|
| 814 |
+
Ⴈ
|
| 815 |
+
Ⴉ
|
| 816 |
+
Ⴊ
|
| 817 |
+
Ⴋ
|
| 818 |
+
ᄀ
|
| 819 |
+
ᄁ
|
| 820 |
+
ᄂ
|
| 821 |
+
ᄃ
|
| 822 |
+
ᄄ
|
| 823 |
+
ᄅ
|
| 824 |
+
ᄆ
|
| 825 |
+
ᄇ
|
| 826 |
+
ᄈ
|
| 827 |
+
ᄉ
|
| 828 |
+
ᄊ
|
| 829 |
+
ᄋ
|
| 830 |
+
ᄌ
|
| 831 |
+
ᄍ
|
| 832 |
+
ᄎ
|
| 833 |
+
ᄏ
|
| 834 |
+
ᄐ
|
| 835 |
+
ᄑ
|
| 836 |
+
ᄒ
|
| 837 |
+
|
| 838 |
+
ဠ
|
| 839 |
+
အ
|
| 840 |
+
ဢ
|
| 841 |
+
ဣ
|
| 842 |
+
ဤ
|
| 843 |
+
ဥ
|
| 844 |
+
ဦ
|
| 845 |
+
ဧ
|
| 846 |
+
ဨ
|
| 847 |
+
ဩ
|
| 848 |
+
ဪ
|
| 849 |
+
ါ
|
| 850 |
+
ာ
|
| 851 |
+
ိ
|
| 852 |
+
ီ
|
| 853 |
+
ု
|
| 854 |
+
ူ
|
| 855 |
+
ေ
|
| 856 |
+
ဲ
|
| 857 |
+
ဳ
|
| 858 |
+
ဴ
|
| 859 |
+
ဵ
|
| 860 |
+
ံ
|
| 861 |
+
့
|
| 862 |
+
း
|
| 863 |
+
္
|
| 864 |
+
်
|
| 865 |
+
ျ
|
| 866 |
+
ြ
|
| 867 |
+
ွ
|
| 868 |
+
ှ
|
| 869 |
+
ဿ
|
| 870 |
+
၀
|
| 871 |
+
၁
|
| 872 |
+
၂
|
| 873 |
+
၃
|
| 874 |
+
၄
|
| 875 |
+
၅
|
| 876 |
+
၆
|
| 877 |
+
၇
|
| 878 |
+
၈
|
| 879 |
+
၉
|
| 880 |
+
၊
|
| 881 |
+
။
|
| 882 |
+
၌
|
| 883 |
+
၍
|
| 884 |
+
၎
|
| 885 |
+
၏
|
| 886 |
+
ၐ
|
| 887 |
+
ၑ
|
| 888 |
+
ၒ
|
| 889 |
+
ၓ
|
| 890 |
+
ၔ
|
| 891 |
+
ၕ
|
| 892 |
+
ၖ
|
| 893 |
+
ၗ
|
| 894 |
+
ၘ
|
| 895 |
+
ၙ
|
| 896 |
+
ၚ
|
| 897 |
+
ၛ
|
| 898 |
+
ၜ
|
| 899 |
+
ၝ
|
| 900 |
+
ၞ
|
| 901 |
+
ၟ
|
| 902 |
+
ၠ
|
| 903 |
+
ၡ
|
| 904 |
+
ၢ
|
| 905 |
+
ၣ
|
| 906 |
+
ၤ
|
| 907 |
+
ၥ
|
| 908 |
+
ၦ
|
| 909 |
+
ၧ
|
| 910 |
+
ၨ
|
| 911 |
+
ၩ
|
| 912 |
+
ၪ
|
| 913 |
+
ၫ
|
| 914 |
+
ၬ
|
| 915 |
+
ၭ
|
| 916 |
+
ၮ
|
| 917 |
+
ၯ
|
| 918 |
+
ၰ
|
| 919 |
+
ၱ
|
| 920 |
+
ၲ
|
| 921 |
+
ၳ
|
| 922 |
+
ၴ
|
| 923 |
+
ၵ
|
| 924 |
+
ၶ
|
| 925 |
+
ၷ
|
| 926 |
+
ၸ
|
| 927 |
+
ၹ
|
| 928 |
+
ၺ
|
| 929 |
+
ၻ
|
| 930 |
+
ၼ
|
| 931 |
+
ၽ
|
| 932 |
+
ၾ
|
| 933 |
+
ၿ
|
| 934 |
+
ႀ
|
| 935 |
+
ႁ
|
| 936 |
+
ႂ
|
| 937 |
+
ႃ
|
| 938 |
+
ႄ
|
| 939 |
+
ႅ
|
| 940 |
+
ႆ
|
| 941 |
+
ႇ
|
| 942 |
+
ႈ
|
| 943 |
+
ႉ
|
| 944 |
+
ႊ
|
| 945 |
+
ႋ
|
| 946 |
+
ႌ
|
| 947 |
+
ႍ
|
| 948 |
+
ႎ
|
| 949 |
+
ႏ
|
| 950 |
+
႐
|
| 951 |
+
႑
|
| 952 |
+
႒
|
| 953 |
+
႓
|
| 954 |
+
႔
|
| 955 |
+
႕
|
| 956 |
+
႖
|
| 957 |
+
႗
|
| 958 |
+
႘
|
| 959 |
+
႙
|
| 960 |
+
ႚ
|
| 961 |
+
ႛ
|
| 962 |
+
ႜ
|
| 963 |
+
ႝ
|
| 964 |
+
႞
|
| 965 |
+
႟
|
| 966 |
+
|
| 967 |
+
က
|
| 968 |
+
ခ
|
| 969 |
+
ဂ
|
| 970 |
+
ဃ
|
| 971 |
+
င
|
| 972 |
+
စ
|
| 973 |
+
ဆ
|
| 974 |
+
ဇ
|
| 975 |
+
ဈ
|
| 976 |
+
ဉ
|
| 977 |
+
ည
|
| 978 |
+
ဋ
|
| 979 |
+
ဌ
|
| 980 |
+
ဍ
|
| 981 |
+
ဎ
|
| 982 |
+
ဏ
|
| 983 |
+
တ
|
| 984 |
+
ထ
|
| 985 |
+
ဒ
|
| 986 |
+
ဓ
|
| 987 |
+
န
|
| 988 |
+
ပ
|
| 989 |
+
ဖ
|
| 990 |
+
ဗ
|
| 991 |
+
ဘ
|
| 992 |
+
မ
|
| 993 |
+
ယ
|
| 994 |
+
ရ
|
| 995 |
+
လ
|
| 996 |
+
ဝ
|
| 997 |
+
သ
|
| 998 |
+
ဟ
|
| 999 |
+
ဠ
|
| 1000 |
+
အ
|
| 1001 |
+
ဢ
|
| 1002 |
+
ဣ
|
| 1003 |
+
ဤ
|
| 1004 |
+
ဥ
|
| 1005 |
+
ဦ
|
| 1006 |
+
ဧ
|
| 1007 |
+
ဨ
|
| 1008 |
+
ဩ
|
| 1009 |
+
ဪ
|
| 1010 |
+
ါ
|
| 1011 |
+
ာ
|
| 1012 |
+
ိ
|
| 1013 |
+
ီ
|
| 1014 |
+
ု
|
| 1015 |
+
ူ
|
| 1016 |
+
ေ
|
| 1017 |
+
ဲ
|
| 1018 |
+
ဳ
|
| 1019 |
+
ဴ
|
| 1020 |
+
ဵ
|
| 1021 |
+
ံ
|
| 1022 |
+
့
|
| 1023 |
+
း
|
| 1024 |
+
္
|
| 1025 |
+
်
|
| 1026 |
+
ျ
|
| 1027 |
+
ြ
|
| 1028 |
+
ွ
|
| 1029 |
+
ှ
|
| 1030 |
+
ဿ
|
| 1031 |
+
၀
|
| 1032 |
+
၁
|
| 1033 |
+
၂
|
| 1034 |
+
၃
|
| 1035 |
+
၄
|
| 1036 |
+
၅
|
| 1037 |
+
၆
|
| 1038 |
+
၇
|
| 1039 |
+
၈
|
| 1040 |
+
၉
|
| 1041 |
+
၊
|
| 1042 |
+
။
|
| 1043 |
+
၌
|
| 1044 |
+
၍
|
| 1045 |
+
၎
|
| 1046 |
+
၏
|
| 1047 |
+
ၐ
|
| 1048 |
+
ၑ
|
| 1049 |
+
ၒ
|
| 1050 |
+
ၓ
|
| 1051 |
+
ၔ
|
| 1052 |
+
ၕ
|
| 1053 |
+
ၖ
|
| 1054 |
+
ၗ
|
| 1055 |
+
ၘ
|
| 1056 |
+
ၙ
|
| 1057 |
+
ၚ
|
| 1058 |
+
ၛ
|
| 1059 |
+
ၜ
|
| 1060 |
+
ၝ
|
| 1061 |
+
ၞ
|
| 1062 |
+
ၟ
|
| 1063 |
+
ၠ
|
| 1064 |
+
ၡ
|
| 1065 |
+
ၢ
|
| 1066 |
+
ၣ
|
| 1067 |
+
ၤ
|
| 1068 |
+
ၥ
|
| 1069 |
+
ၦ
|
| 1070 |
+
ၧ
|
| 1071 |
+
ၨ
|
| 1072 |
+
ၩ
|
| 1073 |
+
ၪ
|
| 1074 |
+
ၫ
|
| 1075 |
+
ၬ
|
| 1076 |
+
ၭ
|
| 1077 |
+
ၮ
|
| 1078 |
+
ၯ
|
| 1079 |
+
ၰ
|
| 1080 |
+
ၱ
|
| 1081 |
+
ၲ
|
| 1082 |
+
ၳ
|
| 1083 |
+
ၴ
|
| 1084 |
+
ၵ
|
| 1085 |
+
ၶ
|
| 1086 |
+
ၷ
|
| 1087 |
+
ၸ
|
| 1088 |
+
ၹ
|
| 1089 |
+
ၺ
|
| 1090 |
+
ၻ
|
| 1091 |
+
ၼ
|
| 1092 |
+
ၽ
|
| 1093 |
+
ၾ
|
| 1094 |
+
ၿ
|
| 1095 |
+
ႀ
|
| 1096 |
+
ႁ
|
| 1097 |
+
ႂ
|
| 1098 |
+
ႃ
|
| 1099 |
+
ႄ
|
| 1100 |
+
ႅ
|
| 1101 |
+
ႆ
|
| 1102 |
+
ႇ
|
| 1103 |
+
ႈ
|
| 1104 |
+
ႉ
|
| 1105 |
+
ႊ
|
| 1106 |
+
ႋ
|
| 1107 |
+
ႌ
|
| 1108 |
+
ႍ
|
| 1109 |
+
ႎ
|
| 1110 |
+
ႏ
|
| 1111 |
+
႐
|
| 1112 |
+
႑
|
| 1113 |
+
႒
|
| 1114 |
+
႓
|
| 1115 |
+
႔
|
| 1116 |
+
႕
|
| 1117 |
+
႖
|
| 1118 |
+
႗
|
| 1119 |
+
႘
|
| 1120 |
+
႙
|
| 1121 |
+
ႚ
|
| 1122 |
+
ႛ
|
| 1123 |
+
ႜ
|
| 1124 |
+
ႝ
|
| 1125 |
+
႞
|
| 1126 |
+
႟
|
| 1127 |
+
|
| 1128 |
+
Ⴀ
|
| 1129 |
+
Ⴁ
|
| 1130 |
+
Ⴂ
|
| 1131 |
+
Ⴃ
|
| 1132 |
+
Ⴄ
|
| 1133 |
+
Ⴅ
|
| 1134 |
+
Ⴆ
|
| 1135 |
+
Ⴇ
|
| 1136 |
+
Ⴈ
|
| 1137 |
+
Ⴉ
|
| 1138 |
+
Ⴊ
|
| 1139 |
+
Ⴋ
|
| 1140 |
+
ᄀ
|
| 1141 |
+
ᄁ
|
| 1142 |
+
ᄂ
|
| 1143 |
+
ᄃ
|
| 1144 |
+
ᄄ
|
| 1145 |
+
ᄅ
|
| 1146 |
+
ᄆ
|
| 1147 |
+
ᄇ
|
| 1148 |
+
ᄈ
|
| 1149 |
+
ᄉ
|
| 1150 |
+
ᄊ
|
| 1151 |
+
ᄋ
|
| 1152 |
+
ᄌ
|
| 1153 |
+
ᄍ
|
| 1154 |
+
ᄎ
|
| 1155 |
+
ᄏ
|
| 1156 |
+
ᄐ
|
| 1157 |
+
ᄑ
|
| 1158 |
+
ᄒ
|
| 1159 |
+
|
| 1160 |
+
ဠ
|
| 1161 |
+
အ
|
| 1162 |
+
ဢ
|
| 1163 |
+
ဣ
|
| 1164 |
+
ဤ
|
| 1165 |
+
ဥ
|
| 1166 |
+
ဦ
|
| 1167 |
+
ဧ
|
| 1168 |
+
ဨ
|
| 1169 |
+
ဩ
|
| 1170 |
+
ဪ
|
| 1171 |
+
ါ
|
| 1172 |
+
ာ
|
| 1173 |
+
ိ
|
| 1174 |
+
ီ
|
| 1175 |
+
ု
|
| 1176 |
+
ူ
|
| 1177 |
+
ေ
|
| 1178 |
+
ဲ
|
| 1179 |
+
ဳ
|
| 1180 |
+
ဴ
|
| 1181 |
+
ဵ
|
| 1182 |
+
ံ
|
| 1183 |
+
့
|
| 1184 |
+
း
|
| 1185 |
+
္
|
| 1186 |
+
်
|
| 1187 |
+
ျ
|
| 1188 |
+
ြ
|
| 1189 |
+
ွ
|
| 1190 |
+
ှ
|
| 1191 |
+
ဿ
|
| 1192 |
+
၀
|
| 1193 |
+
၁
|
| 1194 |
+
၂
|
| 1195 |
+
၃
|
| 1196 |
+
၄
|
| 1197 |
+
၅
|
| 1198 |
+
၆
|
| 1199 |
+
၇
|
| 1200 |
+
၈
|
| 1201 |
+
၉
|
| 1202 |
+
၊
|
| 1203 |
+
။
|
| 1204 |
+
၌
|
| 1205 |
+
၍
|
| 1206 |
+
၎
|
| 1207 |
+
၏
|
| 1208 |
+
ၐ
|
| 1209 |
+
ၑ
|
| 1210 |
+
ၒ
|
| 1211 |
+
ၓ
|
| 1212 |
+
ၔ
|
| 1213 |
+
ၕ
|
| 1214 |
+
ၖ
|
| 1215 |
+
ၗ
|
| 1216 |
+
ၘ
|
| 1217 |
+
ၙ
|
| 1218 |
+
ၚ
|
| 1219 |
+
ၛ
|
| 1220 |
+
ၜ
|
| 1221 |
+
ၝ
|
| 1222 |
+
ၞ
|
| 1223 |
+
ၟ
|
| 1224 |
+
ၠ
|
| 1225 |
+
ၡ
|
| 1226 |
+
ၢ
|
| 1227 |
+
ၣ
|
| 1228 |
+
ၤ
|
| 1229 |
+
ၥ
|
| 1230 |
+
ၦ
|
| 1231 |
+
ၧ
|
| 1232 |
+
ၨ
|
| 1233 |
+
ၩ
|
| 1234 |
+
ၪ
|
| 1235 |
+
ၫ
|
| 1236 |
+
ၬ
|
| 1237 |
+
ၭ
|
| 1238 |
+
ၮ
|
| 1239 |
+
ၯ
|
| 1240 |
+
ၰ
|
| 1241 |
+
ၱ
|
| 1242 |
+
ၲ
|
| 1243 |
+
ၳ
|
| 1244 |
+
ၴ
|
| 1245 |
+
ၵ
|
| 1246 |
+
ၶ
|
| 1247 |
+
ၷ
|
| 1248 |
+
ၸ
|
| 1249 |
+
ၹ
|
| 1250 |
+
ၺ
|
| 1251 |
+
ၻ
|
| 1252 |
+
ၼ
|
| 1253 |
+
ၽ
|
| 1254 |
+
ၾ
|
| 1255 |
+
ၿ
|
| 1256 |
+
ႀ
|
| 1257 |
+
ႁ
|
| 1258 |
+
ႂ
|
| 1259 |
+
ႃ
|
| 1260 |
+
ႄ
|
| 1261 |
+
ႅ
|
| 1262 |
+
ႆ
|
| 1263 |
+
ႇ
|
| 1264 |
+
ႈ
|
| 1265 |
+
ႉ
|
| 1266 |
+
ႊ
|
| 1267 |
+
ႋ
|
| 1268 |
+
ႌ
|
| 1269 |
+
ႍ
|
| 1270 |
+
ႎ
|
| 1271 |
+
ႏ
|
| 1272 |
+
႐
|
| 1273 |
+
႑
|
| 1274 |
+
႒
|
| 1275 |
+
႓
|
| 1276 |
+
႔
|
| 1277 |
+
႕
|
| 1278 |
+
႖
|
| 1279 |
+
႗
|
| 1280 |
+
႘
|
| 1281 |
+
႙
|
| 1282 |
+
ႚ
|
| 1283 |
+
ႛ
|
| 1284 |
+
ႜ
|
| 1285 |
+
ႝ
|
| 1286 |
+
႞
|
| 1287 |
+
႟
|
| 1288 |
+
|
| 1289 |
+
က
|
| 1290 |
+
ခ
|
| 1291 |
+
ဂ
|
| 1292 |
+
ဃ
|
| 1293 |
+
င
|
| 1294 |
+
စ
|
| 1295 |
+
ဆ
|
| 1296 |
+
ဇ
|
| 1297 |
+
ဈ
|
| 1298 |
+
ဉ
|
| 1299 |
+
ည
|
| 1300 |
+
ဋ
|
| 1301 |
+
ဌ
|
| 1302 |
+
ဍ
|
| 1303 |
+
ဎ
|
| 1304 |
+
ဏ
|
| 1305 |
+
တ
|
| 1306 |
+
ထ
|
| 1307 |
+
ဒ
|
| 1308 |
+
ဓ
|
| 1309 |
+
န
|
| 1310 |
+
ပ
|
| 1311 |
+
ဖ
|
| 1312 |
+
ဗ
|
| 1313 |
+
ဘ
|
| 1314 |
+
မ
|
| 1315 |
+
ယ
|
| 1316 |
+
ရ
|
| 1317 |
+
လ
|
| 1318 |
+
ဝ
|
| 1319 |
+
သ
|
| 1320 |
+
ဟ
|
| 1321 |
+
ဠ
|
| 1322 |
+
အ
|
| 1323 |
+
ဢ
|
| 1324 |
+
ဣ
|
| 1325 |
+
ဤ
|
| 1326 |
+
ဥ
|
| 1327 |
+
ဦ
|
| 1328 |
+
ဧ
|
| 1329 |
+
ဨ
|
| 1330 |
+
ဩ
|
| 1331 |
+
ဪ
|
| 1332 |
+
ါ
|
| 1333 |
+
ာ
|
| 1334 |
+
ိ
|
| 1335 |
+
ီ
|
| 1336 |
+
ု
|
| 1337 |
+
ူ
|
| 1338 |
+
ေ
|
| 1339 |
+
ဲ
|
| 1340 |
+
ဳ
|
| 1341 |
+
ဴ
|
| 1342 |
+
ဵ
|
| 1343 |
+
ံ
|
| 1344 |
+
့
|
| 1345 |
+
း
|
| 1346 |
+
္
|
| 1347 |
+
်
|
| 1348 |
+
ျ
|
| 1349 |
+
ြ
|
| 1350 |
+
ွ
|
| 1351 |
+
ှ
|
| 1352 |
+
ဿ
|
| 1353 |
+
၀
|
| 1354 |
+
၁
|
| 1355 |
+
၂
|
| 1356 |
+
၃
|
| 1357 |
+
၄
|
| 1358 |
+
၅
|
| 1359 |
+
၆
|
| 1360 |
+
၇
|
| 1361 |
+
၈
|
| 1362 |
+
၉
|
| 1363 |
+
၊
|
| 1364 |
+
။
|
| 1365 |
+
၌
|
| 1366 |
+
၍
|
| 1367 |
+
၎
|
| 1368 |
+
၏
|
| 1369 |
+
ၐ
|
| 1370 |
+
ၑ
|
| 1371 |
+
ၒ
|
| 1372 |
+
ၓ
|
| 1373 |
+
ၔ
|
| 1374 |
+
ၕ
|
| 1375 |
+
ၖ
|
| 1376 |
+
ၗ
|
| 1377 |
+
ၘ
|
| 1378 |
+
ၙ
|
| 1379 |
+
ၚ
|
| 1380 |
+
ၛ
|
| 1381 |
+
ၜ
|
| 1382 |
+
ၝ
|
| 1383 |
+
ၞ
|
| 1384 |
+
ၟ
|
| 1385 |
+
ၠ
|
| 1386 |
+
ၡ
|
| 1387 |
+
ၢ
|
| 1388 |
+
ၣ
|
| 1389 |
+
ၤ
|
| 1390 |
+
ၥ
|
| 1391 |
+
ၦ
|
| 1392 |
+
ၧ
|
| 1393 |
+
ၨ
|
| 1394 |
+
ၩ
|
| 1395 |
+
ၪ
|
| 1396 |
+
ၫ
|
| 1397 |
+
ၬ
|
| 1398 |
+
ၭ
|
| 1399 |
+
ၮ
|
| 1400 |
+
ၯ
|
| 1401 |
+
ၰ
|
| 1402 |
+
ၱ
|
| 1403 |
+
ၲ
|
| 1404 |
+
ၳ
|
| 1405 |
+
ၴ
|
| 1406 |
+
ၵ
|
| 1407 |
+
ၶ
|
| 1408 |
+
ၷ
|
| 1409 |
+
ၸ
|
| 1410 |
+
ၹ
|
| 1411 |
+
ၺ
|
| 1412 |
+
ၻ
|
| 1413 |
+
ၼ
|
| 1414 |
+
ၽ
|
| 1415 |
+
ၾ
|
| 1416 |
+
ၿ
|
| 1417 |
+
ႀ
|
| 1418 |
+
ႁ
|
| 1419 |
+
ႂ
|
| 1420 |
+
ႃ
|
| 1421 |
+
ႄ
|
| 1422 |
+
ႅ
|
| 1423 |
+
ႆ
|
| 1424 |
+
ႇ
|
| 1425 |
+
ႈ
|
| 1426 |
+
ႉ
|
| 1427 |
+
ႊ
|
| 1428 |
+
ႋ
|
| 1429 |
+
ႌ
|
| 1430 |
+
ႍ
|
| 1431 |
+
ႎ
|
| 1432 |
+
ႏ
|
| 1433 |
+
႐
|
| 1434 |
+
႑
|
| 1435 |
+
႒
|
| 1436 |
+
႓
|
| 1437 |
+
႔
|
| 1438 |
+
႕
|
| 1439 |
+
႖
|
| 1440 |
+
႗
|
| 1441 |
+
႘
|
| 1442 |
+
႙
|
| 1443 |
+
ႚ
|
| 1444 |
+
ႛ
|
| 1445 |
+
ႜ
|
| 1446 |
+
ႝ
|
| 1447 |
+
႞
|
| 1448 |
+
႟
|
| 1449 |
+
|
| 1450 |
+
Ⴀ
|
| 1451 |
+
Ⴁ
|
| 1452 |
+
Ⴂ
|
| 1453 |
+
Ⴃ
|
| 1454 |
+
Ⴄ
|
| 1455 |
+
Ⴅ
|
| 1456 |
+
Ⴆ
|
| 1457 |
+
Ⴇ
|
| 1458 |
+
Ⴈ
|
| 1459 |
+
Ⴉ
|
| 1460 |
+
Ⴊ
|
| 1461 |
+
Ⴋ
|
| 1462 |
+
ᄀ
|
| 1463 |
+
ᄁ
|
| 1464 |
+
ᄂ
|
| 1465 |
+
ᄃ
|
| 1466 |
+
ᄄ
|
| 1467 |
+
ᄅ
|
| 1468 |
+
ᄆ
|
| 1469 |
+
ᄇ
|
| 1470 |
+
ᄈ
|
| 1471 |
+
ᄉ
|
| 1472 |
+
ᄊ
|
| 1473 |
+
ᄋ
|
| 1474 |
+
ᄌ
|
| 1475 |
+
ᄍ
|
| 1476 |
+
ᄎ
|
| 1477 |
+
ᄏ
|
| 1478 |
+
ᄐ
|
| 1479 |
+
ᄑ
|
| 1480 |
+
ᄒ
|
| 1481 |
+
|
| 1482 |
+
ဠ
|
| 1483 |
+
အ
|
| 1484 |
+
ဢ
|
| 1485 |
+
ဣ
|
| 1486 |
+
ဤ
|
| 1487 |
+
ဥ
|
| 1488 |
+
ဦ
|
| 1489 |
+
ဧ
|
| 1490 |
+
ဨ
|
| 1491 |
+
ဩ
|
| 1492 |
+
ဪ
|
| 1493 |
+
ါ
|
| 1494 |
+
ာ
|
| 1495 |
+
ိ
|
| 1496 |
+
ီ
|
| 1497 |
+
ု
|
| 1498 |
+
ူ
|
| 1499 |
+
ေ
|
| 1500 |
+
ဲ
|
| 1501 |
+
ဳ
|
| 1502 |
+
ဴ
|
| 1503 |
+
ဵ
|
| 1504 |
+
ံ
|
| 1505 |
+
့
|
| 1506 |
+
း
|
| 1507 |
+
္
|
| 1508 |
+
်
|
| 1509 |
+
ျ
|
| 1510 |
+
ြ
|
| 1511 |
+
ွ
|
| 1512 |
+
ှ
|
| 1513 |
+
ဿ
|
| 1514 |
+
၀
|
| 1515 |
+
၁
|
| 1516 |
+
၂
|
| 1517 |
+
၃
|
| 1518 |
+
၄
|
| 1519 |
+
၅
|
| 1520 |
+
၆
|
| 1521 |
+
၇
|
| 1522 |
+
၈
|
| 1523 |
+
၉
|
| 1524 |
+
၊
|
| 1525 |
+
။
|
| 1526 |
+
၌
|
| 1527 |
+
၍
|
| 1528 |
+
၎
|
| 1529 |
+
၏
|
| 1530 |
+
ၐ
|
| 1531 |
+
ၑ
|
| 1532 |
+
ၒ
|
| 1533 |
+
ၓ
|
| 1534 |
+
ၔ
|
| 1535 |
+
ၕ
|
| 1536 |
+
ၖ
|
| 1537 |
+
ၗ
|
| 1538 |
+
ၘ
|
| 1539 |
+
ၙ
|
| 1540 |
+
ၚ
|
| 1541 |
+
ၛ
|
| 1542 |
+
ၜ
|
| 1543 |
+
ၝ
|
| 1544 |
+
ၞ
|
| 1545 |
+
ၟ
|
| 1546 |
+
ၠ
|
| 1547 |
+
ၡ
|
| 1548 |
+
ၢ
|
| 1549 |
+
ၣ
|
| 1550 |
+
ၤ
|
| 1551 |
+
ၥ
|
| 1552 |
+
ၦ
|
| 1553 |
+
ၧ
|
| 1554 |
+
ၨ
|
| 1555 |
+
ၩ
|
| 1556 |
+
ၪ
|
| 1557 |
+
ၫ
|
| 1558 |
+
ၬ
|
| 1559 |
+
ၭ
|
| 1560 |
+
ၮ
|
| 1561 |
+
ၯ
|
| 1562 |
+
ၰ
|
| 1563 |
+
ၱ
|
| 1564 |
+
ၲ
|
| 1565 |
+
ၳ
|
| 1566 |
+
ၴ
|
| 1567 |
+
ၵ
|
| 1568 |
+
ၶ
|
| 1569 |
+
ၷ
|
| 1570 |
+
ၸ
|
| 1571 |
+
ၹ
|
| 1572 |
+
ၺ
|
| 1573 |
+
ၻ
|
| 1574 |
+
ၼ
|
| 1575 |
+
ၽ
|
| 1576 |
+
ၾ
|
| 1577 |
+
ၿ
|
| 1578 |
+
ႀ
|
| 1579 |
+
ႁ
|
| 1580 |
+
ႂ
|
| 1581 |
+
ႃ
|
| 1582 |
+
ႄ
|
| 1583 |
+
ႅ
|
| 1584 |
+
ႆ
|
| 1585 |
+
ႇ
|
| 1586 |
+
ႈ
|
| 1587 |
+
ႉ
|
| 1588 |
+
ႊ
|
| 1589 |
+
ႋ
|
| 1590 |
+
ႌ
|
| 1591 |
+
ႍ
|
| 1592 |
+
ႎ
|
| 1593 |
+
ႏ
|
| 1594 |
+
႐
|
| 1595 |
+
႑
|
| 1596 |
+
႒
|
| 1597 |
+
႓
|
| 1598 |
+
႔
|
| 1599 |
+
႕
|
| 1600 |
+
႖
|
| 1601 |
+
႗
|
| 1602 |
+
႘
|
| 1603 |
+
႙
|
| 1604 |
+
ႚ
|
| 1605 |
+
ႛ
|
| 1606 |
+
ႜ
|
| 1607 |
+
ႝ
|
| 1608 |
+
႞
|
| 1609 |
+
႟
|
| 1610 |
+
|
| 1611 |
+
က
|
| 1612 |
+
ခ
|
| 1613 |
+
ဂ
|
| 1614 |
+
ဃ
|
| 1615 |
+
င
|
| 1616 |
+
စ
|
| 1617 |
+
ဆ
|
| 1618 |
+
ဇ
|
| 1619 |
+
ဈ
|
| 1620 |
+
ဉ
|
| 1621 |
+
ည
|
| 1622 |
+
ဋ
|
| 1623 |
+
ဌ
|
| 1624 |
+
ဍ
|
| 1625 |
+
ဎ
|
| 1626 |
+
ဏ
|
| 1627 |
+
တ
|
| 1628 |
+
ထ
|
| 1629 |
+
ဒ
|
| 1630 |
+
ဓ
|
| 1631 |
+
န
|
| 1632 |
+
ပ
|
| 1633 |
+
ဖ
|
| 1634 |
+
ဗ
|
| 1635 |
+
ဘ
|
| 1636 |
+
မ
|
| 1637 |
+
ယ
|
| 1638 |
+
ရ
|
| 1639 |
+
လ
|
| 1640 |
+
ဝ
|
| 1641 |
+
သ
|
| 1642 |
+
ဟ
|
| 1643 |
+
ဠ
|
| 1644 |
+
အ
|
| 1645 |
+
ဢ
|
| 1646 |
+
ဣ
|
| 1647 |
+
ဤ
|
| 1648 |
+
ဥ
|
| 1649 |
+
ဦ
|
| 1650 |
+
ဧ
|
| 1651 |
+
ဨ
|
| 1652 |
+
ဩ
|
| 1653 |
+
ဪ
|
| 1654 |
+
ါ
|
| 1655 |
+
ာ
|
| 1656 |
+
ိ
|
| 1657 |
+
ီ
|
| 1658 |
+
ု
|
| 1659 |
+
ူ
|
| 1660 |
+
ေ
|
| 1661 |
+
ဲ
|
| 1662 |
+
ဳ
|
| 1663 |
+
ဴ
|
| 1664 |
+
ဵ
|
| 1665 |
+
ံ
|
| 1666 |
+
့
|
| 1667 |
+
း
|
| 1668 |
+
္
|
| 1669 |
+
်
|
| 1670 |
+
ျ
|
| 1671 |
+
ြ
|
| 1672 |
+
ွ
|
| 1673 |
+
ှ
|
| 1674 |
+
ဿ
|
| 1675 |
+
၀
|
| 1676 |
+
၁
|
| 1677 |
+
၂
|
| 1678 |
+
၃
|
| 1679 |
+
၄
|
| 1680 |
+
၅
|
| 1681 |
+
၆
|
| 1682 |
+
၇
|
| 1683 |
+
၈
|
| 1684 |
+
၉
|
| 1685 |
+
၊
|
| 1686 |
+
။
|
| 1687 |
+
၌
|
| 1688 |
+
၍
|
| 1689 |
+
၎
|
| 1690 |
+
၏
|
| 1691 |
+
ၐ
|
| 1692 |
+
ၑ
|
| 1693 |
+
ၒ
|
| 1694 |
+
ၓ
|
| 1695 |
+
ၔ
|
| 1696 |
+
ၕ
|
| 1697 |
+
ၖ
|
| 1698 |
+
ၗ
|
| 1699 |
+
ၘ
|
| 1700 |
+
ၙ
|
| 1701 |
+
ၚ
|
| 1702 |
+
ၛ
|
| 1703 |
+
ၜ
|
| 1704 |
+
ၝ
|
| 1705 |
+
ၞ
|
| 1706 |
+
ၟ
|
| 1707 |
+
ၠ
|
| 1708 |
+
ၡ
|
| 1709 |
+
ၢ
|
| 1710 |
+
ၣ
|
| 1711 |
+
ၤ
|
| 1712 |
+
ၥ
|
| 1713 |
+
ၦ
|
| 1714 |
+
ၧ
|
| 1715 |
+
ၨ
|
| 1716 |
+
ၩ
|
| 1717 |
+
ၪ
|
| 1718 |
+
ၫ
|
| 1719 |
+
ၬ
|
| 1720 |
+
ၭ
|
| 1721 |
+
ၮ
|
| 1722 |
+
ၯ
|
| 1723 |
+
ၰ
|
| 1724 |
+
ၱ
|
| 1725 |
+
ၲ
|
| 1726 |
+
ၳ
|
| 1727 |
+
ၴ
|
| 1728 |
+
ၵ
|
| 1729 |
+
ၶ
|
| 1730 |
+
ၷ
|
| 1731 |
+
ၸ
|
| 1732 |
+
ၹ
|
| 1733 |
+
ၺ
|
| 1734 |
+
ၻ
|
| 1735 |
+
ၼ
|
| 1736 |
+
ၽ
|
| 1737 |
+
ၾ
|
| 1738 |
+
ၿ
|
| 1739 |
+
ႀ
|
| 1740 |
+
ႁ
|
| 1741 |
+
ႂ
|
| 1742 |
+
ႃ
|
| 1743 |
+
ႄ
|
| 1744 |
+
ႅ
|
| 1745 |
+
ႆ
|
| 1746 |
+
ႇ
|
| 1747 |
+
ႈ
|
| 1748 |
+
ႉ
|
| 1749 |
+
ႊ
|
| 1750 |
+
ႋ
|
| 1751 |
+
ႌ
|
| 1752 |
+
ႍ
|
| 1753 |
+
ႎ
|
| 1754 |
+
ႏ
|
| 1755 |
+
႐
|
| 1756 |
+
႑
|
| 1757 |
+
႒
|
| 1758 |
+
႓
|
| 1759 |
+
႔
|
| 1760 |
+
႕
|
| 1761 |
+
႖
|
| 1762 |
+
႗
|
| 1763 |
+
႘
|
| 1764 |
+
႙
|
| 1765 |
+
ႚ
|
| 1766 |
+
ႛ
|
| 1767 |
+
ႜ
|
| 1768 |
+
ႝ
|
| 1769 |
+
႞
|
| 1770 |
+
႟
|
| 1771 |
+
|
| 1772 |
+
Ⴀ
|
| 1773 |
+
Ⴁ
|
| 1774 |
+
Ⴂ
|
| 1775 |
+
Ⴃ
|
| 1776 |
+
Ⴄ
|
| 1777 |
+
Ⴅ
|
| 1778 |
+
Ⴆ
|
| 1779 |
+
Ⴇ
|
| 1780 |
+
Ⴈ
|
| 1781 |
+
Ⴉ
|
| 1782 |
+
Ⴊ
|
| 1783 |
+
Ⴋ
|
| 1784 |
+
ᄀ
|
| 1785 |
+
ᄁ
|
| 1786 |
+
ᄂ
|
| 1787 |
+
ᄃ
|
| 1788 |
+
ᄄ
|
| 1789 |
+
ᄅ
|
| 1790 |
+
ᄆ
|
| 1791 |
+
ᄇ
|
| 1792 |
+
ᄈ
|
| 1793 |
+
ᄉ
|
| 1794 |
+
ᄊ
|
| 1795 |
+
ᄋ
|
| 1796 |
+
ᄌ
|
| 1797 |
+
ᄍ
|
| 1798 |
+
ᄎ
|
| 1799 |
+
ᄏ
|
| 1800 |
+
ᄐ
|
| 1801 |
+
ᄑ
|
| 1802 |
+
ᄒ
|
| 1803 |
+
|
| 1804 |
+
ဠ
|
| 1805 |
+
အ
|
| 1806 |
+
ဢ
|
| 1807 |
+
ဣ
|
| 1808 |
+
ဤ
|
| 1809 |
+
ဥ
|
| 1810 |
+
ဦ
|
| 1811 |
+
ဧ
|
| 1812 |
+
ဨ
|
| 1813 |
+
ဩ
|
| 1814 |
+
ဪ
|
| 1815 |
+
ါ
|
| 1816 |
+
ာ
|
| 1817 |
+
ိ
|
| 1818 |
+
ီ
|
| 1819 |
+
ု
|
| 1820 |
+
ူ
|
| 1821 |
+
ေ
|
| 1822 |
+
ဲ
|
| 1823 |
+
ဳ
|
| 1824 |
+
ဴ
|
| 1825 |
+
ဵ
|
| 1826 |
+
ံ
|
| 1827 |
+
့
|
| 1828 |
+
း
|
| 1829 |
+
္
|
| 1830 |
+
်
|
| 1831 |
+
ျ
|
| 1832 |
+
ြ
|
| 1833 |
+
ွ
|
| 1834 |
+
ှ
|
| 1835 |
+
ဿ
|
| 1836 |
+
၀
|
| 1837 |
+
၁
|
| 1838 |
+
၂
|
| 1839 |
+
၃
|
| 1840 |
+
၄
|
| 1841 |
+
၅
|
| 1842 |
+
၆
|
| 1843 |
+
၇
|
| 1844 |
+
၈
|
| 1845 |
+
၉
|
| 1846 |
+
၊
|
| 1847 |
+
။
|
| 1848 |
+
၌
|
| 1849 |
+
၍
|
| 1850 |
+
၎
|
| 1851 |
+
၏
|
| 1852 |
+
ၐ
|
| 1853 |
+
ၑ
|
| 1854 |
+
ၒ
|
| 1855 |
+
ၓ
|
| 1856 |
+
ၔ
|
| 1857 |
+
ၕ
|
| 1858 |
+
ၖ
|
| 1859 |
+
ၗ
|
| 1860 |
+
ၘ
|
| 1861 |
+
ၙ
|
| 1862 |
+
ၚ
|
| 1863 |
+
ၛ
|
| 1864 |
+
ၜ
|
| 1865 |
+
ၝ
|
| 1866 |
+
ၞ
|
| 1867 |
+
ၟ
|
| 1868 |
+
ၠ
|
| 1869 |
+
ၡ
|
| 1870 |
+
ၢ
|
| 1871 |
+
ၣ
|
| 1872 |
+
ၤ
|
| 1873 |
+
ၥ
|
| 1874 |
+
ၦ
|
| 1875 |
+
ၧ
|
| 1876 |
+
ၨ
|
| 1877 |
+
ၩ
|
| 1878 |
+
ၪ
|
| 1879 |
+
ၫ
|
| 1880 |
+
ၬ
|
| 1881 |
+
ၭ
|
| 1882 |
+
ၮ
|
| 1883 |
+
ၯ
|
| 1884 |
+
ၰ
|
| 1885 |
+
ၱ
|
| 1886 |
+
ၲ
|
| 1887 |
+
ၳ
|
| 1888 |
+
ၴ
|
| 1889 |
+
ၵ
|
| 1890 |
+
ၶ
|
| 1891 |
+
ၷ
|
| 1892 |
+
ၸ
|
| 1893 |
+
ၹ
|
| 1894 |
+
ၺ
|
| 1895 |
+
ၻ
|
| 1896 |
+
ၼ
|
| 1897 |
+
ၽ
|
| 1898 |
+
ၾ
|
| 1899 |
+
ၿ
|
| 1900 |
+
ႀ
|
| 1901 |
+
ႁ
|
| 1902 |
+
ႂ
|
| 1903 |
+
ႃ
|
| 1904 |
+
ႄ
|
| 1905 |
+
ႅ
|
| 1906 |
+
ႆ
|
| 1907 |
+
ႇ
|
| 1908 |
+
ႈ
|
| 1909 |
+
ႉ
|
| 1910 |
+
ႊ
|
| 1911 |
+
ႋ
|
| 1912 |
+
ႌ
|
| 1913 |
+
ႍ
|
| 1914 |
+
ႎ
|
| 1915 |
+
ႏ
|
| 1916 |
+
႐
|
| 1917 |
+
႑
|
| 1918 |
+
႒
|
| 1919 |
+
႓
|
| 1920 |
+
႔
|
| 1921 |
+
႕
|
| 1922 |
+
႖
|
| 1923 |
+
႗
|
| 1924 |
+
႘
|
| 1925 |
+
႙
|
| 1926 |
+
ႚ
|
| 1927 |
+
ႛ
|
| 1928 |
+
ႜ
|
| 1929 |
+
ႝ
|
| 1930 |
+
႞
|
| 1931 |
+
႟
|
| 1932 |
+
|
| 1933 |
+
က
|
| 1934 |
+
ခ
|
| 1935 |
+
ဂ
|
| 1936 |
+
ဃ
|
| 1937 |
+
င
|
| 1938 |
+
စ
|
| 1939 |
+
ဆ
|
| 1940 |
+
ဇ
|
| 1941 |
+
ဈ
|
| 1942 |
+
ဉ
|
| 1943 |
+
ည
|
| 1944 |
+
ဋ
|
| 1945 |
+
ဌ
|
| 1946 |
+
ဍ
|
| 1947 |
+
ဎ
|
| 1948 |
+
ဏ
|
| 1949 |
+
တ
|
| 1950 |
+
ထ
|
| 1951 |
+
ဒ
|
| 1952 |
+
ဓ
|
| 1953 |
+
န
|
| 1954 |
+
ပ
|
| 1955 |
+
ဖ
|
| 1956 |
+
ဗ
|
| 1957 |
+
ဘ
|
| 1958 |
+
မ
|
| 1959 |
+
ယ
|
| 1960 |
+
ရ
|
| 1961 |
+
လ
|
| 1962 |
+
ဝ
|
| 1963 |
+
သ
|
| 1964 |
+
ဟ
|
| 1965 |
+
ဠ
|
| 1966 |
+
အ
|
| 1967 |
+
ဢ
|
| 1968 |
+
ဣ
|
| 1969 |
+
ဤ
|
| 1970 |
+
ဥ
|
| 1971 |
+
ဦ
|
| 1972 |
+
ဧ
|
| 1973 |
+
ဨ
|
| 1974 |
+
ဩ
|
| 1975 |
+
ဪ
|
| 1976 |
+
ါ
|
| 1977 |
+
ာ
|
| 1978 |
+
ိ
|
| 1979 |
+
ီ
|
| 1980 |
+
ု
|
| 1981 |
+
ူ
|
| 1982 |
+
ေ
|
| 1983 |
+
ဲ
|
| 1984 |
+
ဳ
|
| 1985 |
+
ဴ
|
| 1986 |
+
ဵ
|
| 1987 |
+
ံ
|
| 1988 |
+
့
|
| 1989 |
+
း
|
| 1990 |
+
္
|
| 1991 |
+
်
|
| 1992 |
+
ျ
|
| 1993 |
+
ြ
|
| 1994 |
+
ွ
|
| 1995 |
+
ှ
|
| 1996 |
+
ဿ
|
| 1997 |
+
၀
|
| 1998 |
+
၁
|
| 1999 |
+
၂
|
| 2000 |
+
၃
|
| 2001 |
+
၄
|
| 2002 |
+
၅
|
| 2003 |
+
၆
|
| 2004 |
+
၇
|
| 2005 |
+
၈
|
| 2006 |
+
၉
|
| 2007 |
+
၊
|
| 2008 |
+
။
|
| 2009 |
+
၌
|
| 2010 |
+
၍
|
| 2011 |
+
၎
|
| 2012 |
+
၏
|
| 2013 |
+
ၐ
|
| 2014 |
+
ၑ
|
| 2015 |
+
ၒ
|
| 2016 |
+
ၓ
|
| 2017 |
+
ၔ
|
| 2018 |
+
ၕ
|
| 2019 |
+
ၖ
|
| 2020 |
+
ၗ
|
| 2021 |
+
ၘ
|
| 2022 |
+
ၙ
|
| 2023 |
+
ၚ
|
| 2024 |
+
ၛ
|
| 2025 |
+
ၜ
|
| 2026 |
+
ၝ
|
| 2027 |
+
ၞ
|
| 2028 |
+
ၟ
|
| 2029 |
+
ၠ
|
| 2030 |
+
ၡ
|
| 2031 |
+
ၢ
|
| 2032 |
+
ၣ
|
| 2033 |
+
ၤ
|
| 2034 |
+
ၥ
|
| 2035 |
+
ၦ
|
| 2036 |
+
ၧ
|
| 2037 |
+
ၨ
|
| 2038 |
+
ၩ
|
| 2039 |
+
ၪ
|
| 2040 |
+
ၫ
|
| 2041 |
+
ၬ
|
| 2042 |
+
ၭ
|
| 2043 |
+
ၮ
|
| 2044 |
+
ၯ
|
| 2045 |
+
ၰ
|
| 2046 |
+
ၱ
|
| 2047 |
+
ၲ
|
| 2048 |
+
ၳ
|
| 2049 |
+
ၴ
|
| 2050 |
+
ၵ
|
| 2051 |
+
ၶ
|
| 2052 |
+
ၷ
|
| 2053 |
+
ၸ
|
| 2054 |
+
ၹ
|
| 2055 |
+
ၺ
|
| 2056 |
+
ၻ
|
| 2057 |
+
ၼ
|
| 2058 |
+
ၽ
|
| 2059 |
+
ၾ
|
| 2060 |
+
ၿ
|
| 2061 |
+
ႀ
|
| 2062 |
+
ႁ
|
| 2063 |
+
ႂ
|
| 2064 |
+
ႃ
|
| 2065 |
+
ႄ
|
| 2066 |
+
ႅ
|
| 2067 |
+
ႆ
|
| 2068 |
+
ႇ
|
| 2069 |
+
ႈ
|
| 2070 |
+
ႉ
|
| 2071 |
+
ႊ
|
| 2072 |
+
ႋ
|
| 2073 |
+
ႌ
|
| 2074 |
+
ႍ
|
| 2075 |
+
ႎ
|
| 2076 |
+
ႏ
|
| 2077 |
+
႐
|
| 2078 |
+
႑
|
| 2079 |
+
႒
|
| 2080 |
+
႓
|
| 2081 |
+
႔
|
| 2082 |
+
႕
|
| 2083 |
+
႖
|
| 2084 |
+
႗
|
| 2085 |
+
႘
|
| 2086 |
+
႙
|
| 2087 |
+
ႚ
|
| 2088 |
+
ႛ
|
| 2089 |
+
ႜ
|
| 2090 |
+
ႝ
|
| 2091 |
+
႞
|
| 2092 |
+
႟
|
| 2093 |
+
|
| 2094 |
+
Ⴀ
|
| 2095 |
+
Ⴁ
|
| 2096 |
+
Ⴂ
|
| 2097 |
+
Ⴃ
|
| 2098 |
+
Ⴄ
|
| 2099 |
+
Ⴅ
|
| 2100 |
+
Ⴆ
|
| 2101 |
+
Ⴇ
|
| 2102 |
+
Ⴈ
|
| 2103 |
+
Ⴉ
|
| 2104 |
+
Ⴊ
|
| 2105 |
+
Ⴋ
|
| 2106 |
+
ᄀ
|
| 2107 |
+
ᄁ
|
| 2108 |
+
ᄂ
|
| 2109 |
+
ᄃ
|
| 2110 |
+
ᄄ
|
| 2111 |
+
ᄅ
|
| 2112 |
+
ᄆ
|
| 2113 |
+
ᄇ
|
| 2114 |
+
ᄈ
|
| 2115 |
+
ᄉ
|
| 2116 |
+
ᄊ
|
| 2117 |
+
ᄋ
|
| 2118 |
+
ᄌ
|
| 2119 |
+
ᄍ
|
| 2120 |
+
ᄎ
|
| 2121 |
+
ᄏ
|
| 2122 |
+
ᄐ
|
| 2123 |
+
ᄑ
|
| 2124 |
+
ᄒ
|
| 2125 |
+
|
| 2126 |
+
ဠ
|
| 2127 |
+
အ
|
| 2128 |
+
ဢ
|
| 2129 |
+
ဣ
|
| 2130 |
+
ဤ
|
| 2131 |
+
ဥ
|
| 2132 |
+
ဦ
|
| 2133 |
+
ဧ
|
| 2134 |
+
ဨ
|
| 2135 |
+
ဩ
|
| 2136 |
+
ဪ
|
| 2137 |
+
ါ
|
| 2138 |
+
ာ
|
| 2139 |
+
ိ
|
| 2140 |
+
ီ
|
| 2141 |
+
ု
|
| 2142 |
+
ူ
|
| 2143 |
+
ေ
|
| 2144 |
+
ဲ
|
| 2145 |
+
ဳ
|
| 2146 |
+
ဴ
|
| 2147 |
+
ဵ
|
| 2148 |
+
ံ
|
| 2149 |
+
့
|
| 2150 |
+
း
|
| 2151 |
+
္
|
| 2152 |
+
်
|
| 2153 |
+
ျ
|
| 2154 |
+
ြ
|
| 2155 |
+
ွ
|
| 2156 |
+
ှ
|
| 2157 |
+
ဿ
|
| 2158 |
+
၀
|
| 2159 |
+
၁
|
| 2160 |
+
၂
|
| 2161 |
+
၃
|
| 2162 |
+
၄
|
| 2163 |
+
၅
|
| 2164 |
+
၆
|
| 2165 |
+
၇
|
| 2166 |
+
၈
|
| 2167 |
+
၉
|
| 2168 |
+
၊
|
| 2169 |
+
။
|
| 2170 |
+
၌
|
| 2171 |
+
၍
|
| 2172 |
+
၎
|
| 2173 |
+
၏
|
| 2174 |
+
ၐ
|
| 2175 |
+
ၑ
|
| 2176 |
+
ၒ
|
| 2177 |
+
ၓ
|
| 2178 |
+
ၔ
|
| 2179 |
+
ၕ
|
| 2180 |
+
ၖ
|
| 2181 |
+
ၗ
|
| 2182 |
+
ၘ
|
| 2183 |
+
ၙ
|
| 2184 |
+
ၚ
|
| 2185 |
+
ၛ
|
| 2186 |
+
ၜ
|
| 2187 |
+
ၝ
|
| 2188 |
+
ၞ
|
| 2189 |
+
ၟ
|
| 2190 |
+
ၠ
|
| 2191 |
+
ၡ
|
| 2192 |
+
ၢ
|
| 2193 |
+
ၣ
|
| 2194 |
+
ၤ
|
| 2195 |
+
ၥ
|
| 2196 |
+
ၦ
|
| 2197 |
+
ၧ
|
| 2198 |
+
ၨ
|
| 2199 |
+
ၩ
|
| 2200 |
+
ၪ
|
| 2201 |
+
ၫ
|
| 2202 |
+
ၬ
|
| 2203 |
+
ၭ
|
| 2204 |
+
ၮ
|
| 2205 |
+
ၯ
|
| 2206 |
+
ၰ
|
| 2207 |
+
ၱ
|
| 2208 |
+
ၲ
|
| 2209 |
+
ၳ
|
| 2210 |
+
ၴ
|
| 2211 |
+
ၵ
|
| 2212 |
+
ၶ
|
| 2213 |
+
ၷ
|
| 2214 |
+
ၸ
|
| 2215 |
+
ၹ
|
| 2216 |
+
ၺ
|
| 2217 |
+
ၻ
|
| 2218 |
+
ၼ
|
| 2219 |
+
ၽ
|
| 2220 |
+
ၾ
|
| 2221 |
+
ၿ
|
| 2222 |
+
ႀ
|
| 2223 |
+
ႁ
|
| 2224 |
+
ႂ
|
| 2225 |
+
ႃ
|
| 2226 |
+
ႄ
|
| 2227 |
+
ႅ
|
| 2228 |
+
ႆ
|
| 2229 |
+
ႇ
|
| 2230 |
+
ႈ
|
| 2231 |
+
ႉ
|
| 2232 |
+
ႊ
|
| 2233 |
+
ႋ
|
| 2234 |
+
ႌ
|
| 2235 |
+
ႍ
|
| 2236 |
+
ႎ
|
| 2237 |
+
ႏ
|
| 2238 |
+
႐
|
| 2239 |
+
႑
|
| 2240 |
+
႒
|
| 2241 |
+
႓
|
| 2242 |
+
႔
|
| 2243 |
+
႕
|
| 2244 |
+
႖
|
| 2245 |
+
႗
|
| 2246 |
+
႘
|
| 2247 |
+
႙
|
| 2248 |
+
ႚ
|
| 2249 |
+
ႛ
|
| 2250 |
+
ႜ
|
| 2251 |
+
ႝ
|
| 2252 |
+
႞
|
| 2253 |
+
႟
|
| 2254 |
+
|
| 2255 |
+
က
|
| 2256 |
+
ခ
|
| 2257 |
+
ဂ
|
| 2258 |
+
ဃ
|
| 2259 |
+
င
|
| 2260 |
+
စ
|
| 2261 |
+
ဆ
|
| 2262 |
+
ဇ
|
| 2263 |
+
ဈ
|
| 2264 |
+
ဉ
|
| 2265 |
+
ည
|
| 2266 |
+
ဋ
|
| 2267 |
+
ဌ
|
| 2268 |
+
ဍ
|
| 2269 |
+
ဎ
|
| 2270 |
+
ဏ
|
| 2271 |
+
တ
|
| 2272 |
+
ထ
|
| 2273 |
+
ဒ
|
| 2274 |
+
ဓ
|
| 2275 |
+
န
|
| 2276 |
+
ပ
|
| 2277 |
+
ဖ
|
| 2278 |
+
ဗ
|
| 2279 |
+
ဘ
|
| 2280 |
+
မ
|
| 2281 |
+
ယ
|
| 2282 |
+
ရ
|
| 2283 |
+
လ
|
| 2284 |
+
ဝ
|
| 2285 |
+
သ
|
| 2286 |
+
ဟ
|
| 2287 |
+
ဠ
|
| 2288 |
+
အ
|
| 2289 |
+
ဢ
|
| 2290 |
+
ဣ
|
| 2291 |
+
ဤ
|
| 2292 |
+
ဥ
|
| 2293 |
+
ဦ
|
| 2294 |
+
ဧ
|
| 2295 |
+
ဨ
|
| 2296 |
+
ဩ
|
| 2297 |
+
ဪ
|
| 2298 |
+
ါ
|
| 2299 |
+
ာ
|
| 2300 |
+
ိ
|
| 2301 |
+
ီ
|
| 2302 |
+
ု
|
| 2303 |
+
ူ
|
| 2304 |
+
ေ
|
| 2305 |
+
ဲ
|
| 2306 |
+
ဳ
|
| 2307 |
+
ဴ
|
| 2308 |
+
ဵ
|
| 2309 |
+
ံ
|
| 2310 |
+
့
|
| 2311 |
+
း
|
| 2312 |
+
္
|
| 2313 |
+
်
|
| 2314 |
+
ျ
|
| 2315 |
+
ြ
|
| 2316 |
+
ွ
|
| 2317 |
+
ှ
|
| 2318 |
+
ဿ
|
| 2319 |
+
၀
|
| 2320 |
+
၁
|
| 2321 |
+
၂
|
| 2322 |
+
၃
|
| 2323 |
+
၄
|
| 2324 |
+
၅
|
| 2325 |
+
၆
|
| 2326 |
+
၇
|
| 2327 |
+
၈
|
| 2328 |
+
၉
|
| 2329 |
+
၊
|
| 2330 |
+
။
|
| 2331 |
+
၌
|
| 2332 |
+
၍
|
| 2333 |
+
၎
|
| 2334 |
+
၏
|
| 2335 |
+
ၐ
|
| 2336 |
+
ၑ
|
| 2337 |
+
ၒ
|
| 2338 |
+
ၓ
|
| 2339 |
+
ၔ
|
| 2340 |
+
ၕ
|
| 2341 |
+
ၖ
|
| 2342 |
+
ၗ
|
| 2343 |
+
ၘ
|
| 2344 |
+
ၙ
|
| 2345 |
+
ၚ
|
| 2346 |
+
ၛ
|
| 2347 |
+
ၜ
|
| 2348 |
+
ၝ
|
| 2349 |
+
ၞ
|
| 2350 |
+
ၟ
|
| 2351 |
+
ၠ
|
| 2352 |
+
ၡ
|
| 2353 |
+
ၢ
|
| 2354 |
+
ၣ
|
| 2355 |
+
ၤ
|
| 2356 |
+
ၥ
|
| 2357 |
+
ၦ
|
| 2358 |
+
ၧ
|
| 2359 |
+
ၨ
|
| 2360 |
+
ၩ
|
| 2361 |
+
ၪ
|
| 2362 |
+
ၫ
|
| 2363 |
+
ၬ
|
| 2364 |
+
ၭ
|
| 2365 |
+
ၮ
|
| 2366 |
+
ၯ
|
| 2367 |
+
ၰ
|
| 2368 |
+
ၱ
|
| 2369 |
+
ၲ
|
| 2370 |
+
ၳ
|
| 2371 |
+
ၴ
|
| 2372 |
+
ၵ
|
| 2373 |
+
ၶ
|
| 2374 |
+
ၷ
|
| 2375 |
+
ၸ
|
| 2376 |
+
ၹ
|
| 2377 |
+
ၺ
|
| 2378 |
+
ၻ
|
| 2379 |
+
ၼ
|
| 2380 |
+
ၽ
|
| 2381 |
+
ၾ
|
| 2382 |
+
ၿ
|
| 2383 |
+
ႀ
|
| 2384 |
+
ႁ
|
| 2385 |
+
ႂ
|
| 2386 |
+
ႃ
|
| 2387 |
+
ႄ
|
| 2388 |
+
ႅ
|
| 2389 |
+
ႆ
|
| 2390 |
+
ႇ
|
| 2391 |
+
ႈ
|
| 2392 |
+
ႉ
|
| 2393 |
+
ႊ
|
| 2394 |
+
ႋ
|
| 2395 |
+
ႌ
|
| 2396 |
+
ႍ
|
| 2397 |
+
ႎ
|
| 2398 |
+
ႏ
|
| 2399 |
+
႐
|
| 2400 |
+
႑
|
| 2401 |
+
႒
|
| 2402 |
+
႓
|
| 2403 |
+
႔
|
| 2404 |
+
႕
|
| 2405 |
+
႖
|
| 2406 |
+
႗
|
| 2407 |
+
႘
|
| 2408 |
+
႙
|
| 2409 |
+
ႚ
|
| 2410 |
+
ႛ
|
| 2411 |
+
ႜ
|
| 2412 |
+
ႝ
|
| 2413 |
+
႞
|
| 2414 |
+
႟
|
| 2415 |
+
|
| 2416 |
+
Ⴀ
|
| 2417 |
+
Ⴁ
|
| 2418 |
+
Ⴂ
|
| 2419 |
+
Ⴃ
|
| 2420 |
+
Ⴄ
|
| 2421 |
+
Ⴅ
|
| 2422 |
+
Ⴆ
|
| 2423 |
+
Ⴇ
|
| 2424 |
+
Ⴈ
|
| 2425 |
+
Ⴉ
|
| 2426 |
+
Ⴊ
|
| 2427 |
+
Ⴋ
|
| 2428 |
+
ᄀ
|
| 2429 |
+
ᄁ
|
| 2430 |
+
ᄂ
|
| 2431 |
+
ᄃ
|
| 2432 |
+
ᄄ
|
| 2433 |
+
ᄅ
|
| 2434 |
+
ᄆ
|
| 2435 |
+
ᄇ
|
| 2436 |
+
ᄈ
|
| 2437 |
+
ᄉ
|
| 2438 |
+
ᄊ
|
| 2439 |
+
ᄋ
|
| 2440 |
+
ᄌ
|
| 2441 |
+
ᄍ
|
| 2442 |
+
ᄎ
|
| 2443 |
+
ᄏ
|
| 2444 |
+
ᄐ
|
| 2445 |
+
ᄑ
|
| 2446 |
+
ᄒ
|
| 2447 |
+
|
| 2448 |
+
ဠ
|
| 2449 |
+
အ
|
| 2450 |
+
ဢ
|
| 2451 |
+
ဣ
|
| 2452 |
+
ဤ
|
| 2453 |
+
ဥ
|
| 2454 |
+
ဦ
|
| 2455 |
+
ဧ
|
| 2456 |
+
ဨ
|
| 2457 |
+
ဩ
|
| 2458 |
+
ဪ
|
| 2459 |
+
ါ
|
| 2460 |
+
ာ
|
| 2461 |
+
ိ
|
| 2462 |
+
ီ
|
| 2463 |
+
ု
|
| 2464 |
+
ူ
|
| 2465 |
+
ေ
|
| 2466 |
+
ဲ
|
| 2467 |
+
ဳ
|
| 2468 |
+
ဴ
|
| 2469 |
+
ဵ
|
| 2470 |
+
ံ
|
| 2471 |
+
့
|
| 2472 |
+
း
|
| 2473 |
+
္
|
| 2474 |
+
်
|
| 2475 |
+
ျ
|
| 2476 |
+
ြ
|
| 2477 |
+
ွ
|
| 2478 |
+
ှ
|
| 2479 |
+
ဿ
|
| 2480 |
+
၀
|
| 2481 |
+
၁
|
| 2482 |
+
၂
|
| 2483 |
+
၃
|
| 2484 |
+
၄
|
| 2485 |
+
၅
|
| 2486 |
+
၆
|
| 2487 |
+
၇
|
| 2488 |
+
၈
|
| 2489 |
+
၉
|
| 2490 |
+
၊
|
| 2491 |
+
။
|
| 2492 |
+
၌
|
| 2493 |
+
၍
|
| 2494 |
+
၎
|
| 2495 |
+
၏
|
| 2496 |
+
ၐ
|
| 2497 |
+
ၑ
|
| 2498 |
+
ၒ
|
| 2499 |
+
ၓ
|
| 2500 |
+
ၔ
|
| 2501 |
+
ၕ
|
| 2502 |
+
ၖ
|
| 2503 |
+
ၗ
|
| 2504 |
+
ၘ
|
| 2505 |
+
ၙ
|
| 2506 |
+
ၚ
|
| 2507 |
+
ၛ
|
| 2508 |
+
ၜ
|
| 2509 |
+
ၝ
|
| 2510 |
+
ၞ
|
| 2511 |
+
ၟ
|
| 2512 |
+
ၠ
|
| 2513 |
+
ၡ
|
| 2514 |
+
ၢ
|
| 2515 |
+
ၣ
|
| 2516 |
+
ၤ
|
| 2517 |
+
ၥ
|
| 2518 |
+
ၦ
|
| 2519 |
+
ၧ
|
| 2520 |
+
ၨ
|
| 2521 |
+
ၩ
|
| 2522 |
+
ၪ
|
| 2523 |
+
ၫ
|
| 2524 |
+
ၬ
|
| 2525 |
+
ၭ
|
| 2526 |
+
ၮ
|
| 2527 |
+
ၯ
|
| 2528 |
+
ၰ
|
| 2529 |
+
ၱ
|
| 2530 |
+
ၲ
|
| 2531 |
+
ၳ
|
| 2532 |
+
ၴ
|
| 2533 |
+
ၵ
|
| 2534 |
+
ၶ
|
| 2535 |
+
ၷ
|
| 2536 |
+
ၸ
|
| 2537 |
+
ၹ
|
| 2538 |
+
ၺ
|
| 2539 |
+
ၻ
|
| 2540 |
+
ၼ
|
| 2541 |
+
ၽ
|
| 2542 |
+
ၾ
|
| 2543 |
+
ၿ
|
| 2544 |
+
ႀ
|
| 2545 |
+
ႁ
|
| 2546 |
+
ႂ
|
| 2547 |
+
ႃ
|
| 2548 |
+
ႄ
|
| 2549 |
+
ႅ
|
| 2550 |
+
ႆ
|
| 2551 |
+
ႇ
|
| 2552 |
+
ႈ
|
| 2553 |
+
ႉ
|
| 2554 |
+
ႊ
|
| 2555 |
+
ႋ
|
| 2556 |
+
ႌ
|
| 2557 |
+
ႍ
|
| 2558 |
+
ႎ
|
| 2559 |
+
ႏ
|
| 2560 |
+
႐
|
| 2561 |
+
႑
|
| 2562 |
+
႒
|
| 2563 |
+
႓
|
| 2564 |
+
႔
|
| 2565 |
+
႕
|
| 2566 |
+
႖
|
| 2567 |
+
႗
|
| 2568 |
+
႘
|
| 2569 |
+
���
|
| 2570 |
+
ႚ
|
| 2571 |
+
ႛ
|
| 2572 |
+
ႜ
|
| 2573 |
+
ႝ
|
| 2574 |
+
႞
|
| 2575 |
+
႟
|
| 2576 |
+
|
| 2577 |
+
က
|
| 2578 |
+
ခ
|
| 2579 |
+
ဂ
|
| 2580 |
+
ဃ
|
| 2581 |
+
င
|
| 2582 |
+
စ
|
| 2583 |
+
ဆ
|
| 2584 |
+
ဇ
|
| 2585 |
+
ဈ
|
| 2586 |
+
ဉ
|
| 2587 |
+
ည
|
| 2588 |
+
ဋ
|
| 2589 |
+
ဌ
|
| 2590 |
+
ဍ
|
| 2591 |
+
ဎ
|
| 2592 |
+
ဏ
|
| 2593 |
+
တ
|
| 2594 |
+
ထ
|
| 2595 |
+
ဒ
|
| 2596 |
+
ဓ
|
| 2597 |
+
န
|
| 2598 |
+
ပ
|
| 2599 |
+
ဖ
|
| 2600 |
+
ဗ
|
| 2601 |
+
ဘ
|
| 2602 |
+
မ
|
| 2603 |
+
ယ
|
| 2604 |
+
ရ
|
| 2605 |
+
လ
|
| 2606 |
+
ဝ
|
| 2607 |
+
သ
|
| 2608 |
+
ဟ
|
| 2609 |
+
ဠ
|
| 2610 |
+
အ
|
| 2611 |
+
ဢ
|
| 2612 |
+
ဣ
|
| 2613 |
+
ဤ
|
| 2614 |
+
ဥ
|
| 2615 |
+
ဦ
|
| 2616 |
+
ဧ
|
| 2617 |
+
ဨ
|
| 2618 |
+
ဩ
|
| 2619 |
+
ဪ
|
| 2620 |
+
ါ
|
| 2621 |
+
ာ
|
| 2622 |
+
ိ
|
| 2623 |
+
ီ
|
| 2624 |
+
ု
|
| 2625 |
+
ူ
|
| 2626 |
+
ေ
|
| 2627 |
+
ဲ
|
| 2628 |
+
ဳ
|
| 2629 |
+
ဴ
|
| 2630 |
+
ဵ
|
| 2631 |
+
ံ
|
| 2632 |
+
့
|
| 2633 |
+
း
|
| 2634 |
+
္
|
| 2635 |
+
်
|
| 2636 |
+
ျ
|
| 2637 |
+
ြ
|
| 2638 |
+
ွ
|
| 2639 |
+
ှ
|
| 2640 |
+
ဿ
|
| 2641 |
+
၀
|
| 2642 |
+
၁
|
| 2643 |
+
၂
|
| 2644 |
+
၃
|
| 2645 |
+
၄
|
| 2646 |
+
၅
|
| 2647 |
+
၆
|
| 2648 |
+
၇
|
| 2649 |
+
၈
|
| 2650 |
+
၉
|
| 2651 |
+
၊
|
| 2652 |
+
။
|
| 2653 |
+
၌
|
| 2654 |
+
၍
|
| 2655 |
+
၎
|
| 2656 |
+
၏
|
| 2657 |
+
ၐ
|
| 2658 |
+
ၑ
|
| 2659 |
+
ၒ
|
| 2660 |
+
ၓ
|
| 2661 |
+
ၔ
|
| 2662 |
+
ၕ
|
| 2663 |
+
ၖ
|
| 2664 |
+
ၗ
|
| 2665 |
+
ၘ
|
| 2666 |
+
ၙ
|
| 2667 |
+
ၚ
|
| 2668 |
+
ၛ
|
| 2669 |
+
ၜ
|
| 2670 |
+
ၝ
|
| 2671 |
+
ၞ
|
| 2672 |
+
ၟ
|
| 2673 |
+
ၠ
|
| 2674 |
+
ၡ
|
| 2675 |
+
ၢ
|
| 2676 |
+
ၣ
|
| 2677 |
+
ၤ
|
| 2678 |
+
ၥ
|
| 2679 |
+
ၦ
|
| 2680 |
+
ၧ
|
| 2681 |
+
ၨ
|
| 2682 |
+
ၩ
|
| 2683 |
+
ၪ
|
| 2684 |
+
ၫ
|
| 2685 |
+
ၬ
|
| 2686 |
+
ၭ
|
| 2687 |
+
ၮ
|
| 2688 |
+
ၯ
|
| 2689 |
+
ၰ
|
| 2690 |
+
ၱ
|
| 2691 |
+
ၲ
|
| 2692 |
+
ၳ
|
| 2693 |
+
ၴ
|
| 2694 |
+
ၵ
|
| 2695 |
+
ၶ
|
| 2696 |
+
ၷ
|
| 2697 |
+
ၸ
|
| 2698 |
+
ၹ
|
| 2699 |
+
ၺ
|
| 2700 |
+
ၻ
|
| 2701 |
+
ၼ
|
| 2702 |
+
ၽ
|
| 2703 |
+
ၾ
|
| 2704 |
+
ၿ
|
| 2705 |
+
ႀ
|
| 2706 |
+
ႁ
|
| 2707 |
+
ႂ
|
| 2708 |
+
ႃ
|
| 2709 |
+
ႄ
|
| 2710 |
+
ႅ
|
| 2711 |
+
ႆ
|
| 2712 |
+
ႇ
|
| 2713 |
+
ႈ
|
| 2714 |
+
ႉ
|
| 2715 |
+
ႊ
|
| 2716 |
+
ႋ
|
| 2717 |
+
ႌ
|
| 2718 |
+
ႍ
|
| 2719 |
+
ႎ
|
| 2720 |
+
ႏ
|
| 2721 |
+
႐
|
| 2722 |
+
႑
|
| 2723 |
+
႒
|
| 2724 |
+
႓
|
| 2725 |
+
႔
|
| 2726 |
+
႕
|
| 2727 |
+
႖
|
| 2728 |
+
႗
|
| 2729 |
+
႘
|
| 2730 |
+
႙
|
| 2731 |
+
ႚ
|
| 2732 |
+
ႛ
|
| 2733 |
+
ႜ
|
| 2734 |
+
ႝ
|
| 2735 |
+
႞
|
| 2736 |
+
႟
|
| 2737 |
+
|
| 2738 |
+
Ⴀ
|
| 2739 |
+
Ⴁ
|
| 2740 |
+
Ⴂ
|
| 2741 |
+
Ⴃ
|
| 2742 |
+
Ⴄ
|
| 2743 |
+
Ⴅ
|
| 2744 |
+
Ⴆ
|
| 2745 |
+
Ⴇ
|
| 2746 |
+
Ⴈ
|
| 2747 |
+
Ⴉ
|
| 2748 |
+
Ⴊ
|
| 2749 |
+
Ⴋ
|
| 2750 |
+
ᄀ
|
| 2751 |
+
ᄁ
|
| 2752 |
+
ᄂ
|
| 2753 |
+
ᄃ
|
| 2754 |
+
ᄄ
|
| 2755 |
+
ᄅ
|
| 2756 |
+
ᄆ
|
| 2757 |
+
ᄇ
|
| 2758 |
+
ᄈ
|
| 2759 |
+
ᄉ
|
| 2760 |
+
ᄊ
|
| 2761 |
+
ᄋ
|
| 2762 |
+
ᄌ
|
| 2763 |
+
ᄍ
|
| 2764 |
+
ᄎ
|
| 2765 |
+
ᄏ
|
| 2766 |
+
ᄐ
|
| 2767 |
+
ᄑ
|
| 2768 |
+
ᄒ
|
| 2769 |
+
|
| 2770 |
+
ဠ
|
| 2771 |
+
အ
|
| 2772 |
+
ဢ
|
| 2773 |
+
ဣ
|
| 2774 |
+
ဤ
|
| 2775 |
+
ဥ
|
| 2776 |
+
ဦ
|
| 2777 |
+
ဧ
|
| 2778 |
+
ဨ
|
| 2779 |
+
ဩ
|
| 2780 |
+
ဪ
|
| 2781 |
+
ါ
|
| 2782 |
+
ာ
|
| 2783 |
+
ိ
|
| 2784 |
+
ီ
|
| 2785 |
+
ု
|
| 2786 |
+
ူ
|
| 2787 |
+
ေ
|
| 2788 |
+
ဲ
|
| 2789 |
+
ဳ
|
| 2790 |
+
ဴ
|
| 2791 |
+
ဵ
|
| 2792 |
+
ံ
|
| 2793 |
+
့
|
| 2794 |
+
း
|
| 2795 |
+
္
|
| 2796 |
+
်
|
| 2797 |
+
ျ
|
| 2798 |
+
ြ
|
| 2799 |
+
ွ
|
| 2800 |
+
ှ
|
| 2801 |
+
ဿ
|
| 2802 |
+
၀
|
| 2803 |
+
၁
|
| 2804 |
+
၂
|
| 2805 |
+
၃
|
| 2806 |
+
၄
|
| 2807 |
+
၅
|
| 2808 |
+
၆
|
| 2809 |
+
၇
|
| 2810 |
+
၈
|
| 2811 |
+
၉
|
| 2812 |
+
၊
|
| 2813 |
+
။
|
| 2814 |
+
၌
|
| 2815 |
+
၍
|
| 2816 |
+
၎
|
| 2817 |
+
၏
|
| 2818 |
+
ၐ
|
| 2819 |
+
ၑ
|
| 2820 |
+
ၒ
|
| 2821 |
+
ၓ
|
| 2822 |
+
ၔ
|
| 2823 |
+
ၕ
|
| 2824 |
+
ၖ
|
| 2825 |
+
ၗ
|
| 2826 |
+
ၘ
|
| 2827 |
+
ၙ
|
| 2828 |
+
ၚ
|
| 2829 |
+
ၛ
|
| 2830 |
+
ၜ
|
| 2831 |
+
ၝ
|
| 2832 |
+
ၞ
|
| 2833 |
+
ၟ
|
| 2834 |
+
ၠ
|
| 2835 |
+
ၡ
|
| 2836 |
+
ၢ
|
| 2837 |
+
ၣ
|
| 2838 |
+
ၤ
|
| 2839 |
+
ၥ
|
| 2840 |
+
ၦ
|
| 2841 |
+
ၧ
|
| 2842 |
+
ၨ
|
| 2843 |
+
ၩ
|
| 2844 |
+
ၪ
|
| 2845 |
+
ၫ
|
| 2846 |
+
ၬ
|
| 2847 |
+
ၭ
|
| 2848 |
+
ၮ
|
| 2849 |
+
ၯ
|
| 2850 |
+
ၰ
|
| 2851 |
+
ၱ
|
| 2852 |
+
ၲ
|
| 2853 |
+
ၳ
|
| 2854 |
+
ၴ
|
| 2855 |
+
ၵ
|
| 2856 |
+
ၶ
|
| 2857 |
+
ၷ
|
| 2858 |
+
ၸ
|
| 2859 |
+
ၹ
|
| 2860 |
+
ၺ
|
| 2861 |
+
ၻ
|
| 2862 |
+
ၼ
|
| 2863 |
+
ၽ
|
| 2864 |
+
ၾ
|
| 2865 |
+
ၿ
|
| 2866 |
+
ႀ
|
| 2867 |
+
ႁ
|
| 2868 |
+
ႂ
|
| 2869 |
+
ႃ
|
| 2870 |
+
ႄ
|
| 2871 |
+
ႅ
|
| 2872 |
+
ႆ
|
| 2873 |
+
ႇ
|
| 2874 |
+
ႈ
|
| 2875 |
+
ႉ
|
| 2876 |
+
ႊ
|
| 2877 |
+
ႋ
|
| 2878 |
+
ႌ
|
| 2879 |
+
ႍ
|
| 2880 |
+
ႎ
|
| 2881 |
+
ႏ
|
| 2882 |
+
႐
|
| 2883 |
+
႑
|
| 2884 |
+
႒
|
| 2885 |
+
႓
|
| 2886 |
+
႔
|
| 2887 |
+
႕
|
| 2888 |
+
႖
|
| 2889 |
+
႗
|
| 2890 |
+
႘
|
| 2891 |
+
႙
|
| 2892 |
+
ႚ
|
| 2893 |
+
ႛ
|
| 2894 |
+
ႜ
|
| 2895 |
+
ႝ
|
| 2896 |
+
႞
|
| 2897 |
+
႟
|
| 2898 |
+
|
| 2899 |
+
က
|
| 2900 |
+
ခ
|
| 2901 |
+
ဂ
|
| 2902 |
+
ဃ
|
| 2903 |
+
င
|
| 2904 |
+
စ
|
| 2905 |
+
ဆ
|
| 2906 |
+
ဇ
|
| 2907 |
+
ဈ
|
| 2908 |
+
ဉ
|
| 2909 |
+
ည
|
| 2910 |
+
ဋ
|
| 2911 |
+
ဌ
|
| 2912 |
+
ဍ
|
| 2913 |
+
ဎ
|
| 2914 |
+
ဏ
|
| 2915 |
+
တ
|
| 2916 |
+
ထ
|
| 2917 |
+
ဒ
|
| 2918 |
+
ဓ
|
| 2919 |
+
န
|
| 2920 |
+
ပ
|
| 2921 |
+
ဖ
|
| 2922 |
+
ဗ
|
| 2923 |
+
ဘ
|
| 2924 |
+
မ
|
| 2925 |
+
ယ
|
| 2926 |
+
ရ
|
| 2927 |
+
လ
|
| 2928 |
+
ဝ
|
| 2929 |
+
သ
|
| 2930 |
+
ဟ
|
| 2931 |
+
ဠ
|
| 2932 |
+
အ
|
| 2933 |
+
ဢ
|
| 2934 |
+
ဣ
|
| 2935 |
+
ဤ
|
| 2936 |
+
ဥ
|
| 2937 |
+
ဦ
|
| 2938 |
+
ဧ
|
| 2939 |
+
ဨ
|
| 2940 |
+
ဩ
|
| 2941 |
+
ဪ
|
| 2942 |
+
ါ
|
| 2943 |
+
ာ
|
| 2944 |
+
ိ
|
| 2945 |
+
ီ
|
| 2946 |
+
ု
|
| 2947 |
+
ူ
|
| 2948 |
+
ေ
|
| 2949 |
+
ဲ
|
| 2950 |
+
ဳ
|
| 2951 |
+
ဴ
|
| 2952 |
+
ဵ
|
| 2953 |
+
ံ
|
| 2954 |
+
့
|
| 2955 |
+
း
|
| 2956 |
+
္
|
| 2957 |
+
်
|
| 2958 |
+
ျ
|
| 2959 |
+
ြ
|
| 2960 |
+
ွ
|
| 2961 |
+
ှ
|
| 2962 |
+
ဿ
|
| 2963 |
+
၀
|
| 2964 |
+
၁
|
| 2965 |
+
၂
|
| 2966 |
+
၃
|
| 2967 |
+
၄
|
| 2968 |
+
၅
|
| 2969 |
+
၆
|
| 2970 |
+
၇
|
| 2971 |
+
၈
|
| 2972 |
+
၉
|
| 2973 |
+
၊
|
| 2974 |
+
။
|
| 2975 |
+
၌
|
| 2976 |
+
၍
|
| 2977 |
+
၎
|
| 2978 |
+
၏
|
| 2979 |
+
ၐ
|
| 2980 |
+
ၑ
|
| 2981 |
+
ၒ
|
| 2982 |
+
ၓ
|
| 2983 |
+
ၔ
|
| 2984 |
+
ၕ
|
| 2985 |
+
ၖ
|
| 2986 |
+
ၗ
|
| 2987 |
+
ၘ
|
| 2988 |
+
ၙ
|
| 2989 |
+
ၚ
|
| 2990 |
+
ၛ
|
| 2991 |
+
ၜ
|
| 2992 |
+
ၝ
|
| 2993 |
+
ၞ
|
| 2994 |
+
ၟ
|
| 2995 |
+
ၠ
|
| 2996 |
+
ၡ
|
| 2997 |
+
ၢ
|
| 2998 |
+
ၣ
|
| 2999 |
+
ၤ
|
| 3000 |
+
ၥ
|
| 3001 |
+
ၦ
|
| 3002 |
+
ၧ
|
| 3003 |
+
ၨ
|
| 3004 |
+
ၩ
|
| 3005 |
+
ၪ
|
| 3006 |
+
ၫ
|
| 3007 |
+
ၬ
|
| 3008 |
+
ၭ
|
| 3009 |
+
ၮ
|
| 3010 |
+
ၯ
|
| 3011 |
+
ၰ
|
| 3012 |
+
ၱ
|
| 3013 |
+
ၲ
|
| 3014 |
+
ၳ
|
| 3015 |
+
ၴ
|
| 3016 |
+
ၵ
|
| 3017 |
+
ၶ
|
| 3018 |
+
ၷ
|
| 3019 |
+
ၸ
|
| 3020 |
+
ၹ
|
| 3021 |
+
ၺ
|
| 3022 |
+
ၻ
|
| 3023 |
+
ၼ
|
| 3024 |
+
ၽ
|
| 3025 |
+
ၾ
|
| 3026 |
+
ၿ
|
| 3027 |
+
ႀ
|
| 3028 |
+
ႁ
|
| 3029 |
+
ႂ
|
| 3030 |
+
ႃ
|
| 3031 |
+
ႄ
|
| 3032 |
+
ႅ
|
| 3033 |
+
ႆ
|
| 3034 |
+
ႇ
|
| 3035 |
+
ႈ
|
| 3036 |
+
ႉ
|
| 3037 |
+
ႊ
|
| 3038 |
+
ႋ
|
| 3039 |
+
ႌ
|
| 3040 |
+
ႍ
|
| 3041 |
+
ႎ
|
| 3042 |
+
ႏ
|
| 3043 |
+
႐
|
| 3044 |
+
႑
|
| 3045 |
+
႒
|
| 3046 |
+
႓
|
| 3047 |
+
႔
|
| 3048 |
+
႕
|
| 3049 |
+
႖
|
| 3050 |
+
႗
|
| 3051 |
+
႘
|
| 3052 |
+
႙
|
| 3053 |
+
ႚ
|
| 3054 |
+
ႛ
|
| 3055 |
+
ႜ
|
| 3056 |
+
ႝ
|
| 3057 |
+
႞
|
| 3058 |
+
႟
|
| 3059 |
+
|
| 3060 |
+
Ⴀ
|
| 3061 |
+
Ⴁ
|
| 3062 |
+
Ⴂ
|
| 3063 |
+
Ⴃ
|
| 3064 |
+
Ⴄ
|
| 3065 |
+
Ⴅ
|
| 3066 |
+
Ⴆ
|
| 3067 |
+
Ⴇ
|
| 3068 |
+
Ⴈ
|
| 3069 |
+
Ⴉ
|
| 3070 |
+
Ⴊ
|
| 3071 |
+
Ⴋ
|
| 3072 |
+
ᄀ
|
| 3073 |
+
ᄁ
|
| 3074 |
+
ᄂ
|
| 3075 |
+
ᄃ
|
| 3076 |
+
ᄄ
|
| 3077 |
+
ᄅ
|
| 3078 |
+
ᄆ
|
| 3079 |
+
ᄇ
|
| 3080 |
+
ᄈ
|
| 3081 |
+
ᄉ
|
| 3082 |
+
ᄊ
|
| 3083 |
+
ᄋ
|
| 3084 |
+
ᄌ
|
| 3085 |
+
ᄍ
|
| 3086 |
+
ᄎ
|
| 3087 |
+
ᄏ
|
| 3088 |
+
ᄐ
|
| 3089 |
+
ᄑ
|
| 3090 |
+
ᄒ
|
| 3091 |
+
|
| 3092 |
+
ဠ
|
| 3093 |
+
အ
|
| 3094 |
+
ဢ
|
| 3095 |
+
ဣ
|
| 3096 |
+
ဤ
|
| 3097 |
+
ဥ
|
| 3098 |
+
ဦ
|
| 3099 |
+
ဧ
|
| 3100 |
+
ဨ
|
| 3101 |
+
ဩ
|
| 3102 |
+
ဪ
|
| 3103 |
+
ါ
|
| 3104 |
+
ာ
|
| 3105 |
+
ိ
|
| 3106 |
+
ီ
|
| 3107 |
+
ု
|
| 3108 |
+
ူ
|
| 3109 |
+
ေ
|
| 3110 |
+
ဲ
|
| 3111 |
+
ဳ
|
| 3112 |
+
ဴ
|
| 3113 |
+
ဵ
|
| 3114 |
+
ံ
|
| 3115 |
+
့
|
| 3116 |
+
း
|
| 3117 |
+
္
|
| 3118 |
+
်
|
| 3119 |
+
ျ
|
| 3120 |
+
ြ
|
| 3121 |
+
ွ
|
| 3122 |
+
ှ
|
| 3123 |
+
ဿ
|
| 3124 |
+
၀
|
| 3125 |
+
၁
|
| 3126 |
+
၂
|
| 3127 |
+
၃
|
| 3128 |
+
၄
|
| 3129 |
+
၅
|
| 3130 |
+
၆
|
| 3131 |
+
၇
|
| 3132 |
+
၈
|
| 3133 |
+
၉
|
| 3134 |
+
၊
|
| 3135 |
+
။
|
| 3136 |
+
၌
|
| 3137 |
+
၍
|
| 3138 |
+
၎
|
| 3139 |
+
၏
|
| 3140 |
+
ၐ
|
| 3141 |
+
ၑ
|
| 3142 |
+
ၒ
|
| 3143 |
+
ၓ
|
| 3144 |
+
ၔ
|
| 3145 |
+
ၕ
|
| 3146 |
+
ၖ
|
| 3147 |
+
ၗ
|
| 3148 |
+
ၘ
|
| 3149 |
+
ၙ
|
| 3150 |
+
ၚ
|
| 3151 |
+
ၛ
|
| 3152 |
+
ၜ
|
| 3153 |
+
ၝ
|
| 3154 |
+
ၞ
|
| 3155 |
+
ၟ
|
| 3156 |
+
ၠ
|
| 3157 |
+
ၡ
|
| 3158 |
+
ၢ
|
| 3159 |
+
ၣ
|
| 3160 |
+
ၤ
|
| 3161 |
+
ၥ
|
| 3162 |
+
ၦ
|
| 3163 |
+
ၧ
|
| 3164 |
+
ၨ
|
| 3165 |
+
ၩ
|
| 3166 |
+
ၪ
|
| 3167 |
+
ၫ
|
| 3168 |
+
ၬ
|
| 3169 |
+
ၭ
|
| 3170 |
+
ၮ
|
| 3171 |
+
ၯ
|
| 3172 |
+
ၰ
|
| 3173 |
+
ၱ
|
| 3174 |
+
ၲ
|
| 3175 |
+
ၳ
|
| 3176 |
+
ၴ
|
| 3177 |
+
ၵ
|
| 3178 |
+
ၶ
|
| 3179 |
+
ၷ
|
| 3180 |
+
ၸ
|
| 3181 |
+
ၹ
|
| 3182 |
+
ၺ
|
| 3183 |
+
ၻ
|
| 3184 |
+
ၼ
|
| 3185 |
+
ၽ
|
| 3186 |
+
ၾ
|
| 3187 |
+
ၿ
|
| 3188 |
+
ႀ
|
| 3189 |
+
ႁ
|
| 3190 |
+
ႂ
|
| 3191 |
+
ႃ
|
| 3192 |
+
ႄ
|
| 3193 |
+
ႅ
|
| 3194 |
+
ႆ
|
| 3195 |
+
ႇ
|
| 3196 |
+
ႈ
|
| 3197 |
+
ႉ
|
| 3198 |
+
ႊ
|
| 3199 |
+
ႋ
|
| 3200 |
+
ႌ
|
| 3201 |
+
ႍ
|
| 3202 |
+
ႎ
|
| 3203 |
+
ႏ
|
| 3204 |
+
႐
|
| 3205 |
+
႑
|
| 3206 |
+
႒
|
| 3207 |
+
႓
|
| 3208 |
+
႔
|
| 3209 |
+
႕
|
| 3210 |
+
႖
|
| 3211 |
+
႗
|
| 3212 |
+
႘
|
| 3213 |
+
႙
|
| 3214 |
+
ႚ
|
| 3215 |
+
ႛ
|
| 3216 |
+
ႜ
|
| 3217 |
+
ႝ
|
| 3218 |
+
႞
|
| 3219 |
+
႟
|
ocr-studio/PaddleOCR/ppocr/utils/dict/bn_dict.txt
ADDED
|
@@ -0,0 +1,477 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
!
|
| 3 |
+
#
|
| 4 |
+
$
|
| 5 |
+
%
|
| 6 |
+
&
|
| 7 |
+
'
|
| 8 |
+
(
|
| 9 |
+
+
|
| 10 |
+
|
| 11 |
+
-
|
| 12 |
+
.
|
| 13 |
+
/
|
| 14 |
+
0
|
| 15 |
+
1
|
| 16 |
+
2
|
| 17 |
+
3
|
| 18 |
+
4
|
| 19 |
+
5
|
| 20 |
+
6
|
| 21 |
+
7
|
| 22 |
+
8
|
| 23 |
+
9
|
| 24 |
+
:
|
| 25 |
+
?
|
| 26 |
+
@
|
| 27 |
+
A
|
| 28 |
+
B
|
| 29 |
+
C
|
| 30 |
+
D
|
| 31 |
+
E
|
| 32 |
+
F
|
| 33 |
+
G
|
| 34 |
+
H
|
| 35 |
+
I
|
| 36 |
+
J
|
| 37 |
+
K
|
| 38 |
+
L
|
| 39 |
+
M
|
| 40 |
+
N
|
| 41 |
+
O
|
| 42 |
+
P
|
| 43 |
+
Q
|
| 44 |
+
R
|
| 45 |
+
S
|
| 46 |
+
T
|
| 47 |
+
U
|
| 48 |
+
V
|
| 49 |
+
W
|
| 50 |
+
X
|
| 51 |
+
Y
|
| 52 |
+
Z
|
| 53 |
+
_
|
| 54 |
+
a
|
| 55 |
+
b
|
| 56 |
+
c
|
| 57 |
+
d
|
| 58 |
+
e
|
| 59 |
+
f
|
| 60 |
+
g
|
| 61 |
+
h
|
| 62 |
+
i
|
| 63 |
+
j
|
| 64 |
+
k
|
| 65 |
+
l
|
| 66 |
+
m
|
| 67 |
+
n
|
| 68 |
+
o
|
| 69 |
+
p
|
| 70 |
+
q
|
| 71 |
+
r
|
| 72 |
+
s
|
| 73 |
+
t
|
| 74 |
+
u
|
| 75 |
+
v
|
| 76 |
+
w
|
| 77 |
+
x
|
| 78 |
+
y
|
| 79 |
+
z
|
| 80 |
+
É
|
| 81 |
+
é
|
| 82 |
+
'
|
| 83 |
+
"
|
| 84 |
+
ঃ
|
| 85 |
+
,
|
| 86 |
+
;
|
| 87 |
+
!
|
| 88 |
+
?
|
| 89 |
+
।
|
| 90 |
+
—
|
| 91 |
+
ঃ-
|
| 92 |
+
-
|
| 93 |
+
(
|
| 94 |
+
)
|
| 95 |
+
[
|
| 96 |
+
]
|
| 97 |
+
{
|
| 98 |
+
}
|
| 99 |
+
√
|
| 100 |
+
...
|
| 101 |
+
.
|
| 102 |
+
/
|
| 103 |
+
\
|
| 104 |
+
=
|
| 105 |
+
<
|
| 106 |
+
>
|
| 107 |
+
৳
|
| 108 |
+
°
|
| 109 |
+
%
|
| 110 |
+
অ
|
| 111 |
+
আ
|
| 112 |
+
ই
|
| 113 |
+
ঈ
|
| 114 |
+
উ
|
| 115 |
+
ঊ
|
| 116 |
+
ঋ
|
| 117 |
+
এ
|
| 118 |
+
ঐ
|
| 119 |
+
ও
|
| 120 |
+
ঔ
|
| 121 |
+
্
|
| 122 |
+
া
|
| 123 |
+
ি
|
| 124 |
+
ী
|
| 125 |
+
ু
|
| 126 |
+
ূ
|
| 127 |
+
ে
|
| 128 |
+
ৈ
|
| 129 |
+
ো
|
| 130 |
+
ৌ
|
| 131 |
+
ৃ
|
| 132 |
+
্য
|
| 133 |
+
্র
|
| 134 |
+
্ব
|
| 135 |
+
ক
|
| 136 |
+
খ
|
| 137 |
+
গ
|
| 138 |
+
ঘ
|
| 139 |
+
ঙ
|
| 140 |
+
চ
|
| 141 |
+
ছ
|
| 142 |
+
জ
|
| 143 |
+
ঝ
|
| 144 |
+
ঞ
|
| 145 |
+
ট
|
| 146 |
+
ঠ
|
| 147 |
+
ড
|
| 148 |
+
ঢ
|
| 149 |
+
ণ
|
| 150 |
+
ত
|
| 151 |
+
থ
|
| 152 |
+
দ
|
| 153 |
+
ধ
|
| 154 |
+
ন
|
| 155 |
+
প
|
| 156 |
+
ফ
|
| 157 |
+
ব
|
| 158 |
+
ভ
|
| 159 |
+
ম
|
| 160 |
+
য
|
| 161 |
+
র
|
| 162 |
+
ল
|
| 163 |
+
শ
|
| 164 |
+
ষ
|
| 165 |
+
স
|
| 166 |
+
হ
|
| 167 |
+
ড়
|
| 168 |
+
ঢ়
|
| 169 |
+
য়
|
| 170 |
+
ং
|
| 171 |
+
ৎ
|
| 172 |
+
ঁ
|
| 173 |
+
ক্ক
|
| 174 |
+
ক্ট
|
| 175 |
+
ক্ত
|
| 176 |
+
ত্র
|
| 177 |
+
ক্ব
|
| 178 |
+
ক্ম
|
| 179 |
+
ক্য
|
| 180 |
+
ক্র
|
| 181 |
+
ক্ল
|
| 182 |
+
ক্ষ
|
| 183 |
+
ক্ষ্ণ
|
| 184 |
+
ক্ষ্ব
|
| 185 |
+
ক্ষ্ম
|
| 186 |
+
ক্ষ্য
|
| 187 |
+
ক্স
|
| 188 |
+
র্ক
|
| 189 |
+
র্ক্য
|
| 190 |
+
খ্য
|
| 191 |
+
খ্র
|
| 192 |
+
র্খ
|
| 193 |
+
গ্ণ
|
| 194 |
+
গ্ধ
|
| 195 |
+
গ্ধ্য
|
| 196 |
+
গ্ধ্র
|
| 197 |
+
গ্ন
|
| 198 |
+
গ্ন্য
|
| 199 |
+
গ্ব
|
| 200 |
+
গ্ম
|
| 201 |
+
গ্য
|
| 202 |
+
গ্র
|
| 203 |
+
গ্র্য
|
| 204 |
+
গ্ল
|
| 205 |
+
র্গ
|
| 206 |
+
র্গ্য
|
| 207 |
+
র্গ্র
|
| 208 |
+
ঘ্ন
|
| 209 |
+
ঘ্য
|
| 210 |
+
ঘ্র
|
| 211 |
+
র্ঘ্য
|
| 212 |
+
র্ঘ
|
| 213 |
+
ঙ্ক
|
| 214 |
+
ঙ্ক্য
|
| 215 |
+
ঙ্ক্ষ
|
| 216 |
+
ঙ্খ
|
| 217 |
+
ঙ্খ্য
|
| 218 |
+
ঙ্গ
|
| 219 |
+
ঙ্গ্য
|
| 220 |
+
ঙ্ঘ
|
| 221 |
+
ঙ্ঘ্য
|
| 222 |
+
ঙ্ঘ্র
|
| 223 |
+
ঙ্ম
|
| 224 |
+
র্ঙ্গ
|
| 225 |
+
চ্চ
|
| 226 |
+
চ্ছ
|
| 227 |
+
চ্ছ্ব
|
| 228 |
+
চ্ছ্র
|
| 229 |
+
চ্ঞ
|
| 230 |
+
চ্ব
|
| 231 |
+
চ্য
|
| 232 |
+
র্চ্য
|
| 233 |
+
র্চ
|
| 234 |
+
র্ছ
|
| 235 |
+
জ্জ
|
| 236 |
+
জ্জ্ব
|
| 237 |
+
জ্ঝ
|
| 238 |
+
জ্ঞ
|
| 239 |
+
জ্ব
|
| 240 |
+
জ্য
|
| 241 |
+
জ্র
|
| 242 |
+
র্জ্য
|
| 243 |
+
র্জ্জ
|
| 244 |
+
র্জ্ঞ
|
| 245 |
+
র্জ
|
| 246 |
+
র্ঝ
|
| 247 |
+
ঞ্চ
|
| 248 |
+
ঞ্ছ
|
| 249 |
+
ঞ্জ
|
| 250 |
+
ঞ্ঝ
|
| 251 |
+
ট্ট
|
| 252 |
+
ট্ব
|
| 253 |
+
ট্ম
|
| 254 |
+
ট্য
|
| 255 |
+
ট্র
|
| 256 |
+
র্ট
|
| 257 |
+
ড্ড
|
| 258 |
+
ড্ব
|
| 259 |
+
ড্ম
|
| 260 |
+
ড্য
|
| 261 |
+
ড্র
|
| 262 |
+
র্ড
|
| 263 |
+
ঢ্য
|
| 264 |
+
ঢ্র
|
| 265 |
+
র্ঢ্য
|
| 266 |
+
ণ্ট
|
| 267 |
+
ণ্ঠ
|
| 268 |
+
ণ্ঠ্য
|
| 269 |
+
ণ্ড
|
| 270 |
+
ণ্ড্য
|
| 271 |
+
ণ্ড্র
|
| 272 |
+
ণ্ঢ
|
| 273 |
+
ণ্ণ
|
| 274 |
+
ণ্ব
|
| 275 |
+
ণ্ম
|
| 276 |
+
ণ্য
|
| 277 |
+
র্ণ্য
|
| 278 |
+
র্ণ
|
| 279 |
+
ত্ত
|
| 280 |
+
ত্ত্ব
|
| 281 |
+
ত্ত্য
|
| 282 |
+
ত্থ
|
| 283 |
+
ত্ন
|
| 284 |
+
ত্ব
|
| 285 |
+
ত্ম
|
| 286 |
+
ত্ম্য
|
| 287 |
+
ত্য
|
| 288 |
+
ত্র
|
| 289 |
+
ত্র্য
|
| 290 |
+
র্ত্য
|
| 291 |
+
র্ত
|
| 292 |
+
র্ত্ম
|
| 293 |
+
র্ত্র
|
| 294 |
+
থ্ব
|
| 295 |
+
থ্য
|
| 296 |
+
থ্র
|
| 297 |
+
র্থ্য
|
| 298 |
+
র্থ
|
| 299 |
+
দ্গ
|
| 300 |
+
দ্ঘ
|
| 301 |
+
দ্দ
|
| 302 |
+
দ্দ্ব
|
| 303 |
+
দ্ধ
|
| 304 |
+
দ্ব
|
| 305 |
+
দ্ভ
|
| 306 |
+
দ্ভ্র
|
| 307 |
+
দ্ম
|
| 308 |
+
দ্য
|
| 309 |
+
দ্র
|
| 310 |
+
দ্র্য
|
| 311 |
+
র্দ
|
| 312 |
+
র্দ্ব
|
| 313 |
+
র্দ্র
|
| 314 |
+
ধ্ন
|
| 315 |
+
ধ্ব
|
| 316 |
+
ধ্ম
|
| 317 |
+
ধ্য
|
| 318 |
+
ধ্র
|
| 319 |
+
র্ধ
|
| 320 |
+
র্ধ্ব
|
| 321 |
+
ন্ট
|
| 322 |
+
ন্ট্র
|
| 323 |
+
ন্ঠ
|
| 324 |
+
ন্ড
|
| 325 |
+
ন্ড্র
|
| 326 |
+
ন্ত
|
| 327 |
+
ন্ত্ব
|
| 328 |
+
ন্ত্য
|
| 329 |
+
ন্ত্র
|
| 330 |
+
ন্ত্র্য
|
| 331 |
+
ন্থ
|
| 332 |
+
ন্থ্র
|
| 333 |
+
ন্দ
|
| 334 |
+
ন্দ্য
|
| 335 |
+
ন্দ্ব
|
| 336 |
+
ন্দ্র
|
| 337 |
+
ন্ধ
|
| 338 |
+
ন্ধ্য
|
| 339 |
+
ন্ধ্র
|
| 340 |
+
ন্ন
|
| 341 |
+
ন্ব
|
| 342 |
+
ন্ম
|
| 343 |
+
ন্য
|
| 344 |
+
র্ন
|
| 345 |
+
প্ট
|
| 346 |
+
প্ত
|
| 347 |
+
প্ন
|
| 348 |
+
প্প
|
| 349 |
+
প্য
|
| 350 |
+
প্র
|
| 351 |
+
প্র্য
|
| 352 |
+
প্ল
|
| 353 |
+
প্স
|
| 354 |
+
র্প
|
| 355 |
+
ফ্র
|
| 356 |
+
ফ্ল
|
| 357 |
+
র্ফ
|
| 358 |
+
ব্জ
|
| 359 |
+
ব্দ
|
| 360 |
+
ব্ধ
|
| 361 |
+
ব্ব
|
| 362 |
+
ব্য
|
| 363 |
+
ব্র
|
| 364 |
+
ব্ল
|
| 365 |
+
র্ব্য
|
| 366 |
+
র্ব
|
| 367 |
+
ভ্ব
|
| 368 |
+
ভ্য
|
| 369 |
+
ভ্র
|
| 370 |
+
ভ্ল
|
| 371 |
+
র্ভ
|
| 372 |
+
ম্ন
|
| 373 |
+
ম্প
|
| 374 |
+
ম্প্র
|
| 375 |
+
ম্ফ
|
| 376 |
+
ম্ব
|
| 377 |
+
ম্ব্র
|
| 378 |
+
ম্ভ
|
| 379 |
+
ম্ভ্র
|
| 380 |
+
ম্ম
|
| 381 |
+
ম্য
|
| 382 |
+
ম্র
|
| 383 |
+
ম্ল
|
| 384 |
+
র্ম্য
|
| 385 |
+
র্ম
|
| 386 |
+
য্য
|
| 387 |
+
র্য
|
| 388 |
+
ল্ক
|
| 389 |
+
ল্ক্য
|
| 390 |
+
ল্গ
|
| 391 |
+
ল্ট
|
| 392 |
+
ল্ড
|
| 393 |
+
ল্প
|
| 394 |
+
ল্ফ
|
| 395 |
+
ল্ব
|
| 396 |
+
ল্ভ
|
| 397 |
+
ল্ম
|
| 398 |
+
ল্য
|
| 399 |
+
ল্ল
|
| 400 |
+
র্ল
|
| 401 |
+
শ্চ
|
| 402 |
+
শ্ছ
|
| 403 |
+
শ্ন
|
| 404 |
+
শ্ব
|
| 405 |
+
শ্ম
|
| 406 |
+
শ্য
|
| 407 |
+
শ্র
|
| 408 |
+
শ্ল
|
| 409 |
+
র্শ্য
|
| 410 |
+
র্শ
|
| 411 |
+
র্শ্ব
|
| 412 |
+
ষ্ক
|
| 413 |
+
ষ্ক্ব
|
| 414 |
+
ষ্ক্র
|
| 415 |
+
ষ্ট
|
| 416 |
+
ষ্ট্য
|
| 417 |
+
ষ্ট্র
|
| 418 |
+
ষ্ঠ
|
| 419 |
+
ষ্ঠ্য
|
| 420 |
+
ষ্ণ
|
| 421 |
+
ষ্ণ্ব
|
| 422 |
+
ষ্প
|
| 423 |
+
ষ্প্র
|
| 424 |
+
ষ্ফ
|
| 425 |
+
ষ্ব
|
| 426 |
+
ষ্ম
|
| 427 |
+
ষ্য
|
| 428 |
+
র্ষ্য
|
| 429 |
+
র্ষ
|
| 430 |
+
র্ষ্ট
|
| 431 |
+
র্ষ্ণ
|
| 432 |
+
র্ষ্ণ্য
|
| 433 |
+
স্ক
|
| 434 |
+
স্ক্র
|
| 435 |
+
স্খ
|
| 436 |
+
স্ট
|
| 437 |
+
স্ট্র
|
| 438 |
+
স্ত
|
| 439 |
+
স্ত্ব
|
| 440 |
+
স্ত্য
|
| 441 |
+
স্ত্র
|
| 442 |
+
স্থ
|
| 443 |
+
স্থ্য
|
| 444 |
+
স্ন
|
| 445 |
+
স্ন্য
|
| 446 |
+
স্প
|
| 447 |
+
স্প্র
|
| 448 |
+
স্প্ল
|
| 449 |
+
স্ফ
|
| 450 |
+
স্ব
|
| 451 |
+
স্ম
|
| 452 |
+
স্য
|
| 453 |
+
স্র
|
| 454 |
+
স্ল
|
| 455 |
+
স্ক্ল
|
| 456 |
+
র্স
|
| 457 |
+
হ্ণ
|
| 458 |
+
হ্ন
|
| 459 |
+
হ্ব
|
| 460 |
+
হ্ম
|
| 461 |
+
হ্য
|
| 462 |
+
হ্র
|
| 463 |
+
হ্ল
|
| 464 |
+
র্হ্য
|
| 465 |
+
র্হ
|
| 466 |
+
ড়্গ
|
| 467 |
+
র্ৎ
|
| 468 |
+
০
|
| 469 |
+
১
|
| 470 |
+
২
|
| 471 |
+
৩
|
| 472 |
+
৪
|
| 473 |
+
৫
|
| 474 |
+
৬
|
| 475 |
+
৭
|
| 476 |
+
৮
|
| 477 |
+
৯
|
ocr-studio/PaddleOCR/ppocr/utils/dict/chinese_cht_dict.txt
ADDED
|
@@ -0,0 +1,8421 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
!
|
| 2 |
+
"
|
| 3 |
+
#
|
| 4 |
+
$
|
| 5 |
+
%
|
| 6 |
+
&
|
| 7 |
+
'
|
| 8 |
+
(
|
| 9 |
+
)
|
| 10 |
+
*
|
| 11 |
+
+
|
| 12 |
+
,
|
| 13 |
+
-
|
| 14 |
+
.
|
| 15 |
+
/
|
| 16 |
+
0
|
| 17 |
+
1
|
| 18 |
+
2
|
| 19 |
+
3
|
| 20 |
+
4
|
| 21 |
+
5
|
| 22 |
+
6
|
| 23 |
+
7
|
| 24 |
+
8
|
| 25 |
+
9
|
| 26 |
+
:
|
| 27 |
+
;
|
| 28 |
+
<
|
| 29 |
+
=
|
| 30 |
+
>
|
| 31 |
+
?
|
| 32 |
+
@
|
| 33 |
+
A
|
| 34 |
+
B
|
| 35 |
+
C
|
| 36 |
+
D
|
| 37 |
+
E
|
| 38 |
+
F
|
| 39 |
+
G
|
| 40 |
+
H
|
| 41 |
+
I
|
| 42 |
+
J
|
| 43 |
+
K
|
| 44 |
+
L
|
| 45 |
+
M
|
| 46 |
+
N
|
| 47 |
+
O
|
| 48 |
+
P
|
| 49 |
+
Q
|
| 50 |
+
R
|
| 51 |
+
S
|
| 52 |
+
T
|
| 53 |
+
U
|
| 54 |
+
V
|
| 55 |
+
W
|
| 56 |
+
X
|
| 57 |
+
Y
|
| 58 |
+
Z
|
| 59 |
+
[
|
| 60 |
+
\
|
| 61 |
+
]
|
| 62 |
+
^
|
| 63 |
+
_
|
| 64 |
+
`
|
| 65 |
+
a
|
| 66 |
+
b
|
| 67 |
+
c
|
| 68 |
+
d
|
| 69 |
+
e
|
| 70 |
+
f
|
| 71 |
+
g
|
| 72 |
+
h
|
| 73 |
+
i
|
| 74 |
+
j
|
| 75 |
+
k
|
| 76 |
+
l
|
| 77 |
+
m
|
| 78 |
+
n
|
| 79 |
+
o
|
| 80 |
+
p
|
| 81 |
+
q
|
| 82 |
+
r
|
| 83 |
+
s
|
| 84 |
+
t
|
| 85 |
+
u
|
| 86 |
+
v
|
| 87 |
+
w
|
| 88 |
+
x
|
| 89 |
+
y
|
| 90 |
+
z
|
| 91 |
+
{
|
| 92 |
+
|
|
| 93 |
+
}
|
| 94 |
+
~
|
| 95 |
+
¥
|
| 96 |
+
®
|
| 97 |
+
°
|
| 98 |
+
±
|
| 99 |
+
²
|
| 100 |
+
´
|
| 101 |
+
·
|
| 102 |
+
»
|
| 103 |
+
É
|
| 104 |
+
Ë
|
| 105 |
+
Ó
|
| 106 |
+
×
|
| 107 |
+
Ü
|
| 108 |
+
à
|
| 109 |
+
á
|
| 110 |
+
ä
|
| 111 |
+
è
|
| 112 |
+
é
|
| 113 |
+
ì
|
| 114 |
+
í
|
| 115 |
+
ò
|
| 116 |
+
ó
|
| 117 |
+
÷
|
| 118 |
+
ú
|
| 119 |
+
ü
|
| 120 |
+
ā
|
| 121 |
+
ē
|
| 122 |
+
ī
|
| 123 |
+
ō
|
| 124 |
+
ū
|
| 125 |
+
ǐ
|
| 126 |
+
ǒ
|
| 127 |
+
ɔ
|
| 128 |
+
ɡ
|
| 129 |
+
ʌ
|
| 130 |
+
ˋ
|
| 131 |
+
Λ
|
| 132 |
+
Ο
|
| 133 |
+
Φ
|
| 134 |
+
Ω
|
| 135 |
+
α
|
| 136 |
+
β
|
| 137 |
+
ε
|
| 138 |
+
θ
|
| 139 |
+
μ
|
| 140 |
+
π
|
| 141 |
+
З
|
| 142 |
+
И
|
| 143 |
+
Й
|
| 144 |
+
П
|
| 145 |
+
Я
|
| 146 |
+
г
|
| 147 |
+
—
|
| 148 |
+
‖
|
| 149 |
+
‘
|
| 150 |
+
’
|
| 151 |
+
“
|
| 152 |
+
”
|
| 153 |
+
•
|
| 154 |
+
…
|
| 155 |
+
‧
|
| 156 |
+
′
|
| 157 |
+
″
|
| 158 |
+
※
|
| 159 |
+
℃
|
| 160 |
+
№
|
| 161 |
+
™
|
| 162 |
+
Ⅱ
|
| 163 |
+
Ⅲ
|
| 164 |
+
Ⅳ
|
| 165 |
+
←
|
| 166 |
+
↑
|
| 167 |
+
→
|
| 168 |
+
↓
|
| 169 |
+
⇋
|
| 170 |
+
∈
|
| 171 |
+
∑
|
| 172 |
+
√
|
| 173 |
+
∞
|
| 174 |
+
∣
|
| 175 |
+
∧
|
| 176 |
+
∩
|
| 177 |
+
∫
|
| 178 |
+
∶
|
| 179 |
+
≈
|
| 180 |
+
≠
|
| 181 |
+
≤
|
| 182 |
+
≥
|
| 183 |
+
⊙
|
| 184 |
+
⊥
|
| 185 |
+
①
|
| 186 |
+
②
|
| 187 |
+
③
|
| 188 |
+
④
|
| 189 |
+
⑧
|
| 190 |
+
⑴
|
| 191 |
+
⑵
|
| 192 |
+
⑶
|
| 193 |
+
─
|
| 194 |
+
│
|
| 195 |
+
┅
|
| 196 |
+
┌
|
| 197 |
+
├
|
| 198 |
+
█
|
| 199 |
+
▎
|
| 200 |
+
▏
|
| 201 |
+
▕
|
| 202 |
+
■
|
| 203 |
+
□
|
| 204 |
+
▪
|
| 205 |
+
▲
|
| 206 |
+
△
|
| 207 |
+
▼
|
| 208 |
+
◆
|
| 209 |
+
◇
|
| 210 |
+
○
|
| 211 |
+
◎
|
| 212 |
+
●
|
| 213 |
+
◥
|
| 214 |
+
★
|
| 215 |
+
☆
|
| 216 |
+
❋
|
| 217 |
+
❤
|
| 218 |
+
|
| 219 |
+
、
|
| 220 |
+
。
|
| 221 |
+
〇
|
| 222 |
+
〉
|
| 223 |
+
《
|
| 224 |
+
》
|
| 225 |
+
「
|
| 226 |
+
」
|
| 227 |
+
『
|
| 228 |
+
』
|
| 229 |
+
【
|
| 230 |
+
】
|
| 231 |
+
〔
|
| 232 |
+
〕
|
| 233 |
+
〖
|
| 234 |
+
〗
|
| 235 |
+
の
|
| 236 |
+
サ
|
| 237 |
+
シ
|
| 238 |
+
ジ
|
| 239 |
+
マ
|
| 240 |
+
ㄱ
|
| 241 |
+
ㆍ
|
| 242 |
+
㎏
|
| 243 |
+
㎡
|
| 244 |
+
㐂
|
| 245 |
+
㐱
|
| 246 |
+
㙟
|
| 247 |
+
㴪
|
| 248 |
+
㸃
|
| 249 |
+
䖝
|
| 250 |
+
䝉
|
| 251 |
+
䰾
|
| 252 |
+
䲁
|
| 253 |
+
一
|
| 254 |
+
丁
|
| 255 |
+
七
|
| 256 |
+
丄
|
| 257 |
+
丈
|
| 258 |
+
三
|
| 259 |
+
上
|
| 260 |
+
下
|
| 261 |
+
丌
|
| 262 |
+
不
|
| 263 |
+
与
|
| 264 |
+
丏
|
| 265 |
+
丐
|
| 266 |
+
丑
|
| 267 |
+
且
|
| 268 |
+
丕
|
| 269 |
+
世
|
| 270 |
+
丘
|
| 271 |
+
丙
|
| 272 |
+
丞
|
| 273 |
+
丟
|
| 274 |
+
両
|
| 275 |
+
並
|
| 276 |
+
丨
|
| 277 |
+
丫
|
| 278 |
+
中
|
| 279 |
+
丰
|
| 280 |
+
串
|
| 281 |
+
丶
|
| 282 |
+
丸
|
| 283 |
+
丹
|
| 284 |
+
主
|
| 285 |
+
丼
|
| 286 |
+
丿
|
| 287 |
+
乂
|
| 288 |
+
乃
|
| 289 |
+
久
|
| 290 |
+
么
|
| 291 |
+
之
|
| 292 |
+
乍
|
| 293 |
+
乎
|
| 294 |
+
乏
|
| 295 |
+
乒
|
| 296 |
+
乓
|
| 297 |
+
乖
|
| 298 |
+
乗
|
| 299 |
+
乘
|
| 300 |
+
乙
|
| 301 |
+
乚
|
| 302 |
+
乜
|
| 303 |
+
九
|
| 304 |
+
乞
|
| 305 |
+
也
|
| 306 |
+
乩
|
| 307 |
+
乭
|
| 308 |
+
乳
|
| 309 |
+
乸
|
| 310 |
+
乹
|
| 311 |
+
乾
|
| 312 |
+
亀
|
| 313 |
+
亂
|
| 314 |
+
亅
|
| 315 |
+
了
|
| 316 |
+
予
|
| 317 |
+
亊
|
| 318 |
+
事
|
| 319 |
+
二
|
| 320 |
+
亍
|
| 321 |
+
云
|
| 322 |
+
互
|
| 323 |
+
亓
|
| 324 |
+
五
|
| 325 |
+
井
|
| 326 |
+
亘
|
| 327 |
+
些
|
| 328 |
+
亜
|
| 329 |
+
亞
|
| 330 |
+
亟
|
| 331 |
+
亠
|
| 332 |
+
亡
|
| 333 |
+
亢
|
| 334 |
+
交
|
| 335 |
+
亥
|
| 336 |
+
亦
|
| 337 |
+
亨
|
| 338 |
+
享
|
| 339 |
+
京
|
| 340 |
+
亭
|
| 341 |
+
亮
|
| 342 |
+
亰
|
| 343 |
+
亳
|
| 344 |
+
亶
|
| 345 |
+
亹
|
| 346 |
+
人
|
| 347 |
+
亻
|
| 348 |
+
什
|
| 349 |
+
仁
|
| 350 |
+
仂
|
| 351 |
+
仃
|
| 352 |
+
仄
|
| 353 |
+
仇
|
| 354 |
+
仉
|
| 355 |
+
今
|
| 356 |
+
介
|
| 357 |
+
仍
|
| 358 |
+
仏
|
| 359 |
+
仔
|
| 360 |
+
仕
|
| 361 |
+
他
|
| 362 |
+
仗
|
| 363 |
+
付
|
| 364 |
+
仙
|
| 365 |
+
仛
|
| 366 |
+
仝
|
| 367 |
+
仞
|
| 368 |
+
仟
|
| 369 |
+
仡
|
| 370 |
+
代
|
| 371 |
+
令
|
| 372 |
+
以
|
| 373 |
+
仨
|
| 374 |
+
仫
|
| 375 |
+
仮
|
| 376 |
+
仰
|
| 377 |
+
仲
|
| 378 |
+
仳
|
| 379 |
+
仵
|
| 380 |
+
件
|
| 381 |
+
仺
|
| 382 |
+
任
|
| 383 |
+
仼
|
| 384 |
+
份
|
| 385 |
+
仿
|
| 386 |
+
企
|
| 387 |
+
伃
|
| 388 |
+
伈
|
| 389 |
+
伉
|
| 390 |
+
伊
|
| 391 |
+
伋
|
| 392 |
+
伍
|
| 393 |
+
伎
|
| 394 |
+
伏
|
| 395 |
+
伐
|
| 396 |
+
休
|
| 397 |
+
伕
|
| 398 |
+
伙
|
| 399 |
+
伝
|
| 400 |
+
伢
|
| 401 |
+
伯
|
| 402 |
+
估
|
| 403 |
+
伱
|
| 404 |
+
伴
|
| 405 |
+
伶
|
| 406 |
+
伷
|
| 407 |
+
伸
|
| 408 |
+
伺
|
| 409 |
+
似
|
| 410 |
+
伽
|
| 411 |
+
伾
|
| 412 |
+
佀
|
| 413 |
+
佁
|
| 414 |
+
佃
|
| 415 |
+
但
|
| 416 |
+
佇
|
| 417 |
+
佈
|
| 418 |
+
佉
|
| 419 |
+
佋
|
| 420 |
+
位
|
| 421 |
+
低
|
| 422 |
+
住
|
| 423 |
+
佐
|
| 424 |
+
佑
|
| 425 |
+
体
|
| 426 |
+
佔
|
| 427 |
+
何
|
| 428 |
+
佗
|
| 429 |
+
佘
|
| 430 |
+
余
|
| 431 |
+
佚
|
| 432 |
+
佛
|
| 433 |
+
作
|
| 434 |
+
佝
|
| 435 |
+
佞
|
| 436 |
+
佟
|
| 437 |
+
你
|
| 438 |
+
佣
|
| 439 |
+
佤
|
| 440 |
+
佧
|
| 441 |
+
佩
|
| 442 |
+
佬
|
| 443 |
+
佯
|
| 444 |
+
佰
|
| 445 |
+
佳
|
| 446 |
+
併
|
| 447 |
+
佶
|
| 448 |
+
佹
|
| 449 |
+
佺
|
| 450 |
+
佼
|
| 451 |
+
佾
|
| 452 |
+
使
|
| 453 |
+
侁
|
| 454 |
+
侃
|
| 455 |
+
侄
|
| 456 |
+
侅
|
| 457 |
+
來
|
| 458 |
+
侈
|
| 459 |
+
侊
|
| 460 |
+
例
|
| 461 |
+
侍
|
| 462 |
+
侏
|
| 463 |
+
侑
|
| 464 |
+
侖
|
| 465 |
+
侗
|
| 466 |
+
侘
|
| 467 |
+
侚
|
| 468 |
+
供
|
| 469 |
+
依
|
| 470 |
+
侞
|
| 471 |
+
価
|
| 472 |
+
侮
|
| 473 |
+
侯
|
| 474 |
+
侵
|
| 475 |
+
侶
|
| 476 |
+
侷
|
| 477 |
+
侹
|
| 478 |
+
便
|
| 479 |
+
俁
|
| 480 |
+
係
|
| 481 |
+
促
|
| 482 |
+
俄
|
| 483 |
+
俅
|
| 484 |
+
俊
|
| 485 |
+
俋
|
| 486 |
+
俌
|
| 487 |
+
俍
|
| 488 |
+
俎
|
| 489 |
+
俏
|
| 490 |
+
俐
|
| 491 |
+
俑
|
| 492 |
+
俗
|
| 493 |
+
俘
|
| 494 |
+
俚
|
| 495 |
+
俛
|
| 496 |
+
保
|
| 497 |
+
俞
|
| 498 |
+
俟
|
| 499 |
+
俠
|
| 500 |
+
信
|
| 501 |
+
俬
|
| 502 |
+
修
|
| 503 |
+
俯
|
| 504 |
+
俱
|
| 505 |
+
俳
|
| 506 |
+
俴
|
| 507 |
+
俵
|
| 508 |
+
俶
|
| 509 |
+
俸
|
| 510 |
+
俺
|
| 511 |
+
俽
|
| 512 |
+
俾
|
| 513 |
+
倆
|
| 514 |
+
倈
|
| 515 |
+
倉
|
| 516 |
+
個
|
| 517 |
+
倌
|
| 518 |
+
倍
|
| 519 |
+
們
|
| 520 |
+
倒
|
| 521 |
+
倓
|
| 522 |
+
倔
|
| 523 |
+
倖
|
| 524 |
+
倗
|
| 525 |
+
倘
|
| 526 |
+
候
|
| 527 |
+
倚
|
| 528 |
+
倜
|
| 529 |
+
倞
|
| 530 |
+
借
|
| 531 |
+
倡
|
| 532 |
+
倢
|
| 533 |
+
倣
|
| 534 |
+
値
|
| 535 |
+
倦
|
| 536 |
+
倧
|
| 537 |
+
倩
|
| 538 |
+
倪
|
| 539 |
+
倫
|
| 540 |
+
倬
|
| 541 |
+
倭
|
| 542 |
+
倮
|
| 543 |
+
倻
|
| 544 |
+
值
|
| 545 |
+
偁
|
| 546 |
+
偃
|
| 547 |
+
假
|
| 548 |
+
偈
|
| 549 |
+
偉
|
| 550 |
+
偊
|
| 551 |
+
偌
|
| 552 |
+
偍
|
| 553 |
+
偎
|
| 554 |
+
偏
|
| 555 |
+
偓
|
| 556 |
+
偕
|
| 557 |
+
做
|
| 558 |
+
停
|
| 559 |
+
健
|
| 560 |
+
偪
|
| 561 |
+
偲
|
| 562 |
+
側
|
| 563 |
+
偵
|
| 564 |
+
偶
|
| 565 |
+
偷
|
| 566 |
+
偸
|
| 567 |
+
偽
|
| 568 |
+
傀
|
| 569 |
+
傃
|
| 570 |
+
傅
|
| 571 |
+
傈
|
| 572 |
+
傉
|
| 573 |
+
傍
|
| 574 |
+
傑
|
| 575 |
+
傒
|
| 576 |
+
傕
|
| 577 |
+
傖
|
| 578 |
+
傘
|
| 579 |
+
備
|
| 580 |
+
傜
|
| 581 |
+
傢
|
| 582 |
+
傣
|
| 583 |
+
催
|
| 584 |
+
傭
|
| 585 |
+
傲
|
| 586 |
+
傳
|
| 587 |
+
債
|
| 588 |
+
傷
|
| 589 |
+
傻
|
| 590 |
+
傾
|
| 591 |
+
僅
|
| 592 |
+
僉
|
| 593 |
+
僊
|
| 594 |
+
働
|
| 595 |
+
像
|
| 596 |
+
僑
|
| 597 |
+
僔
|
| 598 |
+
僕
|
| 599 |
+
僖
|
| 600 |
+
僙
|
| 601 |
+
僚
|
| 602 |
+
僜
|
| 603 |
+
僡
|
| 604 |
+
僧
|
| 605 |
+
僩
|
| 606 |
+
僭
|
| 607 |
+
僮
|
| 608 |
+
僰
|
| 609 |
+
僱
|
| 610 |
+
僳
|
| 611 |
+
僴
|
| 612 |
+
僵
|
| 613 |
+
價
|
| 614 |
+
僻
|
| 615 |
+
儀
|
| 616 |
+
儁
|
| 617 |
+
儂
|
| 618 |
+
億
|
| 619 |
+
儆
|
| 620 |
+
儇
|
| 621 |
+
儈
|
| 622 |
+
儉
|
| 623 |
+
儋
|
| 624 |
+
儐
|
| 625 |
+
儒
|
| 626 |
+
儔
|
| 627 |
+
儕
|
| 628 |
+
儘
|
| 629 |
+
儚
|
| 630 |
+
儞
|
| 631 |
+
償
|
| 632 |
+
儡
|
| 633 |
+
儥
|
| 634 |
+
儦
|
| 635 |
+
優
|
| 636 |
+
儫
|
| 637 |
+
儱
|
| 638 |
+
儲
|
| 639 |
+
儷
|
| 640 |
+
儺
|
| 641 |
+
儻
|
| 642 |
+
儼
|
| 643 |
+
兀
|
| 644 |
+
允
|
| 645 |
+
元
|
| 646 |
+
兄
|
| 647 |
+
充
|
| 648 |
+
兆
|
| 649 |
+
先
|
| 650 |
+
光
|
| 651 |
+
克
|
| 652 |
+
兌
|
| 653 |
+
免
|
| 654 |
+
児
|
| 655 |
+
兒
|
| 656 |
+
兔
|
| 657 |
+
兕
|
| 658 |
+
兗
|
| 659 |
+
兜
|
| 660 |
+
入
|
| 661 |
+
內
|
| 662 |
+
全
|
| 663 |
+
兩
|
| 664 |
+
兪
|
| 665 |
+
八
|
| 666 |
+
公
|
| 667 |
+
六
|
| 668 |
+
兮
|
| 669 |
+
共
|
| 670 |
+
兵
|
| 671 |
+
其
|
| 672 |
+
具
|
| 673 |
+
典
|
| 674 |
+
兼
|
| 675 |
+
兿
|
| 676 |
+
冀
|
| 677 |
+
冂
|
| 678 |
+
円
|
| 679 |
+
冇
|
| 680 |
+
冉
|
| 681 |
+
冊
|
| 682 |
+
再
|
| 683 |
+
冏
|
| 684 |
+
冑
|
| 685 |
+
冒
|
| 686 |
+
冕
|
| 687 |
+
冖
|
| 688 |
+
冗
|
| 689 |
+
冚
|
| 690 |
+
冠
|
| 691 |
+
冢
|
| 692 |
+
冤
|
| 693 |
+
冥
|
| 694 |
+
冧
|
| 695 |
+
冨
|
| 696 |
+
冪
|
| 697 |
+
冫
|
| 698 |
+
冬
|
| 699 |
+
冮
|
| 700 |
+
冰
|
| 701 |
+
冴
|
| 702 |
+
冶
|
| 703 |
+
冷
|
| 704 |
+
冼
|
| 705 |
+
冽
|
| 706 |
+
凃
|
| 707 |
+
凄
|
| 708 |
+
准
|
| 709 |
+
凈
|
| 710 |
+
凋
|
| 711 |
+
凌
|
| 712 |
+
凍
|
| 713 |
+
凖
|
| 714 |
+
凜
|
| 715 |
+
凝
|
| 716 |
+
凞
|
| 717 |
+
几
|
| 718 |
+
凡
|
| 719 |
+
処
|
| 720 |
+
凪
|
| 721 |
+
凬
|
| 722 |
+
凰
|
| 723 |
+
凱
|
| 724 |
+
凳
|
| 725 |
+
凵
|
| 726 |
+
凶
|
| 727 |
+
凸
|
| 728 |
+
凹
|
| 729 |
+
出
|
| 730 |
+
函
|
| 731 |
+
刀
|
| 732 |
+
刁
|
| 733 |
+
刂
|
| 734 |
+
刃
|
| 735 |
+
刄
|
| 736 |
+
分
|
| 737 |
+
切
|
| 738 |
+
刈
|
| 739 |
+
刊
|
| 740 |
+
刎
|
| 741 |
+
刑
|
| 742 |
+
划
|
| 743 |
+
列
|
| 744 |
+
初
|
| 745 |
+
判
|
| 746 |
+
別
|
| 747 |
+
刦
|
| 748 |
+
刧
|
| 749 |
+
刨
|
| 750 |
+
利
|
| 751 |
+
刪
|
| 752 |
+
刮
|
| 753 |
+
到
|
| 754 |
+
制
|
| 755 |
+
刷
|
| 756 |
+
券
|
| 757 |
+
刺
|
| 758 |
+
刻
|
| 759 |
+
刼
|
| 760 |
+
剁
|
| 761 |
+
剃
|
| 762 |
+
則
|
| 763 |
+
削
|
| 764 |
+
剋
|
| 765 |
+
剌
|
| 766 |
+
前
|
| 767 |
+
剎
|
| 768 |
+
剏
|
| 769 |
+
剔
|
| 770 |
+
剖
|
| 771 |
+
剛
|
| 772 |
+
剝
|
| 773 |
+
剡
|
| 774 |
+
剣
|
| 775 |
+
剩
|
| 776 |
+
剪
|
| 777 |
+
剮
|
| 778 |
+
副
|
| 779 |
+
割
|
| 780 |
+
創
|
| 781 |
+
剿
|
| 782 |
+
劃
|
| 783 |
+
劄
|
| 784 |
+
劇
|
| 785 |
+
劈
|
| 786 |
+
劉
|
| 787 |
+
劊
|
| 788 |
+
劌
|
| 789 |
+
劍
|
| 790 |
+
劑
|
| 791 |
+
劔
|
| 792 |
+
力
|
| 793 |
+
功
|
| 794 |
+
加
|
| 795 |
+
劣
|
| 796 |
+
助
|
| 797 |
+
努
|
| 798 |
+
劫
|
| 799 |
+
劬
|
| 800 |
+
劭
|
| 801 |
+
劵
|
| 802 |
+
効
|
| 803 |
+
劼
|
| 804 |
+
劾
|
| 805 |
+
勁
|
| 806 |
+
勃
|
| 807 |
+
勅
|
| 808 |
+
勇
|
| 809 |
+
勉
|
| 810 |
+
勐
|
| 811 |
+
勑
|
| 812 |
+
勒
|
| 813 |
+
勔
|
| 814 |
+
動
|
| 815 |
+
勖
|
| 816 |
+
勗
|
| 817 |
+
勘
|
| 818 |
+
務
|
| 819 |
+
勛
|
| 820 |
+
勝
|
| 821 |
+
勞
|
| 822 |
+
募
|
| 823 |
+
勢
|
| 824 |
+
勣
|
| 825 |
+
勤
|
| 826 |
+
勦
|
| 827 |
+
勰
|
| 828 |
+
勱
|
| 829 |
+
勲
|
| 830 |
+
勳
|
| 831 |
+
勵
|
| 832 |
+
勷
|
| 833 |
+
勸
|
| 834 |
+
勺
|
| 835 |
+
勻
|
| 836 |
+
勾
|
| 837 |
+
勿
|
| 838 |
+
匂
|
| 839 |
+
匄
|
| 840 |
+
包
|
| 841 |
+
匆
|
| 842 |
+
匈
|
| 843 |
+
匋
|
| 844 |
+
匍
|
| 845 |
+
匏
|
| 846 |
+
匐
|
| 847 |
+
匕
|
| 848 |
+
化
|
| 849 |
+
北
|
| 850 |
+
匙
|
| 851 |
+
匚
|
| 852 |
+
匝
|
| 853 |
+
匠
|
| 854 |
+
匡
|
| 855 |
+
匣
|
| 856 |
+
匪
|
| 857 |
+
匯
|
| 858 |
+
匱
|
| 859 |
+
匸
|
| 860 |
+
匹
|
| 861 |
+
匾
|
| 862 |
+
匿
|
| 863 |
+
區
|
| 864 |
+
十
|
| 865 |
+
千
|
| 866 |
+
卅
|
| 867 |
+
升
|
| 868 |
+
午
|
| 869 |
+
卉
|
| 870 |
+
半
|
| 871 |
+
卋
|
| 872 |
+
卍
|
| 873 |
+
卐
|
| 874 |
+
卑
|
| 875 |
+
卒
|
| 876 |
+
卓
|
| 877 |
+
協
|
| 878 |
+
南
|
| 879 |
+
博
|
| 880 |
+
卜
|
| 881 |
+
卞
|
| 882 |
+
卟
|
| 883 |
+
占
|
| 884 |
+
卡
|
| 885 |
+
卣
|
| 886 |
+
卦
|
| 887 |
+
卧
|
| 888 |
+
卩
|
| 889 |
+
卬
|
| 890 |
+
卮
|
| 891 |
+
卯
|
| 892 |
+
印
|
| 893 |
+
危
|
| 894 |
+
卲
|
| 895 |
+
即
|
| 896 |
+
卵
|
| 897 |
+
卷
|
| 898 |
+
卸
|
| 899 |
+
卹
|
| 900 |
+
卺
|
| 901 |
+
卻
|
| 902 |
+
卽
|
| 903 |
+
卿
|
| 904 |
+
厄
|
| 905 |
+
厓
|
| 906 |
+
厔
|
| 907 |
+
厙
|
| 908 |
+
厚
|
| 909 |
+
厝
|
| 910 |
+
原
|
| 911 |
+
厥
|
| 912 |
+
厭
|
| 913 |
+
厰
|
| 914 |
+
厲
|
| 915 |
+
厴
|
| 916 |
+
厶
|
| 917 |
+
去
|
| 918 |
+
參
|
| 919 |
+
叄
|
| 920 |
+
又
|
| 921 |
+
叉
|
| 922 |
+
及
|
| 923 |
+
友
|
| 924 |
+
反
|
| 925 |
+
収
|
| 926 |
+
叔
|
| 927 |
+
叕
|
| 928 |
+
取
|
| 929 |
+
受
|
| 930 |
+
叛
|
| 931 |
+
叟
|
| 932 |
+
叡
|
| 933 |
+
叢
|
| 934 |
+
口
|
| 935 |
+
古
|
| 936 |
+
句
|
| 937 |
+
另
|
| 938 |
+
叨
|
| 939 |
+
叩
|
| 940 |
+
只
|
| 941 |
+
叫
|
| 942 |
+
召
|
| 943 |
+
叭
|
| 944 |
+
叮
|
| 945 |
+
可
|
| 946 |
+
台
|
| 947 |
+
叱
|
| 948 |
+
史
|
| 949 |
+
右
|
| 950 |
+
叵
|
| 951 |
+
司
|
| 952 |
+
叻
|
| 953 |
+
叼
|
| 954 |
+
吁
|
| 955 |
+
吃
|
| 956 |
+
各
|
| 957 |
+
吆
|
| 958 |
+
合
|
| 959 |
+
吉
|
| 960 |
+
吊
|
| 961 |
+
吋
|
| 962 |
+
同
|
| 963 |
+
名
|
| 964 |
+
后
|
| 965 |
+
吏
|
| 966 |
+
吐
|
| 967 |
+
向
|
| 968 |
+
吒
|
| 969 |
+
吔
|
| 970 |
+
吖
|
| 971 |
+
君
|
| 972 |
+
吝
|
| 973 |
+
吞
|
| 974 |
+
吟
|
| 975 |
+
吠
|
| 976 |
+
吡
|
| 977 |
+
吥
|
| 978 |
+
否
|
| 979 |
+
吧
|
| 980 |
+
吩
|
| 981 |
+
含
|
| 982 |
+
吮
|
| 983 |
+
吱
|
| 984 |
+
吲
|
| 985 |
+
吳
|
| 986 |
+
吵
|
| 987 |
+
吶
|
| 988 |
+
吸
|
| 989 |
+
吹
|
| 990 |
+
吻
|
| 991 |
+
吼
|
| 992 |
+
吾
|
| 993 |
+
呀
|
| 994 |
+
呂
|
| 995 |
+
呃
|
| 996 |
+
呈
|
| 997 |
+
呉
|
| 998 |
+
告
|
| 999 |
+
呋
|
| 1000 |
+
呎
|
| 1001 |
+
呢
|
| 1002 |
+
呤
|
| 1003 |
+
呦
|
| 1004 |
+
周
|
| 1005 |
+
呱
|
| 1006 |
+
味
|
| 1007 |
+
呵
|
| 1008 |
+
呷
|
| 1009 |
+
呸
|
| 1010 |
+
呼
|
| 1011 |
+
命
|
| 1012 |
+
呾
|
| 1013 |
+
咀
|
| 1014 |
+
咁
|
| 1015 |
+
咂
|
| 1016 |
+
咄
|
| 1017 |
+
咅
|
| 1018 |
+
咆
|
| 1019 |
+
咋
|
| 1020 |
+
和
|
| 1021 |
+
咎
|
| 1022 |
+
咑
|
| 1023 |
+
咒
|
| 1024 |
+
咔
|
| 1025 |
+
咕
|
| 1026 |
+
咖
|
| 1027 |
+
咗
|
| 1028 |
+
咘
|
| 1029 |
+
咚
|
| 1030 |
+
咟
|
| 1031 |
+
咤
|
| 1032 |
+
咥
|
| 1033 |
+
咧
|
| 1034 |
+
咨
|
| 1035 |
+
咩
|
| 1036 |
+
咪
|
| 1037 |
+
咫
|
| 1038 |
+
咬
|
| 1039 |
+
咭
|
| 1040 |
+
咯
|
| 1041 |
+
咱
|
| 1042 |
+
咲
|
| 1043 |
+
咳
|
| 1044 |
+
咸
|
| 1045 |
+
咻
|
| 1046 |
+
咼
|
| 1047 |
+
咽
|
| 1048 |
+
咾
|
| 1049 |
+
咿
|
| 1050 |
+
哀
|
| 1051 |
+
品
|
| 1052 |
+
哂
|
| 1053 |
+
哄
|
| 1054 |
+
哆
|
| 1055 |
+
哇
|
| 1056 |
+
哈
|
| 1057 |
+
哉
|
| 1058 |
+
哌
|
| 1059 |
+
哎
|
| 1060 |
+
哏
|
| 1061 |
+
哐
|
| 1062 |
+
哖
|
| 1063 |
+
哚
|
| 1064 |
+
哞
|
| 1065 |
+
員
|
| 1066 |
+
哥
|
| 1067 |
+
哦
|
| 1068 |
+
哨
|
| 1069 |
+
哩
|
| 1070 |
+
哪
|
| 1071 |
+
哭
|
| 1072 |
+
哮
|
| 1073 |
+
哱
|
| 1074 |
+
哲
|
| 1075 |
+
哺
|
| 1076 |
+
哼
|
| 1077 |
+
唃
|
| 1078 |
+
唄
|
| 1079 |
+
唆
|
| 1080 |
+
唇
|
| 1081 |
+
唉
|
| 1082 |
+
唏
|
| 1083 |
+
唐
|
| 1084 |
+
唑
|
| 1085 |
+
唔
|
| 1086 |
+
唘
|
| 1087 |
+
唧
|
| 1088 |
+
唫
|
| 1089 |
+
唬
|
| 1090 |
+
唭
|
| 1091 |
+
售
|
| 1092 |
+
唯
|
| 1093 |
+
唱
|
| 1094 |
+
唳
|
| 1095 |
+
唵
|
| 1096 |
+
唷
|
| 1097 |
+
唸
|
| 1098 |
+
唻
|
| 1099 |
+
唾
|
| 1100 |
+
啁
|
| 1101 |
+
啃
|
| 1102 |
+
啄
|
| 1103 |
+
商
|
| 1104 |
+
啉
|
| 1105 |
+
啊
|
| 1106 |
+
啍
|
| 1107 |
+
問
|
| 1108 |
+
啓
|
| 1109 |
+
啖
|
| 1110 |
+
啚
|
| 1111 |
+
啜
|
| 1112 |
+
啞
|
| 1113 |
+
啟
|
| 1114 |
+
啡
|
| 1115 |
+
啣
|
| 1116 |
+
啤
|
| 1117 |
+
啥
|
| 1118 |
+
啦
|
| 1119 |
+
啪
|
| 1120 |
+
啫
|
| 1121 |
+
啯
|
| 1122 |
+
啰
|
| 1123 |
+
啱
|
| 1124 |
+
啲
|
| 1125 |
+
啵
|
| 1126 |
+
啶
|
| 1127 |
+
啷
|
| 1128 |
+
啻
|
| 1129 |
+
啼
|
| 1130 |
+
啾
|
| 1131 |
+
喀
|
| 1132 |
+
喂
|
| 1133 |
+
喃
|
| 1134 |
+
善
|
| 1135 |
+
喆
|
| 1136 |
+
喇
|
| 1137 |
+
喈
|
| 1138 |
+
喉
|
| 1139 |
+
喊
|
| 1140 |
+
喋
|
| 1141 |
+
喏
|
| 1142 |
+
喔
|
| 1143 |
+
喘
|
| 1144 |
+
喙
|
| 1145 |
+
喚
|
| 1146 |
+
喜
|
| 1147 |
+
喝
|
| 1148 |
+
喢
|
| 1149 |
+
喦
|
| 1150 |
+
喧
|
| 1151 |
+
喪
|
| 1152 |
+
喫
|
| 1153 |
+
喬
|
| 1154 |
+
單
|
| 1155 |
+
喰
|
| 1156 |
+
喱
|
| 1157 |
+
喲
|
| 1158 |
+
喳
|
| 1159 |
+
喵
|
| 1160 |
+
喹
|
| 1161 |
+
喻
|
| 1162 |
+
喼
|
| 1163 |
+
嗄
|
| 1164 |
+
嗅
|
| 1165 |
+
嗆
|
| 1166 |
+
嗇
|
| 1167 |
+
嗊
|
| 1168 |
+
嗎
|
| 1169 |
+
嗑
|
| 1170 |
+
嗒
|
| 1171 |
+
嗓
|
| 1172 |
+
嗔
|
| 1173 |
+
嗖
|
| 1174 |
+
嗚
|
| 1175 |
+
嗜
|
| 1176 |
+
嗝
|
| 1177 |
+
嗞
|
| 1178 |
+
嗡
|
| 1179 |
+
嗢
|
| 1180 |
+
嗣
|
| 1181 |
+
嗦
|
| 1182 |
+
嗨
|
| 1183 |
+
嗩
|
| 1184 |
+
嗪
|
| 1185 |
+
嗮
|
| 1186 |
+
嗯
|
| 1187 |
+
嗲
|
| 1188 |
+
嗶
|
| 1189 |
+
嗹
|
| 1190 |
+
嗽
|
| 1191 |
+
嘀
|
| 1192 |
+
嘅
|
| 1193 |
+
嘆
|
| 1194 |
+
嘉
|
| 1195 |
+
嘌
|
| 1196 |
+
嘍
|
| 1197 |
+
嘎
|
| 1198 |
+
嘏
|
| 1199 |
+
嘔
|
| 1200 |
+
嘗
|
| 1201 |
+
嘚
|
| 1202 |
+
嘛
|
| 1203 |
+
嘜
|
| 1204 |
+
嘞
|
| 1205 |
+
嘟
|
| 1206 |
+
嘢
|
| 1207 |
+
嘣
|
| 1208 |
+
嘥
|
| 1209 |
+
嘧
|
| 1210 |
+
嘩
|
| 1211 |
+
嘬
|
| 1212 |
+
嘮
|
| 1213 |
+
嘯
|
| 1214 |
+
嘰
|
| 1215 |
+
嘲
|
| 1216 |
+
嘴
|
| 1217 |
+
嘶
|
| 1218 |
+
嘸
|
| 1219 |
+
嘹
|
| 1220 |
+
嘻
|
| 1221 |
+
嘿
|
| 1222 |
+
噁
|
| 1223 |
+
噌
|
| 1224 |
+
噍
|
| 1225 |
+
噏
|
| 1226 |
+
噓
|
| 1227 |
+
噗
|
| 1228 |
+
噝
|
| 1229 |
+
噠
|
| 1230 |
+
噢
|
| 1231 |
+
噤
|
| 1232 |
+
噥
|
| 1233 |
+
噦
|
| 1234 |
+
器
|
| 1235 |
+
噩
|
| 1236 |
+
噪
|
| 1237 |
+
噬
|
| 1238 |
+
噯
|
| 1239 |
+
噰
|
| 1240 |
+
噲
|
| 1241 |
+
噴
|
| 1242 |
+
噶
|
| 1243 |
+
噸
|
| 1244 |
+
噹
|
| 1245 |
+
噻
|
| 1246 |
+
嚇
|
| 1247 |
+
嚈
|
| 1248 |
+
嚎
|
| 1249 |
+
嚏
|
| 1250 |
+
嚐
|
| 1251 |
+
嚒
|
| 1252 |
+
嚓
|
| 1253 |
+
嚕
|
| 1254 |
+
嚗
|
| 1255 |
+
嚙
|
| 1256 |
+
嚞
|
| 1257 |
+
嚟
|
| 1258 |
+
嚤
|
| 1259 |
+
嚦
|
| 1260 |
+
嚧
|
| 1261 |
+
嚨
|
| 1262 |
+
嚩
|
| 1263 |
+
嚮
|
| 1264 |
+
嚳
|
| 1265 |
+
嚴
|
| 1266 |
+
嚶
|
| 1267 |
+
嚷
|
| 1268 |
+
嚼
|
| 1269 |
+
嚿
|
| 1270 |
+
囀
|
| 1271 |
+
囂
|
| 1272 |
+
囃
|
| 1273 |
+
囉
|
| 1274 |
+
囊
|
| 1275 |
+
囍
|
| 1276 |
+
囑
|
| 1277 |
+
囒
|
| 1278 |
+
囓
|
| 1279 |
+
囗
|
| 1280 |
+
囚
|
| 1281 |
+
四
|
| 1282 |
+
囝
|
| 1283 |
+
回
|
| 1284 |
+
因
|
| 1285 |
+
囡
|
| 1286 |
+
団
|
| 1287 |
+
囤
|
| 1288 |
+
囧
|
| 1289 |
+
囪
|
| 1290 |
+
囮
|
| 1291 |
+
囯
|
| 1292 |
+
困
|
| 1293 |
+
囲
|
| 1294 |
+
図
|
| 1295 |
+
囶
|
| 1296 |
+
囷
|
| 1297 |
+
囹
|
| 1298 |
+
固
|
| 1299 |
+
囿
|
| 1300 |
+
圂
|
| 1301 |
+
圃
|
| 1302 |
+
圄
|
| 1303 |
+
圈
|
| 1304 |
+
圉
|
| 1305 |
+
國
|
| 1306 |
+
圍
|
| 1307 |
+
圏
|
| 1308 |
+
園
|
| 1309 |
+
圓
|
| 1310 |
+
圖
|
| 1311 |
+
圗
|
| 1312 |
+
團
|
| 1313 |
+
圜
|
| 1314 |
+
土
|
| 1315 |
+
圧
|
| 1316 |
+
在
|
| 1317 |
+
圩
|
| 1318 |
+
圪
|
| 1319 |
+
圭
|
| 1320 |
+
圯
|
| 1321 |
+
地
|
| 1322 |
+
圳
|
| 1323 |
+
圻
|
| 1324 |
+
圾
|
| 1325 |
+
址
|
| 1326 |
+
均
|
| 1327 |
+
坊
|
| 1328 |
+
坋
|
| 1329 |
+
坌
|
| 1330 |
+
坍
|
| 1331 |
+
坎
|
| 1332 |
+
坐
|
| 1333 |
+
坑
|
| 1334 |
+
坖
|
| 1335 |
+
坡
|
| 1336 |
+
坣
|
| 1337 |
+
坤
|
| 1338 |
+
坦
|
| 1339 |
+
坨
|
| 1340 |
+
坩
|
| 1341 |
+
坪
|
| 1342 |
+
坫
|
| 1343 |
+
坬
|
| 1344 |
+
坭
|
| 1345 |
+
坮
|
| 1346 |
+
坯
|
| 1347 |
+
坳
|
| 1348 |
+
坵
|
| 1349 |
+
坶
|
| 1350 |
+
坷
|
| 1351 |
+
坻
|
| 1352 |
+
垂
|
| 1353 |
+
垃
|
| 1354 |
+
垈
|
| 1355 |
+
型
|
| 1356 |
+
垍
|
| 1357 |
+
垓
|
| 1358 |
+
垕
|
| 1359 |
+
垚
|
| 1360 |
+
垛
|
| 1361 |
+
垞
|
| 1362 |
+
垟
|
| 1363 |
+
垠
|
| 1364 |
+
垢
|
| 1365 |
+
垣
|
| 1366 |
+
垮
|
| 1367 |
+
垯
|
| 1368 |
+
垰
|
| 1369 |
+
垵
|
| 1370 |
+
垸
|
| 1371 |
+
垻
|
| 1372 |
+
垿
|
| 1373 |
+
埃
|
| 1374 |
+
埅
|
| 1375 |
+
埇
|
| 1376 |
+
埈
|
| 1377 |
+
埋
|
| 1378 |
+
埌
|
| 1379 |
+
城
|
| 1380 |
+
埏
|
| 1381 |
+
埒
|
| 1382 |
+
埔
|
| 1383 |
+
埕
|
| 1384 |
+
埗
|
| 1385 |
+
埜
|
| 1386 |
+
域
|
| 1387 |
+
埠
|
| 1388 |
+
埡
|
| 1389 |
+
埤
|
| 1390 |
+
埧
|
| 1391 |
+
埨
|
| 1392 |
+
埪
|
| 1393 |
+
埭
|
| 1394 |
+
埮
|
| 1395 |
+
埴
|
| 1396 |
+
埵
|
| 1397 |
+
執
|
| 1398 |
+
培
|
| 1399 |
+
基
|
| 1400 |
+
埻
|
| 1401 |
+
埼
|
| 1402 |
+
堀
|
| 1403 |
+
堂
|
| 1404 |
+
堃
|
| 1405 |
+
堅
|
| 1406 |
+
堆
|
| 1407 |
+
堇
|
| 1408 |
+
堈
|
| 1409 |
+
堉
|
| 1410 |
+
堊
|
| 1411 |
+
堍
|
| 1412 |
+
堖
|
| 1413 |
+
堝
|
| 1414 |
+
堡
|
| 1415 |
+
堤
|
| 1416 |
+
堦
|
| 1417 |
+
堪
|
| 1418 |
+
堮
|
| 1419 |
+
堯
|
| 1420 |
+
堰
|
| 1421 |
+
報
|
| 1422 |
+
場
|
| 1423 |
+
堵
|
| 1424 |
+
堷
|
| 1425 |
+
堺
|
| 1426 |
+
塀
|
| 1427 |
+
塅
|
| 1428 |
+
塆
|
| 1429 |
+
塊
|
| 1430 |
+
塋
|
| 1431 |
+
塌
|
| 1432 |
+
塍
|
| 1433 |
+
塏
|
| 1434 |
+
塑
|
| 1435 |
+
塔
|
| 1436 |
+
塗
|
| 1437 |
+
塘
|
| 1438 |
+
塙
|
| 1439 |
+
塜
|
| 1440 |
+
塞
|
| 1441 |
+
塡
|
| 1442 |
+
塢
|
| 1443 |
+
塤
|
| 1444 |
+
塨
|
| 1445 |
+
塩
|
| 1446 |
+
填
|
| 1447 |
+
塬
|
| 1448 |
+
塭
|
| 1449 |
+
塰
|
| 1450 |
+
塱
|
| 1451 |
+
塲
|
| 1452 |
+
塵
|
| 1453 |
+
塹
|
| 1454 |
+
塽
|
| 1455 |
+
塾
|
| 1456 |
+
墀
|
| 1457 |
+
境
|
| 1458 |
+
墅
|
| 1459 |
+
墉
|
| 1460 |
+
墊
|
| 1461 |
+
墎
|
| 1462 |
+
墓
|
| 1463 |
+
増
|
| 1464 |
+
墘
|
| 1465 |
+
墜
|
| 1466 |
+
增
|
| 1467 |
+
墟
|
| 1468 |
+
墡
|
| 1469 |
+
墣
|
| 1470 |
+
墨
|
| 1471 |
+
墩
|
| 1472 |
+
墫
|
| 1473 |
+
墬
|
| 1474 |
+
墮
|
| 1475 |
+
墱
|
| 1476 |
+
墳
|
| 1477 |
+
墺
|
| 1478 |
+
墼
|
| 1479 |
+
墾
|
| 1480 |
+
壁
|
| 1481 |
+
壄
|
| 1482 |
+
壆
|
| 1483 |
+
壇
|
| 1484 |
+
壋
|
| 1485 |
+
壌
|
| 1486 |
+
壎
|
| 1487 |
+
壐
|
| 1488 |
+
壑
|
| 1489 |
+
壓
|
| 1490 |
+
壔
|
| 1491 |
+
壕
|
| 1492 |
+
壘
|
| 1493 |
+
壙
|
| 1494 |
+
壞
|
| 1495 |
+
壟
|
| 1496 |
+
壠
|
| 1497 |
+
壢
|
| 1498 |
+
壤
|
| 1499 |
+
壩
|
| 1500 |
+
士
|
| 1501 |
+
壬
|
| 1502 |
+
壯
|
| 1503 |
+
壱
|
| 1504 |
+
壴
|
| 1505 |
+
壹
|
| 1506 |
+
壺
|
| 1507 |
+
壽
|
| 1508 |
+
夀
|
| 1509 |
+
夆
|
| 1510 |
+
変
|
| 1511 |
+
夊
|
| 1512 |
+
夋
|
| 1513 |
+
夌
|
| 1514 |
+
夏
|
| 1515 |
+
夔
|
| 1516 |
+
夕
|
| 1517 |
+
外
|
| 1518 |
+
夙
|
| 1519 |
+
多
|
| 1520 |
+
夜
|
| 1521 |
+
夠
|
| 1522 |
+
夢
|
| 1523 |
+
夤
|
| 1524 |
+
夥
|
| 1525 |
+
大
|
| 1526 |
+
天
|
| 1527 |
+
太
|
| 1528 |
+
夫
|
| 1529 |
+
夬
|
| 1530 |
+
夭
|
| 1531 |
+
央
|
| 1532 |
+
夯
|
| 1533 |
+
失
|
| 1534 |
+
夷
|
| 1535 |
+
夾
|
| 1536 |
+
奀
|
| 1537 |
+
奄
|
| 1538 |
+
奇
|
| 1539 |
+
奈
|
| 1540 |
+
奉
|
| 1541 |
+
奎
|
| 1542 |
+
奏
|
| 1543 |
+
奐
|
| 1544 |
+
契
|
| 1545 |
+
奓
|
| 1546 |
+
奔
|
| 1547 |
+
奕
|
| 1548 |
+
套
|
| 1549 |
+
奘
|
| 1550 |
+
奚
|
| 1551 |
+
奠
|
| 1552 |
+
奢
|
| 1553 |
+
奣
|
| 1554 |
+
奧
|
| 1555 |
+
奩
|
| 1556 |
+
奪
|
| 1557 |
+
奫
|
| 1558 |
+
奭
|
| 1559 |
+
奮
|
| 1560 |
+
女
|
| 1561 |
+
奴
|
| 1562 |
+
奶
|
| 1563 |
+
她
|
| 1564 |
+
好
|
| 1565 |
+
妀
|
| 1566 |
+
妁
|
| 1567 |
+
如
|
| 1568 |
+
妃
|
| 1569 |
+
妄
|
| 1570 |
+
妊
|
| 1571 |
+
妍
|
| 1572 |
+
妏
|
| 1573 |
+
妑
|
| 1574 |
+
妒
|
| 1575 |
+
妓
|
| 1576 |
+
妖
|
| 1577 |
+
妙
|
| 1578 |
+
妝
|
| 1579 |
+
妞
|
| 1580 |
+
妠
|
| 1581 |
+
妤
|
| 1582 |
+
妥
|
| 1583 |
+
妧
|
| 1584 |
+
妨
|
| 1585 |
+
妭
|
| 1586 |
+
妮
|
| 1587 |
+
妯
|
| 1588 |
+
妲
|
| 1589 |
+
妳
|
| 1590 |
+
妸
|
| 1591 |
+
妹
|
| 1592 |
+
妺
|
| 1593 |
+
妻
|
| 1594 |
+
妾
|
| 1595 |
+
姀
|
| 1596 |
+
姁
|
| 1597 |
+
姃
|
| 1598 |
+
姆
|
| 1599 |
+
姈
|
| 1600 |
+
姉
|
| 1601 |
+
姊
|
| 1602 |
+
始
|
| 1603 |
+
姌
|
| 1604 |
+
姍
|
| 1605 |
+
姐
|
| 1606 |
+
姑
|
| 1607 |
+
姒
|
| 1608 |
+
姓
|
| 1609 |
+
委
|
| 1610 |
+
姚
|
| 1611 |
+
姜
|
| 1612 |
+
姝
|
| 1613 |
+
姣
|
| 1614 |
+
姥
|
| 1615 |
+
姦
|
| 1616 |
+
姨
|
| 1617 |
+
姪
|
| 1618 |
+
姫
|
| 1619 |
+
姬
|
| 1620 |
+
姮
|
| 1621 |
+
姵
|
| 1622 |
+
姶
|
| 1623 |
+
姸
|
| 1624 |
+
姻
|
| 1625 |
+
姿
|
| 1626 |
+
威
|
| 1627 |
+
娃
|
| 1628 |
+
娉
|
| 1629 |
+
娋
|
| 1630 |
+
娌
|
| 1631 |
+
娍
|
| 1632 |
+
娎
|
| 1633 |
+
娑
|
| 1634 |
+
娖
|
| 1635 |
+
娘
|
| 1636 |
+
娛
|
| 1637 |
+
娜
|
| 1638 |
+
娟
|
| 1639 |
+
娠
|
| 1640 |
+
娣
|
| 1641 |
+
娥
|
| 1642 |
+
娩
|
| 1643 |
+
娫
|
| 1644 |
+
娳
|
| 1645 |
+
娶
|
| 1646 |
+
娸
|
| 1647 |
+
娼
|
| 1648 |
+
娽
|
| 1649 |
+
婀
|
| 1650 |
+
婁
|
| 1651 |
+
婆
|
| 1652 |
+
婉
|
| 1653 |
+
婊
|
| 1654 |
+
婑
|
| 1655 |
+
婕
|
| 1656 |
+
婚
|
| 1657 |
+
婢
|
| 1658 |
+
婦
|
| 1659 |
+
婧
|
| 1660 |
+
婪
|
| 1661 |
+
婭
|
| 1662 |
+
婯
|
| 1663 |
+
婷
|
| 1664 |
+
婺
|
| 1665 |
+
婻
|
| 1666 |
+
婼
|
| 1667 |
+
婿
|
| 1668 |
+
媃
|
| 1669 |
+
媄
|
| 1670 |
+
媊
|
| 1671 |
+
媐
|
| 1672 |
+
媒
|
| 1673 |
+
媓
|
| 1674 |
+
媖
|
| 1675 |
+
媗
|
| 1676 |
+
媚
|
| 1677 |
+
媛
|
| 1678 |
+
媜
|
| 1679 |
+
媞
|
| 1680 |
+
媧
|
| 1681 |
+
媭
|
| 1682 |
+
媯
|
| 1683 |
+
媲
|
| 1684 |
+
媳
|
| 1685 |
+
媺
|
| 1686 |
+
媼
|
| 1687 |
+
媽
|
| 1688 |
+
媾
|
| 1689 |
+
媿
|
| 1690 |
+
嫁
|
| 1691 |
+
嫂
|
| 1692 |
+
嫄
|
| 1693 |
+
嫈
|
| 1694 |
+
嫉
|
| 1695 |
+
嫌
|
| 1696 |
+
嫖
|
| 1697 |
+
嫘
|
| 1698 |
+
嫚
|
| 1699 |
+
嫡
|
| 1700 |
+
嫣
|
| 1701 |
+
嫦
|
| 1702 |
+
嫩
|
| 1703 |
+
嫪
|
| 1704 |
+
嫲
|
| 1705 |
+
嫳
|
| 1706 |
+
嫵
|
| 1707 |
+
嫺
|
| 1708 |
+
嫻
|
| 1709 |
+
嬅
|
| 1710 |
+
嬈
|
| 1711 |
+
嬉
|
| 1712 |
+
嬋
|
| 1713 |
+
嬌
|
| 1714 |
+
嬗
|
| 1715 |
+
嬛
|
| 1716 |
+
嬝
|
| 1717 |
+
嬡
|
| 1718 |
+
嬤
|
| 1719 |
+
嬨
|
| 1720 |
+
嬪
|
| 1721 |
+
嬬
|
| 1722 |
+
嬭
|
| 1723 |
+
嬰
|
| 1724 |
+
嬴
|
| 1725 |
+
嬸
|
| 1726 |
+
嬾
|
| 1727 |
+
嬿
|
| 1728 |
+
孀
|
| 1729 |
+
孃
|
| 1730 |
+
孆
|
| 1731 |
+
孋
|
| 1732 |
+
孌
|
| 1733 |
+
子
|
| 1734 |
+
孑
|
| 1735 |
+
孔
|
| 1736 |
+
孕
|
| 1737 |
+
孖
|
| 1738 |
+
字
|
| 1739 |
+
存
|
| 1740 |
+
孚
|
| 1741 |
+
孛
|
| 1742 |
+
孜
|
| 1743 |
+
孝
|
| 1744 |
+
孟
|
| 1745 |
+
孢
|
| 1746 |
+
季
|
| 1747 |
+
孤
|
| 1748 |
+
孩
|
| 1749 |
+
孫
|
| 1750 |
+
孬
|
| 1751 |
+
孮
|
| 1752 |
+
孰
|
| 1753 |
+
孳
|
| 1754 |
+
孵
|
| 1755 |
+
學
|
| 1756 |
+
孺
|
| 1757 |
+
孻
|
| 1758 |
+
孽
|
| 1759 |
+
孿
|
| 1760 |
+
宀
|
| 1761 |
+
它
|
| 1762 |
+
宅
|
| 1763 |
+
宇
|
| 1764 |
+
守
|
| 1765 |
+
安
|
| 1766 |
+
宋
|
| 1767 |
+
完
|
| 1768 |
+
宍
|
| 1769 |
+
宏
|
| 1770 |
+
宓
|
| 1771 |
+
宕
|
| 1772 |
+
宗
|
| 1773 |
+
官
|
| 1774 |
+
宙
|
| 1775 |
+
定
|
| 1776 |
+
宛
|
| 1777 |
+
宜
|
| 1778 |
+
実
|
| 1779 |
+
客
|
| 1780 |
+
宣
|
| 1781 |
+
室
|
| 1782 |
+
宥
|
| 1783 |
+
宦
|
| 1784 |
+
宧
|
| 1785 |
+
宮
|
| 1786 |
+
宰
|
| 1787 |
+
害
|
| 1788 |
+
宴
|
| 1789 |
+
宵
|
| 1790 |
+
家
|
| 1791 |
+
宸
|
| 1792 |
+
容
|
| 1793 |
+
宿
|
| 1794 |
+
寀
|
| 1795 |
+
寁
|
| 1796 |
+
寂
|
| 1797 |
+
寄
|
| 1798 |
+
寅
|
| 1799 |
+
密
|
| 1800 |
+
寇
|
| 1801 |
+
寈
|
| 1802 |
+
寊
|
| 1803 |
+
富
|
| 1804 |
+
寐
|
| 1805 |
+
寒
|
| 1806 |
+
寓
|
| 1807 |
+
寔
|
| 1808 |
+
寕
|
| 1809 |
+
寖
|
| 1810 |
+
寗
|
| 1811 |
+
寘
|
| 1812 |
+
寛
|
| 1813 |
+
寜
|
| 1814 |
+
寞
|
| 1815 |
+
察
|
| 1816 |
+
寡
|
| 1817 |
+
寢
|
| 1818 |
+
寤
|
| 1819 |
+
寥
|
| 1820 |
+
實
|
| 1821 |
+
寧
|
| 1822 |
+
寨
|
| 1823 |
+
審
|
| 1824 |
+
寫
|
| 1825 |
+
寬
|
| 1826 |
+
寮
|
| 1827 |
+
寯
|
| 1828 |
+
寰
|
| 1829 |
+
寳
|
| 1830 |
+
寵
|
| 1831 |
+
寶
|
| 1832 |
+
寸
|
| 1833 |
+
寺
|
| 1834 |
+
対
|
| 1835 |
+
封
|
| 1836 |
+
専
|
| 1837 |
+
尃
|
| 1838 |
+
射
|
| 1839 |
+
將
|
| 1840 |
+
專
|
| 1841 |
+
尉
|
| 1842 |
+
尊
|
| 1843 |
+
尋
|
| 1844 |
+
對
|
| 1845 |
+
導
|
| 1846 |
+
小
|
| 1847 |
+
尐
|
| 1848 |
+
少
|
| 1849 |
+
尓
|
| 1850 |
+
尕
|
| 1851 |
+
尖
|
| 1852 |
+
尗
|
| 1853 |
+
尙
|
| 1854 |
+
尚
|
| 1855 |
+
尢
|
| 1856 |
+
尤
|
| 1857 |
+
尨
|
| 1858 |
+
尪
|
| 1859 |
+
尬
|
| 1860 |
+
就
|
| 1861 |
+
尷
|
| 1862 |
+
尹
|
| 1863 |
+
尺
|
| 1864 |
+
尻
|
| 1865 |
+
尼
|
| 1866 |
+
尾
|
| 1867 |
+
尿
|
| 1868 |
+
局
|
| 1869 |
+
屁
|
| 1870 |
+
屄
|
| 1871 |
+
居
|
| 1872 |
+
屆
|
| 1873 |
+
屇
|
| 1874 |
+
屈
|
| 1875 |
+
屋
|
| 1876 |
+
屌
|
| 1877 |
+
屍
|
| 1878 |
+
屎
|
| 1879 |
+
屏
|
| 1880 |
+
屐
|
| 1881 |
+
屑
|
| 1882 |
+
屓
|
| 1883 |
+
展
|
| 1884 |
+
屚
|
| 1885 |
+
屜
|
| 1886 |
+
屠
|
| 1887 |
+
屢
|
| 1888 |
+
層
|
| 1889 |
+
履
|
| 1890 |
+
屬
|
| 1891 |
+
屭
|
| 1892 |
+
屯
|
| 1893 |
+
山
|
| 1894 |
+
屹
|
| 1895 |
+
屺
|
| 1896 |
+
屻
|
| 1897 |
+
岀
|
| 1898 |
+
岈
|
| 1899 |
+
岌
|
| 1900 |
+
岐
|
| 1901 |
+
岑
|
| 1902 |
+
岔
|
| 1903 |
+
岡
|
| 1904 |
+
岢
|
| 1905 |
+
岣
|
| 1906 |
+
岧
|
| 1907 |
+
岩
|
| 1908 |
+
岪
|
| 1909 |
+
岫
|
| 1910 |
+
岬
|
| 1911 |
+
岰
|
| 1912 |
+
岱
|
| 1913 |
+
岳
|
| 1914 |
+
岵
|
| 1915 |
+
岷
|
| 1916 |
+
岸
|
| 1917 |
+
岻
|
| 1918 |
+
峁
|
| 1919 |
+
峅
|
| 1920 |
+
峇
|
| 1921 |
+
峋
|
| 1922 |
+
峍
|
| 1923 |
+
峒
|
| 1924 |
+
峘
|
| 1925 |
+
峙
|
| 1926 |
+
峚
|
| 1927 |
+
峠
|
| 1928 |
+
峨
|
| 1929 |
+
峩
|
| 1930 |
+
峪
|
| 1931 |
+
峭
|
| 1932 |
+
峯
|
| 1933 |
+
峰
|
| 1934 |
+
峴
|
| 1935 |
+
島
|
| 1936 |
+
峻
|
| 1937 |
+
峼
|
| 1938 |
+
峽
|
| 1939 |
+
崁
|
| 1940 |
+
崆
|
| 1941 |
+
崇
|
| 1942 |
+
崈
|
| 1943 |
+
崋
|
| 1944 |
+
崍
|
| 1945 |
+
崎
|
| 1946 |
+
崐
|
| 1947 |
+
崑
|
| 1948 |
+
崒
|
| 1949 |
+
崔
|
| 1950 |
+
崖
|
| 1951 |
+
崗
|
| 1952 |
+
崘
|
| 1953 |
+
崙
|
| 1954 |
+
崚
|
| 1955 |
+
崛
|
| 1956 |
+
崞
|
| 1957 |
+
崟
|
| 1958 |
+
崠
|
| 1959 |
+
崢
|
| 1960 |
+
崤
|
| 1961 |
+
崧
|
| 1962 |
+
崩
|
| 1963 |
+
崬
|
| 1964 |
+
崮
|
| 1965 |
+
崱
|
| 1966 |
+
崴
|
| 1967 |
+
崵
|
| 1968 |
+
崶
|
| 1969 |
+
崽
|
| 1970 |
+
嵇
|
| 1971 |
+
嵊
|
| 1972 |
+
嵋
|
| 1973 |
+
嵌
|
| 1974 |
+
嵎
|
| 1975 |
+
嵐
|
| 1976 |
+
嵒
|
| 1977 |
+
嵕
|
| 1978 |
+
嵖
|
| 1979 |
+
嵗
|
| 1980 |
+
嵙
|
| 1981 |
+
嵛
|
| 1982 |
+
嵜
|
| 1983 |
+
嵨
|
| 1984 |
+
嵩
|
| 1985 |
+
嵬
|
| 1986 |
+
嵮
|
| 1987 |
+
嵯
|
| 1988 |
+
嵰
|
| 1989 |
+
嵴
|
| 1990 |
+
嵻
|
| 1991 |
+
嵿
|
| 1992 |
+
嶁
|
| 1993 |
+
嶂
|
| 1994 |
+
嶃
|
| 1995 |
+
嶄
|
| 1996 |
+
嶇
|
| 1997 |
+
嶋
|
| 1998 |
+
嶌
|
| 1999 |
+
嶍
|
| 2000 |
+
嶒
|
| 2001 |
+
嶔
|
| 2002 |
+
嶗
|
| 2003 |
+
嶝
|
| 2004 |
+
嶠
|
| 2005 |
+
嶢
|
| 2006 |
+
嶦
|
| 2007 |
+
嶧
|
| 2008 |
+
嶪
|
| 2009 |
+
嶬
|
| 2010 |
+
嶰
|
| 2011 |
+
嶲
|
| 2012 |
+
嶴
|
| 2013 |
+
嶷
|
| 2014 |
+
嶸
|
| 2015 |
+
嶺
|
| 2016 |
+
嶼
|
| 2017 |
+
嶽
|
| 2018 |
+
巂
|
| 2019 |
+
巄
|
| 2020 |
+
巆
|
| 2021 |
+
巋
|
| 2022 |
+
巌
|
| 2023 |
+
巍
|
| 2024 |
+
巎
|
| 2025 |
+
巑
|
| 2026 |
+
巒
|
| 2027 |
+
巔
|
| 2028 |
+
巖
|
| 2029 |
+
巘
|
| 2030 |
+
巛
|
| 2031 |
+
川
|
| 2032 |
+
州
|
| 2033 |
+
巡
|
| 2034 |
+
巢
|
| 2035 |
+
工
|
| 2036 |
+
左
|
| 2037 |
+
巧
|
| 2038 |
+
巨
|
| 2039 |
+
巫
|
| 2040 |
+
差
|
| 2041 |
+
巰
|
| 2042 |
+
己
|
| 2043 |
+
已
|
| 2044 |
+
巳
|
| 2045 |
+
巴
|
| 2046 |
+
巶
|
| 2047 |
+
巷
|
| 2048 |
+
巻
|
| 2049 |
+
巽
|
| 2050 |
+
巾
|
| 2051 |
+
巿
|
| 2052 |
+
市
|
| 2053 |
+
布
|
| 2054 |
+
帆
|
| 2055 |
+
希
|
| 2056 |
+
帑
|
| 2057 |
+
帔
|
| 2058 |
+
帕
|
| 2059 |
+
帖
|
| 2060 |
+
帘
|
| 2061 |
+
帙
|
| 2062 |
+
帚
|
| 2063 |
+
帛
|
| 2064 |
+
帝
|
| 2065 |
+
帡
|
| 2066 |
+
帢
|
| 2067 |
+
帥
|
| 2068 |
+
師
|
| 2069 |
+
席
|
| 2070 |
+
帯
|
| 2071 |
+
帰
|
| 2072 |
+
帳
|
| 2073 |
+
帶
|
| 2074 |
+
帷
|
| 2075 |
+
常
|
| 2076 |
+
帽
|
| 2077 |
+
幀
|
| 2078 |
+
幃
|
| 2079 |
+
幄
|
| 2080 |
+
幅
|
| 2081 |
+
幌
|
| 2082 |
+
幔
|
| 2083 |
+
幕
|
| 2084 |
+
幗
|
| 2085 |
+
幚
|
| 2086 |
+
幛
|
| 2087 |
+
幟
|
| 2088 |
+
幡
|
| 2089 |
+
幢
|
| 2090 |
+
幣
|
| 2091 |
+
幪
|
| 2092 |
+
幫
|
| 2093 |
+
干
|
| 2094 |
+
平
|
| 2095 |
+
年
|
| 2096 |
+
幵
|
| 2097 |
+
幷
|
| 2098 |
+
幸
|
| 2099 |
+
幹
|
| 2100 |
+
幺
|
| 2101 |
+
幻
|
| 2102 |
+
幼
|
| 2103 |
+
幽
|
| 2104 |
+
幾
|
| 2105 |
+
庀
|
| 2106 |
+
庁
|
| 2107 |
+
広
|
| 2108 |
+
庇
|
| 2109 |
+
床
|
| 2110 |
+
序
|
| 2111 |
+
底
|
| 2112 |
+
庖
|
| 2113 |
+
店
|
| 2114 |
+
庚
|
| 2115 |
+
府
|
| 2116 |
+
庠
|
| 2117 |
+
庢
|
| 2118 |
+
庥
|
| 2119 |
+
度
|
| 2120 |
+
座
|
| 2121 |
+
庫
|
| 2122 |
+
庭
|
| 2123 |
+
庲
|
| 2124 |
+
庵
|
| 2125 |
+
庶
|
| 2126 |
+
康
|
| 2127 |
+
庸
|
| 2128 |
+
庹
|
| 2129 |
+
庼
|
| 2130 |
+
庾
|
| 2131 |
+
廁
|
| 2132 |
+
廂
|
| 2133 |
+
廄
|
| 2134 |
+
廆
|
| 2135 |
+
廈
|
| 2136 |
+
廉
|
| 2137 |
+
廊
|
| 2138 |
+
廋
|
| 2139 |
+
廌
|
| 2140 |
+
廍
|
| 2141 |
+
廑
|
| 2142 |
+
廓
|
| 2143 |
+
廔
|
| 2144 |
+
廕
|
| 2145 |
+
廖
|
| 2146 |
+
廙
|
| 2147 |
+
廚
|
| 2148 |
+
廝
|
| 2149 |
+
廞
|
| 2150 |
+
廟
|
| 2151 |
+
廠
|
| 2152 |
+
廡
|
| 2153 |
+
廢
|
| 2154 |
+
廣
|
| 2155 |
+
廧
|
| 2156 |
+
廨
|
| 2157 |
+
廩
|
| 2158 |
+
廬
|
| 2159 |
+
廰
|
| 2160 |
+
廱
|
| 2161 |
+
廳
|
| 2162 |
+
延
|
| 2163 |
+
廷
|
| 2164 |
+
廸
|
| 2165 |
+
建
|
| 2166 |
+
廻
|
| 2167 |
+
廼
|
| 2168 |
+
廿
|
| 2169 |
+
弁
|
| 2170 |
+
弄
|
| 2171 |
+
弅
|
| 2172 |
+
弇
|
| 2173 |
+
弈
|
| 2174 |
+
弉
|
| 2175 |
+
弊
|
| 2176 |
+
弋
|
| 2177 |
+
弍
|
| 2178 |
+
式
|
| 2179 |
+
弐
|
| 2180 |
+
弒
|
| 2181 |
+
弓
|
| 2182 |
+
弔
|
| 2183 |
+
引
|
| 2184 |
+
弖
|
| 2185 |
+
弗
|
| 2186 |
+
弘
|
| 2187 |
+
弛
|
| 2188 |
+
弟
|
| 2189 |
+
弢
|
| 2190 |
+
弦
|
| 2191 |
+
弧
|
| 2192 |
+
弨
|
| 2193 |
+
弩
|
| 2194 |
+
弭
|
| 2195 |
+
弱
|
| 2196 |
+
張
|
| 2197 |
+
強
|
| 2198 |
+
弸
|
| 2199 |
+
弼
|
| 2200 |
+
弾
|
| 2201 |
+
彀
|
| 2202 |
+
彄
|
| 2203 |
+
彅
|
| 2204 |
+
彆
|
| 2205 |
+
彈
|
| 2206 |
+
彊
|
| 2207 |
+
彌
|
| 2208 |
+
彎
|
| 2209 |
+
彐
|
| 2210 |
+
彔
|
| 2211 |
+
彖
|
| 2212 |
+
彗
|
| 2213 |
+
彘
|
| 2214 |
+
彙
|
| 2215 |
+
彜
|
| 2216 |
+
彞
|
| 2217 |
+
彠
|
| 2218 |
+
彡
|
| 2219 |
+
形
|
| 2220 |
+
彣
|
| 2221 |
+
彤
|
| 2222 |
+
彥
|
| 2223 |
+
彧
|
| 2224 |
+
彩
|
| 2225 |
+
彪
|
| 2226 |
+
彫
|
| 2227 |
+
彬
|
| 2228 |
+
彭
|
| 2229 |
+
彰
|
| 2230 |
+
影
|
| 2231 |
+
彳
|
| 2232 |
+
彷
|
| 2233 |
+
役
|
| 2234 |
+
彼
|
| 2235 |
+
彿
|
| 2236 |
+
往
|
| 2237 |
+
征
|
| 2238 |
+
徂
|
| 2239 |
+
待
|
| 2240 |
+
徇
|
| 2241 |
+
很
|
| 2242 |
+
徉
|
| 2243 |
+
徊
|
| 2244 |
+
律
|
| 2245 |
+
後
|
| 2246 |
+
徐
|
| 2247 |
+
徑
|
| 2248 |
+
徒
|
| 2249 |
+
得
|
| 2250 |
+
徘
|
| 2251 |
+
徙
|
| 2252 |
+
徜
|
| 2253 |
+
從
|
| 2254 |
+
徠
|
| 2255 |
+
御
|
| 2256 |
+
徧
|
| 2257 |
+
徨
|
| 2258 |
+
復
|
| 2259 |
+
循
|
| 2260 |
+
徫
|
| 2261 |
+
徬
|
| 2262 |
+
徭
|
| 2263 |
+
微
|
| 2264 |
+
徳
|
| 2265 |
+
徴
|
| 2266 |
+
徵
|
| 2267 |
+
德
|
| 2268 |
+
徸
|
| 2269 |
+
徹
|
| 2270 |
+
徽
|
| 2271 |
+
心
|
| 2272 |
+
忄
|
| 2273 |
+
必
|
| 2274 |
+
忉
|
| 2275 |
+
忌
|
| 2276 |
+
忍
|
| 2277 |
+
忐
|
| 2278 |
+
忑
|
| 2279 |
+
忒
|
| 2280 |
+
志
|
| 2281 |
+
忘
|
| 2282 |
+
忙
|
| 2283 |
+
応
|
| 2284 |
+
忝
|
| 2285 |
+
忞
|
| 2286 |
+
忠
|
| 2287 |
+
快
|
| 2288 |
+
忬
|
| 2289 |
+
忯
|
| 2290 |
+
忱
|
| 2291 |
+
忳
|
| 2292 |
+
念
|
| 2293 |
+
忻
|
| 2294 |
+
忽
|
| 2295 |
+
忿
|
| 2296 |
+
怍
|
| 2297 |
+
怎
|
| 2298 |
+
怒
|
| 2299 |
+
怕
|
| 2300 |
+
怖
|
| 2301 |
+
怙
|
| 2302 |
+
怛
|
| 2303 |
+
思
|
| 2304 |
+
怠
|
| 2305 |
+
怡
|
| 2306 |
+
急
|
| 2307 |
+
怦
|
| 2308 |
+
性
|
| 2309 |
+
怨
|
| 2310 |
+
怪
|
| 2311 |
+
怯
|
| 2312 |
+
怵
|
| 2313 |
+
恁
|
| 2314 |
+
恂
|
| 2315 |
+
恃
|
| 2316 |
+
恆
|
| 2317 |
+
恊
|
| 2318 |
+
恍
|
| 2319 |
+
恐
|
| 2320 |
+
恕
|
| 2321 |
+
恙
|
| 2322 |
+
恢
|
| 2323 |
+
恣
|
| 2324 |
+
恤
|
| 2325 |
+
恥
|
| 2326 |
+
恨
|
| 2327 |
+
恩
|
| 2328 |
+
恪
|
| 2329 |
+
恬
|
| 2330 |
+
恭
|
| 2331 |
+
息
|
| 2332 |
+
恰
|
| 2333 |
+
恵
|
| 2334 |
+
恿
|
| 2335 |
+
悄
|
| 2336 |
+
悅
|
| 2337 |
+
悆
|
| 2338 |
+
悉
|
| 2339 |
+
悌
|
| 2340 |
+
悍
|
| 2341 |
+
悔
|
| 2342 |
+
悖
|
| 2343 |
+
悚
|
| 2344 |
+
悛
|
| 2345 |
+
悝
|
| 2346 |
+
悞
|
| 2347 |
+
悟
|
| 2348 |
+
悠
|
| 2349 |
+
患
|
| 2350 |
+
悧
|
| 2351 |
+
您
|
| 2352 |
+
悪
|
| 2353 |
+
悰
|
| 2354 |
+
悲
|
| 2355 |
+
悳
|
| 2356 |
+
悵
|
| 2357 |
+
悶
|
| 2358 |
+
悸
|
| 2359 |
+
悼
|
| 2360 |
+
情
|
| 2361 |
+
惆
|
| 2362 |
+
惇
|
| 2363 |
+
惑
|
| 2364 |
+
惔
|
| 2365 |
+
惕
|
| 2366 |
+
惘
|
| 2367 |
+
惚
|
| 2368 |
+
惜
|
| 2369 |
+
惟
|
| 2370 |
+
惠
|
| 2371 |
+
惡
|
| 2372 |
+
惣
|
| 2373 |
+
惦
|
| 2374 |
+
惰
|
| 2375 |
+
惱
|
| 2376 |
+
惲
|
| 2377 |
+
想
|
| 2378 |
+
惶
|
| 2379 |
+
惹
|
| 2380 |
+
惺
|
| 2381 |
+
愁
|
| 2382 |
+
愃
|
| 2383 |
+
愆
|
| 2384 |
+
愈
|
| 2385 |
+
愉
|
| 2386 |
+
愍
|
| 2387 |
+
意
|
| 2388 |
+
愐
|
| 2389 |
+
愒
|
| 2390 |
+
愔
|
| 2391 |
+
愕
|
| 2392 |
+
愚
|
| 2393 |
+
愛
|
| 2394 |
+
愜
|
| 2395 |
+
感
|
| 2396 |
+
愣
|
| 2397 |
+
愧
|
| 2398 |
+
愨
|
| 2399 |
+
愫
|
| 2400 |
+
愭
|
| 2401 |
+
愴
|
| 2402 |
+
愷
|
| 2403 |
+
愼
|
| 2404 |
+
愾
|
| 2405 |
+
愿
|
| 2406 |
+
慄
|
| 2407 |
+
慈
|
| 2408 |
+
態
|
| 2409 |
+
慌
|
| 2410 |
+
慎
|
| 2411 |
+
慕
|
| 2412 |
+
慘
|
| 2413 |
+
慚
|
| 2414 |
+
慜
|
| 2415 |
+
慟
|
| 2416 |
+
慢
|
| 2417 |
+
慣
|
| 2418 |
+
慥
|
| 2419 |
+
慧
|
| 2420 |
+
慨
|
| 2421 |
+
慮
|
| 2422 |
+
慰
|
| 2423 |
+
慳
|
| 2424 |
+
慵
|
| 2425 |
+
慶
|
| 2426 |
+
慷
|
| 2427 |
+
慾
|
| 2428 |
+
憂
|
| 2429 |
+
憊
|
| 2430 |
+
憋
|
| 2431 |
+
憍
|
| 2432 |
+
憎
|
| 2433 |
+
憐
|
| 2434 |
+
憑
|
| 2435 |
+
憓
|
| 2436 |
+
憕
|
| 2437 |
+
憙
|
| 2438 |
+
憚
|
| 2439 |
+
憤
|
| 2440 |
+
憧
|
| 2441 |
+
憨
|
| 2442 |
+
憩
|
| 2443 |
+
憫
|
| 2444 |
+
憬
|
| 2445 |
+
憲
|
| 2446 |
+
憶
|
| 2447 |
+
憺
|
| 2448 |
+
憻
|
| 2449 |
+
憾
|
| 2450 |
+
懂
|
| 2451 |
+
懃
|
| 2452 |
+
懇
|
| 2453 |
+
懈
|
| 2454 |
+
應
|
| 2455 |
+
懋
|
| 2456 |
+
懌
|
| 2457 |
+
懍
|
| 2458 |
+
懐
|
| 2459 |
+
懣
|
| 2460 |
+
懦
|
| 2461 |
+
懮
|
| 2462 |
+
懲
|
| 2463 |
+
懵
|
| 2464 |
+
懶
|
| 2465 |
+
懷
|
| 2466 |
+
懸
|
| 2467 |
+
懺
|
| 2468 |
+
懼
|
| 2469 |
+
懽
|
| 2470 |
+
懾
|
| 2471 |
+
懿
|
| 2472 |
+
戀
|
| 2473 |
+
戇
|
| 2474 |
+
戈
|
| 2475 |
+
戊
|
| 2476 |
+
戌
|
| 2477 |
+
戍
|
| 2478 |
+
戎
|
| 2479 |
+
成
|
| 2480 |
+
我
|
| 2481 |
+
戒
|
| 2482 |
+
戔
|
| 2483 |
+
戕
|
| 2484 |
+
或
|
| 2485 |
+
戙
|
| 2486 |
+
戚
|
| 2487 |
+
戛
|
| 2488 |
+
戟
|
| 2489 |
+
戡
|
| 2490 |
+
戢
|
| 2491 |
+
戥
|
| 2492 |
+
戦
|
| 2493 |
+
戩
|
| 2494 |
+
截
|
| 2495 |
+
戮
|
| 2496 |
+
戰
|
| 2497 |
+
戱
|
| 2498 |
+
戲
|
| 2499 |
+
戳
|
| 2500 |
+
戴
|
| 2501 |
+
戶
|
| 2502 |
+
戸
|
| 2503 |
+
戻
|
| 2504 |
+
戽
|
| 2505 |
+
戾
|
| 2506 |
+
房
|
| 2507 |
+
所
|
| 2508 |
+
扁
|
| 2509 |
+
扆
|
| 2510 |
+
扇
|
| 2511 |
+
扈
|
| 2512 |
+
扉
|
| 2513 |
+
手
|
| 2514 |
+
扌
|
| 2515 |
+
才
|
| 2516 |
+
扎
|
| 2517 |
+
扒
|
| 2518 |
+
打
|
| 2519 |
+
扔
|
| 2520 |
+
托
|
| 2521 |
+
扙
|
| 2522 |
+
扛
|
| 2523 |
+
扞
|
| 2524 |
+
扣
|
| 2525 |
+
扥
|
| 2526 |
+
扦
|
| 2527 |
+
扭
|
| 2528 |
+
扮
|
| 2529 |
+
扯
|
| 2530 |
+
扳
|
| 2531 |
+
扶
|
| 2532 |
+
批
|
| 2533 |
+
扼
|
| 2534 |
+
找
|
| 2535 |
+
承
|
| 2536 |
+
技
|
| 2537 |
+
抃
|
| 2538 |
+
抄
|
| 2539 |
+
抇
|
| 2540 |
+
抉
|
| 2541 |
+
把
|
| 2542 |
+
抑
|
| 2543 |
+
抒
|
| 2544 |
+
抓
|
| 2545 |
+
投
|
| 2546 |
+
抖
|
| 2547 |
+
抗
|
| 2548 |
+
折
|
| 2549 |
+
抦
|
| 2550 |
+
披
|
| 2551 |
+
抬
|
| 2552 |
+
抱
|
| 2553 |
+
抵
|
| 2554 |
+
抹
|
| 2555 |
+
抻
|
| 2556 |
+
押
|
| 2557 |
+
抽
|
| 2558 |
+
抿
|
| 2559 |
+
拂
|
| 2560 |
+
拆
|
| 2561 |
+
拇
|
| 2562 |
+
拈
|
| 2563 |
+
拉
|
| 2564 |
+
拋
|
| 2565 |
+
拌
|
| 2566 |
+
拍
|
| 2567 |
+
拎
|
| 2568 |
+
拏
|
| 2569 |
+
拐
|
| 2570 |
+
拒
|
| 2571 |
+
拓
|
| 2572 |
+
拔
|
| 2573 |
+
拖
|
| 2574 |
+
拗
|
| 2575 |
+
拘
|
| 2576 |
+
拙
|
| 2577 |
+
拚
|
| 2578 |
+
招
|
| 2579 |
+
拜
|
| 2580 |
+
拝
|
| 2581 |
+
拡
|
| 2582 |
+
括
|
| 2583 |
+
拭
|
| 2584 |
+
拮
|
| 2585 |
+
拯
|
| 2586 |
+
拱
|
| 2587 |
+
拳
|
| 2588 |
+
拴
|
| 2589 |
+
拷
|
| 2590 |
+
拺
|
| 2591 |
+
拼
|
| 2592 |
+
拽
|
| 2593 |
+
拾
|
| 2594 |
+
拿
|
| 2595 |
+
持
|
| 2596 |
+
指
|
| 2597 |
+
按
|
| 2598 |
+
挎
|
| 2599 |
+
挑
|
| 2600 |
+
挖
|
| 2601 |
+
挙
|
| 2602 |
+
挨
|
| 2603 |
+
挪
|
| 2604 |
+
挫
|
| 2605 |
+
振
|
| 2606 |
+
挲
|
| 2607 |
+
挵
|
| 2608 |
+
挹
|
| 2609 |
+
挺
|
| 2610 |
+
挻
|
| 2611 |
+
挾
|
| 2612 |
+
捂
|
| 2613 |
+
捆
|
| 2614 |
+
捉
|
| 2615 |
+
捌
|
| 2616 |
+
捍
|
| 2617 |
+
捎
|
| 2618 |
+
捏
|
| 2619 |
+
捐
|
| 2620 |
+
捒
|
| 2621 |
+
捕
|
| 2622 |
+
捜
|
| 2623 |
+
捦
|
| 2624 |
+
捧
|
| 2625 |
+
捨
|
| 2626 |
+
捩
|
| 2627 |
+
捫
|
| 2628 |
+
捭
|
| 2629 |
+
捱
|
| 2630 |
+
捲
|
| 2631 |
+
捶
|
| 2632 |
+
捷
|
| 2633 |
+
捺
|
| 2634 |
+
捻
|
| 2635 |
+
掀
|
| 2636 |
+
掂
|
| 2637 |
+
掃
|
| 2638 |
+
掄
|
| 2639 |
+
掇
|
| 2640 |
+
授
|
| 2641 |
+
掉
|
| 2642 |
+
掌
|
| 2643 |
+
掏
|
| 2644 |
+
掐
|
| 2645 |
+
排
|
| 2646 |
+
掖
|
| 2647 |
+
掘
|
| 2648 |
+
掙
|
| 2649 |
+
掛
|
| 2650 |
+
掞
|
| 2651 |
+
掟
|
| 2652 |
+
掠
|
| 2653 |
+
採
|
| 2654 |
+
探
|
| 2655 |
+
掣
|
| 2656 |
+
接
|
| 2657 |
+
控
|
| 2658 |
+
推
|
| 2659 |
+
掩
|
| 2660 |
+
措
|
| 2661 |
+
掬
|
| 2662 |
+
掰
|
| 2663 |
+
掾
|
| 2664 |
+
揀
|
| 2665 |
+
揄
|
| 2666 |
+
揆
|
| 2667 |
+
揉
|
| 2668 |
+
揍
|
| 2669 |
+
描
|
| 2670 |
+
提
|
| 2671 |
+
插
|
| 2672 |
+
揔
|
| 2673 |
+
揖
|
| 2674 |
+
揚
|
| 2675 |
+
換
|
| 2676 |
+
握
|
| 2677 |
+
揪
|
| 2678 |
+
揭
|
| 2679 |
+
揮
|
| 2680 |
+
援
|
| 2681 |
+
揸
|
| 2682 |
+
揺
|
| 2683 |
+
損
|
| 2684 |
+
搏
|
| 2685 |
+
搐
|
| 2686 |
+
搓
|
| 2687 |
+
搔
|
| 2688 |
+
搖
|
| 2689 |
+
搗
|
| 2690 |
+
搜
|
| 2691 |
+
搞
|
| 2692 |
+
搠
|
| 2693 |
+
搢
|
| 2694 |
+
搪
|
| 2695 |
+
搬
|
| 2696 |
+
搭
|
| 2697 |
+
搳
|
| 2698 |
+
搴
|
| 2699 |
+
搵
|
| 2700 |
+
搶
|
| 2701 |
+
搽
|
| 2702 |
+
搾
|
| 2703 |
+
摂
|
| 2704 |
+
摒
|
| 2705 |
+
摔
|
| 2706 |
+
摘
|
| 2707 |
+
摜
|
| 2708 |
+
摞
|
| 2709 |
+
摟
|
| 2710 |
+
摠
|
| 2711 |
+
摧
|
| 2712 |
+
摩
|
| 2713 |
+
摭
|
| 2714 |
+
摯
|
| 2715 |
+
摳
|
| 2716 |
+
摴
|
| 2717 |
+
摵
|
| 2718 |
+
摶
|
| 2719 |
+
摸
|
| 2720 |
+
摹
|
| 2721 |
+
摺
|
| 2722 |
+
摻
|
| 2723 |
+
摽
|
| 2724 |
+
撃
|
| 2725 |
+
撇
|
| 2726 |
+
撈
|
| 2727 |
+
撐
|
| 2728 |
+
撒
|
| 2729 |
+
撓
|
| 2730 |
+
撕
|
| 2731 |
+
撖
|
| 2732 |
+
撙
|
| 2733 |
+
撚
|
| 2734 |
+
撞
|
| 2735 |
+
撣
|
| 2736 |
+
撤
|
| 2737 |
+
撥
|
| 2738 |
+
撩
|
| 2739 |
+
撫
|
| 2740 |
+
撬
|
| 2741 |
+
播
|
| 2742 |
+
撮
|
| 2743 |
+
撰
|
| 2744 |
+
撲
|
| 2745 |
+
撳
|
| 2746 |
+
撻
|
| 2747 |
+
撼
|
| 2748 |
+
撾
|
| 2749 |
+
撿
|
| 2750 |
+
擀
|
| 2751 |
+
擁
|
| 2752 |
+
擂
|
| 2753 |
+
擅
|
| 2754 |
+
擇
|
| 2755 |
+
擊
|
| 2756 |
+
擋
|
| 2757 |
+
操
|
| 2758 |
+
擎
|
| 2759 |
+
擒
|
| 2760 |
+
擔
|
| 2761 |
+
擘
|
| 2762 |
+
據
|
| 2763 |
+
擠
|
| 2764 |
+
擢
|
| 2765 |
+
擥
|
| 2766 |
+
擦
|
| 2767 |
+
擬
|
| 2768 |
+
擯
|
| 2769 |
+
擰
|
| 2770 |
+
擱
|
| 2771 |
+
擲
|
| 2772 |
+
擴
|
| 2773 |
+
擷
|
| 2774 |
+
擺
|
| 2775 |
+
擼
|
| 2776 |
+
擾
|
| 2777 |
+
攀
|
| 2778 |
+
攏
|
| 2779 |
+
攔
|
| 2780 |
+
攖
|
| 2781 |
+
攘
|
| 2782 |
+
攜
|
| 2783 |
+
攝
|
| 2784 |
+
攞
|
| 2785 |
+
攢
|
| 2786 |
+
攣
|
| 2787 |
+
攤
|
| 2788 |
+
攪
|
| 2789 |
+
攫
|
| 2790 |
+
攬
|
| 2791 |
+
支
|
| 2792 |
+
攴
|
| 2793 |
+
攵
|
| 2794 |
+
收
|
| 2795 |
+
攷
|
| 2796 |
+
攸
|
| 2797 |
+
改
|
| 2798 |
+
攻
|
| 2799 |
+
攽
|
| 2800 |
+
放
|
| 2801 |
+
政
|
| 2802 |
+
故
|
| 2803 |
+
效
|
| 2804 |
+
敍
|
| 2805 |
+
敎
|
| 2806 |
+
敏
|
| 2807 |
+
救
|
| 2808 |
+
敔
|
| 2809 |
+
敕
|
| 2810 |
+
敖
|
| 2811 |
+
敗
|
| 2812 |
+
敘
|
| 2813 |
+
教
|
| 2814 |
+
敝
|
| 2815 |
+
敞
|
| 2816 |
+
敟
|
| 2817 |
+
敢
|
| 2818 |
+
散
|
| 2819 |
+
敦
|
| 2820 |
+
敫
|
| 2821 |
+
敬
|
| 2822 |
+
敭
|
| 2823 |
+
敲
|
| 2824 |
+
整
|
| 2825 |
+
敵
|
| 2826 |
+
敷
|
| 2827 |
+
數
|
| 2828 |
+
敻
|
| 2829 |
+
敾
|
| 2830 |
+
斂
|
| 2831 |
+
斃
|
| 2832 |
+
文
|
| 2833 |
+
斌
|
| 2834 |
+
斎
|
| 2835 |
+
斐
|
| 2836 |
+
斑
|
| 2837 |
+
斕
|
| 2838 |
+
斖
|
| 2839 |
+
斗
|
| 2840 |
+
料
|
| 2841 |
+
斛
|
| 2842 |
+
斜
|
| 2843 |
+
斝
|
| 2844 |
+
斟
|
| 2845 |
+
斡
|
| 2846 |
+
斤
|
| 2847 |
+
斥
|
| 2848 |
+
斧
|
| 2849 |
+
斬
|
| 2850 |
+
斯
|
| 2851 |
+
新
|
| 2852 |
+
斷
|
| 2853 |
+
方
|
| 2854 |
+
於
|
| 2855 |
+
施
|
| 2856 |
+
斿
|
| 2857 |
+
旁
|
| 2858 |
+
旂
|
| 2859 |
+
旃
|
| 2860 |
+
旄
|
| 2861 |
+
旅
|
| 2862 |
+
旉
|
| 2863 |
+
旋
|
| 2864 |
+
旌
|
| 2865 |
+
旎
|
| 2866 |
+
族
|
| 2867 |
+
旖
|
| 2868 |
+
旗
|
| 2869 |
+
旙
|
| 2870 |
+
旛
|
| 2871 |
+
旡
|
| 2872 |
+
既
|
| 2873 |
+
日
|
| 2874 |
+
旦
|
| 2875 |
+
旨
|
| 2876 |
+
早
|
| 2877 |
+
旬
|
| 2878 |
+
旭
|
| 2879 |
+
旱
|
| 2880 |
+
旲
|
| 2881 |
+
旳
|
| 2882 |
+
旺
|
| 2883 |
+
旻
|
| 2884 |
+
旼
|
| 2885 |
+
旽
|
| 2886 |
+
旾
|
| 2887 |
+
旿
|
| 2888 |
+
昀
|
| 2889 |
+
昂
|
| 2890 |
+
昃
|
| 2891 |
+
昆
|
| 2892 |
+
昇
|
| 2893 |
+
昉
|
| 2894 |
+
昊
|
| 2895 |
+
昌
|
| 2896 |
+
昍
|
| 2897 |
+
明
|
| 2898 |
+
昏
|
| 2899 |
+
昐
|
| 2900 |
+
易
|
| 2901 |
+
昔
|
| 2902 |
+
昕
|
| 2903 |
+
昚
|
| 2904 |
+
昛
|
| 2905 |
+
昜
|
| 2906 |
+
昝
|
| 2907 |
+
昞
|
| 2908 |
+
星
|
| 2909 |
+
映
|
| 2910 |
+
昡
|
| 2911 |
+
昣
|
| 2912 |
+
昤
|
| 2913 |
+
春
|
| 2914 |
+
昧
|
| 2915 |
+
昨
|
| 2916 |
+
昪
|
| 2917 |
+
昫
|
| 2918 |
+
昭
|
| 2919 |
+
是
|
| 2920 |
+
昰
|
| 2921 |
+
昱
|
| 2922 |
+
昴
|
| 2923 |
+
昵
|
| 2924 |
+
昶
|
| 2925 |
+
昺
|
| 2926 |
+
晁
|
| 2927 |
+
時
|
| 2928 |
+
晃
|
| 2929 |
+
晈
|
| 2930 |
+
晉
|
| 2931 |
+
晊
|
| 2932 |
+
晏
|
| 2933 |
+
晗
|
| 2934 |
+
晙
|
| 2935 |
+
晚
|
| 2936 |
+
晛
|
| 2937 |
+
晝
|
| 2938 |
+
晞
|
| 2939 |
+
晟
|
| 2940 |
+
晤
|
| 2941 |
+
晦
|
| 2942 |
+
晧
|
| 2943 |
+
晨
|
| 2944 |
+
晩
|
| 2945 |
+
晪
|
| 2946 |
+
晫
|
| 2947 |
+
晭
|
| 2948 |
+
普
|
| 2949 |
+
景
|
| 2950 |
+
晰
|
| 2951 |
+
晳
|
| 2952 |
+
晴
|
| 2953 |
+
晶
|
| 2954 |
+
晷
|
| 2955 |
+
晸
|
| 2956 |
+
智
|
| 2957 |
+
晾
|
| 2958 |
+
暃
|
| 2959 |
+
暄
|
| 2960 |
+
暅
|
| 2961 |
+
暇
|
| 2962 |
+
暈
|
| 2963 |
+
暉
|
| 2964 |
+
暊
|
| 2965 |
+
暌
|
| 2966 |
+
暎
|
| 2967 |
+
暏
|
| 2968 |
+
暐
|
| 2969 |
+
暑
|
| 2970 |
+
暕
|
| 2971 |
+
暖
|
| 2972 |
+
暗
|
| 2973 |
+
暘
|
| 2974 |
+
暝
|
| 2975 |
+
暟
|
| 2976 |
+
暠
|
| 2977 |
+
暢
|
| 2978 |
+
暦
|
| 2979 |
+
暨
|
| 2980 |
+
暫
|
| 2981 |
+
暮
|
| 2982 |
+
暱
|
| 2983 |
+
暲
|
| 2984 |
+
暴
|
| 2985 |
+
暸
|
| 2986 |
+
暹
|
| 2987 |
+
暻
|
| 2988 |
+
暾
|
| 2989 |
+
曄
|
| 2990 |
+
曅
|
| 2991 |
+
曆
|
| 2992 |
+
曇
|
| 2993 |
+
曉
|
| 2994 |
+
曌
|
| 2995 |
+
曔
|
| 2996 |
+
曖
|
| 2997 |
+
曙
|
| 2998 |
+
曜
|
| 2999 |
+
曝
|
| 3000 |
+
曠
|
| 3001 |
+
曦
|
| 3002 |
+
曧
|
| 3003 |
+
曨
|
| 3004 |
+
曩
|
| 3005 |
+
曬
|
| 3006 |
+
曮
|
| 3007 |
+
曰
|
| 3008 |
+
曲
|
| 3009 |
+
曳
|
| 3010 |
+
更
|
| 3011 |
+
曶
|
| 3012 |
+
曷
|
| 3013 |
+
書
|
| 3014 |
+
曹
|
| 3015 |
+
曺
|
| 3016 |
+
曼
|
| 3017 |
+
曽
|
| 3018 |
+
曾
|
| 3019 |
+
替
|
| 3020 |
+
最
|
| 3021 |
+
會
|
| 3022 |
+
月
|
| 3023 |
+
有
|
| 3024 |
+
朊
|
| 3025 |
+
朋
|
| 3026 |
+
服
|
| 3027 |
+
朏
|
| 3028 |
+
朐
|
| 3029 |
+
朓
|
| 3030 |
+
朔
|
| 3031 |
+
朕
|
| 3032 |
+
朖
|
| 3033 |
+
朗
|
| 3034 |
+
望
|
| 3035 |
+
朝
|
| 3036 |
+
期
|
| 3037 |
+
朦
|
| 3038 |
+
朧
|
| 3039 |
+
木
|
| 3040 |
+
未
|
| 3041 |
+
末
|
| 3042 |
+
本
|
| 3043 |
+
札
|
| 3044 |
+
朱
|
| 3045 |
+
朴
|
| 3046 |
+
朵
|
| 3047 |
+
朶
|
| 3048 |
+
朽
|
| 3049 |
+
朿
|
| 3050 |
+
杁
|
| 3051 |
+
杉
|
| 3052 |
+
杋
|
| 3053 |
+
杌
|
| 3054 |
+
李
|
| 3055 |
+
杏
|
| 3056 |
+
材
|
| 3057 |
+
村
|
| 3058 |
+
杓
|
| 3059 |
+
杖
|
| 3060 |
+
杙
|
| 3061 |
+
杜
|
| 3062 |
+
杞
|
| 3063 |
+
束
|
| 3064 |
+
杠
|
| 3065 |
+
杣
|
| 3066 |
+
杤
|
| 3067 |
+
杧
|
| 3068 |
+
杬
|
| 3069 |
+
杭
|
| 3070 |
+
杯
|
| 3071 |
+
東
|
| 3072 |
+
杲
|
| 3073 |
+
杳
|
| 3074 |
+
杴
|
| 3075 |
+
杵
|
| 3076 |
+
杷
|
| 3077 |
+
杻
|
| 3078 |
+
杼
|
| 3079 |
+
松
|
| 3080 |
+
板
|
| 3081 |
+
极
|
| 3082 |
+
枇
|
| 3083 |
+
枉
|
| 3084 |
+
枋
|
| 3085 |
+
枏
|
| 3086 |
+
析
|
| 3087 |
+
枕
|
| 3088 |
+
枖
|
| 3089 |
+
林
|
| 3090 |
+
枚
|
| 3091 |
+
枛
|
| 3092 |
+
果
|
| 3093 |
+
枝
|
| 3094 |
+
枠
|
| 3095 |
+
枡
|
| 3096 |
+
枯
|
| 3097 |
+
枰
|
| 3098 |
+
枱
|
| 3099 |
+
枲
|
| 3100 |
+
枳
|
| 3101 |
+
架
|
| 3102 |
+
枷
|
| 3103 |
+
枸
|
| 3104 |
+
枹
|
| 3105 |
+
枼
|
| 3106 |
+
柁
|
| 3107 |
+
柃
|
| 3108 |
+
柄
|
| 3109 |
+
柉
|
| 3110 |
+
柊
|
| 3111 |
+
柎
|
| 3112 |
+
柏
|
| 3113 |
+
某
|
| 3114 |
+
柑
|
| 3115 |
+
柒
|
| 3116 |
+
染
|
| 3117 |
+
柔
|
| 3118 |
+
柘
|
| 3119 |
+
柚
|
| 3120 |
+
柜
|
| 3121 |
+
柝
|
| 3122 |
+
柞
|
| 3123 |
+
柟
|
| 3124 |
+
查
|
| 3125 |
+
柩
|
| 3126 |
+
柬
|
| 3127 |
+
柯
|
| 3128 |
+
柰
|
| 3129 |
+
柱
|
| 3130 |
+
柳
|
| 3131 |
+
柴
|
| 3132 |
+
柵
|
| 3133 |
+
柶
|
| 3134 |
+
柷
|
| 3135 |
+
査
|
| 3136 |
+
柾
|
| 3137 |
+
柿
|
| 3138 |
+
栃
|
| 3139 |
+
栄
|
| 3140 |
+
栐
|
| 3141 |
+
栒
|
| 3142 |
+
栓
|
| 3143 |
+
栜
|
| 3144 |
+
栝
|
| 3145 |
+
栞
|
| 3146 |
+
校
|
| 3147 |
+
栢
|
| 3148 |
+
栨
|
| 3149 |
+
栩
|
| 3150 |
+
株
|
| 3151 |
+
栲
|
| 3152 |
+
栴
|
| 3153 |
+
核
|
| 3154 |
+
根
|
| 3155 |
+
栻
|
| 3156 |
+
格
|
| 3157 |
+
栽
|
| 3158 |
+
桀
|
| 3159 |
+
桁
|
| 3160 |
+
桂
|
| 3161 |
+
桃
|
| 3162 |
+
桄
|
| 3163 |
+
桅
|
| 3164 |
+
框
|
| 3165 |
+
案
|
| 3166 |
+
桉
|
| 3167 |
+
桌
|
| 3168 |
+
桎
|
| 3169 |
+
桐
|
| 3170 |
+
桑
|
| 3171 |
+
桓
|
| 3172 |
+
桔
|
| 3173 |
+
桕
|
| 3174 |
+
桖
|
| 3175 |
+
桙
|
| 3176 |
+
桜
|
| 3177 |
+
桝
|
| 3178 |
+
桫
|
| 3179 |
+
桱
|
| 3180 |
+
桲
|
| 3181 |
+
桴
|
| 3182 |
+
桶
|
| 3183 |
+
桷
|
| 3184 |
+
桼
|
| 3185 |
+
桿
|
| 3186 |
+
梀
|
| 3187 |
+
梁
|
| 3188 |
+
梂
|
| 3189 |
+
梃
|
| 3190 |
+
梅
|
| 3191 |
+
梆
|
| 3192 |
+
梉
|
| 3193 |
+
梏
|
| 3194 |
+
梓
|
| 3195 |
+
梔
|
| 3196 |
+
梗
|
| 3197 |
+
梘
|
| 3198 |
+
條
|
| 3199 |
+
梟
|
| 3200 |
+
梠
|
| 3201 |
+
梢
|
| 3202 |
+
梣
|
| 3203 |
+
梧
|
| 3204 |
+
梨
|
| 3205 |
+
梫
|
| 3206 |
+
梭
|
| 3207 |
+
梯
|
| 3208 |
+
械
|
| 3209 |
+
梱
|
| 3210 |
+
梳
|
| 3211 |
+
梵
|
| 3212 |
+
梶
|
| 3213 |
+
梽
|
| 3214 |
+
棄
|
| 3215 |
+
棆
|
| 3216 |
+
棉
|
| 3217 |
+
棋
|
| 3218 |
+
棍
|
| 3219 |
+
棐
|
| 3220 |
+
棒
|
| 3221 |
+
棓
|
| 3222 |
+
棕
|
| 3223 |
+
棖
|
| 3224 |
+
棗
|
| 3225 |
+
棘
|
| 3226 |
+
棚
|
| 3227 |
+
棛
|
| 3228 |
+
棟
|
| 3229 |
+
棠
|
| 3230 |
+
棡
|
| 3231 |
+
棣
|
| 3232 |
+
棧
|
| 3233 |
+
棨
|
| 3234 |
+
棩
|
| 3235 |
+
棪
|
| 3236 |
+
棫
|
| 3237 |
+
森
|
| 3238 |
+
棱
|
| 3239 |
+
棲
|
| 3240 |
+
棵
|
| 3241 |
+
棶
|
| 3242 |
+
棹
|
| 3243 |
+
棺
|
| 3244 |
+
棻
|
| 3245 |
+
棼
|
| 3246 |
+
棽
|
| 3247 |
+
椅
|
| 3248 |
+
椆
|
| 3249 |
+
椇
|
| 3250 |
+
椋
|
| 3251 |
+
植
|
| 3252 |
+
椎
|
| 3253 |
+
椏
|
| 3254 |
+
椒
|
| 3255 |
+
椙
|
| 3256 |
+
椥
|
| 3257 |
+
椪
|
| 3258 |
+
椰
|
| 3259 |
+
椲
|
| 3260 |
+
椴
|
| 3261 |
+
椵
|
| 3262 |
+
椹
|
| 3263 |
+
椽
|
| 3264 |
+
椿
|
| 3265 |
+
楂
|
| 3266 |
+
楊
|
| 3267 |
+
楓
|
| 3268 |
+
楔
|
| 3269 |
+
楗
|
| 3270 |
+
楙
|
| 3271 |
+
楚
|
| 3272 |
+
楝
|
| 3273 |
+
楞
|
| 3274 |
+
楠
|
| 3275 |
+
楡
|
| 3276 |
+
楢
|
| 3277 |
+
楣
|
| 3278 |
+
楤
|
| 3279 |
+
楦
|
| 3280 |
+
楧
|
| 3281 |
+
楨
|
| 3282 |
+
楫
|
| 3283 |
+
業
|
| 3284 |
+
楮
|
| 3285 |
+
楯
|
| 3286 |
+
楳
|
| 3287 |
+
極
|
| 3288 |
+
楷
|
| 3289 |
+
楸
|
| 3290 |
+
楹
|
| 3291 |
+
楽
|
| 3292 |
+
楿
|
| 3293 |
+
概
|
| 3294 |
+
榆
|
| 3295 |
+
榊
|
| 3296 |
+
榍
|
| 3297 |
+
榎
|
| 3298 |
+
榑
|
| 3299 |
+
榔
|
| 3300 |
+
榕
|
| 3301 |
+
榖
|
| 3302 |
+
榗
|
| 3303 |
+
榘
|
| 3304 |
+
榛
|
| 3305 |
+
榜
|
| 3306 |
+
榞
|
| 3307 |
+
榢
|
| 3308 |
+
榣
|
| 3309 |
+
榤
|
| 3310 |
+
榦
|
| 3311 |
+
榧
|
| 3312 |
+
榨
|
| 3313 |
+
榫
|
| 3314 |
+
榭
|
| 3315 |
+
榮
|
| 3316 |
+
榲
|
| 3317 |
+
榴
|
| 3318 |
+
榷
|
| 3319 |
+
榻
|
| 3320 |
+
榿
|
| 3321 |
+
槀
|
| 3322 |
+
槁
|
| 3323 |
+
槃
|
| 3324 |
+
槊
|
| 3325 |
+
構
|
| 3326 |
+
槌
|
| 3327 |
+
槍
|
| 3328 |
+
槎
|
| 3329 |
+
槐
|
| 3330 |
+
槓
|
| 3331 |
+
槔
|
| 3332 |
+
槗
|
| 3333 |
+
様
|
| 3334 |
+
槙
|
| 3335 |
+
槤
|
| 3336 |
+
槩
|
| 3337 |
+
槭
|
| 3338 |
+
槰
|
| 3339 |
+
槱
|
| 3340 |
+
槲
|
| 3341 |
+
槳
|
| 3342 |
+
槺
|
| 3343 |
+
槻
|
| 3344 |
+
槼
|
| 3345 |
+
槽
|
| 3346 |
+
槿
|
| 3347 |
+
樀
|
| 3348 |
+
樁
|
| 3349 |
+
樂
|
| 3350 |
+
樅
|
| 3351 |
+
樆
|
| 3352 |
+
樊
|
| 3353 |
+
樋
|
| 3354 |
+
樑
|
| 3355 |
+
樓
|
| 3356 |
+
樗
|
| 3357 |
+
樘
|
| 3358 |
+
標
|
| 3359 |
+
樞
|
| 3360 |
+
樟
|
| 3361 |
+
模
|
| 3362 |
+
樣
|
| 3363 |
+
樨
|
| 3364 |
+
権
|
| 3365 |
+
樫
|
| 3366 |
+
樵
|
| 3367 |
+
樸
|
| 3368 |
+
樹
|
| 3369 |
+
樺
|
| 3370 |
+
樻
|
| 3371 |
+
樽
|
| 3372 |
+
樾
|
| 3373 |
+
橄
|
| 3374 |
+
橇
|
| 3375 |
+
橈
|
| 3376 |
+
橋
|
| 3377 |
+
橐
|
| 3378 |
+
橒
|
| 3379 |
+
橓
|
| 3380 |
+
橘
|
| 3381 |
+
橙
|
| 3382 |
+
橚
|
| 3383 |
+
機
|
| 3384 |
+
橡
|
| 3385 |
+
橢
|
| 3386 |
+
橪
|
| 3387 |
+
橫
|
| 3388 |
+
橿
|
| 3389 |
+
檀
|
| 3390 |
+
檄
|
| 3391 |
+
檇
|
| 3392 |
+
檉
|
| 3393 |
+
檊
|
| 3394 |
+
檎
|
| 3395 |
+
檐
|
| 3396 |
+
檔
|
| 3397 |
+
檗
|
| 3398 |
+
檜
|
| 3399 |
+
檞
|
| 3400 |
+
檠
|
| 3401 |
+
檡
|
| 3402 |
+
檢
|
| 3403 |
+
檣
|
| 3404 |
+
檦
|
| 3405 |
+
檨
|
| 3406 |
+
檫
|
| 3407 |
+
檬
|
| 3408 |
+
檯
|
| 3409 |
+
檳
|
| 3410 |
+
檵
|
| 3411 |
+
檸
|
| 3412 |
+
檻
|
| 3413 |
+
檽
|
| 3414 |
+
櫂
|
| 3415 |
+
櫃
|
| 3416 |
+
櫆
|
| 3417 |
+
櫈
|
| 3418 |
+
櫓
|
| 3419 |
+
櫚
|
| 3420 |
+
櫛
|
| 3421 |
+
櫞
|
| 3422 |
+
櫟
|
| 3423 |
+
櫥
|
| 3424 |
+
櫨
|
| 3425 |
+
櫪
|
| 3426 |
+
櫱
|
| 3427 |
+
櫸
|
| 3428 |
+
櫻
|
| 3429 |
+
櫾
|
| 3430 |
+
櫿
|
| 3431 |
+
欄
|
| 3432 |
+
欉
|
| 3433 |
+
權
|
| 3434 |
+
欏
|
| 3435 |
+
欒
|
| 3436 |
+
欖
|
| 3437 |
+
欞
|
| 3438 |
+
欠
|
| 3439 |
+
次
|
| 3440 |
+
欣
|
| 3441 |
+
欥
|
| 3442 |
+
欲
|
| 3443 |
+
欸
|
| 3444 |
+
欹
|
| 3445 |
+
欺
|
| 3446 |
+
欽
|
| 3447 |
+
款
|
| 3448 |
+
歆
|
| 3449 |
+
歇
|
| 3450 |
+
歉
|
| 3451 |
+
歊
|
| 3452 |
+
歌
|
| 3453 |
+
歎
|
| 3454 |
+
歐
|
| 3455 |
+
歓
|
| 3456 |
+
歙
|
| 3457 |
+
歛
|
| 3458 |
+
歡
|
| 3459 |
+
止
|
| 3460 |
+
正
|
| 3461 |
+
此
|
| 3462 |
+
步
|
| 3463 |
+
武
|
| 3464 |
+
歧
|
| 3465 |
+
歩
|
| 3466 |
+
歪
|
| 3467 |
+
歲
|
| 3468 |
+
歳
|
| 3469 |
+
歴
|
| 3470 |
+
歷
|
| 3471 |
+
歸
|
| 3472 |
+
歹
|
| 3473 |
+
死
|
| 3474 |
+
歿
|
| 3475 |
+
殂
|
| 3476 |
+
殃
|
| 3477 |
+
殄
|
| 3478 |
+
殆
|
| 3479 |
+
殉
|
| 3480 |
+
殊
|
| 3481 |
+
殑
|
| 3482 |
+
殖
|
| 3483 |
+
殘
|
| 3484 |
+
殛
|
| 3485 |
+
殞
|
| 3486 |
+
殟
|
| 3487 |
+
殤
|
| 3488 |
+
殭
|
| 3489 |
+
殮
|
| 3490 |
+
殯
|
| 3491 |
+
殲
|
| 3492 |
+
殳
|
| 3493 |
+
段
|
| 3494 |
+
殷
|
| 3495 |
+
殺
|
| 3496 |
+
殻
|
| 3497 |
+
殼
|
| 3498 |
+
殿
|
| 3499 |
+
毀
|
| 3500 |
+
毅
|
| 3501 |
+
毆
|
| 3502 |
+
毉
|
| 3503 |
+
毋
|
| 3504 |
+
毌
|
| 3505 |
+
母
|
| 3506 |
+
毎
|
| 3507 |
+
每
|
| 3508 |
+
毐
|
| 3509 |
+
毒
|
| 3510 |
+
毓
|
| 3511 |
+
比
|
| 3512 |
+
毖
|
| 3513 |
+
毗
|
| 3514 |
+
毘
|
| 3515 |
+
毛
|
| 3516 |
+
毫
|
| 3517 |
+
毬
|
| 3518 |
+
毯
|
| 3519 |
+
毴
|
| 3520 |
+
毸
|
| 3521 |
+
毽
|
| 3522 |
+
毿
|
| 3523 |
+
氂
|
| 3524 |
+
氈
|
| 3525 |
+
氍
|
| 3526 |
+
氏
|
| 3527 |
+
氐
|
| 3528 |
+
民
|
| 3529 |
+
氓
|
| 3530 |
+
氖
|
| 3531 |
+
気
|
| 3532 |
+
氘
|
| 3533 |
+
氙
|
| 3534 |
+
氚
|
| 3535 |
+
氛
|
| 3536 |
+
氟
|
| 3537 |
+
氣
|
| 3538 |
+
氦
|
| 3539 |
+
氧
|
| 3540 |
+
氨
|
| 3541 |
+
氪
|
| 3542 |
+
氫
|
| 3543 |
+
氬
|
| 3544 |
+
氮
|
| 3545 |
+
氯
|
| 3546 |
+
氰
|
| 3547 |
+
水
|
| 3548 |
+
氵
|
| 3549 |
+
氷
|
| 3550 |
+
永
|
| 3551 |
+
氹
|
| 3552 |
+
氻
|
| 3553 |
+
氽
|
| 3554 |
+
氾
|
| 3555 |
+
汀
|
| 3556 |
+
汁
|
| 3557 |
+
求
|
| 3558 |
+
汊
|
| 3559 |
+
汎
|
| 3560 |
+
汐
|
| 3561 |
+
汕
|
| 3562 |
+
汗
|
| 3563 |
+
汛
|
| 3564 |
+
汜
|
| 3565 |
+
汝
|
| 3566 |
+
汞
|
| 3567 |
+
江
|
| 3568 |
+
池
|
| 3569 |
+
污
|
| 3570 |
+
汧
|
| 3571 |
+
汨
|
| 3572 |
+
汩
|
| 3573 |
+
汪
|
| 3574 |
+
汭
|
| 3575 |
+
汰
|
| 3576 |
+
汲
|
| 3577 |
+
汴
|
| 3578 |
+
汶
|
| 3579 |
+
決
|
| 3580 |
+
汽
|
| 3581 |
+
汾
|
| 3582 |
+
沁
|
| 3583 |
+
沂
|
| 3584 |
+
沃
|
| 3585 |
+
沄
|
| 3586 |
+
沅
|
| 3587 |
+
沆
|
| 3588 |
+
沇
|
| 3589 |
+
沈
|
| 3590 |
+
沉
|
| 3591 |
+
沌
|
| 3592 |
+
沍
|
| 3593 |
+
沏
|
| 3594 |
+
沐
|
| 3595 |
+
沒
|
| 3596 |
+
沓
|
| 3597 |
+
沔
|
| 3598 |
+
沖
|
| 3599 |
+
沘
|
| 3600 |
+
沙
|
| 3601 |
+
沚
|
| 3602 |
+
沛
|
| 3603 |
+
沜
|
| 3604 |
+
沢
|
| 3605 |
+
沨
|
| 3606 |
+
沫
|
| 3607 |
+
沭
|
| 3608 |
+
沮
|
| 3609 |
+
沯
|
| 3610 |
+
沱
|
| 3611 |
+
河
|
| 3612 |
+
沸
|
| 3613 |
+
油
|
| 3614 |
+
沺
|
| 3615 |
+
治
|
| 3616 |
+
沼
|
| 3617 |
+
沽
|
| 3618 |
+
沾
|
| 3619 |
+
沿
|
| 3620 |
+
況
|
| 3621 |
+
泂
|
| 3622 |
+
泄
|
| 3623 |
+
泆
|
| 3624 |
+
泇
|
| 3625 |
+
泉
|
| 3626 |
+
泊
|
| 3627 |
+
泌
|
| 3628 |
+
泐
|
| 3629 |
+
泓
|
| 3630 |
+
泔
|
| 3631 |
+
法
|
| 3632 |
+
泖
|
| 3633 |
+
泗
|
| 3634 |
+
泚
|
| 3635 |
+
泛
|
| 3636 |
+
泠
|
| 3637 |
+
泡
|
| 3638 |
+
波
|
| 3639 |
+
泣
|
| 3640 |
+
泥
|
| 3641 |
+
泩
|
| 3642 |
+
泫
|
| 3643 |
+
泮
|
| 3644 |
+
泯
|
| 3645 |
+
泰
|
| 3646 |
+
泱
|
| 3647 |
+
泳
|
| 3648 |
+
泵
|
| 3649 |
+
洄
|
| 3650 |
+
洋
|
| 3651 |
+
洌
|
| 3652 |
+
洎
|
| 3653 |
+
洗
|
| 3654 |
+
洙
|
| 3655 |
+
洛
|
| 3656 |
+
洞
|
| 3657 |
+
洢
|
| 3658 |
+
洣
|
| 3659 |
+
洤
|
| 3660 |
+
津
|
| 3661 |
+
洨
|
| 3662 |
+
洩
|
| 3663 |
+
洪
|
| 3664 |
+
洮
|
| 3665 |
+
洱
|
| 3666 |
+
洲
|
| 3667 |
+
洳
|
| 3668 |
+
洵
|
| 3669 |
+
洸
|
| 3670 |
+
洹
|
| 3671 |
+
洺
|
| 3672 |
+
活
|
| 3673 |
+
洽
|
| 3674 |
+
派
|
| 3675 |
+
流
|
| 3676 |
+
浄
|
| 3677 |
+
浙
|
| 3678 |
+
浚
|
| 3679 |
+
浛
|
| 3680 |
+
浜
|
| 3681 |
+
浞
|
| 3682 |
+
浟
|
| 3683 |
+
浠
|
| 3684 |
+
浡
|
| 3685 |
+
浣
|
| 3686 |
+
浤
|
| 3687 |
+
浥
|
| 3688 |
+
浦
|
| 3689 |
+
浩
|
| 3690 |
+
浪
|
| 3691 |
+
浮
|
| 3692 |
+
浯
|
| 3693 |
+
浴
|
| 3694 |
+
浵
|
| 3695 |
+
海
|
| 3696 |
+
浸
|
| 3697 |
+
浹
|
| 3698 |
+
涅
|
| 3699 |
+
涇
|
| 3700 |
+
消
|
| 3701 |
+
涉
|
| 3702 |
+
涌
|
| 3703 |
+
涎
|
| 3704 |
+
涑
|
| 3705 |
+
涓
|
| 3706 |
+
涔
|
| 3707 |
+
涕
|
| 3708 |
+
涙
|
| 3709 |
+
涪
|
| 3710 |
+
涫
|
| 3711 |
+
涮
|
| 3712 |
+
涯
|
| 3713 |
+
液
|
| 3714 |
+
涵
|
| 3715 |
+
涸
|
| 3716 |
+
涼
|
| 3717 |
+
涿
|
| 3718 |
+
淄
|
| 3719 |
+
淅
|
| 3720 |
+
淆
|
| 3721 |
+
淇
|
| 3722 |
+
淋
|
| 3723 |
+
淌
|
| 3724 |
+
淍
|
| 3725 |
+
淎
|
| 3726 |
+
淏
|
| 3727 |
+
淑
|
| 3728 |
+
淓
|
| 3729 |
+
淖
|
| 3730 |
+
淘
|
| 3731 |
+
淙
|
| 3732 |
+
淚
|
| 3733 |
+
淛
|
| 3734 |
+
淝
|
| 3735 |
+
淞
|
| 3736 |
+
淠
|
| 3737 |
+
淡
|
| 3738 |
+
淤
|
| 3739 |
+
淥
|
| 3740 |
+
淦
|
| 3741 |
+
淨
|
| 3742 |
+
淩
|
| 3743 |
+
淪
|
| 3744 |
+
淫
|
| 3745 |
+
淬
|
| 3746 |
+
淮
|
| 3747 |
+
淯
|
| 3748 |
+
淰
|
| 3749 |
+
深
|
| 3750 |
+
淳
|
| 3751 |
+
淵
|
| 3752 |
+
淶
|
| 3753 |
+
混
|
| 3754 |
+
淸
|
| 3755 |
+
淹
|
| 3756 |
+
淺
|
| 3757 |
+
添
|
| 3758 |
+
淼
|
| 3759 |
+
淽
|
| 3760 |
+
渃
|
| 3761 |
+
清
|
| 3762 |
+
済
|
| 3763 |
+
渉
|
| 3764 |
+
渋
|
| 3765 |
+
渕
|
| 3766 |
+
渙
|
| 3767 |
+
渚
|
| 3768 |
+
減
|
| 3769 |
+
渝
|
| 3770 |
+
渟
|
| 3771 |
+
渠
|
| 3772 |
+
渡
|
| 3773 |
+
渣
|
| 3774 |
+
渤
|
| 3775 |
+
渥
|
| 3776 |
+
渦
|
| 3777 |
+
渫
|
| 3778 |
+
測
|
| 3779 |
+
渭
|
| 3780 |
+
港
|
| 3781 |
+
渲
|
| 3782 |
+
渴
|
| 3783 |
+
游
|
| 3784 |
+
渺
|
| 3785 |
+
渼
|
| 3786 |
+
渽
|
| 3787 |
+
渾
|
| 3788 |
+
湃
|
| 3789 |
+
湄
|
| 3790 |
+
湉
|
| 3791 |
+
湊
|
| 3792 |
+
湍
|
| 3793 |
+
湓
|
| 3794 |
+
湔
|
| 3795 |
+
湖
|
| 3796 |
+
湘
|
| 3797 |
+
湛
|
| 3798 |
+
湜
|
| 3799 |
+
湞
|
| 3800 |
+
湟
|
| 3801 |
+
湣
|
| 3802 |
+
湥
|
| 3803 |
+
湧
|
| 3804 |
+
湫
|
| 3805 |
+
湮
|
| 3806 |
+
湯
|
| 3807 |
+
湳
|
| 3808 |
+
湴
|
| 3809 |
+
湼
|
| 3810 |
+
満
|
| 3811 |
+
溁
|
| 3812 |
+
溇
|
| 3813 |
+
溈
|
| 3814 |
+
溉
|
| 3815 |
+
溋
|
| 3816 |
+
溎
|
| 3817 |
+
溏
|
| 3818 |
+
源
|
| 3819 |
+
準
|
| 3820 |
+
溙
|
| 3821 |
+
溜
|
| 3822 |
+
溝
|
| 3823 |
+
溟
|
| 3824 |
+
溢
|
| 3825 |
+
溥
|
| 3826 |
+
溦
|
| 3827 |
+
溧
|
| 3828 |
+
溪
|
| 3829 |
+
溫
|
| 3830 |
+
溯
|
| 3831 |
+
溱
|
| 3832 |
+
溲
|
| 3833 |
+
溴
|
| 3834 |
+
溵
|
| 3835 |
+
溶
|
| 3836 |
+
溺
|
| 3837 |
+
溼
|
| 3838 |
+
滀
|
| 3839 |
+
滁
|
| 3840 |
+
滂
|
| 3841 |
+
滄
|
| 3842 |
+
滅
|
| 3843 |
+
滇
|
| 3844 |
+
滈
|
| 3845 |
+
滉
|
| 3846 |
+
滋
|
| 3847 |
+
滌
|
| 3848 |
+
滎
|
| 3849 |
+
滏
|
| 3850 |
+
滑
|
| 3851 |
+
滓
|
| 3852 |
+
滔
|
| 3853 |
+
滕
|
| 3854 |
+
滘
|
| 3855 |
+
滙
|
| 3856 |
+
滝
|
| 3857 |
+
滬
|
| 3858 |
+
滯
|
| 3859 |
+
滲
|
| 3860 |
+
滴
|
| 3861 |
+
滷
|
| 3862 |
+
滸
|
| 3863 |
+
滹
|
| 3864 |
+
滻
|
| 3865 |
+
滽
|
| 3866 |
+
滾
|
| 3867 |
+
滿
|
| 3868 |
+
漁
|
| 3869 |
+
漂
|
| 3870 |
+
漆
|
| 3871 |
+
漇
|
| 3872 |
+
漈
|
| 3873 |
+
漎
|
| 3874 |
+
漏
|
| 3875 |
+
漓
|
| 3876 |
+
演
|
| 3877 |
+
漕
|
| 3878 |
+
漚
|
| 3879 |
+
漠
|
| 3880 |
+
漢
|
| 3881 |
+
漣
|
| 3882 |
+
漩
|
| 3883 |
+
漪
|
| 3884 |
+
漫
|
| 3885 |
+
漬
|
| 3886 |
+
漯
|
| 3887 |
+
漱
|
| 3888 |
+
漲
|
| 3889 |
+
漳
|
| 3890 |
+
漴
|
| 3891 |
+
漵
|
| 3892 |
+
漷
|
| 3893 |
+
漸
|
| 3894 |
+
漼
|
| 3895 |
+
漾
|
| 3896 |
+
漿
|
| 3897 |
+
潁
|
| 3898 |
+
潑
|
| 3899 |
+
潔
|
| 3900 |
+
潘
|
| 3901 |
+
潛
|
| 3902 |
+
潞
|
| 3903 |
+
潟
|
| 3904 |
+
潢
|
| 3905 |
+
潤
|
| 3906 |
+
潭
|
| 3907 |
+
潮
|
| 3908 |
+
潯
|
| 3909 |
+
潰
|
| 3910 |
+
潲
|
| 3911 |
+
潺
|
| 3912 |
+
潼
|
| 3913 |
+
潽
|
| 3914 |
+
潾
|
| 3915 |
+
潿
|
| 3916 |
+
澀
|
| 3917 |
+
澁
|
| 3918 |
+
澂
|
| 3919 |
+
澄
|
| 3920 |
+
澆
|
| 3921 |
+
澇
|
| 3922 |
+
澈
|
| 3923 |
+
澉
|
| 3924 |
+
澋
|
| 3925 |
+
澌
|
| 3926 |
+
澍
|
| 3927 |
+
澎
|
| 3928 |
+
澔
|
| 3929 |
+
澗
|
| 3930 |
+
澠
|
| 3931 |
+
澡
|
| 3932 |
+
澣
|
| 3933 |
+
澤
|
| 3934 |
+
澥
|
| 3935 |
+
澧
|
| 3936 |
+
澪
|
| 3937 |
+
澮
|
| 3938 |
+
澯
|
| 3939 |
+
澱
|
| 3940 |
+
澳
|
| 3941 |
+
澶
|
| 3942 |
+
澹
|
| 3943 |
+
澻
|
| 3944 |
+
激
|
| 3945 |
+
濁
|
| 3946 |
+
濂
|
| 3947 |
+
濃
|
| 3948 |
+
濉
|
| 3949 |
+
濊
|
| 3950 |
+
濋
|
| 3951 |
+
濕
|
| 3952 |
+
濘
|
| 3953 |
+
濙
|
| 3954 |
+
濛
|
| 3955 |
+
濞
|
| 3956 |
+
濟
|
| 3957 |
+
濠
|
| 3958 |
+
濡
|
| 3959 |
+
濤
|
| 3960 |
+
濫
|
| 3961 |
+
濬
|
| 3962 |
+
濮
|
| 3963 |
+
濯
|
| 3964 |
+
濰
|
| 3965 |
+
濱
|
| 3966 |
+
濲
|
| 3967 |
+
濶
|
| 3968 |
+
濺
|
| 3969 |
+
濼
|
| 3970 |
+
濾
|
| 3971 |
+
瀁
|
| 3972 |
+
瀅
|
| 3973 |
+
瀆
|
| 3974 |
+
瀉
|
| 3975 |
+
瀍
|
| 3976 |
+
瀏
|
| 3977 |
+
瀑
|
| 3978 |
+
瀔
|
| 3979 |
+
瀕
|
| 3980 |
+
瀘
|
| 3981 |
+
瀚
|
| 3982 |
+
瀛
|
| 3983 |
+
瀝
|
| 3984 |
+
瀞
|
| 3985 |
+
瀟
|
| 3986 |
+
瀠
|
| 3987 |
+
瀣
|
| 3988 |
+
瀦
|
| 3989 |
+
瀧
|
| 3990 |
+
瀨
|
| 3991 |
+
瀬
|
| 3992 |
+
瀰
|
| 3993 |
+
瀲
|
| 3994 |
+
瀴
|
| 3995 |
+
瀶
|
| 3996 |
+
瀹
|
| 3997 |
+
瀾
|
| 3998 |
+
灃
|
| 3999 |
+
灊
|
| 4000 |
+
灌
|
| 4001 |
+
灑
|
| 4002 |
+
灘
|
| 4003 |
+
灝
|
| 4004 |
+
灞
|
| 4005 |
+
灡
|
| 4006 |
+
灣
|
| 4007 |
+
灤
|
| 4008 |
+
灧
|
| 4009 |
+
火
|
| 4010 |
+
灰
|
| 4011 |
+
灴
|
| 4012 |
+
灸
|
| 4013 |
+
灼
|
| 4014 |
+
災
|
| 4015 |
+
炁
|
| 4016 |
+
炅
|
| 4017 |
+
炆
|
| 4018 |
+
炊
|
| 4019 |
+
炎
|
| 4020 |
+
炒
|
| 4021 |
+
炔
|
| 4022 |
+
炕
|
| 4023 |
+
炘
|
| 4024 |
+
炙
|
| 4025 |
+
炟
|
| 4026 |
+
炣
|
| 4027 |
+
炤
|
| 4028 |
+
炫
|
| 4029 |
+
炬
|
| 4030 |
+
炭
|
| 4031 |
+
炮
|
| 4032 |
+
炯
|
| 4033 |
+
炱
|
| 4034 |
+
炲
|
| 4035 |
+
炳
|
| 4036 |
+
炷
|
| 4037 |
+
炸
|
| 4038 |
+
為
|
| 4039 |
+
炻
|
| 4040 |
+
烈
|
| 4041 |
+
烉
|
| 4042 |
+
烊
|
| 4043 |
+
烋
|
| 4044 |
+
烏
|
| 4045 |
+
烒
|
| 4046 |
+
烔
|
| 4047 |
+
烘
|
| 4048 |
+
烙
|
| 4049 |
+
烜
|
| 4050 |
+
烝
|
| 4051 |
+
烤
|
| 4052 |
+
烯
|
| 4053 |
+
烱
|
| 4054 |
+
烴
|
| 4055 |
+
烷
|
| 4056 |
+
烹
|
| 4057 |
+
烺
|
| 4058 |
+
烽
|
| 4059 |
+
焃
|
| 4060 |
+
焄
|
| 4061 |
+
焉
|
| 4062 |
+
焊
|
| 4063 |
+
焌
|
| 4064 |
+
焓
|
| 4065 |
+
焗
|
| 4066 |
+
焙
|
| 4067 |
+
焚
|
| 4068 |
+
焜
|
| 4069 |
+
焞
|
| 4070 |
+
無
|
| 4071 |
+
焦
|
| 4072 |
+
焯
|
| 4073 |
+
焰
|
| 4074 |
+
焱
|
| 4075 |
+
焴
|
| 4076 |
+
然
|
| 4077 |
+
焻
|
| 4078 |
+
焼
|
| 4079 |
+
焿
|
| 4080 |
+
煇
|
| 4081 |
+
煉
|
| 4082 |
+
煊
|
| 4083 |
+
煌
|
| 4084 |
+
煎
|
| 4085 |
+
煐
|
| 4086 |
+
煒
|
| 4087 |
+
煔
|
| 4088 |
+
煕
|
| 4089 |
+
煖
|
| 4090 |
+
煙
|
| 4091 |
+
煚
|
| 4092 |
+
煜
|
| 4093 |
+
煞
|
| 4094 |
+
煠
|
| 4095 |
+
煤
|
| 4096 |
+
煥
|
| 4097 |
+
煦
|
| 4098 |
+
照
|
| 4099 |
+
煨
|
| 4100 |
+
煩
|
| 4101 |
+
煬
|
| 4102 |
+
煮
|
| 4103 |
+
煲
|
| 4104 |
+
煳
|
| 4105 |
+
煵
|
| 4106 |
+
煶
|
| 4107 |
+
煸
|
| 4108 |
+
煽
|
| 4109 |
+
熄
|
| 4110 |
+
熅
|
| 4111 |
+
熇
|
| 4112 |
+
熈
|
| 4113 |
+
熊
|
| 4114 |
+
熏
|
| 4115 |
+
熒
|
| 4116 |
+
熔
|
| 4117 |
+
熖
|
| 4118 |
+
熗
|
| 4119 |
+
熘
|
| 4120 |
+
熙
|
| 4121 |
+
熜
|
| 4122 |
+
熟
|
| 4123 |
+
熠
|
| 4124 |
+
熤
|
| 4125 |
+
熥
|
| 4126 |
+
熨
|
| 4127 |
+
熬
|
| 4128 |
+
熯
|
| 4129 |
+
熱
|
| 4130 |
+
熲
|
| 4131 |
+
熳
|
| 4132 |
+
熵
|
| 4133 |
+
熹
|
| 4134 |
+
熺
|
| 4135 |
+
熼
|
| 4136 |
+
熾
|
| 4137 |
+
熿
|
| 4138 |
+
燁
|
| 4139 |
+
燃
|
| 4140 |
+
燄
|
| 4141 |
+
燈
|
| 4142 |
+
燉
|
| 4143 |
+
燊
|
| 4144 |
+
燎
|
| 4145 |
+
燏
|
| 4146 |
+
燐
|
| 4147 |
+
燒
|
| 4148 |
+
燔
|
| 4149 |
+
燕
|
| 4150 |
+
燘
|
| 4151 |
+
燙
|
| 4152 |
+
燚
|
| 4153 |
+
燜
|
| 4154 |
+
燝
|
| 4155 |
+
營
|
| 4156 |
+
燥
|
| 4157 |
+
燦
|
| 4158 |
+
燧
|
| 4159 |
+
燫
|
| 4160 |
+
燬
|
| 4161 |
+
燭
|
| 4162 |
+
燮
|
| 4163 |
+
燴
|
| 4164 |
+
燹
|
| 4165 |
+
燻
|
| 4166 |
+
燼
|
| 4167 |
+
燾
|
| 4168 |
+
燿
|
| 4169 |
+
爀
|
| 4170 |
+
爆
|
| 4171 |
+
爌
|
| 4172 |
+
爍
|
| 4173 |
+
爐
|
| 4174 |
+
爔
|
| 4175 |
+
爚
|
| 4176 |
+
爛
|
| 4177 |
+
爝
|
| 4178 |
+
爨
|
| 4179 |
+
爪
|
| 4180 |
+
爬
|
| 4181 |
+
爭
|
| 4182 |
+
爯
|
| 4183 |
+
爰
|
| 4184 |
+
爲
|
| 4185 |
+
爵
|
| 4186 |
+
父
|
| 4187 |
+
爸
|
| 4188 |
+
爹
|
| 4189 |
+
爺
|
| 4190 |
+
爻
|
| 4191 |
+
爽
|
| 4192 |
+
爾
|
| 4193 |
+
爿
|
| 4194 |
+
牁
|
| 4195 |
+
牂
|
| 4196 |
+
牆
|
| 4197 |
+
片
|
| 4198 |
+
版
|
| 4199 |
+
牌
|
| 4200 |
+
牒
|
| 4201 |
+
牕
|
| 4202 |
+
牖
|
| 4203 |
+
牘
|
| 4204 |
+
牙
|
| 4205 |
+
牛
|
| 4206 |
+
牝
|
| 4207 |
+
牟
|
| 4208 |
+
牠
|
| 4209 |
+
牡
|
| 4210 |
+
牢
|
| 4211 |
+
牧
|
| 4212 |
+
物
|
| 4213 |
+
牯
|
| 4214 |
+
牲
|
| 4215 |
+
特
|
| 4216 |
+
牻
|
| 4217 |
+
牼
|
| 4218 |
+
牽
|
| 4219 |
+
犀
|
| 4220 |
+
犁
|
| 4221 |
+
犂
|
| 4222 |
+
犇
|
| 4223 |
+
犍
|
| 4224 |
+
犎
|
| 4225 |
+
犖
|
| 4226 |
+
犛
|
| 4227 |
+
犢
|
| 4228 |
+
犧
|
| 4229 |
+
犨
|
| 4230 |
+
犬
|
| 4231 |
+
犯
|
| 4232 |
+
犰
|
| 4233 |
+
犴
|
| 4234 |
+
犽
|
| 4235 |
+
狀
|
| 4236 |
+
狂
|
| 4237 |
+
狄
|
| 4238 |
+
狍
|
| 4239 |
+
狎
|
| 4240 |
+
狐
|
| 4241 |
+
狒
|
| 4242 |
+
狓
|
| 4243 |
+
狗
|
| 4244 |
+
狙
|
| 4245 |
+
狛
|
| 4246 |
+
狟
|
| 4247 |
+
狠
|
| 4248 |
+
狡
|
| 4249 |
+
狦
|
| 4250 |
+
狨
|
| 4251 |
+
狩
|
| 4252 |
+
狳
|
| 4253 |
+
狶
|
| 4254 |
+
狷
|
| 4255 |
+
狸
|
| 4256 |
+
狹
|
| 4257 |
+
狻
|
| 4258 |
+
狼
|
| 4259 |
+
猁
|
| 4260 |
+
猄
|
| 4261 |
+
猇
|
| 4262 |
+
猊
|
| 4263 |
+
猗
|
| 4264 |
+
猙
|
| 4265 |
+
猛
|
| 4266 |
+
猜
|
| 4267 |
+
猝
|
| 4268 |
+
猞
|
| 4269 |
+
猢
|
| 4270 |
+
猥
|
| 4271 |
+
猨
|
| 4272 |
+
猩
|
| 4273 |
+
猳
|
| 4274 |
+
猴
|
| 4275 |
+
猶
|
| 4276 |
+
猷
|
| 4277 |
+
猺
|
| 4278 |
+
猻
|
| 4279 |
+
猾
|
| 4280 |
+
猿
|
| 4281 |
+
獁
|
| 4282 |
+
獃
|
| 4283 |
+
獄
|
| 4284 |
+
獅
|
| 4285 |
+
獇
|
| 4286 |
+
獎
|
| 4287 |
+
獏
|
| 4288 |
+
獐
|
| 4289 |
+
獒
|
| 4290 |
+
獠
|
| 4291 |
+
獢
|
| 4292 |
+
獣
|
| 4293 |
+
獨
|
| 4294 |
+
獬
|
| 4295 |
+
獮
|
| 4296 |
+
獯
|
| 4297 |
+
獰
|
| 4298 |
+
獲
|
| 4299 |
+
獴
|
| 4300 |
+
獵
|
| 4301 |
+
獷
|
| 4302 |
+
獸
|
| 4303 |
+
獺
|
| 4304 |
+
獻
|
| 4305 |
+
獼
|
| 4306 |
+
獾
|
| 4307 |
+
玀
|
| 4308 |
+
玄
|
| 4309 |
+
玆
|
| 4310 |
+
率
|
| 4311 |
+
玉
|
| 4312 |
+
王
|
| 4313 |
+
玎
|
| 4314 |
+
玏
|
| 4315 |
+
玓
|
| 4316 |
+
玕
|
| 4317 |
+
玖
|
| 4318 |
+
玗
|
| 4319 |
+
玘
|
| 4320 |
+
玙
|
| 4321 |
+
玟
|
| 4322 |
+
玠
|
| 4323 |
+
玡
|
| 4324 |
+
玢
|
| 4325 |
+
玥
|
| 4326 |
+
玧
|
| 4327 |
+
玨
|
| 4328 |
+
玩
|
| 4329 |
+
玫
|
| 4330 |
+
玭
|
| 4331 |
+
玲
|
| 4332 |
+
玳
|
| 4333 |
+
玶
|
| 4334 |
+
玷
|
| 4335 |
+
玹
|
| 4336 |
+
玻
|
| 4337 |
+
玾
|
| 4338 |
+
珀
|
| 4339 |
+
珂
|
| 4340 |
+
珅
|
| 4341 |
+
珈
|
| 4342 |
+
珉
|
| 4343 |
+
珊
|
| 4344 |
+
珌
|
| 4345 |
+
珍
|
| 4346 |
+
珎
|
| 4347 |
+
珏
|
| 4348 |
+
珖
|
| 4349 |
+
珙
|
| 4350 |
+
珝
|
| 4351 |
+
珞
|
| 4352 |
+
珠
|
| 4353 |
+
珡
|
| 4354 |
+
珣
|
| 4355 |
+
珤
|
| 4356 |
+
珥
|
| 4357 |
+
珦
|
| 4358 |
+
珧
|
| 4359 |
+
珩
|
| 4360 |
+
珪
|
| 4361 |
+
班
|
| 4362 |
+
珮
|
| 4363 |
+
珵
|
| 4364 |
+
珹
|
| 4365 |
+
珺
|
| 4366 |
+
珽
|
| 4367 |
+
現
|
| 4368 |
+
琁
|
| 4369 |
+
球
|
| 4370 |
+
琄
|
| 4371 |
+
琅
|
| 4372 |
+
理
|
| 4373 |
+
琇
|
| 4374 |
+
琉
|
| 4375 |
+
琊
|
| 4376 |
+
琍
|
| 4377 |
+
琎
|
| 4378 |
+
琚
|
| 4379 |
+
琛
|
| 4380 |
+
琡
|
| 4381 |
+
琢
|
| 4382 |
+
琤
|
| 4383 |
+
琥
|
| 4384 |
+
琦
|
| 4385 |
+
琨
|
| 4386 |
+
琪
|
| 4387 |
+
琬
|
| 4388 |
+
琮
|
| 4389 |
+
琯
|
| 4390 |
+
琰
|
| 4391 |
+
琱
|
| 4392 |
+
琳
|
| 4393 |
+
琴
|
| 4394 |
+
琵
|
| 4395 |
+
琶
|
| 4396 |
+
琹
|
| 4397 |
+
琺
|
| 4398 |
+
琿
|
| 4399 |
+
瑀
|
| 4400 |
+
瑁
|
| 4401 |
+
瑂
|
| 4402 |
+
瑄
|
| 4403 |
+
瑅
|
| 4404 |
+
瑆
|
| 4405 |
+
瑈
|
| 4406 |
+
瑊
|
| 4407 |
+
瑋
|
| 4408 |
+
瑑
|
| 4409 |
+
瑒
|
| 4410 |
+
瑕
|
| 4411 |
+
瑗
|
| 4412 |
+
瑙
|
| 4413 |
+
瑚
|
| 4414 |
+
瑛
|
| 4415 |
+
瑜
|
| 4416 |
+
瑝
|
| 4417 |
+
瑞
|
| 4418 |
+
瑟
|
| 4419 |
+
瑠
|
| 4420 |
+
瑢
|
| 4421 |
+
瑣
|
| 4422 |
+
瑤
|
| 4423 |
+
瑥
|
| 4424 |
+
瑧
|
| 4425 |
+
瑨
|
| 4426 |
+
瑩
|
| 4427 |
+
瑪
|
| 4428 |
+
瑭
|
| 4429 |
+
瑯
|
| 4430 |
+
瑰
|
| 4431 |
+
瑱
|
| 4432 |
+
瑳
|
| 4433 |
+
瑴
|
| 4434 |
+
瑺
|
| 4435 |
+
瑾
|
| 4436 |
+
璀
|
| 4437 |
+
璁
|
| 4438 |
+
璃
|
| 4439 |
+
璄
|
| 4440 |
+
璆
|
| 4441 |
+
璇
|
| 4442 |
+
璈
|
| 4443 |
+
璉
|
| 4444 |
+
璋
|
| 4445 |
+
璌
|
| 4446 |
+
璐
|
| 4447 |
+
璕
|
| 4448 |
+
璘
|
| 4449 |
+
璙
|
| 4450 |
+
璚
|
| 4451 |
+
璜
|
| 4452 |
+
璞
|
| 4453 |
+
璟
|
| 4454 |
+
璠
|
| 4455 |
+
璡
|
| 4456 |
+
璣
|
| 4457 |
+
璥
|
| 4458 |
+
璦
|
| 4459 |
+
璧
|
| 4460 |
+
璨
|
| 4461 |
+
璩
|
| 4462 |
+
璪
|
| 4463 |
+
璫
|
| 4464 |
+
璬
|
| 4465 |
+
璮
|
| 4466 |
+
環
|
| 4467 |
+
璱
|
| 4468 |
+
璵
|
| 4469 |
+
璸
|
| 4470 |
+
璹
|
| 4471 |
+
璽
|
| 4472 |
+
璿
|
| 4473 |
+
瓈
|
| 4474 |
+
瓊
|
| 4475 |
+
瓌
|
| 4476 |
+
瓏
|
| 4477 |
+
瓑
|
| 4478 |
+
瓔
|
| 4479 |
+
瓖
|
| 4480 |
+
瓘
|
| 4481 |
+
瓚
|
| 4482 |
+
瓛
|
| 4483 |
+
瓜
|
| 4484 |
+
瓞
|
| 4485 |
+
瓠
|
| 4486 |
+
瓢
|
| 4487 |
+
瓣
|
| 4488 |
+
瓤
|
| 4489 |
+
瓦
|
| 4490 |
+
瓮
|
| 4491 |
+
瓴
|
| 4492 |
+
瓶
|
| 4493 |
+
瓷
|
| 4494 |
+
瓿
|
| 4495 |
+
甂
|
| 4496 |
+
甄
|
| 4497 |
+
甌
|
| 4498 |
+
甍
|
| 4499 |
+
甑
|
| 4500 |
+
甕
|
| 4501 |
+
甘
|
| 4502 |
+
甙
|
| 4503 |
+
甚
|
| 4504 |
+
甜
|
| 4505 |
+
生
|
| 4506 |
+
甡
|
| 4507 |
+
產
|
| 4508 |
+
産
|
| 4509 |
+
甥
|
| 4510 |
+
甦
|
| 4511 |
+
用
|
| 4512 |
+
甩
|
| 4513 |
+
甪
|
| 4514 |
+
甫
|
| 4515 |
+
甬
|
| 4516 |
+
甯
|
| 4517 |
+
田
|
| 4518 |
+
由
|
| 4519 |
+
甲
|
| 4520 |
+
申
|
| 4521 |
+
男
|
| 4522 |
+
甸
|
| 4523 |
+
甹
|
| 4524 |
+
町
|
| 4525 |
+
甾
|
| 4526 |
+
畀
|
| 4527 |
+
畇
|
| 4528 |
+
畈
|
| 4529 |
+
畊
|
| 4530 |
+
畋
|
| 4531 |
+
界
|
| 4532 |
+
畎
|
| 4533 |
+
畏
|
| 4534 |
+
畐
|
| 4535 |
+
畑
|
| 4536 |
+
畔
|
| 4537 |
+
留
|
| 4538 |
+
畜
|
| 4539 |
+
畝
|
| 4540 |
+
畠
|
| 4541 |
+
畢
|
| 4542 |
+
略
|
| 4543 |
+
畦
|
| 4544 |
+
畧
|
| 4545 |
+
番
|
| 4546 |
+
畫
|
| 4547 |
+
畬
|
| 4548 |
+
畯
|
| 4549 |
+
異
|
| 4550 |
+
畲
|
| 4551 |
+
畳
|
| 4552 |
+
畵
|
| 4553 |
+
當
|
| 4554 |
+
畷
|
| 4555 |
+
畸
|
| 4556 |
+
畹
|
| 4557 |
+
畿
|
| 4558 |
+
疃
|
| 4559 |
+
疆
|
| 4560 |
+
疇
|
| 4561 |
+
疊
|
| 4562 |
+
疋
|
| 4563 |
+
疌
|
| 4564 |
+
疍
|
| 4565 |
+
疏
|
| 4566 |
+
疑
|
| 4567 |
+
疒
|
| 4568 |
+
疕
|
| 4569 |
+
疙
|
| 4570 |
+
疚
|
| 4571 |
+
疝
|
| 4572 |
+
疣
|
| 4573 |
+
疤
|
| 4574 |
+
疥
|
| 4575 |
+
疫
|
| 4576 |
+
疲
|
| 4577 |
+
疳
|
| 4578 |
+
疵
|
| 4579 |
+
疸
|
| 4580 |
+
疹
|
| 4581 |
+
疼
|
| 4582 |
+
疽
|
| 4583 |
+
疾
|
| 4584 |
+
痂
|
| 4585 |
+
病
|
| 4586 |
+
症
|
| 4587 |
+
痊
|
| 4588 |
+
痍
|
| 4589 |
+
痔
|
| 4590 |
+
痕
|
| 4591 |
+
痘
|
| 4592 |
+
痙
|
| 4593 |
+
痛
|
| 4594 |
+
痞
|
| 4595 |
+
痟
|
| 4596 |
+
痠
|
| 4597 |
+
痢
|
| 4598 |
+
痣
|
| 4599 |
+
痤
|
| 4600 |
+
痧
|
| 4601 |
+
痩
|
| 4602 |
+
痰
|
| 4603 |
+
痱
|
| 4604 |
+
痲
|
| 4605 |
+
痴
|
| 4606 |
+
痹
|
| 4607 |
+
痺
|
| 4608 |
+
痿
|
| 4609 |
+
瘀
|
| 4610 |
+
瘁
|
| 4611 |
+
瘊
|
| 4612 |
+
瘋
|
| 4613 |
+
瘍
|
| 4614 |
+
瘓
|
| 4615 |
+
瘙
|
| 4616 |
+
瘜
|
| 4617 |
+
瘞
|
| 4618 |
+
瘟
|
| 4619 |
+
瘠
|
| 4620 |
+
瘡
|
| 4621 |
+
瘢
|
| 4622 |
+
瘤
|
| 4623 |
+
瘦
|
| 4624 |
+
瘧
|
| 4625 |
+
瘩
|
| 4626 |
+
瘰
|
| 4627 |
+
瘴
|
| 4628 |
+
瘺
|
| 4629 |
+
癀
|
| 4630 |
+
療
|
| 4631 |
+
癆
|
| 4632 |
+
癇
|
| 4633 |
+
癌
|
| 4634 |
+
癒
|
| 4635 |
+
癖
|
| 4636 |
+
癘
|
| 4637 |
+
癜
|
| 4638 |
+
癟
|
| 4639 |
+
癡
|
| 4640 |
+
癢
|
| 4641 |
+
癤
|
| 4642 |
+
癥
|
| 4643 |
+
癩
|
| 4644 |
+
癬
|
| 4645 |
+
癭
|
| 4646 |
+
癮
|
| 4647 |
+
癯
|
| 4648 |
+
癰
|
| 4649 |
+
癱
|
| 4650 |
+
癲
|
| 4651 |
+
癸
|
| 4652 |
+
発
|
| 4653 |
+
登
|
| 4654 |
+
發
|
| 4655 |
+
白
|
| 4656 |
+
百
|
| 4657 |
+
皂
|
| 4658 |
+
的
|
| 4659 |
+
皆
|
| 4660 |
+
皇
|
| 4661 |
+
皈
|
| 4662 |
+
皋
|
| 4663 |
+
皎
|
| 4664 |
+
皐
|
| 4665 |
+
皓
|
| 4666 |
+
皖
|
| 4667 |
+
皙
|
| 4668 |
+
皚
|
| 4669 |
+
皛
|
| 4670 |
+
皝
|
| 4671 |
+
皞
|
| 4672 |
+
皮
|
| 4673 |
+
皰
|
| 4674 |
+
皴
|
| 4675 |
+
皷
|
| 4676 |
+
皸
|
| 4677 |
+
皺
|
| 4678 |
+
皿
|
| 4679 |
+
盂
|
| 4680 |
+
盃
|
| 4681 |
+
盅
|
| 4682 |
+
盆
|
| 4683 |
+
盈
|
| 4684 |
+
益
|
| 4685 |
+
盋
|
| 4686 |
+
盌
|
| 4687 |
+
盎
|
| 4688 |
+
盒
|
| 4689 |
+
盔
|
| 4690 |
+
盛
|
| 4691 |
+
盜
|
| 4692 |
+
盞
|
| 4693 |
+
盟
|
| 4694 |
+
盡
|
| 4695 |
+
監
|
| 4696 |
+
盤
|
| 4697 |
+
盥
|
| 4698 |
+
盦
|
| 4699 |
+
盧
|
| 4700 |
+
盨
|
| 4701 |
+
盩
|
| 4702 |
+
盪
|
| 4703 |
+
盫
|
| 4704 |
+
目
|
| 4705 |
+
盯
|
| 4706 |
+
盱
|
| 4707 |
+
盲
|
| 4708 |
+
直
|
| 4709 |
+
盷
|
| 4710 |
+
相
|
| 4711 |
+
盹
|
| 4712 |
+
盺
|
| 4713 |
+
盼
|
| 4714 |
+
盾
|
| 4715 |
+
眀
|
| 4716 |
+
省
|
| 4717 |
+
眉
|
| 4718 |
+
看
|
| 4719 |
+
県
|
| 4720 |
+
眙
|
| 4721 |
+
眛
|
| 4722 |
+
眜
|
| 4723 |
+
眞
|
| 4724 |
+
真
|
| 4725 |
+
眠
|
| 4726 |
+
眥
|
| 4727 |
+
眨
|
| 4728 |
+
眩
|
| 4729 |
+
眭
|
| 4730 |
+
眯
|
| 4731 |
+
眵
|
| 4732 |
+
眶
|
| 4733 |
+
眷
|
| 4734 |
+
眸
|
| 4735 |
+
眺
|
| 4736 |
+
眼
|
| 4737 |
+
眾
|
| 4738 |
+
着
|
| 4739 |
+
睇
|
| 4740 |
+
睛
|
| 4741 |
+
睜
|
| 4742 |
+
睞
|
| 4743 |
+
睡
|
| 4744 |
+
睢
|
| 4745 |
+
督
|
| 4746 |
+
睥
|
| 4747 |
+
睦
|
| 4748 |
+
睨
|
| 4749 |
+
睪
|
| 4750 |
+
睫
|
| 4751 |
+
睭
|
| 4752 |
+
睹
|
| 4753 |
+
睺
|
| 4754 |
+
睽
|
| 4755 |
+
睾
|
| 4756 |
+
睿
|
| 4757 |
+
瞄
|
| 4758 |
+
瞅
|
| 4759 |
+
瞋
|
| 4760 |
+
瞌
|
| 4761 |
+
瞎
|
| 4762 |
+
瞑
|
| 4763 |
+
瞓
|
| 4764 |
+
瞞
|
| 4765 |
+
瞢
|
| 4766 |
+
瞥
|
| 4767 |
+
瞧
|
| 4768 |
+
瞪
|
| 4769 |
+
瞫
|
| 4770 |
+
瞬
|
| 4771 |
+
瞭
|
| 4772 |
+
瞰
|
| 4773 |
+
瞳
|
| 4774 |
+
瞻
|
| 4775 |
+
瞼
|
| 4776 |
+
瞽
|
| 4777 |
+
瞿
|
| 4778 |
+
矇
|
| 4779 |
+
矍
|
| 4780 |
+
矗
|
| 4781 |
+
矚
|
| 4782 |
+
矛
|
| 4783 |
+
矜
|
| 4784 |
+
矞
|
| 4785 |
+
矢
|
| 4786 |
+
矣
|
| 4787 |
+
知
|
| 4788 |
+
矧
|
| 4789 |
+
矩
|
| 4790 |
+
短
|
| 4791 |
+
矮
|
| 4792 |
+
矯
|
| 4793 |
+
石
|
| 4794 |
+
矸
|
| 4795 |
+
矽
|
| 4796 |
+
砂
|
| 4797 |
+
砋
|
| 4798 |
+
砌
|
| 4799 |
+
砍
|
| 4800 |
+
砒
|
| 4801 |
+
研
|
| 4802 |
+
砝
|
| 4803 |
+
砢
|
| 4804 |
+
砥
|
| 4805 |
+
砦
|
| 4806 |
+
砧
|
| 4807 |
+
砩
|
| 4808 |
+
砫
|
| 4809 |
+
砭
|
| 4810 |
+
砮
|
| 4811 |
+
砯
|
| 4812 |
+
砰
|
| 4813 |
+
砲
|
| 4814 |
+
砳
|
| 4815 |
+
破
|
| 4816 |
+
砵
|
| 4817 |
+
砷
|
| 4818 |
+
砸
|
| 4819 |
+
砼
|
| 4820 |
+
硂
|
| 4821 |
+
硃
|
| 4822 |
+
硅
|
| 4823 |
+
硇
|
| 4824 |
+
硏
|
| 4825 |
+
硐
|
| 4826 |
+
硒
|
| 4827 |
+
硓
|
| 4828 |
+
硚
|
| 4829 |
+
硜
|
| 4830 |
+
硝
|
| 4831 |
+
硤
|
| 4832 |
+
硨
|
| 4833 |
+
硫
|
| 4834 |
+
硬
|
| 4835 |
+
硭
|
| 4836 |
+
硯
|
| 4837 |
+
硼
|
| 4838 |
+
碁
|
| 4839 |
+
碇
|
| 4840 |
+
碉
|
| 4841 |
+
碌
|
| 4842 |
+
碎
|
| 4843 |
+
碑
|
| 4844 |
+
碓
|
| 4845 |
+
碕
|
| 4846 |
+
碗
|
| 4847 |
+
碘
|
| 4848 |
+
碚
|
| 4849 |
+
碟
|
| 4850 |
+
碡
|
| 4851 |
+
碣
|
| 4852 |
+
碧
|
| 4853 |
+
碩
|
| 4854 |
+
碪
|
| 4855 |
+
碭
|
| 4856 |
+
碰
|
| 4857 |
+
碲
|
| 4858 |
+
碳
|
| 4859 |
+
碴
|
| 4860 |
+
碶
|
| 4861 |
+
碸
|
| 4862 |
+
確
|
| 4863 |
+
碻
|
| 4864 |
+
碼
|
| 4865 |
+
碽
|
| 4866 |
+
碾
|
| 4867 |
+
磁
|
| 4868 |
+
磅
|
| 4869 |
+
磊
|
| 4870 |
+
磋
|
| 4871 |
+
磐
|
| 4872 |
+
磔
|
| 4873 |
+
磕
|
| 4874 |
+
磘
|
| 4875 |
+
磙
|
| 4876 |
+
磚
|
| 4877 |
+
磜
|
| 4878 |
+
磡
|
| 4879 |
+
磨
|
| 4880 |
+
磪
|
| 4881 |
+
磬
|
| 4882 |
+
磯
|
| 4883 |
+
磱
|
| 4884 |
+
磲
|
| 4885 |
+
磵
|
| 4886 |
+
磷
|
| 4887 |
+
磺
|
| 4888 |
+
磻
|
| 4889 |
+
磾
|
| 4890 |
+
礁
|
| 4891 |
+
礄
|
| 4892 |
+
礎
|
| 4893 |
+
礐
|
| 4894 |
+
礑
|
| 4895 |
+
礒
|
| 4896 |
+
礙
|
| 4897 |
+
礠
|
| 4898 |
+
礦
|
| 4899 |
+
礪
|
| 4900 |
+
礫
|
| 4901 |
+
礬
|
| 4902 |
+
礮
|
| 4903 |
+
礱
|
| 4904 |
+
礴
|
| 4905 |
+
示
|
| 4906 |
+
礻
|
| 4907 |
+
礽
|
| 4908 |
+
社
|
| 4909 |
+
祀
|
| 4910 |
+
祁
|
| 4911 |
+
祂
|
| 4912 |
+
祆
|
| 4913 |
+
祇
|
| 4914 |
+
祈
|
| 4915 |
+
祉
|
| 4916 |
+
祋
|
| 4917 |
+
祏
|
| 4918 |
+
祐
|
| 4919 |
+
祓
|
| 4920 |
+
祕
|
| 4921 |
+
祖
|
| 4922 |
+
祗
|
| 4923 |
+
祙
|
| 4924 |
+
祚
|
| 4925 |
+
祛
|
| 4926 |
+
祜
|
| 4927 |
+
祝
|
| 4928 |
+
神
|
| 4929 |
+
祟
|
| 4930 |
+
祠
|
| 4931 |
+
祥
|
| 4932 |
+
祧
|
| 4933 |
+
票
|
| 4934 |
+
祭
|
| 4935 |
+
祹
|
| 4936 |
+
祺
|
| 4937 |
+
祼
|
| 4938 |
+
祿
|
| 4939 |
+
禁
|
| 4940 |
+
禃
|
| 4941 |
+
禇
|
| 4942 |
+
禍
|
| 4943 |
+
禎
|
| 4944 |
+
福
|
| 4945 |
+
禑
|
| 4946 |
+
禓
|
| 4947 |
+
禔
|
| 4948 |
+
禕
|
| 4949 |
+
禘
|
| 4950 |
+
禛
|
| 4951 |
+
禟
|
| 4952 |
+
禠
|
| 4953 |
+
禤
|
| 4954 |
+
禦
|
| 4955 |
+
禧
|
| 4956 |
+
禨
|
| 4957 |
+
禩
|
| 4958 |
+
禪
|
| 4959 |
+
禮
|
| 4960 |
+
禰
|
| 4961 |
+
禱
|
| 4962 |
+
禵
|
| 4963 |
+
禹
|
| 4964 |
+
禺
|
| 4965 |
+
禼
|
| 4966 |
+
禽
|
| 4967 |
+
禾
|
| 4968 |
+
禿
|
| 4969 |
+
秀
|
| 4970 |
+
私
|
| 4971 |
+
秈
|
| 4972 |
+
秉
|
| 4973 |
+
秋
|
| 4974 |
+
科
|
| 4975 |
+
秒
|
| 4976 |
+
秕
|
| 4977 |
+
秘
|
| 4978 |
+
租
|
| 4979 |
+
秠
|
| 4980 |
+
秣
|
| 4981 |
+
秤
|
| 4982 |
+
秦
|
| 4983 |
+
秧
|
| 4984 |
+
秩
|
| 4985 |
+
秭
|
| 4986 |
+
秳
|
| 4987 |
+
秸
|
| 4988 |
+
移
|
| 4989 |
+
稀
|
| 4990 |
+
稅
|
| 4991 |
+
稈
|
| 4992 |
+
稉
|
| 4993 |
+
程
|
| 4994 |
+
稍
|
| 4995 |
+
稑
|
| 4996 |
+
稔
|
| 4997 |
+
稗
|
| 4998 |
+
稘
|
| 4999 |
+
稙
|
| 5000 |
+
稚
|
| 5001 |
+
稜
|
| 5002 |
+
稞
|
| 5003 |
+
稟
|
| 5004 |
+
稠
|
| 5005 |
+
種
|
| 5006 |
+
稱
|
| 5007 |
+
稲
|
| 5008 |
+
稷
|
| 5009 |
+
稹
|
| 5010 |
+
稺
|
| 5011 |
+
稻
|
| 5012 |
+
稼
|
| 5013 |
+
稽
|
| 5014 |
+
稾
|
| 5015 |
+
稿
|
| 5016 |
+
穀
|
| 5017 |
+
穂
|
| 5018 |
+
穆
|
| 5019 |
+
穈
|
| 5020 |
+
穉
|
| 5021 |
+
穌
|
| 5022 |
+
積
|
| 5023 |
+
穎
|
| 5024 |
+
穗
|
| 5025 |
+
穟
|
| 5026 |
+
穠
|
| 5027 |
+
穡
|
| 5028 |
+
穢
|
| 5029 |
+
穣
|
| 5030 |
+
穩
|
| 5031 |
+
穫
|
| 5032 |
+
穰
|
| 5033 |
+
穴
|
| 5034 |
+
穵
|
| 5035 |
+
究
|
| 5036 |
+
穹
|
| 5037 |
+
空
|
| 5038 |
+
穿
|
| 5039 |
+
突
|
| 5040 |
+
窄
|
| 5041 |
+
窅
|
| 5042 |
+
窈
|
| 5043 |
+
窋
|
| 5044 |
+
窒
|
| 5045 |
+
窕
|
| 5046 |
+
窖
|
| 5047 |
+
窗
|
| 5048 |
+
窘
|
| 5049 |
+
窟
|
| 5050 |
+
窠
|
| 5051 |
+
窣
|
| 5052 |
+
窨
|
| 5053 |
+
窩
|
| 5054 |
+
窪
|
| 5055 |
+
窮
|
| 5056 |
+
窯
|
| 5057 |
+
窰
|
| 5058 |
+
窶
|
| 5059 |
+
窺
|
| 5060 |
+
窿
|
| 5061 |
+
竄
|
| 5062 |
+
竅
|
| 5063 |
+
竇
|
| 5064 |
+
竈
|
| 5065 |
+
竊
|
| 5066 |
+
立
|
| 5067 |
+
竑
|
| 5068 |
+
站
|
| 5069 |
+
竜
|
| 5070 |
+
竟
|
| 5071 |
+
章
|
| 5072 |
+
竣
|
| 5073 |
+
童
|
| 5074 |
+
竦
|
| 5075 |
+
竩
|
| 5076 |
+
竭
|
| 5077 |
+
端
|
| 5078 |
+
競
|
| 5079 |
+
竹
|
| 5080 |
+
竺
|
| 5081 |
+
竻
|
| 5082 |
+
竿
|
| 5083 |
+
笄
|
| 5084 |
+
笆
|
| 5085 |
+
笈
|
| 5086 |
+
笏
|
| 5087 |
+
笑
|
| 5088 |
+
笘
|
| 5089 |
+
笙
|
| 5090 |
+
笛
|
| 5091 |
+
笞
|
| 5092 |
+
笠
|
| 5093 |
+
笥
|
| 5094 |
+
符
|
| 5095 |
+
笨
|
| 5096 |
+
笩
|
| 5097 |
+
笪
|
| 5098 |
+
第
|
| 5099 |
+
笭
|
| 5100 |
+
笮
|
| 5101 |
+
笯
|
| 5102 |
+
笱
|
| 5103 |
+
笳
|
| 5104 |
+
笹
|
| 5105 |
+
筅
|
| 5106 |
+
筆
|
| 5107 |
+
等
|
| 5108 |
+
筊
|
| 5109 |
+
筋
|
| 5110 |
+
筌
|
| 5111 |
+
筍
|
| 5112 |
+
筏
|
| 5113 |
+
筐
|
| 5114 |
+
筒
|
| 5115 |
+
答
|
| 5116 |
+
策
|
| 5117 |
+
筘
|
| 5118 |
+
筠
|
| 5119 |
+
筥
|
| 5120 |
+
筦
|
| 5121 |
+
筧
|
| 5122 |
+
筬
|
| 5123 |
+
筭
|
| 5124 |
+
筱
|
| 5125 |
+
筲
|
| 5126 |
+
筳
|
| 5127 |
+
筵
|
| 5128 |
+
筶
|
| 5129 |
+
筷
|
| 5130 |
+
筻
|
| 5131 |
+
箆
|
| 5132 |
+
箇
|
| 5133 |
+
箋
|
| 5134 |
+
箍
|
| 5135 |
+
箏
|
| 5136 |
+
箐
|
| 5137 |
+
箑
|
| 5138 |
+
箒
|
| 5139 |
+
箔
|
| 5140 |
+
箕
|
| 5141 |
+
算
|
| 5142 |
+
箜
|
| 5143 |
+
管
|
| 5144 |
+
箬
|
| 5145 |
+
箭
|
| 5146 |
+
箱
|
| 5147 |
+
箴
|
| 5148 |
+
箸
|
| 5149 |
+
節
|
| 5150 |
+
篁
|
| 5151 |
+
範
|
| 5152 |
+
篆
|
| 5153 |
+
篇
|
| 5154 |
+
築
|
| 5155 |
+
篊
|
| 5156 |
+
篋
|
| 5157 |
+
篌
|
| 5158 |
+
篔
|
| 5159 |
+
篙
|
| 5160 |
+
篝
|
| 5161 |
+
篠
|
| 5162 |
+
篡
|
| 5163 |
+
篤
|
| 5164 |
+
篥
|
| 5165 |
+
篦
|
| 5166 |
+
篩
|
| 5167 |
+
篪
|
| 5168 |
+
篭
|
| 5169 |
+
篯
|
| 5170 |
+
篳
|
| 5171 |
+
篷
|
| 5172 |
+
簀
|
| 5173 |
+
簃
|
| 5174 |
+
簇
|
| 5175 |
+
簉
|
| 5176 |
+
簋
|
| 5177 |
+
簍
|
| 5178 |
+
簑
|
| 5179 |
+
簕
|
| 5180 |
+
簗
|
| 5181 |
+
簞
|
| 5182 |
+
簠
|
| 5183 |
+
簡
|
| 5184 |
+
簧
|
| 5185 |
+
簪
|
| 5186 |
+
簫
|
| 5187 |
+
簷
|
| 5188 |
+
簸
|
| 5189 |
+
簹
|
| 5190 |
+
簺
|
| 5191 |
+
簽
|
| 5192 |
+
簾
|
| 5193 |
+
簿
|
| 5194 |
+
籀
|
| 5195 |
+
籃
|
| 5196 |
+
籌
|
| 5197 |
+
籍
|
| 5198 |
+
籐
|
| 5199 |
+
籙
|
| 5200 |
+
籛
|
| 5201 |
+
籜
|
| 5202 |
+
籝
|
| 5203 |
+
籟
|
| 5204 |
+
籠
|
| 5205 |
+
籣
|
| 5206 |
+
籤
|
| 5207 |
+
籥
|
| 5208 |
+
籪
|
| 5209 |
+
籬
|
| 5210 |
+
籮
|
| 5211 |
+
籲
|
| 5212 |
+
米
|
| 5213 |
+
籽
|
| 5214 |
+
籾
|
| 5215 |
+
粄
|
| 5216 |
+
粉
|
| 5217 |
+
粍
|
| 5218 |
+
粑
|
| 5219 |
+
粒
|
| 5220 |
+
粕
|
| 5221 |
+
粗
|
| 5222 |
+
粘
|
| 5223 |
+
粟
|
| 5224 |
+
粢
|
| 5225 |
+
粥
|
| 5226 |
+
粦
|
| 5227 |
+
粧
|
| 5228 |
+
粩
|
| 5229 |
+
粱
|
| 5230 |
+
粲
|
| 5231 |
+
粳
|
| 5232 |
+
粵
|
| 5233 |
+
粹
|
| 5234 |
+
粼
|
| 5235 |
+
粽
|
| 5236 |
+
精
|
| 5237 |
+
粿
|
| 5238 |
+
糀
|
| 5239 |
+
糅
|
| 5240 |
+
糊
|
| 5241 |
+
糌
|
| 5242 |
+
糍
|
| 5243 |
+
糎
|
| 5244 |
+
糕
|
| 5245 |
+
糖
|
| 5246 |
+
糙
|
| 5247 |
+
糜
|
| 5248 |
+
糝
|
| 5249 |
+
糞
|
| 5250 |
+
糟
|
| 5251 |
+
糠
|
| 5252 |
+
糢
|
| 5253 |
+
糧
|
| 5254 |
+
糬
|
| 5255 |
+
糯
|
| 5256 |
+
糰
|
| 5257 |
+
糴
|
| 5258 |
+
糶
|
| 5259 |
+
糸
|
| 5260 |
+
糹
|
| 5261 |
+
糺
|
| 5262 |
+
系
|
| 5263 |
+
糾
|
| 5264 |
+
紀
|
| 5265 |
+
紂
|
| 5266 |
+
約
|
| 5267 |
+
紅
|
| 5268 |
+
紆
|
| 5269 |
+
紇
|
| 5270 |
+
紈
|
| 5271 |
+
紉
|
| 5272 |
+
紊
|
| 5273 |
+
紋
|
| 5274 |
+
納
|
| 5275 |
+
紐
|
| 5276 |
+
紑
|
| 5277 |
+
紓
|
| 5278 |
+
純
|
| 5279 |
+
紕
|
| 5280 |
+
紗
|
| 5281 |
+
紘
|
| 5282 |
+
紙
|
| 5283 |
+
級
|
| 5284 |
+
紛
|
| 5285 |
+
紜
|
| 5286 |
+
紝
|
| 5287 |
+
紞
|
| 5288 |
+
素
|
| 5289 |
+
紡
|
| 5290 |
+
索
|
| 5291 |
+
紫
|
| 5292 |
+
紮
|
| 5293 |
+
累
|
| 5294 |
+
細
|
| 5295 |
+
紱
|
| 5296 |
+
紲
|
| 5297 |
+
紳
|
| 5298 |
+
紵
|
| 5299 |
+
紹
|
| 5300 |
+
紺
|
| 5301 |
+
紿
|
| 5302 |
+
終
|
| 5303 |
+
絃
|
| 5304 |
+
組
|
| 5305 |
+
絆
|
| 5306 |
+
経
|
| 5307 |
+
絎
|
| 5308 |
+
結
|
| 5309 |
+
絕
|
| 5310 |
+
絛
|
| 5311 |
+
絜
|
| 5312 |
+
絞
|
| 5313 |
+
絡
|
| 5314 |
+
絢
|
| 5315 |
+
給
|
| 5316 |
+
絨
|
| 5317 |
+
絪
|
| 5318 |
+
絮
|
| 5319 |
+
統
|
| 5320 |
+
絲
|
| 5321 |
+
絳
|
| 5322 |
+
絵
|
| 5323 |
+
絶
|
| 5324 |
+
絹
|
| 5325 |
+
絺
|
| 5326 |
+
綁
|
| 5327 |
+
綃
|
| 5328 |
+
綈
|
| 5329 |
+
綉
|
| 5330 |
+
綎
|
| 5331 |
+
綏
|
| 5332 |
+
經
|
| 5333 |
+
綖
|
| 5334 |
+
継
|
| 5335 |
+
続
|
| 5336 |
+
綜
|
| 5337 |
+
綝
|
| 5338 |
+
綞
|
| 5339 |
+
綠
|
| 5340 |
+
綢
|
| 5341 |
+
綣
|
| 5342 |
+
綦
|
| 5343 |
+
綧
|
| 5344 |
+
綫
|
| 5345 |
+
綬
|
| 5346 |
+
維
|
| 5347 |
+
綮
|
| 5348 |
+
綰
|
| 5349 |
+
綱
|
| 5350 |
+
網
|
| 5351 |
+
綳
|
| 5352 |
+
綴
|
| 5353 |
+
綸
|
| 5354 |
+
綺
|
| 5355 |
+
綻
|
| 5356 |
+
綽
|
| 5357 |
+
綾
|
| 5358 |
+
綿
|
| 5359 |
+
緁
|
| 5360 |
+
緃
|
| 5361 |
+
緄
|
| 5362 |
+
緈
|
| 5363 |
+
緊
|
| 5364 |
+
緋
|
| 5365 |
+
総
|
| 5366 |
+
緑
|
| 5367 |
+
緒
|
| 5368 |
+
緖
|
| 5369 |
+
緘
|
| 5370 |
+
線
|
| 5371 |
+
緜
|
| 5372 |
+
緝
|
| 5373 |
+
緞
|
| 5374 |
+
締
|
| 5375 |
+
緡
|
| 5376 |
+
緣
|
| 5377 |
+
緤
|
| 5378 |
+
編
|
| 5379 |
+
緩
|
| 5380 |
+
緬
|
| 5381 |
+
緯
|
| 5382 |
+
緱
|
| 5383 |
+
緲
|
| 5384 |
+
練
|
| 5385 |
+
緹
|
| 5386 |
+
緻
|
| 5387 |
+
縂
|
| 5388 |
+
縄
|
| 5389 |
+
縈
|
| 5390 |
+
縉
|
| 5391 |
+
縊
|
| 5392 |
+
縕
|
| 5393 |
+
縛
|
| 5394 |
+
縝
|
| 5395 |
+
縞
|
| 5396 |
+
縠
|
| 5397 |
+
縡
|
| 5398 |
+
縣
|
| 5399 |
+
縤
|
| 5400 |
+
縫
|
| 5401 |
+
縮
|
| 5402 |
+
縯
|
| 5403 |
+
縱
|
| 5404 |
+
縴
|
| 5405 |
+
縵
|
| 5406 |
+
縷
|
| 5407 |
+
縹
|
| 5408 |
+
縻
|
| 5409 |
+
總
|
| 5410 |
+
績
|
| 5411 |
+
繁
|
| 5412 |
+
繃
|
| 5413 |
+
繆
|
| 5414 |
+
繇
|
| 5415 |
+
繒
|
| 5416 |
+
織
|
| 5417 |
+
繕
|
| 5418 |
+
繖
|
| 5419 |
+
繙
|
| 5420 |
+
繚
|
| 5421 |
+
繞
|
| 5422 |
+
繡
|
| 5423 |
+
繩
|
| 5424 |
+
繪
|
| 5425 |
+
繫
|
| 5426 |
+
繭
|
| 5427 |
+
繰
|
| 5428 |
+
繳
|
| 5429 |
+
繹
|
| 5430 |
+
繻
|
| 5431 |
+
繼
|
| 5432 |
+
繽
|
| 5433 |
+
繾
|
| 5434 |
+
纁
|
| 5435 |
+
纂
|
| 5436 |
+
纈
|
| 5437 |
+
續
|
| 5438 |
+
纍
|
| 5439 |
+
纏
|
| 5440 |
+
纓
|
| 5441 |
+
纔
|
| 5442 |
+
纕
|
| 5443 |
+
纖
|
| 5444 |
+
纘
|
| 5445 |
+
纛
|
| 5446 |
+
纜
|
| 5447 |
+
缐
|
| 5448 |
+
缶
|
| 5449 |
+
缸
|
| 5450 |
+
缺
|
| 5451 |
+
缽
|
| 5452 |
+
罃
|
| 5453 |
+
罄
|
| 5454 |
+
罅
|
| 5455 |
+
罈
|
| 5456 |
+
罉
|
| 5457 |
+
罌
|
| 5458 |
+
罍
|
| 5459 |
+
罐
|
| 5460 |
+
罔
|
| 5461 |
+
罕
|
| 5462 |
+
罘
|
| 5463 |
+
罟
|
| 5464 |
+
罡
|
| 5465 |
+
罨
|
| 5466 |
+
罩
|
| 5467 |
+
罪
|
| 5468 |
+
置
|
| 5469 |
+
罰
|
| 5470 |
+
罱
|
| 5471 |
+
署
|
| 5472 |
+
罳
|
| 5473 |
+
罵
|
| 5474 |
+
罶
|
| 5475 |
+
罷
|
| 5476 |
+
罹
|
| 5477 |
+
罽
|
| 5478 |
+
羂
|
| 5479 |
+
羅
|
| 5480 |
+
羆
|
| 5481 |
+
羈
|
| 5482 |
+
羊
|
| 5483 |
+
羋
|
| 5484 |
+
羌
|
| 5485 |
+
美
|
| 5486 |
+
羔
|
| 5487 |
+
羕
|
| 5488 |
+
羗
|
| 5489 |
+
羙
|
| 5490 |
+
羚
|
| 5491 |
+
羞
|
| 5492 |
+
羡
|
| 5493 |
+
羣
|
| 5494 |
+
群
|
| 5495 |
+
羥
|
| 5496 |
+
羧
|
| 5497 |
+
羨
|
| 5498 |
+
義
|
| 5499 |
+
羯
|
| 5500 |
+
羰
|
| 5501 |
+
羱
|
| 5502 |
+
羲
|
| 5503 |
+
羸
|
| 5504 |
+
羹
|
| 5505 |
+
羽
|
| 5506 |
+
羿
|
| 5507 |
+
翀
|
| 5508 |
+
翁
|
| 5509 |
+
翂
|
| 5510 |
+
翃
|
| 5511 |
+
翅
|
| 5512 |
+
翊
|
| 5513 |
+
翌
|
| 5514 |
+
翎
|
| 5515 |
+
翏
|
| 5516 |
+
習
|
| 5517 |
+
翔
|
| 5518 |
+
翕
|
| 5519 |
+
翙
|
| 5520 |
+
翜
|
| 5521 |
+
翟
|
| 5522 |
+
翠
|
| 5523 |
+
翡
|
| 5524 |
+
翥
|
| 5525 |
+
翦
|
| 5526 |
+
翩
|
| 5527 |
+
翬
|
| 5528 |
+
翮
|
| 5529 |
+
翰
|
| 5530 |
+
翱
|
| 5531 |
+
翳
|
| 5532 |
+
翹
|
| 5533 |
+
翻
|
| 5534 |
+
翼
|
| 5535 |
+
耀
|
| 5536 |
+
老
|
| 5537 |
+
考
|
| 5538 |
+
耄
|
| 5539 |
+
者
|
| 5540 |
+
耆
|
| 5541 |
+
而
|
| 5542 |
+
耍
|
| 5543 |
+
耎
|
| 5544 |
+
耐
|
| 5545 |
+
耑
|
| 5546 |
+
耒
|
| 5547 |
+
耔
|
| 5548 |
+
耕
|
| 5549 |
+
耗
|
| 5550 |
+
耘
|
| 5551 |
+
耙
|
| 5552 |
+
耜
|
| 5553 |
+
耦
|
| 5554 |
+
耨
|
| 5555 |
+
耬
|
| 5556 |
+
耳
|
| 5557 |
+
耵
|
| 5558 |
+
耶
|
| 5559 |
+
耷
|
| 5560 |
+
耽
|
| 5561 |
+
耿
|
| 5562 |
+
聃
|
| 5563 |
+
聆
|
| 5564 |
+
聊
|
| 5565 |
+
聒
|
| 5566 |
+
聖
|
| 5567 |
+
聘
|
| 5568 |
+
聚
|
| 5569 |
+
聞
|
| 5570 |
+
聟
|
| 5571 |
+
聨
|
| 5572 |
+
聯
|
| 5573 |
+
聰
|
| 5574 |
+
聱
|
| 5575 |
+
聲
|
| 5576 |
+
聳
|
| 5577 |
+
聴
|
| 5578 |
+
聶
|
| 5579 |
+
職
|
| 5580 |
+
聽
|
| 5581 |
+
聾
|
| 5582 |
+
聿
|
| 5583 |
+
肄
|
| 5584 |
+
肅
|
| 5585 |
+
肆
|
| 5586 |
+
肇
|
| 5587 |
+
肉
|
| 5588 |
+
肋
|
| 5589 |
+
肌
|
| 5590 |
+
肏
|
| 5591 |
+
肖
|
| 5592 |
+
肘
|
| 5593 |
+
肚
|
| 5594 |
+
肛
|
| 5595 |
+
肜
|
| 5596 |
+
肝
|
| 5597 |
+
肟
|
| 5598 |
+
股
|
| 5599 |
+
肢
|
| 5600 |
+
肥
|
| 5601 |
+
肩
|
| 5602 |
+
肪
|
| 5603 |
+
肫
|
| 5604 |
+
肯
|
| 5605 |
+
肱
|
| 5606 |
+
育
|
| 5607 |
+
肸
|
| 5608 |
+
肹
|
| 5609 |
+
肺
|
| 5610 |
+
肼
|
| 5611 |
+
肽
|
| 5612 |
+
胂
|
| 5613 |
+
胃
|
| 5614 |
+
胄
|
| 5615 |
+
胅
|
| 5616 |
+
胇
|
| 5617 |
+
胊
|
| 5618 |
+
背
|
| 5619 |
+
胍
|
| 5620 |
+
胎
|
| 5621 |
+
胖
|
| 5622 |
+
胗
|
| 5623 |
+
胙
|
| 5624 |
+
胚
|
| 5625 |
+
胛
|
| 5626 |
+
胝
|
| 5627 |
+
胞
|
| 5628 |
+
胡
|
| 5629 |
+
胤
|
| 5630 |
+
胥
|
| 5631 |
+
胬
|
| 5632 |
+
胭
|
| 5633 |
+
胰
|
| 5634 |
+
胱
|
| 5635 |
+
胳
|
| 5636 |
+
胴
|
| 5637 |
+
胸
|
| 5638 |
+
胺
|
| 5639 |
+
胼
|
| 5640 |
+
能
|
| 5641 |
+
脂
|
| 5642 |
+
脅
|
| 5643 |
+
脆
|
| 5644 |
+
脇
|
| 5645 |
+
脈
|
| 5646 |
+
脊
|
| 5647 |
+
脒
|
| 5648 |
+
脖
|
| 5649 |
+
脘
|
| 5650 |
+
脛
|
| 5651 |
+
脣
|
| 5652 |
+
脩
|
| 5653 |
+
脫
|
| 5654 |
+
脬
|
| 5655 |
+
脭
|
| 5656 |
+
脯
|
| 5657 |
+
脲
|
| 5658 |
+
脳
|
| 5659 |
+
脷
|
| 5660 |
+
脹
|
| 5661 |
+
脾
|
| 5662 |
+
腆
|
| 5663 |
+
腈
|
| 5664 |
+
腊
|
| 5665 |
+
腋
|
| 5666 |
+
腌
|
| 5667 |
+
腎
|
| 5668 |
+
腐
|
| 5669 |
+
腑
|
| 5670 |
+
腓
|
| 5671 |
+
腔
|
| 5672 |
+
腕
|
| 5673 |
+
腥
|
| 5674 |
+
腦
|
| 5675 |
+
腧
|
| 5676 |
+
腩
|
| 5677 |
+
腫
|
| 5678 |
+
腮
|
| 5679 |
+
腰
|
| 5680 |
+
腱
|
| 5681 |
+
腳
|
| 5682 |
+
腴
|
| 5683 |
+
腸
|
| 5684 |
+
腹
|
| 5685 |
+
腺
|
| 5686 |
+
腿
|
| 5687 |
+
膀
|
| 5688 |
+
膂
|
| 5689 |
+
膈
|
| 5690 |
+
膊
|
| 5691 |
+
膏
|
| 5692 |
+
膚
|
| 5693 |
+
膛
|
| 5694 |
+
膜
|
| 5695 |
+
膝
|
| 5696 |
+
膠
|
| 5697 |
+
膣
|
| 5698 |
+
膥
|
| 5699 |
+
膦
|
| 5700 |
+
膨
|
| 5701 |
+
膩
|
| 5702 |
+
膮
|
| 5703 |
+
膳
|
| 5704 |
+
膺
|
| 5705 |
+
膽
|
| 5706 |
+
膾
|
| 5707 |
+
膿
|
| 5708 |
+
臀
|
| 5709 |
+
臂
|
| 5710 |
+
臃
|
| 5711 |
+
臆
|
| 5712 |
+
臉
|
| 5713 |
+
臊
|
| 5714 |
+
臍
|
| 5715 |
+
臏
|
| 5716 |
+
臘
|
| 5717 |
+
臚
|
| 5718 |
+
臞
|
| 5719 |
+
臟
|
| 5720 |
+
臠
|
| 5721 |
+
臣
|
| 5722 |
+
臧
|
| 5723 |
+
臨
|
| 5724 |
+
自
|
| 5725 |
+
臭
|
| 5726 |
+
臯
|
| 5727 |
+
至
|
| 5728 |
+
致
|
| 5729 |
+
臺
|
| 5730 |
+
臻
|
| 5731 |
+
臼
|
| 5732 |
+
臾
|
| 5733 |
+
舂
|
| 5734 |
+
舅
|
| 5735 |
+
與
|
| 5736 |
+
興
|
| 5737 |
+
舉
|
| 5738 |
+
舊
|
| 5739 |
+
舌
|
| 5740 |
+
舍
|
| 5741 |
+
舎
|
| 5742 |
+
舒
|
| 5743 |
+
舔
|
| 5744 |
+
舖
|
| 5745 |
+
舘
|
| 5746 |
+
舛
|
| 5747 |
+
舜
|
| 5748 |
+
舞
|
| 5749 |
+
舟
|
| 5750 |
+
舢
|
| 5751 |
+
舥
|
| 5752 |
+
舨
|
| 5753 |
+
舩
|
| 5754 |
+
航
|
| 5755 |
+
舫
|
| 5756 |
+
般
|
| 5757 |
+
舲
|
| 5758 |
+
舵
|
| 5759 |
+
舶
|
| 5760 |
+
舷
|
| 5761 |
+
舸
|
| 5762 |
+
船
|
| 5763 |
+
舺
|
| 5764 |
+
艅
|
| 5765 |
+
艇
|
| 5766 |
+
艉
|
| 5767 |
+
艋
|
| 5768 |
+
艎
|
| 5769 |
+
艏
|
| 5770 |
+
艔
|
| 5771 |
+
艘
|
| 5772 |
+
艙
|
| 5773 |
+
艚
|
| 5774 |
+
艦
|
| 5775 |
+
艮
|
| 5776 |
+
良
|
| 5777 |
+
艱
|
| 5778 |
+
色
|
| 5779 |
+
艶
|
| 5780 |
+
艷
|
| 5781 |
+
艸
|
| 5782 |
+
艽
|
| 5783 |
+
艾
|
| 5784 |
+
艿
|
| 5785 |
+
芃
|
| 5786 |
+
芊
|
| 5787 |
+
芋
|
| 5788 |
+
芍
|
| 5789 |
+
芎
|
| 5790 |
+
芑
|
| 5791 |
+
芒
|
| 5792 |
+
芘
|
| 5793 |
+
芙
|
| 5794 |
+
芛
|
| 5795 |
+
芝
|
| 5796 |
+
芡
|
| 5797 |
+
芥
|
| 5798 |
+
芨
|
| 5799 |
+
芩
|
| 5800 |
+
芪
|
| 5801 |
+
芫
|
| 5802 |
+
芬
|
| 5803 |
+
芭
|
| 5804 |
+
芮
|
| 5805 |
+
芯
|
| 5806 |
+
花
|
| 5807 |
+
芳
|
| 5808 |
+
芴
|
| 5809 |
+
芷
|
| 5810 |
+
芸
|
| 5811 |
+
芹
|
| 5812 |
+
芻
|
| 5813 |
+
芽
|
| 5814 |
+
芾
|
| 5815 |
+
苄
|
| 5816 |
+
苅
|
| 5817 |
+
苑
|
| 5818 |
+
苒
|
| 5819 |
+
苓
|
| 5820 |
+
苔
|
| 5821 |
+
苕
|
| 5822 |
+
苗
|
| 5823 |
+
苛
|
| 5824 |
+
苜
|
| 5825 |
+
苝
|
| 5826 |
+
苞
|
| 5827 |
+
苟
|
| 5828 |
+
苡
|
| 5829 |
+
苣
|
| 5830 |
+
苤
|
| 5831 |
+
若
|
| 5832 |
+
苦
|
| 5833 |
+
苧
|
| 5834 |
+
苪
|
| 5835 |
+
苫
|
| 5836 |
+
苯
|
| 5837 |
+
英
|
| 5838 |
+
苳
|
| 5839 |
+
苴
|
| 5840 |
+
苷
|
| 5841 |
+
苺
|
| 5842 |
+
苻
|
| 5843 |
+
苼
|
| 5844 |
+
苾
|
| 5845 |
+
茀
|
| 5846 |
+
茁
|
| 5847 |
+
茂
|
| 5848 |
+
范
|
| 5849 |
+
茄
|
| 5850 |
+
茅
|
| 5851 |
+
茆
|
| 5852 |
+
茇
|
| 5853 |
+
茈
|
| 5854 |
+
茉
|
| 5855 |
+
茌
|
| 5856 |
+
茗
|
| 5857 |
+
茘
|
| 5858 |
+
茚
|
| 5859 |
+
茛
|
| 5860 |
+
茜
|
| 5861 |
+
茝
|
| 5862 |
+
茨
|
| 5863 |
+
茫
|
| 5864 |
+
茬
|
| 5865 |
+
茭
|
| 5866 |
+
茮
|
| 5867 |
+
茯
|
| 5868 |
+
茱
|
| 5869 |
+
茲
|
| 5870 |
+
茴
|
| 5871 |
+
茵
|
| 5872 |
+
茶
|
| 5873 |
+
茷
|
| 5874 |
+
茸
|
| 5875 |
+
茹
|
| 5876 |
+
茺
|
| 5877 |
+
茼
|
| 5878 |
+
荀
|
| 5879 |
+
荃
|
| 5880 |
+
荅
|
| 5881 |
+
荇
|
| 5882 |
+
草
|
| 5883 |
+
荊
|
| 5884 |
+
荎
|
| 5885 |
+
荏
|
| 5886 |
+
荒
|
| 5887 |
+
荔
|
| 5888 |
+
荖
|
| 5889 |
+
荘
|
| 5890 |
+
荳
|
| 5891 |
+
荷
|
| 5892 |
+
荸
|
| 5893 |
+
荻
|
| 5894 |
+
荼
|
| 5895 |
+
荽
|
| 5896 |
+
莆
|
| 5897 |
+
莉
|
| 5898 |
+
莊
|
| 5899 |
+
莎
|
| 5900 |
+
莒
|
| 5901 |
+
莓
|
| 5902 |
+
莕
|
| 5903 |
+
莖
|
| 5904 |
+
莘
|
| 5905 |
+
莙
|
| 5906 |
+
莛
|
| 5907 |
+
莜
|
| 5908 |
+
莞
|
| 5909 |
+
莠
|
| 5910 |
+
莢
|
| 5911 |
+
莧
|
| 5912 |
+
莨
|
| 5913 |
+
莩
|
| 5914 |
+
莪
|
| 5915 |
+
莫
|
| 5916 |
+
莽
|
| 5917 |
+
莿
|
| 5918 |
+
菀
|
| 5919 |
+
菁
|
| 5920 |
+
菅
|
| 5921 |
+
菇
|
| 5922 |
+
菈
|
| 5923 |
+
菉
|
| 5924 |
+
菊
|
| 5925 |
+
菌
|
| 5926 |
+
菍
|
| 5927 |
+
菏
|
| 5928 |
+
菑
|
| 5929 |
+
菓
|
| 5930 |
+
菔
|
| 5931 |
+
菖
|
| 5932 |
+
菘
|
| 5933 |
+
菜
|
| 5934 |
+
菝
|
| 5935 |
+
菟
|
| 5936 |
+
菠
|
| 5937 |
+
菡
|
| 5938 |
+
菥
|
| 5939 |
+
菩
|
| 5940 |
+
菪
|
| 5941 |
+
菫
|
| 5942 |
+
華
|
| 5943 |
+
菰
|
| 5944 |
+
菱
|
| 5945 |
+
菲
|
| 5946 |
+
菴
|
| 5947 |
+
菶
|
| 5948 |
+
菸
|
| 5949 |
+
菹
|
| 5950 |
+
菺
|
| 5951 |
+
菼
|
| 5952 |
+
菽
|
| 5953 |
+
菾
|
| 5954 |
+
萁
|
| 5955 |
+
萃
|
| 5956 |
+
萄
|
| 5957 |
+
萇
|
| 5958 |
+
萊
|
| 5959 |
+
萌
|
| 5960 |
+
萍
|
| 5961 |
+
萎
|
| 5962 |
+
萐
|
| 5963 |
+
萘
|
| 5964 |
+
萜
|
| 5965 |
+
萠
|
| 5966 |
+
萡
|
| 5967 |
+
萣
|
| 5968 |
+
萩
|
| 5969 |
+
萬
|
| 5970 |
+
萭
|
| 5971 |
+
萱
|
| 5972 |
+
萵
|
| 5973 |
+
萸
|
| 5974 |
+
萹
|
| 5975 |
+
萼
|
| 5976 |
+
落
|
| 5977 |
+
葃
|
| 5978 |
+
葆
|
| 5979 |
+
葉
|
| 5980 |
+
葊
|
| 5981 |
+
葎
|
| 5982 |
+
葑
|
| 5983 |
+
葒
|
| 5984 |
+
著
|
| 5985 |
+
葙
|
| 5986 |
+
葚
|
| 5987 |
+
葛
|
| 5988 |
+
葜
|
| 5989 |
+
葝
|
| 5990 |
+
葡
|
| 5991 |
+
董
|
| 5992 |
+
葦
|
| 5993 |
+
葩
|
| 5994 |
+
葫
|
| 5995 |
+
葬
|
| 5996 |
+
葭
|
| 5997 |
+
葯
|
| 5998 |
+
葰
|
| 5999 |
+
葳
|
| 6000 |
+
葵
|
| 6001 |
+
葶
|
| 6002 |
+
葷
|
| 6003 |
+
葺
|
| 6004 |
+
蒂
|
| 6005 |
+
蒄
|
| 6006 |
+
蒍
|
| 6007 |
+
蒎
|
| 6008 |
+
蒐
|
| 6009 |
+
蒓
|
| 6010 |
+
蒔
|
| 6011 |
+
蒗
|
| 6012 |
+
蒙
|
| 6013 |
+
蒜
|
| 6014 |
+
蒞
|
| 6015 |
+
蒟
|
| 6016 |
+
蒡
|
| 6017 |
+
蒢
|
| 6018 |
+
蒤
|
| 6019 |
+
蒧
|
| 6020 |
+
蒨
|
| 6021 |
+
蒭
|
| 6022 |
+
蒯
|
| 6023 |
+
蒲
|
| 6024 |
+
蒴
|
| 6025 |
+
蒸
|
| 6026 |
+
蒹
|
| 6027 |
+
蒺
|
| 6028 |
+
蒻
|
| 6029 |
+
蒼
|
| 6030 |
+
蒽
|
| 6031 |
+
蒾
|
| 6032 |
+
蒿
|
| 6033 |
+
蓀
|
| 6034 |
+
蓁
|
| 6035 |
+
蓂
|
| 6036 |
+
蓄
|
| 6037 |
+
蓆
|
| 6038 |
+
蓉
|
| 6039 |
+
蓋
|
| 6040 |
+
蓍
|
| 6041 |
+
蓑
|
| 6042 |
+
蓓
|
| 6043 |
+
蓖
|
| 6044 |
+
蓘
|
| 6045 |
+
蓚
|
| 6046 |
+
蓧
|
| 6047 |
+
蓨
|
| 6048 |
+
蓪
|
| 6049 |
+
蓬
|
| 6050 |
+
蓭
|
| 6051 |
+
蓮
|
| 6052 |
+
蓯
|
| 6053 |
+
蓳
|
| 6054 |
+
蓼
|
| 6055 |
+
蓽
|
| 6056 |
+
蓿
|
| 6057 |
+
蔆
|
| 6058 |
+
蔎
|
| 6059 |
+
蔑
|
| 6060 |
+
蔓
|
| 6061 |
+
蔔
|
| 6062 |
+
蔕
|
| 6063 |
+
蔗
|
| 6064 |
+
蔘
|
| 6065 |
+
蔚
|
| 6066 |
+
蔝
|
| 6067 |
+
蔞
|
| 6068 |
+
蔡
|
| 6069 |
+
蔣
|
| 6070 |
+
蔥
|
| 6071 |
+
蔦
|
| 6072 |
+
蔬
|
| 6073 |
+
蔭
|
| 6074 |
+
蔴
|
| 6075 |
+
蔵
|
| 6076 |
+
蔻
|
| 6077 |
+
蔽
|
| 6078 |
+
蕁
|
| 6079 |
+
蕃
|
| 6080 |
+
蕅
|
| 6081 |
+
蕈
|
| 6082 |
+
蕉
|
| 6083 |
+
蕊
|
| 6084 |
+
蕎
|
| 6085 |
+
蕑
|
| 6086 |
+
蕒
|
| 6087 |
+
蕖
|
| 6088 |
+
蕘
|
| 6089 |
+
蕙
|
| 6090 |
+
蕚
|
| 6091 |
+
蕟
|
| 6092 |
+
蕡
|
| 6093 |
+
蕢
|
| 6094 |
+
蕤
|
| 6095 |
+
蕨
|
| 6096 |
+
蕩
|
| 6097 |
+
蕪
|
| 6098 |
+
蕭
|
| 6099 |
+
蕷
|
| 6100 |
+
蕹
|
| 6101 |
+
蕺
|
| 6102 |
+
蕻
|
| 6103 |
+
蕾
|
| 6104 |
+
薀
|
| 6105 |
+
薄
|
| 6106 |
+
薆
|
| 6107 |
+
薇
|
| 6108 |
+
薈
|
| 6109 |
+
薊
|
| 6110 |
+
薌
|
| 6111 |
+
薏
|
| 6112 |
+
薐
|
| 6113 |
+
薑
|
| 6114 |
+
薔
|
| 6115 |
+
薗
|
| 6116 |
+
薘
|
| 6117 |
+
薙
|
| 6118 |
+
薛
|
| 6119 |
+
薜
|
| 6120 |
+
薞
|
| 6121 |
+
薟
|
| 6122 |
+
薡
|
| 6123 |
+
薦
|
| 6124 |
+
薨
|
| 6125 |
+
薩
|
| 6126 |
+
薪
|
| 6127 |
+
薫
|
| 6128 |
+
薬
|
| 6129 |
+
薯
|
| 6130 |
+
薰
|
| 6131 |
+
薲
|
| 6132 |
+
薷
|
| 6133 |
+
薸
|
| 6134 |
+
薹
|
| 6135 |
+
薺
|
| 6136 |
+
薾
|
| 6137 |
+
薿
|
| 6138 |
+
藁
|
| 6139 |
+
藉
|
| 6140 |
+
藍
|
| 6141 |
+
藎
|
| 6142 |
+
藏
|
| 6143 |
+
藐
|
| 6144 |
+
藔
|
| 6145 |
+
藕
|
| 6146 |
+
藜
|
| 6147 |
+
藝
|
| 6148 |
+
藟
|
| 6149 |
+
藤
|
| 6150 |
+
藥
|
| 6151 |
+
藦
|
| 6152 |
+
藨
|
| 6153 |
+
藩
|
| 6154 |
+
藪
|
| 6155 |
+
藶
|
| 6156 |
+
藸
|
| 6157 |
+
藹
|
| 6158 |
+
藺
|
| 6159 |
+
藻
|
| 6160 |
+
藿
|
| 6161 |
+
蘂
|
| 6162 |
+
蘄
|
| 6163 |
+
蘅
|
| 6164 |
+
蘆
|
| 6165 |
+
蘇
|
| 6166 |
+
蘊
|
| 6167 |
+
蘋
|
| 6168 |
+
蘐
|
| 6169 |
+
蘑
|
| 6170 |
+
蘓
|
| 6171 |
+
蘗
|
| 6172 |
+
蘘
|
| 6173 |
+
蘚
|
| 6174 |
+
蘞
|
| 6175 |
+
蘢
|
| 6176 |
+
蘧
|
| 6177 |
+
蘩
|
| 6178 |
+
蘭
|
| 6179 |
+
蘵
|
| 6180 |
+
蘶
|
| 6181 |
+
蘸
|
| 6182 |
+
蘼
|
| 6183 |
+
蘿
|
| 6184 |
+
虉
|
| 6185 |
+
虎
|
| 6186 |
+
虐
|
| 6187 |
+
虓
|
| 6188 |
+
虔
|
| 6189 |
+
處
|
| 6190 |
+
虖
|
| 6191 |
+
虛
|
| 6192 |
+
虜
|
| 6193 |
+
虞
|
| 6194 |
+
號
|
| 6195 |
+
虢
|
| 6196 |
+
虧
|
| 6197 |
+
虨
|
| 6198 |
+
虯
|
| 6199 |
+
虱
|
| 6200 |
+
虵
|
| 6201 |
+
虹
|
| 6202 |
+
虺
|
| 6203 |
+
虻
|
| 6204 |
+
蚆
|
| 6205 |
+
蚊
|
| 6206 |
+
蚋
|
| 6207 |
+
蚌
|
| 6208 |
+
蚍
|
| 6209 |
+
蚓
|
| 6210 |
+
蚖
|
| 6211 |
+
蚜
|
| 6212 |
+
蚝
|
| 6213 |
+
蚡
|
| 6214 |
+
蚢
|
| 6215 |
+
蚣
|
| 6216 |
+
蚤
|
| 6217 |
+
蚧
|
| 6218 |
+
蚨
|
| 6219 |
+
蚩
|
| 6220 |
+
蚪
|
| 6221 |
+
蚯
|
| 6222 |
+
蚱
|
| 6223 |
+
蚴
|
| 6224 |
+
蚵
|
| 6225 |
+
蚶
|
| 6226 |
+
蚺
|
| 6227 |
+
蚼
|
| 6228 |
+
蛀
|
| 6229 |
+
蛄
|
| 6230 |
+
蛇
|
| 6231 |
+
蛉
|
| 6232 |
+
蛋
|
| 6233 |
+
蛍
|
| 6234 |
+
蛐
|
| 6235 |
+
蛑
|
| 6236 |
+
蛔
|
| 6237 |
+
蛙
|
| 6238 |
+
蛛
|
| 6239 |
+
蛞
|
| 6240 |
+
蛟
|
| 6241 |
+
蛤
|
| 6242 |
+
蛭
|
| 6243 |
+
蛯
|
| 6244 |
+
蛸
|
| 6245 |
+
蛹
|
| 6246 |
+
蛺
|
| 6247 |
+
蛻
|
| 6248 |
+
蛾
|
| 6249 |
+
蜀
|
| 6250 |
+
蜂
|
| 6251 |
+
蜃
|
| 6252 |
+
蜆
|
| 6253 |
+
蜇
|
| 6254 |
+
蜈
|
| 6255 |
+
蜉
|
| 6256 |
+
蜊
|
| 6257 |
+
蜍
|
| 6258 |
+
蜑
|
| 6259 |
+
蜒
|
| 6260 |
+
蜓
|
| 6261 |
+
蜘
|
| 6262 |
+
蜚
|
| 6263 |
+
蜛
|
| 6264 |
+
蜜
|
| 6265 |
+
蜞
|
| 6266 |
+
蜢
|
| 6267 |
+
蜣
|
| 6268 |
+
蜥
|
| 6269 |
+
蜨
|
| 6270 |
+
蜮
|
| 6271 |
+
蜯
|
| 6272 |
+
蜱
|
| 6273 |
+
蜴
|
| 6274 |
+
蜷
|
| 6275 |
+
蜻
|
| 6276 |
+
蜾
|
| 6277 |
+
蜿
|
| 6278 |
+
蝀
|
| 6279 |
+
蝌
|
| 6280 |
+
蝍
|
| 6281 |
+
蝎
|
| 6282 |
+
蝓
|
| 6283 |
+
蝕
|
| 6284 |
+
蝗
|
| 6285 |
+
蝘
|
| 6286 |
+
蝙
|
| 6287 |
+
蝚
|
| 6288 |
+
蝟
|
| 6289 |
+
蝠
|
| 6290 |
+
蝣
|
| 6291 |
+
蝤
|
| 6292 |
+
蝦
|
| 6293 |
+
蝨
|
| 6294 |
+
蝮
|
| 6295 |
+
蝯
|
| 6296 |
+
蝰
|
| 6297 |
+
蝲
|
| 6298 |
+
蝴
|
| 6299 |
+
蝶
|
| 6300 |
+
蝸
|
| 6301 |
+
蝽
|
| 6302 |
+
螂
|
| 6303 |
+
螃
|
| 6304 |
+
螄
|
| 6305 |
+
螅
|
| 6306 |
+
螈
|
| 6307 |
+
螋
|
| 6308 |
+
融
|
| 6309 |
+
螐
|
| 6310 |
+
螔
|
| 6311 |
+
螞
|
| 6312 |
+
螟
|
| 6313 |
+
螠
|
| 6314 |
+
螢
|
| 6315 |
+
螣
|
| 6316 |
+
螥
|
| 6317 |
+
螫
|
| 6318 |
+
螭
|
| 6319 |
+
螯
|
| 6320 |
+
螳
|
| 6321 |
+
螶
|
| 6322 |
+
螺
|
| 6323 |
+
螻
|
| 6324 |
+
螽
|
| 6325 |
+
螾
|
| 6326 |
+
蟀
|
| 6327 |
+
蟄
|
| 6328 |
+
蟅
|
| 6329 |
+
蟆
|
| 6330 |
+
蟊
|
| 6331 |
+
蟋
|
| 6332 |
+
蟌
|
| 6333 |
+
蟎
|
| 6334 |
+
蟑
|
| 6335 |
+
蟒
|
| 6336 |
+
蟜
|
| 6337 |
+
蟠
|
| 6338 |
+
蟥
|
| 6339 |
+
蟪
|
| 6340 |
+
蟫
|
| 6341 |
+
蟬
|
| 6342 |
+
蟯
|
| 6343 |
+
蟲
|
| 6344 |
+
蟳
|
| 6345 |
+
蟴
|
| 6346 |
+
蟶
|
| 6347 |
+
蟹
|
| 6348 |
+
蟻
|
| 6349 |
+
蟾
|
| 6350 |
+
蠂
|
| 6351 |
+
蠃
|
| 6352 |
+
蠄
|
| 6353 |
+
蠅
|
| 6354 |
+
蠆
|
| 6355 |
+
蠊
|
| 6356 |
+
蠋
|
| 6357 |
+
蠍
|
| 6358 |
+
蠐
|
| 6359 |
+
蠑
|
| 6360 |
+
蠓
|
| 6361 |
+
蠔
|
| 6362 |
+
蠕
|
| 6363 |
+
蠖
|
| 6364 |
+
蠘
|
| 6365 |
+
蠙
|
| 6366 |
+
蠟
|
| 6367 |
+
蠡
|
| 6368 |
+
蠢
|
| 6369 |
+
蠣
|
| 6370 |
+
蠱
|
| 6371 |
+
蠲
|
| 6372 |
+
蠵
|
| 6373 |
+
蠶
|
| 6374 |
+
蠷
|
| 6375 |
+
蠹
|
| 6376 |
+
蠻
|
| 6377 |
+
血
|
| 6378 |
+
衂
|
| 6379 |
+
衆
|
| 6380 |
+
行
|
| 6381 |
+
衍
|
| 6382 |
+
衎
|
| 6383 |
+
術
|
| 6384 |
+
衕
|
| 6385 |
+
衖
|
| 6386 |
+
街
|
| 6387 |
+
衙
|
| 6388 |
+
衚
|
| 6389 |
+
衛
|
| 6390 |
+
衜
|
| 6391 |
+
衝
|
| 6392 |
+
衞
|
| 6393 |
+
衡
|
| 6394 |
+
衢
|
| 6395 |
+
衣
|
| 6396 |
+
表
|
| 6397 |
+
衩
|
| 6398 |
+
衫
|
| 6399 |
+
衰
|
| 6400 |
+
衲
|
| 6401 |
+
衷
|
| 6402 |
+
衽
|
| 6403 |
+
衾
|
| 6404 |
+
衿
|
| 6405 |
+
袁
|
| 6406 |
+
袂
|
| 6407 |
+
袈
|
| 6408 |
+
袋
|
| 6409 |
+
袍
|
| 6410 |
+
袓
|
| 6411 |
+
袖
|
| 6412 |
+
袛
|
| 6413 |
+
袞
|
| 6414 |
+
袤
|
| 6415 |
+
袪
|
| 6416 |
+
被
|
| 6417 |
+
袱
|
| 6418 |
+
袴
|
| 6419 |
+
袾
|
| 6420 |
+
裁
|
| 6421 |
+
裂
|
| 6422 |
+
裊
|
| 6423 |
+
裎
|
| 6424 |
+
裒
|
| 6425 |
+
裔
|
| 6426 |
+
裕
|
| 6427 |
+
裖
|
| 6428 |
+
裘
|
| 6429 |
+
裙
|
| 6430 |
+
補
|
| 6431 |
+
裝
|
| 6432 |
+
裟
|
| 6433 |
+
裡
|
| 6434 |
+
裨
|
| 6435 |
+
裬
|
| 6436 |
+
裱
|
| 6437 |
+
裳
|
| 6438 |
+
裴
|
| 6439 |
+
裵
|
| 6440 |
+
裸
|
| 6441 |
+
裹
|
| 6442 |
+
製
|
| 6443 |
+
裾
|
| 6444 |
+
裿
|
| 6445 |
+
褀
|
| 6446 |
+
褂
|
| 6447 |
+
複
|
| 6448 |
+
褌
|
| 6449 |
+
褍
|
| 6450 |
+
褎
|
| 6451 |
+
褐
|
| 6452 |
+
褒
|
| 6453 |
+
褓
|
| 6454 |
+
褔
|
| 6455 |
+
褘
|
| 6456 |
+
褙
|
| 6457 |
+
褚
|
| 6458 |
+
褞
|
| 6459 |
+
褥
|
| 6460 |
+
褧
|
| 6461 |
+
褪
|
| 6462 |
+
褫
|
| 6463 |
+
褭
|
| 6464 |
+
褲
|
| 6465 |
+
褶
|
| 6466 |
+
褸
|
| 6467 |
+
褻
|
| 6468 |
+
襄
|
| 6469 |
+
襌
|
| 6470 |
+
襖
|
| 6471 |
+
襞
|
| 6472 |
+
襟
|
| 6473 |
+
襠
|
| 6474 |
+
襤
|
| 6475 |
+
襦
|
| 6476 |
+
襪
|
| 6477 |
+
襯
|
| 6478 |
+
襲
|
| 6479 |
+
襴
|
| 6480 |
+
襶
|
| 6481 |
+
襻
|
| 6482 |
+
襾
|
| 6483 |
+
西
|
| 6484 |
+
要
|
| 6485 |
+
覃
|
| 6486 |
+
覆
|
| 6487 |
+
覇
|
| 6488 |
+
覈
|
| 6489 |
+
見
|
| 6490 |
+
覌
|
| 6491 |
+
規
|
| 6492 |
+
覓
|
| 6493 |
+
視
|
| 6494 |
+
覚
|
| 6495 |
+
覡
|
| 6496 |
+
覦
|
| 6497 |
+
覧
|
| 6498 |
+
親
|
| 6499 |
+
覬
|
| 6500 |
+
覲
|
| 6501 |
+
観
|
| 6502 |
+
覺
|
| 6503 |
+
覽
|
| 6504 |
+
覿
|
| 6505 |
+
觀
|
| 6506 |
+
角
|
| 6507 |
+
觔
|
| 6508 |
+
觙
|
| 6509 |
+
觚
|
| 6510 |
+
觜
|
| 6511 |
+
解
|
| 6512 |
+
觭
|
| 6513 |
+
觱
|
| 6514 |
+
觴
|
| 6515 |
+
觶
|
| 6516 |
+
觸
|
| 6517 |
+
觿
|
| 6518 |
+
言
|
| 6519 |
+
訁
|
| 6520 |
+
訂
|
| 6521 |
+
訃
|
| 6522 |
+
訇
|
| 6523 |
+
計
|
| 6524 |
+
訊
|
| 6525 |
+
訌
|
| 6526 |
+
討
|
| 6527 |
+
訏
|
| 6528 |
+
訐
|
| 6529 |
+
訒
|
| 6530 |
+
訓
|
| 6531 |
+
訔
|
| 6532 |
+
訕
|
| 6533 |
+
訖
|
| 6534 |
+
託
|
| 6535 |
+
記
|
| 6536 |
+
訛
|
| 6537 |
+
訝
|
| 6538 |
+
訟
|
| 6539 |
+
訣
|
| 6540 |
+
訥
|
| 6541 |
+
訪
|
| 6542 |
+
設
|
| 6543 |
+
許
|
| 6544 |
+
訴
|
| 6545 |
+
訶
|
| 6546 |
+
診
|
| 6547 |
+
註
|
| 6548 |
+
証
|
| 6549 |
+
訾
|
| 6550 |
+
詁
|
| 6551 |
+
詆
|
| 6552 |
+
詈
|
| 6553 |
+
詐
|
| 6554 |
+
詒
|
| 6555 |
+
詔
|
| 6556 |
+
評
|
| 6557 |
+
詛
|
| 6558 |
+
詞
|
| 6559 |
+
詠
|
| 6560 |
+
詡
|
| 6561 |
+
詢
|
| 6562 |
+
詣
|
| 6563 |
+
詥
|
| 6564 |
+
試
|
| 6565 |
+
詧
|
| 6566 |
+
詩
|
| 6567 |
+
詫
|
| 6568 |
+
詭
|
| 6569 |
+
詮
|
| 6570 |
+
詰
|
| 6571 |
+
話
|
| 6572 |
+
該
|
| 6573 |
+
詳
|
| 6574 |
+
詵
|
| 6575 |
+
詹
|
| 6576 |
+
詼
|
| 6577 |
+
誄
|
| 6578 |
+
誅
|
| 6579 |
+
誇
|
| 6580 |
+
誌
|
| 6581 |
+
認
|
| 6582 |
+
誒
|
| 6583 |
+
誓
|
| 6584 |
+
誕
|
| 6585 |
+
誘
|
| 6586 |
+
語
|
| 6587 |
+
誠
|
| 6588 |
+
誡
|
| 6589 |
+
誣
|
| 6590 |
+
誤
|
| 6591 |
+
誥
|
| 6592 |
+
誦
|
| 6593 |
+
誨
|
| 6594 |
+
說
|
| 6595 |
+
説
|
| 6596 |
+
読
|
| 6597 |
+
誰
|
| 6598 |
+
課
|
| 6599 |
+
誴
|
| 6600 |
+
誹
|
| 6601 |
+
誼
|
| 6602 |
+
誾
|
| 6603 |
+
調
|
| 6604 |
+
談
|
| 6605 |
+
請
|
| 6606 |
+
諍
|
| 6607 |
+
諏
|
| 6608 |
+
諒
|
| 6609 |
+
論
|
| 6610 |
+
諗
|
| 6611 |
+
諜
|
| 6612 |
+
諟
|
| 6613 |
+
諠
|
| 6614 |
+
諡
|
| 6615 |
+
諤
|
| 6616 |
+
諦
|
| 6617 |
+
諧
|
| 6618 |
+
諪
|
| 6619 |
+
諫
|
| 6620 |
+
諭
|
| 6621 |
+
諮
|
| 6622 |
+
諱
|
| 6623 |
+
諲
|
| 6624 |
+
諳
|
| 6625 |
+
諴
|
| 6626 |
+
諶
|
| 6627 |
+
諷
|
| 6628 |
+
諸
|
| 6629 |
+
諺
|
| 6630 |
+
諼
|
| 6631 |
+
諾
|
| 6632 |
+
謀
|
| 6633 |
+
謁
|
| 6634 |
+
謂
|
| 6635 |
+
謄
|
| 6636 |
+
謇
|
| 6637 |
+
謊
|
| 6638 |
+
謌
|
| 6639 |
+
謎
|
| 6640 |
+
謏
|
| 6641 |
+
謐
|
| 6642 |
+
謔
|
| 6643 |
+
謖
|
| 6644 |
+
謗
|
| 6645 |
+
謙
|
| 6646 |
+
謚
|
| 6647 |
+
講
|
| 6648 |
+
謜
|
| 6649 |
+
謝
|
| 6650 |
+
謠
|
| 6651 |
+
謢
|
| 6652 |
+
謤
|
| 6653 |
+
謨
|
| 6654 |
+
謩
|
| 6655 |
+
謫
|
| 6656 |
+
謬
|
| 6657 |
+
謳
|
| 6658 |
+
謹
|
| 6659 |
+
謾
|
| 6660 |
+
證
|
| 6661 |
+
譏
|
| 6662 |
+
譓
|
| 6663 |
+
譔
|
| 6664 |
+
識
|
| 6665 |
+
譙
|
| 6666 |
+
譚
|
| 6667 |
+
譜
|
| 6668 |
+
譞
|
| 6669 |
+
警
|
| 6670 |
+
譫
|
| 6671 |
+
譬
|
| 6672 |
+
譭
|
| 6673 |
+
譯
|
| 6674 |
+
議
|
| 6675 |
+
譲
|
| 6676 |
+
譳
|
| 6677 |
+
譴
|
| 6678 |
+
護
|
| 6679 |
+
譽
|
| 6680 |
+
譿
|
| 6681 |
+
讀
|
| 6682 |
+
讃
|
| 6683 |
+
變
|
| 6684 |
+
讌
|
| 6685 |
+
讎
|
| 6686 |
+
讓
|
| 6687 |
+
讖
|
| 6688 |
+
讙
|
| 6689 |
+
讚
|
| 6690 |
+
讜
|
| 6691 |
+
讞
|
| 6692 |
+
谷
|
| 6693 |
+
谿
|
| 6694 |
+
豁
|
| 6695 |
+
豆
|
| 6696 |
+
豇
|
| 6697 |
+
豈
|
| 6698 |
+
豉
|
| 6699 |
+
豊
|
| 6700 |
+
豌
|
| 6701 |
+
豎
|
| 6702 |
+
豐
|
| 6703 |
+
豔
|
| 6704 |
+
豕
|
| 6705 |
+
豚
|
| 6706 |
+
象
|
| 6707 |
+
豢
|
| 6708 |
+
豨
|
| 6709 |
+
豪
|
| 6710 |
+
豫
|
| 6711 |
+
豬
|
| 6712 |
+
豳
|
| 6713 |
+
豸
|
| 6714 |
+
豹
|
| 6715 |
+
豺
|
| 6716 |
+
豿
|
| 6717 |
+
貂
|
| 6718 |
+
貅
|
| 6719 |
+
貉
|
| 6720 |
+
貊
|
| 6721 |
+
貌
|
| 6722 |
+
貐
|
| 6723 |
+
貒
|
| 6724 |
+
貓
|
| 6725 |
+
貔
|
| 6726 |
+
貘
|
| 6727 |
+
貝
|
| 6728 |
+
貞
|
| 6729 |
+
負
|
| 6730 |
+
財
|
| 6731 |
+
貢
|
| 6732 |
+
貤
|
| 6733 |
+
貧
|
| 6734 |
+
貨
|
| 6735 |
+
販
|
| 6736 |
+
貪
|
| 6737 |
+
貫
|
| 6738 |
+
責
|
| 6739 |
+
貭
|
| 6740 |
+
貮
|
| 6741 |
+
貯
|
| 6742 |
+
貲
|
| 6743 |
+
貳
|
| 6744 |
+
貴
|
| 6745 |
+
貶
|
| 6746 |
+
買
|
| 6747 |
+
貸
|
| 6748 |
+
貺
|
| 6749 |
+
費
|
| 6750 |
+
貼
|
| 6751 |
+
貽
|
| 6752 |
+
貿
|
| 6753 |
+
賀
|
| 6754 |
+
賁
|
| 6755 |
+
賂
|
| 6756 |
+
賃
|
| 6757 |
+
賄
|
| 6758 |
+
資
|
| 6759 |
+
賈
|
| 6760 |
+
賊
|
| 6761 |
+
賑
|
| 6762 |
+
賒
|
| 6763 |
+
賓
|
| 6764 |
+
賔
|
| 6765 |
+
賕
|
| 6766 |
+
賚
|
| 6767 |
+
賜
|
| 6768 |
+
賞
|
| 6769 |
+
賠
|
| 6770 |
+
賡
|
| 6771 |
+
賢
|
| 6772 |
+
賣
|
| 6773 |
+
賤
|
| 6774 |
+
賦
|
| 6775 |
+
賨
|
| 6776 |
+
質
|
| 6777 |
+
賬
|
| 6778 |
+
賭
|
| 6779 |
+
賴
|
| 6780 |
+
賹
|
| 6781 |
+
賺
|
| 6782 |
+
賻
|
| 6783 |
+
購
|
| 6784 |
+
賽
|
| 6785 |
+
賾
|
| 6786 |
+
贄
|
| 6787 |
+
贅
|
| 6788 |
+
贇
|
| 6789 |
+
贈
|
| 6790 |
+
贊
|
| 6791 |
+
贌
|
| 6792 |
+
贍
|
| 6793 |
+
贏
|
| 6794 |
+
贓
|
| 6795 |
+
贔
|
| 6796 |
+
贖
|
| 6797 |
+
贛
|
| 6798 |
+
赤
|
| 6799 |
+
赦
|
| 6800 |
+
赧
|
| 6801 |
+
赫
|
| 6802 |
+
赬
|
| 6803 |
+
赭
|
| 6804 |
+
走
|
| 6805 |
+
赳
|
| 6806 |
+
赴
|
| 6807 |
+
起
|
| 6808 |
+
趁
|
| 6809 |
+
超
|
| 6810 |
+
越
|
| 6811 |
+
趐
|
| 6812 |
+
趕
|
| 6813 |
+
趖
|
| 6814 |
+
趙
|
| 6815 |
+
趟
|
| 6816 |
+
趣
|
| 6817 |
+
趨
|
| 6818 |
+
足
|
| 6819 |
+
趴
|
| 6820 |
+
趵
|
| 6821 |
+
趺
|
| 6822 |
+
趼
|
| 6823 |
+
趾
|
| 6824 |
+
跅
|
| 6825 |
+
跆
|
| 6826 |
+
跋
|
| 6827 |
+
跌
|
| 6828 |
+
跏
|
| 6829 |
+
跑
|
| 6830 |
+
跖
|
| 6831 |
+
跗
|
| 6832 |
+
跛
|
| 6833 |
+
距
|
| 6834 |
+
跟
|
| 6835 |
+
跡
|
| 6836 |
+
跣
|
| 6837 |
+
跤
|
| 6838 |
+
跨
|
| 6839 |
+
跩
|
| 6840 |
+
跪
|
| 6841 |
+
路
|
| 6842 |
+
跳
|
| 6843 |
+
踎
|
| 6844 |
+
踏
|
| 6845 |
+
踐
|
| 6846 |
+
踝
|
| 6847 |
+
踞
|
| 6848 |
+
踢
|
| 6849 |
+
踩
|
| 6850 |
+
踰
|
| 6851 |
+
踴
|
| 6852 |
+
踹
|
| 6853 |
+
踺
|
| 6854 |
+
蹂
|
| 6855 |
+
蹄
|
| 6856 |
+
蹇
|
| 6857 |
+
蹈
|
| 6858 |
+
蹉
|
| 6859 |
+
蹊
|
| 6860 |
+
蹋
|
| 6861 |
+
蹕
|
| 6862 |
+
蹙
|
| 6863 |
+
蹟
|
| 6864 |
+
蹠
|
| 6865 |
+
蹤
|
| 6866 |
+
蹦
|
| 6867 |
+
蹬
|
| 6868 |
+
蹭
|
| 6869 |
+
蹯
|
| 6870 |
+
蹲
|
| 6871 |
+
蹴
|
| 6872 |
+
蹶
|
| 6873 |
+
蹺
|
| 6874 |
+
蹻
|
| 6875 |
+
蹼
|
| 6876 |
+
躁
|
| 6877 |
+
躂
|
| 6878 |
+
躄
|
| 6879 |
+
躉
|
| 6880 |
+
躋
|
| 6881 |
+
躍
|
| 6882 |
+
躑
|
| 6883 |
+
躒
|
| 6884 |
+
躔
|
| 6885 |
+
躝
|
| 6886 |
+
躪
|
| 6887 |
+
身
|
| 6888 |
+
躬
|
| 6889 |
+
躰
|
| 6890 |
+
躲
|
| 6891 |
+
躺
|
| 6892 |
+
軀
|
| 6893 |
+
車
|
| 6894 |
+
軋
|
| 6895 |
+
軌
|
| 6896 |
+
軍
|
| 6897 |
+
軎
|
| 6898 |
+
軒
|
| 6899 |
+
軔
|
| 6900 |
+
軛
|
| 6901 |
+
軟
|
| 6902 |
+
転
|
| 6903 |
+
軫
|
| 6904 |
+
軲
|
| 6905 |
+
軸
|
| 6906 |
+
軹
|
| 6907 |
+
軺
|
| 6908 |
+
軻
|
| 6909 |
+
軼
|
| 6910 |
+
軽
|
| 6911 |
+
軾
|
| 6912 |
+
較
|
| 6913 |
+
輄
|
| 6914 |
+
輅
|
| 6915 |
+
載
|
| 6916 |
+
輋
|
| 6917 |
+
輒
|
| 6918 |
+
輓
|
| 6919 |
+
輔
|
| 6920 |
+
輕
|
| 6921 |
+
輛
|
| 6922 |
+
輝
|
| 6923 |
+
輞
|
| 6924 |
+
輟
|
| 6925 |
+
輥
|
| 6926 |
+
輦
|
| 6927 |
+
輩
|
| 6928 |
+
輪
|
| 6929 |
+
輬
|
| 6930 |
+
輭
|
| 6931 |
+
輯
|
| 6932 |
+
輶
|
| 6933 |
+
輸
|
| 6934 |
+
輻
|
| 6935 |
+
輾
|
| 6936 |
+
輿
|
| 6937 |
+
轀
|
| 6938 |
+
轂
|
| 6939 |
+
轄
|
| 6940 |
+
轅
|
| 6941 |
+
轆
|
| 6942 |
+
轉
|
| 6943 |
+
轍
|
| 6944 |
+
轎
|
| 6945 |
+
轘
|
| 6946 |
+
轝
|
| 6947 |
+
轟
|
| 6948 |
+
轤
|
| 6949 |
+
辛
|
| 6950 |
+
辜
|
| 6951 |
+
辟
|
| 6952 |
+
辣
|
| 6953 |
+
辦
|
| 6954 |
+
辧
|
| 6955 |
+
辨
|
| 6956 |
+
辭
|
| 6957 |
+
辮
|
| 6958 |
+
辯
|
| 6959 |
+
辰
|
| 6960 |
+
辱
|
| 6961 |
+
農
|
| 6962 |
+
辵
|
| 6963 |
+
辺
|
| 6964 |
+
辻
|
| 6965 |
+
込
|
| 6966 |
+
迂
|
| 6967 |
+
迄
|
| 6968 |
+
迅
|
| 6969 |
+
迎
|
| 6970 |
+
近
|
| 6971 |
+
返
|
| 6972 |
+
迢
|
| 6973 |
+
迤
|
| 6974 |
+
迥
|
| 6975 |
+
迦
|
| 6976 |
+
迪
|
| 6977 |
+
迫
|
| 6978 |
+
迭
|
| 6979 |
+
迮
|
| 6980 |
+
述
|
| 6981 |
+
迴
|
| 6982 |
+
迵
|
| 6983 |
+
迷
|
| 6984 |
+
迸
|
| 6985 |
+
迺
|
| 6986 |
+
追
|
| 6987 |
+
退
|
| 6988 |
+
送
|
| 6989 |
+
逃
|
| 6990 |
+
逄
|
| 6991 |
+
逅
|
| 6992 |
+
逆
|
| 6993 |
+
逈
|
| 6994 |
+
逋
|
| 6995 |
+
逌
|
| 6996 |
+
逍
|
| 6997 |
+
逎
|
| 6998 |
+
透
|
| 6999 |
+
逐
|
| 7000 |
+
逑
|
| 7001 |
+
途
|
| 7002 |
+
逕
|
| 7003 |
+
逖
|
| 7004 |
+
逗
|
| 7005 |
+
這
|
| 7006 |
+
通
|
| 7007 |
+
逛
|
| 7008 |
+
逝
|
| 7009 |
+
逞
|
| 7010 |
+
速
|
| 7011 |
+
造
|
| 7012 |
+
逢
|
| 7013 |
+
連
|
| 7014 |
+
逤
|
| 7015 |
+
逨
|
| 7016 |
+
逮
|
| 7017 |
+
逯
|
| 7018 |
+
進
|
| 7019 |
+
逴
|
| 7020 |
+
逵
|
| 7021 |
+
逸
|
| 7022 |
+
逹
|
| 7023 |
+
逺
|
| 7024 |
+
逼
|
| 7025 |
+
逾
|
| 7026 |
+
遁
|
| 7027 |
+
遂
|
| 7028 |
+
遄
|
| 7029 |
+
遇
|
| 7030 |
+
遊
|
| 7031 |
+
運
|
| 7032 |
+
遍
|
| 7033 |
+
過
|
| 7034 |
+
遏
|
| 7035 |
+
遐
|
| 7036 |
+
遒
|
| 7037 |
+
道
|
| 7038 |
+
達
|
| 7039 |
+
違
|
| 7040 |
+
遘
|
| 7041 |
+
遙
|
| 7042 |
+
遛
|
| 7043 |
+
遜
|
| 7044 |
+
遞
|
| 7045 |
+
遠
|
| 7046 |
+
遢
|
| 7047 |
+
遣
|
| 7048 |
+
遨
|
| 7049 |
+
適
|
| 7050 |
+
遭
|
| 7051 |
+
遮
|
| 7052 |
+
遯
|
| 7053 |
+
遲
|
| 7054 |
+
遴
|
| 7055 |
+
遵
|
| 7056 |
+
遶
|
| 7057 |
+
遷
|
| 7058 |
+
選
|
| 7059 |
+
遹
|
| 7060 |
+
遺
|
| 7061 |
+
遼
|
| 7062 |
+
避
|
| 7063 |
+
邀
|
| 7064 |
+
邁
|
| 7065 |
+
邂
|
| 7066 |
+
邃
|
| 7067 |
+
還
|
| 7068 |
+
邇
|
| 7069 |
+
邈
|
| 7070 |
+
邉
|
| 7071 |
+
邊
|
| 7072 |
+
邋
|
| 7073 |
+
邏
|
| 7074 |
+
邑
|
| 7075 |
+
邕
|
| 7076 |
+
邗
|
| 7077 |
+
邙
|
| 7078 |
+
邛
|
| 7079 |
+
邠
|
| 7080 |
+
邡
|
| 7081 |
+
邢
|
| 7082 |
+
那
|
| 7083 |
+
邦
|
| 7084 |
+
邨
|
| 7085 |
+
邪
|
| 7086 |
+
邯
|
| 7087 |
+
邰
|
| 7088 |
+
邱
|
| 7089 |
+
邲
|
| 7090 |
+
邳
|
| 7091 |
+
邴
|
| 7092 |
+
邵
|
| 7093 |
+
邸
|
| 7094 |
+
邽
|
| 7095 |
+
邾
|
| 7096 |
+
郁
|
| 7097 |
+
郃
|
| 7098 |
+
郄
|
| 7099 |
+
郅
|
| 7100 |
+
郇
|
| 7101 |
+
郊
|
| 7102 |
+
郋
|
| 7103 |
+
郎
|
| 7104 |
+
郗
|
| 7105 |
+
郛
|
| 7106 |
+
郜
|
| 7107 |
+
郝
|
| 7108 |
+
郞
|
| 7109 |
+
郟
|
| 7110 |
+
郡
|
| 7111 |
+
郢
|
| 7112 |
+
郤
|
| 7113 |
+
部
|
| 7114 |
+
郪
|
| 7115 |
+
郫
|
| 7116 |
+
郭
|
| 7117 |
+
郯
|
| 7118 |
+
郳
|
| 7119 |
+
郴
|
| 7120 |
+
郵
|
| 7121 |
+
郷
|
| 7122 |
+
都
|
| 7123 |
+
郾
|
| 7124 |
+
郿
|
| 7125 |
+
鄂
|
| 7126 |
+
鄃
|
| 7127 |
+
鄄
|
| 7128 |
+
鄆
|
| 7129 |
+
鄉
|
| 7130 |
+
鄋
|
| 7131 |
+
鄑
|
| 7132 |
+
鄒
|
| 7133 |
+
鄔
|
| 7134 |
+
鄖
|
| 7135 |
+
鄗
|
| 7136 |
+
鄘
|
| 7137 |
+
鄙
|
| 7138 |
+
鄚
|
| 7139 |
+
鄜
|
| 7140 |
+
鄞
|
| 7141 |
+
鄠
|
| 7142 |
+
鄢
|
| 7143 |
+
鄣
|
| 7144 |
+
鄤
|
| 7145 |
+
鄧
|
| 7146 |
+
鄩
|
| 7147 |
+
鄫
|
| 7148 |
+
鄭
|
| 7149 |
+
鄯
|
| 7150 |
+
鄰
|
| 7151 |
+
鄱
|
| 7152 |
+
鄲
|
| 7153 |
+
鄳
|
| 7154 |
+
鄴
|
| 7155 |
+
鄺
|
| 7156 |
+
酃
|
| 7157 |
+
酆
|
| 7158 |
+
酈
|
| 7159 |
+
酉
|
| 7160 |
+
酊
|
| 7161 |
+
酋
|
| 7162 |
+
酌
|
| 7163 |
+
配
|
| 7164 |
+
酎
|
| 7165 |
+
酏
|
| 7166 |
+
酐
|
| 7167 |
+
酒
|
| 7168 |
+
酔
|
| 7169 |
+
酗
|
| 7170 |
+
酚
|
| 7171 |
+
酞
|
| 7172 |
+
酡
|
| 7173 |
+
酢
|
| 7174 |
+
酣
|
| 7175 |
+
酥
|
| 7176 |
+
酩
|
| 7177 |
+
酪
|
| 7178 |
+
酬
|
| 7179 |
+
酮
|
| 7180 |
+
酯
|
| 7181 |
+
酰
|
| 7182 |
+
酴
|
| 7183 |
+
酵
|
| 7184 |
+
酶
|
| 7185 |
+
酷
|
| 7186 |
+
酸
|
| 7187 |
+
酺
|
| 7188 |
+
酼
|
| 7189 |
+
醁
|
| 7190 |
+
醂
|
| 7191 |
+
醃
|
| 7192 |
+
醅
|
| 7193 |
+
醇
|
| 7194 |
+
醉
|
| 7195 |
+
醋
|
| 7196 |
+
醌
|
| 7197 |
+
醍
|
| 7198 |
+
醐
|
| 7199 |
+
醒
|
| 7200 |
+
醚
|
| 7201 |
+
醛
|
| 7202 |
+
醜
|
| 7203 |
+
醞
|
| 7204 |
+
醢
|
| 7205 |
+
醣
|
| 7206 |
+
醪
|
| 7207 |
+
醫
|
| 7208 |
+
醬
|
| 7209 |
+
醮
|
| 7210 |
+
醯
|
| 7211 |
+
醴
|
| 7212 |
+
醺
|
| 7213 |
+
醾
|
| 7214 |
+
醿
|
| 7215 |
+
釀
|
| 7216 |
+
釁
|
| 7217 |
+
釆
|
| 7218 |
+
采
|
| 7219 |
+
釉
|
| 7220 |
+
釋
|
| 7221 |
+
里
|
| 7222 |
+
重
|
| 7223 |
+
野
|
| 7224 |
+
量
|
| 7225 |
+
釐
|
| 7226 |
+
金
|
| 7227 |
+
釒
|
| 7228 |
+
釓
|
| 7229 |
+
釔
|
| 7230 |
+
釕
|
| 7231 |
+
釗
|
| 7232 |
+
釘
|
| 7233 |
+
釙
|
| 7234 |
+
釚
|
| 7235 |
+
釜
|
| 7236 |
+
針
|
| 7237 |
+
釣
|
| 7238 |
+
釤
|
| 7239 |
+
釦
|
| 7240 |
+
釧
|
| 7241 |
+
釩
|
| 7242 |
+
釪
|
| 7243 |
+
釭
|
| 7244 |
+
釴
|
| 7245 |
+
釵
|
| 7246 |
+
釷
|
| 7247 |
+
釹
|
| 7248 |
+
釺
|
| 7249 |
+
鈀
|
| 7250 |
+
鈁
|
| 7251 |
+
鈄
|
| 7252 |
+
鈇
|
| 7253 |
+
鈈
|
| 7254 |
+
鈉
|
| 7255 |
+
鈊
|
| 7256 |
+
鈍
|
| 7257 |
+
鈏
|
| 7258 |
+
鈐
|
| 7259 |
+
鈑
|
| 7260 |
+
鈔
|
| 7261 |
+
鈕
|
| 7262 |
+
鈖
|
| 7263 |
+
鈞
|
| 7264 |
+
鈢
|
| 7265 |
+
鈣
|
| 7266 |
+
鈥
|
| 7267 |
+
鈦
|
| 7268 |
+
鈫
|
| 7269 |
+
鈮
|
| 7270 |
+
鈰
|
| 7271 |
+
鈳
|
| 7272 |
+
鈴
|
| 7273 |
+
鈷
|
| 7274 |
+
鈸
|
| 7275 |
+
鈹
|
| 7276 |
+
鈺
|
| 7277 |
+
鈾
|
| 7278 |
+
鈿
|
| 7279 |
+
鉀
|
| 7280 |
+
鉄
|
| 7281 |
+
鉅
|
| 7282 |
+
鉆
|
| 7283 |
+
鉈
|
| 7284 |
+
鉉
|
| 7285 |
+
鉋
|
| 7286 |
+
鉌
|
| 7287 |
+
鉍
|
| 7288 |
+
鉏
|
| 7289 |
+
鉑
|
| 7290 |
+
鉓
|
| 7291 |
+
鉗
|
| 7292 |
+
鉚
|
| 7293 |
+
鉛
|
| 7294 |
+
鉞
|
| 7295 |
+
鉟
|
| 7296 |
+
鉤
|
| 7297 |
+
鉦
|
| 7298 |
+
鉬
|
| 7299 |
+
鉭
|
| 7300 |
+
鉲
|
| 7301 |
+
鉶
|
| 7302 |
+
鉷
|
| 7303 |
+
鉸
|
| 7304 |
+
鉻
|
| 7305 |
+
鉾
|
| 7306 |
+
鉿
|
| 7307 |
+
銀
|
| 7308 |
+
銂
|
| 7309 |
+
銃
|
| 7310 |
+
銅
|
| 7311 |
+
銋
|
| 7312 |
+
銍
|
| 7313 |
+
銑
|
| 7314 |
+
銓
|
| 7315 |
+
銕
|
| 7316 |
+
銖
|
| 7317 |
+
銘
|
| 7318 |
+
銚
|
| 7319 |
+
銜
|
| 7320 |
+
銠
|
| 7321 |
+
銣
|
| 7322 |
+
銥
|
| 7323 |
+
銦
|
| 7324 |
+
銨
|
| 7325 |
+
銩
|
| 7326 |
+
銪
|
| 7327 |
+
銫
|
| 7328 |
+
銬
|
| 7329 |
+
銭
|
| 7330 |
+
銱
|
| 7331 |
+
銲
|
| 7332 |
+
銳
|
| 7333 |
+
銶
|
| 7334 |
+
銷
|
| 7335 |
+
銹
|
| 7336 |
+
銻
|
| 7337 |
+
銼
|
| 7338 |
+
銾
|
| 7339 |
+
鋁
|
| 7340 |
+
鋅
|
| 7341 |
+
鋆
|
| 7342 |
+
鋇
|
| 7343 |
+
鋌
|
| 7344 |
+
鋏
|
| 7345 |
+
鋐
|
| 7346 |
+
鋒
|
| 7347 |
+
鋕
|
| 7348 |
+
鋗
|
| 7349 |
+
鋙
|
| 7350 |
+
鋡
|
| 7351 |
+
鋤
|
| 7352 |
+
鋥
|
| 7353 |
+
鋦
|
| 7354 |
+
鋨
|
| 7355 |
+
鋪
|
| 7356 |
+
鋮
|
| 7357 |
+
鋯
|
| 7358 |
+
鋰
|
| 7359 |
+
鋱
|
| 7360 |
+
鋳
|
| 7361 |
+
鋶
|
| 7362 |
+
鋸
|
| 7363 |
+
鋹
|
| 7364 |
+
鋼
|
| 7365 |
+
錀
|
| 7366 |
+
錄
|
| 7367 |
+
錏
|
| 7368 |
+
錐
|
| 7369 |
+
錒
|
| 7370 |
+
錕
|
| 7371 |
+
錘
|
| 7372 |
+
錚
|
| 7373 |
+
錞
|
| 7374 |
+
錟
|
| 7375 |
+
錠
|
| 7376 |
+
錡
|
| 7377 |
+
錢
|
| 7378 |
+
錦
|
| 7379 |
+
錨
|
| 7380 |
+
錫
|
| 7381 |
+
錬
|
| 7382 |
+
錮
|
| 7383 |
+
錯
|
| 7384 |
+
錳
|
| 7385 |
+
錶
|
| 7386 |
+
錸
|
| 7387 |
+
錻
|
| 7388 |
+
鍀
|
| 7389 |
+
鍇
|
| 7390 |
+
鍈
|
| 7391 |
+
鍉
|
| 7392 |
+
鍊
|
| 7393 |
+
鍋
|
| 7394 |
+
鍍
|
| 7395 |
+
鍏
|
| 7396 |
+
鍔
|
| 7397 |
+
鍘
|
| 7398 |
+
鍛
|
| 7399 |
+
鍝
|
| 7400 |
+
鍟
|
| 7401 |
+
鍠
|
| 7402 |
+
鍥
|
| 7403 |
+
鍩
|
| 7404 |
+
鍬
|
| 7405 |
+
鍱
|
| 7406 |
+
鍳
|
| 7407 |
+
鍵
|
| 7408 |
+
鍶
|
| 7409 |
+
鍷
|
| 7410 |
+
鍺
|
| 7411 |
+
鍼
|
| 7412 |
+
鍾
|
| 7413 |
+
鎂
|
| 7414 |
+
鎅
|
| 7415 |
+
鎊
|
| 7416 |
+
鎌
|
| 7417 |
+
鎏
|
| 7418 |
+
鎓
|
| 7419 |
+
鎔
|
| 7420 |
+
鎖
|
| 7421 |
+
鎗
|
| 7422 |
+
鎘
|
| 7423 |
+
鎚
|
| 7424 |
+
鎛
|
| 7425 |
+
鎢
|
| 7426 |
+
鎣
|
| 7427 |
+
鎦
|
| 7428 |
+
鎧
|
| 7429 |
+
鎪
|
| 7430 |
+
鎬
|
| 7431 |
+
鎭
|
| 7432 |
+
鎮
|
| 7433 |
+
鎰
|
| 7434 |
+
鎳
|
| 7435 |
+
鎵
|
| 7436 |
+
鎻
|
| 7437 |
+
鏃
|
| 7438 |
+
鏇
|
| 7439 |
+
鏈
|
| 7440 |
+
鏊
|
| 7441 |
+
鏌
|
| 7442 |
+
鏐
|
| 7443 |
+
鏑
|
| 7444 |
+
鏓
|
| 7445 |
+
鏖
|
| 7446 |
+
鏗
|
| 7447 |
+
鏘
|
| 7448 |
+
鏜
|
| 7449 |
+
鏝
|
| 7450 |
+
鏞
|
| 7451 |
+
鏟
|
| 7452 |
+
鏡
|
| 7453 |
+
鏢
|
| 7454 |
+
鏤
|
| 7455 |
+
鏦
|
| 7456 |
+
鏳
|
| 7457 |
+
鏴
|
| 7458 |
+
鏵
|
| 7459 |
+
鏷
|
| 7460 |
+
鏻
|
| 7461 |
+
鏽
|
| 7462 |
+
鐃
|
| 7463 |
+
鐇
|
| 7464 |
+
鐈
|
| 7465 |
+
鐓
|
| 7466 |
+
鐔
|
| 7467 |
+
鐘
|
| 7468 |
+
鐙
|
| 7469 |
+
鐠
|
| 7470 |
+
鐡
|
| 7471 |
+
鐤
|
| 7472 |
+
鐦
|
| 7473 |
+
鐧
|
| 7474 |
+
鐫
|
| 7475 |
+
鐬
|
| 7476 |
+
鐭
|
| 7477 |
+
鐮
|
| 7478 |
+
鐲
|
| 7479 |
+
鐳
|
| 7480 |
+
鐵
|
| 7481 |
+
鐸
|
| 7482 |
+
鐺
|
| 7483 |
+
鐽
|
| 7484 |
+
鐿
|
| 7485 |
+
鑀
|
| 7486 |
+
鑁
|
| 7487 |
+
鑂
|
| 7488 |
+
鑄
|
| 7489 |
+
鑅
|
| 7490 |
+
鑊
|
| 7491 |
+
鑌
|
| 7492 |
+
鑑
|
| 7493 |
+
鑒
|
| 7494 |
+
鑛
|
| 7495 |
+
鑠
|
| 7496 |
+
鑣
|
| 7497 |
+
鑨
|
| 7498 |
+
鑪
|
| 7499 |
+
鑫
|
| 7500 |
+
鑭
|
| 7501 |
+
鑰
|
| 7502 |
+
鑲
|
| 7503 |
+
鑴
|
| 7504 |
+
鑷
|
| 7505 |
+
鑼
|
| 7506 |
+
鑽
|
| 7507 |
+
鑾
|
| 7508 |
+
鑿
|
| 7509 |
+
長
|
| 7510 |
+
門
|
| 7511 |
+
閂
|
| 7512 |
+
閃
|
| 7513 |
+
閆
|
| 7514 |
+
閉
|
| 7515 |
+
開
|
| 7516 |
+
閎
|
| 7517 |
+
閏
|
| 7518 |
+
閑
|
| 7519 |
+
閒
|
| 7520 |
+
間
|
| 7521 |
+
閔
|
| 7522 |
+
閘
|
| 7523 |
+
閜
|
| 7524 |
+
閞
|
| 7525 |
+
閟
|
| 7526 |
+
関
|
| 7527 |
+
閣
|
| 7528 |
+
閥
|
| 7529 |
+
閦
|
| 7530 |
+
閨
|
| 7531 |
+
閩
|
| 7532 |
+
閬
|
| 7533 |
+
閭
|
| 7534 |
+
閰
|
| 7535 |
+
閱
|
| 7536 |
+
閶
|
| 7537 |
+
閹
|
| 7538 |
+
閻
|
| 7539 |
+
閼
|
| 7540 |
+
閾
|
| 7541 |
+
閿
|
| 7542 |
+
闆
|
| 7543 |
+
闇
|
| 7544 |
+
闈
|
| 7545 |
+
闊
|
| 7546 |
+
闋
|
| 7547 |
+
闌
|
| 7548 |
+
闍
|
| 7549 |
+
闐
|
| 7550 |
+
闓
|
| 7551 |
+
闔
|
| 7552 |
+
闕
|
| 7553 |
+
闖
|
| 7554 |
+
闘
|
| 7555 |
+
關
|
| 7556 |
+
闞
|
| 7557 |
+
闡
|
| 7558 |
+
闢
|
| 7559 |
+
闥
|
| 7560 |
+
阜
|
| 7561 |
+
阝
|
| 7562 |
+
阡
|
| 7563 |
+
阪
|
| 7564 |
+
阭
|
| 7565 |
+
阮
|
| 7566 |
+
阯
|
| 7567 |
+
阱
|
| 7568 |
+
防
|
| 7569 |
+
阻
|
| 7570 |
+
阿
|
| 7571 |
+
陀
|
| 7572 |
+
陁
|
| 7573 |
+
陂
|
| 7574 |
+
附
|
| 7575 |
+
陋
|
| 7576 |
+
陌
|
| 7577 |
+
降
|
| 7578 |
+
限
|
| 7579 |
+
陔
|
| 7580 |
+
陘
|
| 7581 |
+
陛
|
| 7582 |
+
陜
|
| 7583 |
+
陝
|
| 7584 |
+
陞
|
| 7585 |
+
陟
|
| 7586 |
+
陡
|
| 7587 |
+
院
|
| 7588 |
+
陣
|
| 7589 |
+
除
|
| 7590 |
+
陪
|
| 7591 |
+
陬
|
| 7592 |
+
陰
|
| 7593 |
+
陲
|
| 7594 |
+
陳
|
| 7595 |
+
陵
|
| 7596 |
+
陶
|
| 7597 |
+
陷
|
| 7598 |
+
陸
|
| 7599 |
+
険
|
| 7600 |
+
陽
|
| 7601 |
+
隄
|
| 7602 |
+
隅
|
| 7603 |
+
隆
|
| 7604 |
+
隈
|
| 7605 |
+
隊
|
| 7606 |
+
隋
|
| 7607 |
+
隍
|
| 7608 |
+
階
|
| 7609 |
+
隔
|
| 7610 |
+
隕
|
| 7611 |
+
隗
|
| 7612 |
+
隘
|
| 7613 |
+
隙
|
| 7614 |
+
際
|
| 7615 |
+
障
|
| 7616 |
+
隣
|
| 7617 |
+
隧
|
| 7618 |
+
隨
|
| 7619 |
+
險
|
| 7620 |
+
隰
|
| 7621 |
+
隱
|
| 7622 |
+
隲
|
| 7623 |
+
隳
|
| 7624 |
+
隴
|
| 7625 |
+
隷
|
| 7626 |
+
隸
|
| 7627 |
+
隹
|
| 7628 |
+
隻
|
| 7629 |
+
隼
|
| 7630 |
+
雀
|
| 7631 |
+
雁
|
| 7632 |
+
雄
|
| 7633 |
+
雅
|
| 7634 |
+
集
|
| 7635 |
+
雇
|
| 7636 |
+
雉
|
| 7637 |
+
雋
|
| 7638 |
+
雌
|
| 7639 |
+
雍
|
| 7640 |
+
雎
|
| 7641 |
+
雑
|
| 7642 |
+
雒
|
| 7643 |
+
雕
|
| 7644 |
+
雖
|
| 7645 |
+
雙
|
| 7646 |
+
雛
|
| 7647 |
+
雜
|
| 7648 |
+
雝
|
| 7649 |
+
雞
|
| 7650 |
+
離
|
| 7651 |
+
難
|
| 7652 |
+
雨
|
| 7653 |
+
雩
|
| 7654 |
+
雪
|
| 7655 |
+
雫
|
| 7656 |
+
雯
|
| 7657 |
+
雱
|
| 7658 |
+
雲
|
| 7659 |
+
零
|
| 7660 |
+
雷
|
| 7661 |
+
雹
|
| 7662 |
+
電
|
| 7663 |
+
需
|
| 7664 |
+
霄
|
| 7665 |
+
霅
|
| 7666 |
+
霆
|
| 7667 |
+
震
|
| 7668 |
+
霈
|
| 7669 |
+
霉
|
| 7670 |
+
霊
|
| 7671 |
+
霍
|
| 7672 |
+
霎
|
| 7673 |
+
霏
|
| 7674 |
+
霑
|
| 7675 |
+
霓
|
| 7676 |
+
霖
|
| 7677 |
+
霙
|
| 7678 |
+
霜
|
| 7679 |
+
霞
|
| 7680 |
+
霤
|
| 7681 |
+
霧
|
| 7682 |
+
霨
|
| 7683 |
+
霰
|
| 7684 |
+
露
|
| 7685 |
+
霶
|
| 7686 |
+
霸
|
| 7687 |
+
霹
|
| 7688 |
+
霽
|
| 7689 |
+
霾
|
| 7690 |
+
靁
|
| 7691 |
+
靂
|
| 7692 |
+
靄
|
| 7693 |
+
靈
|
| 7694 |
+
靉
|
| 7695 |
+
靑
|
| 7696 |
+
青
|
| 7697 |
+
靖
|
| 7698 |
+
靚
|
| 7699 |
+
靛
|
| 7700 |
+
靜
|
| 7701 |
+
非
|
| 7702 |
+
靠
|
| 7703 |
+
靡
|
| 7704 |
+
面
|
| 7705 |
+
革
|
| 7706 |
+
靫
|
| 7707 |
+
靬
|
| 7708 |
+
靭
|
| 7709 |
+
靳
|
| 7710 |
+
靴
|
| 7711 |
+
靶
|
| 7712 |
+
靺
|
| 7713 |
+
靼
|
| 7714 |
+
鞅
|
| 7715 |
+
鞆
|
| 7716 |
+
鞋
|
| 7717 |
+
鞍
|
| 7718 |
+
鞏
|
| 7719 |
+
鞘
|
| 7720 |
+
鞞
|
| 7721 |
+
鞠
|
| 7722 |
+
鞣
|
| 7723 |
+
鞥
|
| 7724 |
+
鞦
|
| 7725 |
+
鞨
|
| 7726 |
+
鞭
|
| 7727 |
+
鞮
|
| 7728 |
+
鞴
|
| 7729 |
+
韁
|
| 7730 |
+
韃
|
| 7731 |
+
韆
|
| 7732 |
+
韋
|
| 7733 |
+
韌
|
| 7734 |
+
韑
|
| 7735 |
+
韓
|
| 7736 |
+
韙
|
| 7737 |
+
韜
|
| 7738 |
+
韞
|
| 7739 |
+
韠
|
| 7740 |
+
韡
|
| 7741 |
+
韭
|
| 7742 |
+
韮
|
| 7743 |
+
音
|
| 7744 |
+
韶
|
| 7745 |
+
韺
|
| 7746 |
+
韻
|
| 7747 |
+
韾
|
| 7748 |
+
響
|
| 7749 |
+
頁
|
| 7750 |
+
頂
|
| 7751 |
+
頃
|
| 7752 |
+
項
|
| 7753 |
+
順
|
| 7754 |
+
須
|
| 7755 |
+
頊
|
| 7756 |
+
頌
|
| 7757 |
+
頍
|
| 7758 |
+
頎
|
| 7759 |
+
頏
|
| 7760 |
+
預
|
| 7761 |
+
頑
|
| 7762 |
+
頒
|
| 7763 |
+
頓
|
| 7764 |
+
頔
|
| 7765 |
+
頗
|
| 7766 |
+
領
|
| 7767 |
+
頜
|
| 7768 |
+
頠
|
| 7769 |
+
頡
|
| 7770 |
+
頤
|
| 7771 |
+
頦
|
| 7772 |
+
頫
|
| 7773 |
+
頭
|
| 7774 |
+
頰
|
| 7775 |
+
頴
|
| 7776 |
+
頵
|
| 7777 |
+
頷
|
| 7778 |
+
頸
|
| 7779 |
+
頹
|
| 7780 |
+
頻
|
| 7781 |
+
頼
|
| 7782 |
+
顆
|
| 7783 |
+
題
|
| 7784 |
+
額
|
| 7785 |
+
顎
|
| 7786 |
+
顏
|
| 7787 |
+
顒
|
| 7788 |
+
顓
|
| 7789 |
+
顔
|
| 7790 |
+
顕
|
| 7791 |
+
顗
|
| 7792 |
+
願
|
| 7793 |
+
顙
|
| 7794 |
+
顛
|
| 7795 |
+
類
|
| 7796 |
+
顥
|
| 7797 |
+
顧
|
| 7798 |
+
顫
|
| 7799 |
+
顯
|
| 7800 |
+
顰
|
| 7801 |
+
顱
|
| 7802 |
+
顳
|
| 7803 |
+
顴
|
| 7804 |
+
風
|
| 7805 |
+
颮
|
| 7806 |
+
颯
|
| 7807 |
+
颱
|
| 7808 |
+
颶
|
| 7809 |
+
颺
|
| 7810 |
+
颼
|
| 7811 |
+
飄
|
| 7812 |
+
飆
|
| 7813 |
+
飈
|
| 7814 |
+
飛
|
| 7815 |
+
食
|
| 7816 |
+
飠
|
| 7817 |
+
飡
|
| 7818 |
+
飢
|
| 7819 |
+
飥
|
| 7820 |
+
飩
|
| 7821 |
+
飪
|
| 7822 |
+
飫
|
| 7823 |
+
飬
|
| 7824 |
+
飭
|
| 7825 |
+
飮
|
| 7826 |
+
飯
|
| 7827 |
+
飲
|
| 7828 |
+
飴
|
| 7829 |
+
飼
|
| 7830 |
+
飽
|
| 7831 |
+
飾
|
| 7832 |
+
餃
|
| 7833 |
+
餄
|
| 7834 |
+
餅
|
| 7835 |
+
餉
|
| 7836 |
+
養
|
| 7837 |
+
餌
|
| 7838 |
+
餎
|
| 7839 |
+
餐
|
| 7840 |
+
餒
|
| 7841 |
+
餓
|
| 7842 |
+
餗
|
| 7843 |
+
餘
|
| 7844 |
+
餚
|
| 7845 |
+
餛
|
| 7846 |
+
餞
|
| 7847 |
+
餠
|
| 7848 |
+
餡
|
| 7849 |
+
館
|
| 7850 |
+
餮
|
| 7851 |
+
餵
|
| 7852 |
+
餺
|
| 7853 |
+
餾
|
| 7854 |
+
餿
|
| 7855 |
+
饃
|
| 7856 |
+
饅
|
| 7857 |
+
饋
|
| 7858 |
+
饌
|
| 7859 |
+
饑
|
| 7860 |
+
饒
|
| 7861 |
+
饕
|
| 7862 |
+
饗
|
| 7863 |
+
饞
|
| 7864 |
+
饟
|
| 7865 |
+
饢
|
| 7866 |
+
首
|
| 7867 |
+
馗
|
| 7868 |
+
馘
|
| 7869 |
+
香
|
| 7870 |
+
馛
|
| 7871 |
+
馥
|
| 7872 |
+
馦
|
| 7873 |
+
馨
|
| 7874 |
+
馬
|
| 7875 |
+
馭
|
| 7876 |
+
馮
|
| 7877 |
+
馯
|
| 7878 |
+
馱
|
| 7879 |
+
馳
|
| 7880 |
+
馴
|
| 7881 |
+
馼
|
| 7882 |
+
駁
|
| 7883 |
+
駄
|
| 7884 |
+
駅
|
| 7885 |
+
駆
|
| 7886 |
+
駐
|
| 7887 |
+
駑
|
| 7888 |
+
駒
|
| 7889 |
+
駔
|
| 7890 |
+
駕
|
| 7891 |
+
駘
|
| 7892 |
+
駙
|
| 7893 |
+
駛
|
| 7894 |
+
駝
|
| 7895 |
+
駟
|
| 7896 |
+
駢
|
| 7897 |
+
駭
|
| 7898 |
+
駰
|
| 7899 |
+
駱
|
| 7900 |
+
駿
|
| 7901 |
+
騁
|
| 7902 |
+
騂
|
| 7903 |
+
騄
|
| 7904 |
+
騅
|
| 7905 |
+
騋
|
| 7906 |
+
騎
|
| 7907 |
+
騏
|
| 7908 |
+
験
|
| 7909 |
+
騖
|
| 7910 |
+
騙
|
| 7911 |
+
騤
|
| 7912 |
+
騨
|
| 7913 |
+
騫
|
| 7914 |
+
騭
|
| 7915 |
+
騮
|
| 7916 |
+
騰
|
| 7917 |
+
騶
|
| 7918 |
+
騷
|
| 7919 |
+
騾
|
| 7920 |
+
驁
|
| 7921 |
+
驃
|
| 7922 |
+
驄
|
| 7923 |
+
驅
|
| 7924 |
+
驊
|
| 7925 |
+
驌
|
| 7926 |
+
驍
|
| 7927 |
+
驎
|
| 7928 |
+
驒
|
| 7929 |
+
驕
|
| 7930 |
+
驗
|
| 7931 |
+
驚
|
| 7932 |
+
驛
|
| 7933 |
+
驟
|
| 7934 |
+
驢
|
| 7935 |
+
驤
|
| 7936 |
+
驥
|
| 7937 |
+
驩
|
| 7938 |
+
驪
|
| 7939 |
+
骨
|
| 7940 |
+
骯
|
| 7941 |
+
骰
|
| 7942 |
+
骶
|
| 7943 |
+
骷
|
| 7944 |
+
骸
|
| 7945 |
+
骼
|
| 7946 |
+
髀
|
| 7947 |
+
髂
|
| 7948 |
+
髎
|
| 7949 |
+
髏
|
| 7950 |
+
髑
|
| 7951 |
+
髒
|
| 7952 |
+
髓
|
| 7953 |
+
體
|
| 7954 |
+
高
|
| 7955 |
+
髙
|
| 7956 |
+
髡
|
| 7957 |
+
髦
|
| 7958 |
+
髪
|
| 7959 |
+
髭
|
| 7960 |
+
髮
|
| 7961 |
+
髯
|
| 7962 |
+
髲
|
| 7963 |
+
髷
|
| 7964 |
+
髹
|
| 7965 |
+
髻
|
| 7966 |
+
鬃
|
| 7967 |
+
鬄
|
| 7968 |
+
鬅
|
| 7969 |
+
鬆
|
| 7970 |
+
鬍
|
| 7971 |
+
鬚
|
| 7972 |
+
鬟
|
| 7973 |
+
鬢
|
| 7974 |
+
鬣
|
| 7975 |
+
鬥
|
| 7976 |
+
鬧
|
| 7977 |
+
鬨
|
| 7978 |
+
鬩
|
| 7979 |
+
鬪
|
| 7980 |
+
鬬
|
| 7981 |
+
鬮
|
| 7982 |
+
鬯
|
| 7983 |
+
鬱
|
| 7984 |
+
鬲
|
| 7985 |
+
鬹
|
| 7986 |
+
鬻
|
| 7987 |
+
鬼
|
| 7988 |
+
魁
|
| 7989 |
+
魂
|
| 7990 |
+
魃
|
| 7991 |
+
魄
|
| 7992 |
+
魅
|
| 7993 |
+
魈
|
| 7994 |
+
魋
|
| 7995 |
+
魍
|
| 7996 |
+
魎
|
| 7997 |
+
魏
|
| 7998 |
+
魔
|
| 7999 |
+
魕
|
| 8000 |
+
魘
|
| 8001 |
+
魚
|
| 8002 |
+
魛
|
| 8003 |
+
魞
|
| 8004 |
+
魟
|
| 8005 |
+
魣
|
| 8006 |
+
魨
|
| 8007 |
+
魩
|
| 8008 |
+
魮
|
| 8009 |
+
魯
|
| 8010 |
+
魴
|
| 8011 |
+
魷
|
| 8012 |
+
鮀
|
| 8013 |
+
鮁
|
| 8014 |
+
鮃
|
| 8015 |
+
鮄
|
| 8016 |
+
鮊
|
| 8017 |
+
鮋
|
| 8018 |
+
鮍
|
| 8019 |
+
鮐
|
| 8020 |
+
鮑
|
| 8021 |
+
鮒
|
| 8022 |
+
鮓
|
| 8023 |
+
鮗
|
| 8024 |
+
鮜
|
| 8025 |
+
鮟
|
| 8026 |
+
鮠
|
| 8027 |
+
鮡
|
| 8028 |
+
鮣
|
| 8029 |
+
鮨
|
| 8030 |
+
鮪
|
| 8031 |
+
鮫
|
| 8032 |
+
鮭
|
| 8033 |
+
鮮
|
| 8034 |
+
鮰
|
| 8035 |
+
鮸
|
| 8036 |
+
鮹
|
| 8037 |
+
鮻
|
| 8038 |
+
鯀
|
| 8039 |
+
鯁
|
| 8040 |
+
鯃
|
| 8041 |
+
鯇
|
| 8042 |
+
鯉
|
| 8043 |
+
鯊
|
| 8044 |
+
鯏
|
| 8045 |
+
鯒
|
| 8046 |
+
鯓
|
| 8047 |
+
鯔
|
| 8048 |
+
鯕
|
| 8049 |
+
鯖
|
| 8050 |
+
鯗
|
| 8051 |
+
鯙
|
| 8052 |
+
鯛
|
| 8053 |
+
鯡
|
| 8054 |
+
鯢
|
| 8055 |
+
鯤
|
| 8056 |
+
鯧
|
| 8057 |
+
鯨
|
| 8058 |
+
鯪
|
| 8059 |
+
鯭
|
| 8060 |
+
鯮
|
| 8061 |
+
鯰
|
| 8062 |
+
鯶
|
| 8063 |
+
鯷
|
| 8064 |
+
鯻
|
| 8065 |
+
鯽
|
| 8066 |
+
鯿
|
| 8067 |
+
鰂
|
| 8068 |
+
鰃
|
| 8069 |
+
鰆
|
| 8070 |
+
鰈
|
| 8071 |
+
鰉
|
| 8072 |
+
鰍
|
| 8073 |
+
鰏
|
| 8074 |
+
鰒
|
| 8075 |
+
鰓
|
| 8076 |
+
鰕
|
| 8077 |
+
鰗
|
| 8078 |
+
鰛
|
| 8079 |
+
鰜
|
| 8080 |
+
鰟
|
| 8081 |
+
鰣
|
| 8082 |
+
鰤
|
| 8083 |
+
鰧
|
| 8084 |
+
鰨
|
| 8085 |
+
鰩
|
| 8086 |
+
鰭
|
| 8087 |
+
鰮
|
| 8088 |
+
鰱
|
| 8089 |
+
鰲
|
| 8090 |
+
鰳
|
| 8091 |
+
鰶
|
| 8092 |
+
鰷
|
| 8093 |
+
鰹
|
| 8094 |
+
鰺
|
| 8095 |
+
鰻
|
| 8096 |
+
鰼
|
| 8097 |
+
鰾
|
| 8098 |
+
鱀
|
| 8099 |
+
鱂
|
| 8100 |
+
鱅
|
| 8101 |
+
鱇
|
| 8102 |
+
鱈
|
| 8103 |
+
鱉
|
| 8104 |
+
鱊
|
| 8105 |
+
鱒
|
| 8106 |
+
鱓
|
| 8107 |
+
鱔
|
| 8108 |
+
鱖
|
| 8109 |
+
鱗
|
| 8110 |
+
鱘
|
| 8111 |
+
鱚
|
| 8112 |
+
鱝
|
| 8113 |
+
鱟
|
| 8114 |
+
鱠
|
| 8115 |
+
鱣
|
| 8116 |
+
鱥
|
| 8117 |
+
鱧
|
| 8118 |
+
鱨
|
| 8119 |
+
鱬
|
| 8120 |
+
鱮
|
| 8121 |
+
鱰
|
| 8122 |
+
鱲
|
| 8123 |
+
鱵
|
| 8124 |
+
鱷
|
| 8125 |
+
鱸
|
| 8126 |
+
鱺
|
| 8127 |
+
鱻
|
| 8128 |
+
鳥
|
| 8129 |
+
鳧
|
| 8130 |
+
鳩
|
| 8131 |
+
鳯
|
| 8132 |
+
鳰
|
| 8133 |
+
鳳
|
| 8134 |
+
鳴
|
| 8135 |
+
鳶
|
| 8136 |
+
鳽
|
| 8137 |
+
鴆
|
| 8138 |
+
鴇
|
| 8139 |
+
鴉
|
| 8140 |
+
鴒
|
| 8141 |
+
鴓
|
| 8142 |
+
鴕
|
| 8143 |
+
鴗
|
| 8144 |
+
鴛
|
| 8145 |
+
鴝
|
| 8146 |
+
鴞
|
| 8147 |
+
鴟
|
| 8148 |
+
鴡
|
| 8149 |
+
鴣
|
| 8150 |
+
鴦
|
| 8151 |
+
鴨
|
| 8152 |
+
鴫
|
| 8153 |
+
鴯
|
| 8154 |
+
鴰
|
| 8155 |
+
鴴
|
| 8156 |
+
鴻
|
| 8157 |
+
鴿
|
| 8158 |
+
鵂
|
| 8159 |
+
鵄
|
| 8160 |
+
鵎
|
| 8161 |
+
鵐
|
| 8162 |
+
鵑
|
| 8163 |
+
鵒
|
| 8164 |
+
鵓
|
| 8165 |
+
鵙
|
| 8166 |
+
鵜
|
| 8167 |
+
鵝
|
| 8168 |
+
鵞
|
| 8169 |
+
鵟
|
| 8170 |
+
鵠
|
| 8171 |
+
鵡
|
| 8172 |
+
鵪
|
| 8173 |
+
鵬
|
| 8174 |
+
鵯
|
| 8175 |
+
鵰
|
| 8176 |
+
鵲
|
| 8177 |
+
鵵
|
| 8178 |
+
鵼
|
| 8179 |
+
鵾
|
| 8180 |
+
鶆
|
| 8181 |
+
鶇
|
| 8182 |
+
鶉
|
| 8183 |
+
鶏
|
| 8184 |
+
鶒
|
| 8185 |
+
鶓
|
| 8186 |
+
鶘
|
| 8187 |
+
鶚
|
| 8188 |
+
鶡
|
| 8189 |
+
鶥
|
| 8190 |
+
鶩
|
| 8191 |
+
鶬
|
| 8192 |
+
鶯
|
| 8193 |
+
鶲
|
| 8194 |
+
鶴
|
| 8195 |
+
鶹
|
| 8196 |
+
鶺
|
| 8197 |
+
鶻
|
| 8198 |
+
鶼
|
| 8199 |
+
鶿
|
| 8200 |
+
鷂
|
| 8201 |
+
鷄
|
| 8202 |
+
鷉
|
| 8203 |
+
鷎
|
| 8204 |
+
鷓
|
| 8205 |
+
鷗
|
| 8206 |
+
鷙
|
| 8207 |
+
鷚
|
| 8208 |
+
鷟
|
| 8209 |
+
鷥
|
| 8210 |
+
鷦
|
| 8211 |
+
鷫
|
| 8212 |
+
鷯
|
| 8213 |
+
鷲
|
| 8214 |
+
鷳
|
| 8215 |
+
鷸
|
| 8216 |
+
鷹
|
| 8217 |
+
鷺
|
| 8218 |
+
鸊
|
| 8219 |
+
鸌
|
| 8220 |
+
鸐
|
| 8221 |
+
鸑
|
| 8222 |
+
鸕
|
| 8223 |
+
鸘
|
| 8224 |
+
鸚
|
| 8225 |
+
鸛
|
| 8226 |
+
鸜
|
| 8227 |
+
鸝
|
| 8228 |
+
鸞
|
| 8229 |
+
鹮
|
| 8230 |
+
鹵
|
| 8231 |
+
鹹
|
| 8232 |
+
鹼
|
| 8233 |
+
鹽
|
| 8234 |
+
鹿
|
| 8235 |
+
麂
|
| 8236 |
+
麅
|
| 8237 |
+
麇
|
| 8238 |
+
麈
|
| 8239 |
+
麊
|
| 8240 |
+
麋
|
| 8241 |
+
麐
|
| 8242 |
+
麒
|
| 8243 |
+
麓
|
| 8244 |
+
麗
|
| 8245 |
+
麝
|
| 8246 |
+
麞
|
| 8247 |
+
麟
|
| 8248 |
+
麥
|
| 8249 |
+
麩
|
| 8250 |
+
麪
|
| 8251 |
+
麯
|
| 8252 |
+
麴
|
| 8253 |
+
麵
|
| 8254 |
+
麹
|
| 8255 |
+
麺
|
| 8256 |
+
麻
|
| 8257 |
+
麼
|
| 8258 |
+
麽
|
| 8259 |
+
麾
|
| 8260 |
+
麿
|
| 8261 |
+
黁
|
| 8262 |
+
黃
|
| 8263 |
+
黇
|
| 8264 |
+
黌
|
| 8265 |
+
黍
|
| 8266 |
+
黎
|
| 8267 |
+
黏
|
| 8268 |
+
黐
|
| 8269 |
+
黑
|
| 8270 |
+
黒
|
| 8271 |
+
黔
|
| 8272 |
+
默
|
| 8273 |
+
黙
|
| 8274 |
+
黛
|
| 8275 |
+
黜
|
| 8276 |
+
黝
|
| 8277 |
+
點
|
| 8278 |
+
黟
|
| 8279 |
+
黥
|
| 8280 |
+
黧
|
| 8281 |
+
黨
|
| 8282 |
+
黯
|
| 8283 |
+
黴
|
| 8284 |
+
黶
|
| 8285 |
+
黻
|
| 8286 |
+
黼
|
| 8287 |
+
黽
|
| 8288 |
+
黿
|
| 8289 |
+
鼂
|
| 8290 |
+
鼇
|
| 8291 |
+
鼈
|
| 8292 |
+
鼉
|
| 8293 |
+
鼎
|
| 8294 |
+
鼐
|
| 8295 |
+
鼒
|
| 8296 |
+
鼓
|
| 8297 |
+
鼕
|
| 8298 |
+
鼙
|
| 8299 |
+
鼠
|
| 8300 |
+
鼢
|
| 8301 |
+
鼩
|
| 8302 |
+
鼬
|
| 8303 |
+
鼯
|
| 8304 |
+
鼱
|
| 8305 |
+
鼴
|
| 8306 |
+
鼷
|
| 8307 |
+
鼻
|
| 8308 |
+
鼽
|
| 8309 |
+
鼾
|
| 8310 |
+
齊
|
| 8311 |
+
齋
|
| 8312 |
+
齒
|
| 8313 |
+
齕
|
| 8314 |
+
齡
|
| 8315 |
+
齣
|
| 8316 |
+
齦
|
| 8317 |
+
齧
|
| 8318 |
+
齲
|
| 8319 |
+
齶
|
| 8320 |
+
龍
|
| 8321 |
+
龎
|
| 8322 |
+
龐
|
| 8323 |
+
龑
|
| 8324 |
+
龔
|
| 8325 |
+
龕
|
| 8326 |
+
龜
|
| 8327 |
+
龝
|
| 8328 |
+
龠
|
| 8329 |
+
龢
|
| 8330 |
+
郎
|
| 8331 |
+
凉
|
| 8332 |
+
﹑
|
| 8333 |
+
﹗
|
| 8334 |
+
﹝
|
| 8335 |
+
﹞
|
| 8336 |
+
﹢
|
| 8337 |
+
!
|
| 8338 |
+
"
|
| 8339 |
+
#
|
| 8340 |
+
$
|
| 8341 |
+
%
|
| 8342 |
+
&
|
| 8343 |
+
'
|
| 8344 |
+
(
|
| 8345 |
+
)
|
| 8346 |
+
*
|
| 8347 |
+
+
|
| 8348 |
+
,
|
| 8349 |
+
-
|
| 8350 |
+
.
|
| 8351 |
+
/
|
| 8352 |
+
0
|
| 8353 |
+
1
|
| 8354 |
+
2
|
| 8355 |
+
3
|
| 8356 |
+
4
|
| 8357 |
+
5
|
| 8358 |
+
6
|
| 8359 |
+
7
|
| 8360 |
+
8
|
| 8361 |
+
9
|
| 8362 |
+
:
|
| 8363 |
+
;
|
| 8364 |
+
<
|
| 8365 |
+
=
|
| 8366 |
+
>
|
| 8367 |
+
?
|
| 8368 |
+
A
|
| 8369 |
+
B
|
| 8370 |
+
C
|
| 8371 |
+
D
|
| 8372 |
+
E
|
| 8373 |
+
F
|
| 8374 |
+
G
|
| 8375 |
+
H
|
| 8376 |
+
I
|
| 8377 |
+
K
|
| 8378 |
+
L
|
| 8379 |
+
M
|
| 8380 |
+
N
|
| 8381 |
+
O
|
| 8382 |
+
P
|
| 8383 |
+
R
|
| 8384 |
+
S
|
| 8385 |
+
T
|
| 8386 |
+
U
|
| 8387 |
+
V
|
| 8388 |
+
W
|
| 8389 |
+
Y
|
| 8390 |
+
Z
|
| 8391 |
+
[
|
| 8392 |
+
]
|
| 8393 |
+
`
|
| 8394 |
+
a
|
| 8395 |
+
b
|
| 8396 |
+
c
|
| 8397 |
+
d
|
| 8398 |
+
e
|
| 8399 |
+
f
|
| 8400 |
+
g
|
| 8401 |
+
h
|
| 8402 |
+
i
|
| 8403 |
+
j
|
| 8404 |
+
k
|
| 8405 |
+
l
|
| 8406 |
+
m
|
| 8407 |
+
n
|
| 8408 |
+
o
|
| 8409 |
+
p
|
| 8410 |
+
r
|
| 8411 |
+
s
|
| 8412 |
+
t
|
| 8413 |
+
u
|
| 8414 |
+
z
|
| 8415 |
+
{
|
| 8416 |
+
|
|
| 8417 |
+
}
|
| 8418 |
+
~
|
| 8419 |
+
¥
|
| 8420 |
+
𣇉
|
| 8421 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/confuse.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:57d8aa98a781330f7534a81263179e77c159a37050bd31fe09d8ddf1880c5628
|
| 3 |
+
size 30912
|
ocr-studio/PaddleOCR/ppocr/utils/dict/cyrillic_dict.txt
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
!
|
| 3 |
+
#
|
| 4 |
+
$
|
| 5 |
+
%
|
| 6 |
+
&
|
| 7 |
+
'
|
| 8 |
+
(
|
| 9 |
+
+
|
| 10 |
+
,
|
| 11 |
+
-
|
| 12 |
+
.
|
| 13 |
+
/
|
| 14 |
+
0
|
| 15 |
+
1
|
| 16 |
+
2
|
| 17 |
+
3
|
| 18 |
+
4
|
| 19 |
+
5
|
| 20 |
+
6
|
| 21 |
+
7
|
| 22 |
+
8
|
| 23 |
+
9
|
| 24 |
+
:
|
| 25 |
+
?
|
| 26 |
+
@
|
| 27 |
+
A
|
| 28 |
+
B
|
| 29 |
+
C
|
| 30 |
+
D
|
| 31 |
+
E
|
| 32 |
+
F
|
| 33 |
+
G
|
| 34 |
+
H
|
| 35 |
+
I
|
| 36 |
+
J
|
| 37 |
+
K
|
| 38 |
+
L
|
| 39 |
+
M
|
| 40 |
+
N
|
| 41 |
+
O
|
| 42 |
+
P
|
| 43 |
+
Q
|
| 44 |
+
R
|
| 45 |
+
S
|
| 46 |
+
T
|
| 47 |
+
U
|
| 48 |
+
V
|
| 49 |
+
W
|
| 50 |
+
X
|
| 51 |
+
Y
|
| 52 |
+
Z
|
| 53 |
+
_
|
| 54 |
+
a
|
| 55 |
+
b
|
| 56 |
+
c
|
| 57 |
+
d
|
| 58 |
+
e
|
| 59 |
+
f
|
| 60 |
+
g
|
| 61 |
+
h
|
| 62 |
+
i
|
| 63 |
+
j
|
| 64 |
+
k
|
| 65 |
+
l
|
| 66 |
+
m
|
| 67 |
+
n
|
| 68 |
+
o
|
| 69 |
+
p
|
| 70 |
+
q
|
| 71 |
+
r
|
| 72 |
+
s
|
| 73 |
+
t
|
| 74 |
+
u
|
| 75 |
+
v
|
| 76 |
+
w
|
| 77 |
+
x
|
| 78 |
+
y
|
| 79 |
+
z
|
| 80 |
+
É
|
| 81 |
+
é
|
| 82 |
+
Ё
|
| 83 |
+
Є
|
| 84 |
+
І
|
| 85 |
+
Ј
|
| 86 |
+
Љ
|
| 87 |
+
Ў
|
| 88 |
+
А
|
| 89 |
+
Б
|
| 90 |
+
В
|
| 91 |
+
Г
|
| 92 |
+
Д
|
| 93 |
+
Е
|
| 94 |
+
Ж
|
| 95 |
+
З
|
| 96 |
+
И
|
| 97 |
+
Й
|
| 98 |
+
К
|
| 99 |
+
Л
|
| 100 |
+
М
|
| 101 |
+
Н
|
| 102 |
+
О
|
| 103 |
+
П
|
| 104 |
+
Р
|
| 105 |
+
С
|
| 106 |
+
Т
|
| 107 |
+
У
|
| 108 |
+
Ф
|
| 109 |
+
Х
|
| 110 |
+
Ц
|
| 111 |
+
Ч
|
| 112 |
+
Ш
|
| 113 |
+
Щ
|
| 114 |
+
Ъ
|
| 115 |
+
Ы
|
| 116 |
+
Ь
|
| 117 |
+
Э
|
| 118 |
+
Ю
|
| 119 |
+
Я
|
| 120 |
+
а
|
| 121 |
+
б
|
| 122 |
+
в
|
| 123 |
+
г
|
| 124 |
+
д
|
| 125 |
+
е
|
| 126 |
+
ж
|
| 127 |
+
з
|
| 128 |
+
и
|
| 129 |
+
й
|
| 130 |
+
к
|
| 131 |
+
л
|
| 132 |
+
м
|
| 133 |
+
н
|
| 134 |
+
о
|
| 135 |
+
п
|
| 136 |
+
р
|
| 137 |
+
с
|
| 138 |
+
т
|
| 139 |
+
у
|
| 140 |
+
ф
|
| 141 |
+
х
|
| 142 |
+
ц
|
| 143 |
+
ч
|
| 144 |
+
ш
|
| 145 |
+
щ
|
| 146 |
+
ъ
|
| 147 |
+
ы
|
| 148 |
+
ь
|
| 149 |
+
э
|
| 150 |
+
ю
|
| 151 |
+
я
|
| 152 |
+
ё
|
| 153 |
+
ђ
|
| 154 |
+
є
|
| 155 |
+
і
|
| 156 |
+
ј
|
| 157 |
+
љ
|
| 158 |
+
њ
|
| 159 |
+
ћ
|
| 160 |
+
ў
|
| 161 |
+
џ
|
| 162 |
+
Ґ
|
| 163 |
+
ґ
|
ocr-studio/PaddleOCR/ppocr/utils/dict/devanagari_dict.txt
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
!
|
| 3 |
+
#
|
| 4 |
+
$
|
| 5 |
+
%
|
| 6 |
+
&
|
| 7 |
+
'
|
| 8 |
+
(
|
| 9 |
+
+
|
| 10 |
+
,
|
| 11 |
+
-
|
| 12 |
+
.
|
| 13 |
+
/
|
| 14 |
+
0
|
| 15 |
+
1
|
| 16 |
+
2
|
| 17 |
+
3
|
| 18 |
+
4
|
| 19 |
+
5
|
| 20 |
+
6
|
| 21 |
+
7
|
| 22 |
+
8
|
| 23 |
+
9
|
| 24 |
+
:
|
| 25 |
+
?
|
| 26 |
+
@
|
| 27 |
+
A
|
| 28 |
+
B
|
| 29 |
+
C
|
| 30 |
+
D
|
| 31 |
+
E
|
| 32 |
+
F
|
| 33 |
+
G
|
| 34 |
+
H
|
| 35 |
+
I
|
| 36 |
+
J
|
| 37 |
+
K
|
| 38 |
+
L
|
| 39 |
+
M
|
| 40 |
+
N
|
| 41 |
+
O
|
| 42 |
+
P
|
| 43 |
+
Q
|
| 44 |
+
R
|
| 45 |
+
S
|
| 46 |
+
T
|
| 47 |
+
U
|
| 48 |
+
V
|
| 49 |
+
W
|
| 50 |
+
X
|
| 51 |
+
Y
|
| 52 |
+
Z
|
| 53 |
+
_
|
| 54 |
+
a
|
| 55 |
+
b
|
| 56 |
+
c
|
| 57 |
+
d
|
| 58 |
+
e
|
| 59 |
+
f
|
| 60 |
+
g
|
| 61 |
+
h
|
| 62 |
+
i
|
| 63 |
+
j
|
| 64 |
+
k
|
| 65 |
+
l
|
| 66 |
+
m
|
| 67 |
+
n
|
| 68 |
+
o
|
| 69 |
+
p
|
| 70 |
+
q
|
| 71 |
+
r
|
| 72 |
+
s
|
| 73 |
+
t
|
| 74 |
+
u
|
| 75 |
+
v
|
| 76 |
+
w
|
| 77 |
+
x
|
| 78 |
+
y
|
| 79 |
+
z
|
| 80 |
+
É
|
| 81 |
+
é
|
| 82 |
+
ँ
|
| 83 |
+
ं
|
| 84 |
+
ः
|
| 85 |
+
अ
|
| 86 |
+
आ
|
| 87 |
+
इ
|
| 88 |
+
ई
|
| 89 |
+
उ
|
| 90 |
+
ऊ
|
| 91 |
+
ऋ
|
| 92 |
+
ए
|
| 93 |
+
ऐ
|
| 94 |
+
ऑ
|
| 95 |
+
ओ
|
| 96 |
+
औ
|
| 97 |
+
क
|
| 98 |
+
ख
|
| 99 |
+
ग
|
| 100 |
+
घ
|
| 101 |
+
ङ
|
| 102 |
+
च
|
| 103 |
+
छ
|
| 104 |
+
ज
|
| 105 |
+
झ
|
| 106 |
+
ञ
|
| 107 |
+
ट
|
| 108 |
+
ठ
|
| 109 |
+
ड
|
| 110 |
+
ढ
|
| 111 |
+
ण
|
| 112 |
+
त
|
| 113 |
+
थ
|
| 114 |
+
द
|
| 115 |
+
ध
|
| 116 |
+
न
|
| 117 |
+
ऩ
|
| 118 |
+
प
|
| 119 |
+
फ
|
| 120 |
+
ब
|
| 121 |
+
भ
|
| 122 |
+
म
|
| 123 |
+
य
|
| 124 |
+
र
|
| 125 |
+
ऱ
|
| 126 |
+
ल
|
| 127 |
+
ळ
|
| 128 |
+
व
|
| 129 |
+
श
|
| 130 |
+
ष
|
| 131 |
+
स
|
| 132 |
+
ह
|
| 133 |
+
़
|
| 134 |
+
ा
|
| 135 |
+
ि
|
| 136 |
+
ी
|
| 137 |
+
ु
|
| 138 |
+
ू
|
| 139 |
+
ृ
|
| 140 |
+
ॅ
|
| 141 |
+
े
|
| 142 |
+
ै
|
| 143 |
+
ॉ
|
| 144 |
+
ो
|
| 145 |
+
ौ
|
| 146 |
+
्
|
| 147 |
+
॒
|
| 148 |
+
क़
|
| 149 |
+
ख़
|
| 150 |
+
ग़
|
| 151 |
+
ज़
|
| 152 |
+
ड़
|
| 153 |
+
ढ़
|
| 154 |
+
फ़
|
| 155 |
+
ॠ
|
| 156 |
+
।
|
| 157 |
+
०
|
| 158 |
+
१
|
| 159 |
+
२
|
| 160 |
+
३
|
| 161 |
+
४
|
| 162 |
+
५
|
| 163 |
+
६
|
| 164 |
+
७
|
| 165 |
+
८
|
| 166 |
+
९
|
| 167 |
+
॰
|
ocr-studio/PaddleOCR/ppocr/utils/dict/en_dict.txt
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
0
|
| 2 |
+
1
|
| 3 |
+
2
|
| 4 |
+
3
|
| 5 |
+
4
|
| 6 |
+
5
|
| 7 |
+
6
|
| 8 |
+
7
|
| 9 |
+
8
|
| 10 |
+
9
|
| 11 |
+
a
|
| 12 |
+
b
|
| 13 |
+
c
|
| 14 |
+
d
|
| 15 |
+
e
|
| 16 |
+
f
|
| 17 |
+
g
|
| 18 |
+
h
|
| 19 |
+
i
|
| 20 |
+
j
|
| 21 |
+
k
|
| 22 |
+
l
|
| 23 |
+
m
|
| 24 |
+
n
|
| 25 |
+
o
|
| 26 |
+
p
|
| 27 |
+
q
|
| 28 |
+
r
|
| 29 |
+
s
|
| 30 |
+
t
|
| 31 |
+
u
|
| 32 |
+
v
|
| 33 |
+
w
|
| 34 |
+
x
|
| 35 |
+
y
|
| 36 |
+
z
|
| 37 |
+
A
|
| 38 |
+
B
|
| 39 |
+
C
|
| 40 |
+
D
|
| 41 |
+
E
|
| 42 |
+
F
|
| 43 |
+
G
|
| 44 |
+
H
|
| 45 |
+
I
|
| 46 |
+
J
|
| 47 |
+
K
|
| 48 |
+
L
|
| 49 |
+
M
|
| 50 |
+
N
|
| 51 |
+
O
|
| 52 |
+
P
|
| 53 |
+
Q
|
| 54 |
+
R
|
| 55 |
+
S
|
| 56 |
+
T
|
| 57 |
+
U
|
| 58 |
+
V
|
| 59 |
+
W
|
| 60 |
+
X
|
| 61 |
+
Y
|
| 62 |
+
Z
|
| 63 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/fa_dict.txt
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
f
|
| 2 |
+
a
|
| 3 |
+
_
|
| 4 |
+
i
|
| 5 |
+
m
|
| 6 |
+
g
|
| 7 |
+
/
|
| 8 |
+
1
|
| 9 |
+
3
|
| 10 |
+
I
|
| 11 |
+
L
|
| 12 |
+
S
|
| 13 |
+
V
|
| 14 |
+
R
|
| 15 |
+
C
|
| 16 |
+
2
|
| 17 |
+
0
|
| 18 |
+
v
|
| 19 |
+
l
|
| 20 |
+
6
|
| 21 |
+
8
|
| 22 |
+
5
|
| 23 |
+
.
|
| 24 |
+
j
|
| 25 |
+
p
|
| 26 |
+
و
|
| 27 |
+
د
|
| 28 |
+
ر
|
| 29 |
+
ك
|
| 30 |
+
ن
|
| 31 |
+
ش
|
| 32 |
+
ه
|
| 33 |
+
ا
|
| 34 |
+
4
|
| 35 |
+
9
|
| 36 |
+
ی
|
| 37 |
+
ج
|
| 38 |
+
ِ
|
| 39 |
+
7
|
| 40 |
+
غ
|
| 41 |
+
ل
|
| 42 |
+
س
|
| 43 |
+
ز
|
| 44 |
+
ّ
|
| 45 |
+
ت
|
| 46 |
+
ک
|
| 47 |
+
گ
|
| 48 |
+
ي
|
| 49 |
+
م
|
| 50 |
+
ب
|
| 51 |
+
ف
|
| 52 |
+
چ
|
| 53 |
+
خ
|
| 54 |
+
ق
|
| 55 |
+
ژ
|
| 56 |
+
آ
|
| 57 |
+
ص
|
| 58 |
+
پ
|
| 59 |
+
َ
|
| 60 |
+
ع
|
| 61 |
+
ئ
|
| 62 |
+
ح
|
| 63 |
+
ٔ
|
| 64 |
+
ض
|
| 65 |
+
ُ
|
| 66 |
+
ذ
|
| 67 |
+
أ
|
| 68 |
+
ى
|
| 69 |
+
ط
|
| 70 |
+
ظ
|
| 71 |
+
ث
|
| 72 |
+
ة
|
| 73 |
+
ً
|
| 74 |
+
ء
|
| 75 |
+
ؤ
|
| 76 |
+
ْ
|
| 77 |
+
ۀ
|
| 78 |
+
إ
|
| 79 |
+
ٍ
|
| 80 |
+
ٌ
|
| 81 |
+
ٰ
|
| 82 |
+
ٓ
|
| 83 |
+
ٱ
|
| 84 |
+
s
|
| 85 |
+
c
|
| 86 |
+
e
|
| 87 |
+
n
|
| 88 |
+
w
|
| 89 |
+
N
|
| 90 |
+
E
|
| 91 |
+
W
|
| 92 |
+
Y
|
| 93 |
+
D
|
| 94 |
+
O
|
| 95 |
+
H
|
| 96 |
+
A
|
| 97 |
+
d
|
| 98 |
+
z
|
| 99 |
+
r
|
| 100 |
+
T
|
| 101 |
+
G
|
| 102 |
+
o
|
| 103 |
+
t
|
| 104 |
+
x
|
| 105 |
+
h
|
| 106 |
+
b
|
| 107 |
+
B
|
| 108 |
+
M
|
| 109 |
+
Z
|
| 110 |
+
u
|
| 111 |
+
P
|
| 112 |
+
F
|
| 113 |
+
y
|
| 114 |
+
q
|
| 115 |
+
U
|
| 116 |
+
K
|
| 117 |
+
k
|
| 118 |
+
J
|
| 119 |
+
Q
|
| 120 |
+
'
|
| 121 |
+
X
|
| 122 |
+
#
|
| 123 |
+
?
|
| 124 |
+
%
|
| 125 |
+
$
|
| 126 |
+
,
|
| 127 |
+
:
|
| 128 |
+
&
|
| 129 |
+
!
|
| 130 |
+
-
|
| 131 |
+
(
|
| 132 |
+
É
|
| 133 |
+
@
|
| 134 |
+
é
|
| 135 |
+
+
|
| 136 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/fi_dict.txt
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
!
|
| 2 |
+
#
|
| 3 |
+
$
|
| 4 |
+
%
|
| 5 |
+
&
|
| 6 |
+
'
|
| 7 |
+
(
|
| 8 |
+
+
|
| 9 |
+
,
|
| 10 |
+
-
|
| 11 |
+
.
|
| 12 |
+
/
|
| 13 |
+
0
|
| 14 |
+
1
|
| 15 |
+
2
|
| 16 |
+
3
|
| 17 |
+
4
|
| 18 |
+
5
|
| 19 |
+
6
|
| 20 |
+
7
|
| 21 |
+
8
|
| 22 |
+
9
|
| 23 |
+
a
|
| 24 |
+
b
|
| 25 |
+
c
|
| 26 |
+
d
|
| 27 |
+
e
|
| 28 |
+
f
|
| 29 |
+
g
|
| 30 |
+
h
|
| 31 |
+
i
|
| 32 |
+
j
|
| 33 |
+
k
|
| 34 |
+
l
|
| 35 |
+
m
|
| 36 |
+
n
|
| 37 |
+
o
|
| 38 |
+
p
|
| 39 |
+
q
|
| 40 |
+
r
|
| 41 |
+
s
|
| 42 |
+
t
|
| 43 |
+
u
|
| 44 |
+
v
|
| 45 |
+
w
|
| 46 |
+
x
|
| 47 |
+
y
|
| 48 |
+
z
|
| 49 |
+
å
|
| 50 |
+
ä
|
| 51 |
+
ö
|
| 52 |
+
A
|
| 53 |
+
B
|
| 54 |
+
C
|
| 55 |
+
D
|
| 56 |
+
E
|
| 57 |
+
F
|
| 58 |
+
G
|
| 59 |
+
H
|
| 60 |
+
I
|
| 61 |
+
J
|
| 62 |
+
K
|
| 63 |
+
L
|
| 64 |
+
M
|
| 65 |
+
N
|
| 66 |
+
O
|
| 67 |
+
P
|
| 68 |
+
Q
|
| 69 |
+
R
|
| 70 |
+
S
|
| 71 |
+
T
|
| 72 |
+
U
|
| 73 |
+
V
|
| 74 |
+
W
|
| 75 |
+
X
|
| 76 |
+
Y
|
| 77 |
+
Z
|
| 78 |
+
Å
|
| 79 |
+
Ä
|
| 80 |
+
Ö
|
ocr-studio/PaddleOCR/ppocr/utils/dict/french_dict.txt
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
f
|
| 2 |
+
e
|
| 3 |
+
n
|
| 4 |
+
c
|
| 5 |
+
h
|
| 6 |
+
_
|
| 7 |
+
i
|
| 8 |
+
m
|
| 9 |
+
g
|
| 10 |
+
/
|
| 11 |
+
r
|
| 12 |
+
v
|
| 13 |
+
a
|
| 14 |
+
l
|
| 15 |
+
t
|
| 16 |
+
w
|
| 17 |
+
o
|
| 18 |
+
d
|
| 19 |
+
6
|
| 20 |
+
1
|
| 21 |
+
.
|
| 22 |
+
p
|
| 23 |
+
B
|
| 24 |
+
u
|
| 25 |
+
2
|
| 26 |
+
à
|
| 27 |
+
3
|
| 28 |
+
R
|
| 29 |
+
y
|
| 30 |
+
4
|
| 31 |
+
U
|
| 32 |
+
E
|
| 33 |
+
A
|
| 34 |
+
5
|
| 35 |
+
P
|
| 36 |
+
O
|
| 37 |
+
S
|
| 38 |
+
T
|
| 39 |
+
D
|
| 40 |
+
7
|
| 41 |
+
Z
|
| 42 |
+
8
|
| 43 |
+
I
|
| 44 |
+
N
|
| 45 |
+
L
|
| 46 |
+
G
|
| 47 |
+
M
|
| 48 |
+
H
|
| 49 |
+
0
|
| 50 |
+
J
|
| 51 |
+
K
|
| 52 |
+
-
|
| 53 |
+
9
|
| 54 |
+
F
|
| 55 |
+
C
|
| 56 |
+
V
|
| 57 |
+
é
|
| 58 |
+
X
|
| 59 |
+
'
|
| 60 |
+
s
|
| 61 |
+
Q
|
| 62 |
+
:
|
| 63 |
+
è
|
| 64 |
+
x
|
| 65 |
+
b
|
| 66 |
+
Y
|
| 67 |
+
Œ
|
| 68 |
+
É
|
| 69 |
+
z
|
| 70 |
+
W
|
| 71 |
+
Ç
|
| 72 |
+
È
|
| 73 |
+
k
|
| 74 |
+
Ô
|
| 75 |
+
ô
|
| 76 |
+
€
|
| 77 |
+
À
|
| 78 |
+
Ê
|
| 79 |
+
q
|
| 80 |
+
ù
|
| 81 |
+
°
|
| 82 |
+
ê
|
| 83 |
+
î
|
| 84 |
+
*
|
| 85 |
+
Â
|
| 86 |
+
j
|
| 87 |
+
"
|
| 88 |
+
,
|
| 89 |
+
â
|
| 90 |
+
%
|
| 91 |
+
û
|
| 92 |
+
ç
|
| 93 |
+
ü
|
| 94 |
+
?
|
| 95 |
+
!
|
| 96 |
+
;
|
| 97 |
+
ö
|
| 98 |
+
(
|
| 99 |
+
)
|
| 100 |
+
ï
|
| 101 |
+
º
|
| 102 |
+
ó
|
| 103 |
+
ø
|
| 104 |
+
å
|
| 105 |
+
+
|
| 106 |
+
™
|
| 107 |
+
á
|
| 108 |
+
Ë
|
| 109 |
+
<
|
| 110 |
+
²
|
| 111 |
+
Á
|
| 112 |
+
Î
|
| 113 |
+
&
|
| 114 |
+
@
|
| 115 |
+
œ
|
| 116 |
+
ε
|
| 117 |
+
Ü
|
| 118 |
+
ë
|
| 119 |
+
[
|
| 120 |
+
]
|
| 121 |
+
í
|
| 122 |
+
ò
|
| 123 |
+
Ö
|
| 124 |
+
ä
|
| 125 |
+
ß
|
| 126 |
+
«
|
| 127 |
+
»
|
| 128 |
+
ú
|
| 129 |
+
ñ
|
| 130 |
+
æ
|
| 131 |
+
µ
|
| 132 |
+
³
|
| 133 |
+
Å
|
| 134 |
+
$
|
| 135 |
+
#
|
| 136 |
+
|
ocr-studio/PaddleOCR/ppocr/utils/dict/german_dict.txt
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
!
|
| 3 |
+
"
|
| 4 |
+
#
|
| 5 |
+
$
|
| 6 |
+
%
|
| 7 |
+
&
|
| 8 |
+
'
|
| 9 |
+
(
|
| 10 |
+
)
|
| 11 |
+
*
|
| 12 |
+
+
|
| 13 |
+
,
|
| 14 |
+
-
|
| 15 |
+
.
|
| 16 |
+
/
|
| 17 |
+
0
|
| 18 |
+
1
|
| 19 |
+
2
|
| 20 |
+
3
|
| 21 |
+
4
|
| 22 |
+
5
|
| 23 |
+
6
|
| 24 |
+
7
|
| 25 |
+
8
|
| 26 |
+
9
|
| 27 |
+
:
|
| 28 |
+
;
|
| 29 |
+
=
|
| 30 |
+
>
|
| 31 |
+
?
|
| 32 |
+
@
|
| 33 |
+
A
|
| 34 |
+
B
|
| 35 |
+
C
|
| 36 |
+
D
|
| 37 |
+
E
|
| 38 |
+
F
|
| 39 |
+
G
|
| 40 |
+
H
|
| 41 |
+
I
|
| 42 |
+
J
|
| 43 |
+
K
|
| 44 |
+
L
|
| 45 |
+
M
|
| 46 |
+
N
|
| 47 |
+
O
|
| 48 |
+
P
|
| 49 |
+
Q
|
| 50 |
+
R
|
| 51 |
+
S
|
| 52 |
+
T
|
| 53 |
+
U
|
| 54 |
+
V
|
| 55 |
+
W
|
| 56 |
+
X
|
| 57 |
+
Y
|
| 58 |
+
Z
|
| 59 |
+
[
|
| 60 |
+
]
|
| 61 |
+
_
|
| 62 |
+
a
|
| 63 |
+
b
|
| 64 |
+
c
|
| 65 |
+
d
|
| 66 |
+
e
|
| 67 |
+
f
|
| 68 |
+
g
|
| 69 |
+
h
|
| 70 |
+
i
|
| 71 |
+
j
|
| 72 |
+
k
|
| 73 |
+
l
|
| 74 |
+
m
|
| 75 |
+
n
|
| 76 |
+
o
|
| 77 |
+
p
|
| 78 |
+
q
|
| 79 |
+
r
|
| 80 |
+
s
|
| 81 |
+
t
|
| 82 |
+
u
|
| 83 |
+
v
|
| 84 |
+
w
|
| 85 |
+
x
|
| 86 |
+
y
|
| 87 |
+
z
|
| 88 |
+
£
|
| 89 |
+
§
|
| 90 |
+
|
| 91 |
+
°
|
| 92 |
+
´
|
| 93 |
+
µ
|
| 94 |
+
·
|
| 95 |
+
º
|
| 96 |
+
¿
|
| 97 |
+
Á
|
| 98 |
+
Ä
|
| 99 |
+
Å
|
| 100 |
+
É
|
| 101 |
+
Ï
|
| 102 |
+
Ô
|
| 103 |
+
Ö
|
| 104 |
+
Ü
|
| 105 |
+
ß
|
| 106 |
+
à
|
| 107 |
+
á
|
| 108 |
+
â
|
| 109 |
+
ã
|
| 110 |
+
ä
|
| 111 |
+
å
|
| 112 |
+
æ
|
| 113 |
+
ç
|
| 114 |
+
è
|
| 115 |
+
é
|
| 116 |
+
ê
|
| 117 |
+
ë
|
| 118 |
+
í
|
| 119 |
+
ï
|
| 120 |
+
ñ
|
| 121 |
+
ò
|
| 122 |
+
ó
|
| 123 |
+
ô
|
| 124 |
+
ö
|
| 125 |
+
ø
|
| 126 |
+
ù
|
| 127 |
+
ú
|
| 128 |
+
û
|
| 129 |
+
ü
|
| 130 |
+
ō
|
| 131 |
+
Š
|
| 132 |
+
Ÿ
|
| 133 |
+
ʒ
|
| 134 |
+
β
|
| 135 |
+
δ
|
| 136 |
+
з
|
| 137 |
+
Ṡ
|
| 138 |
+
‘
|
| 139 |
+
€
|
| 140 |
+
©
|
| 141 |
+
ª
|
| 142 |
+
«
|
| 143 |
+
¬
|
ocr-studio/PaddleOCR/ppocr/utils/dict/gujarati_dict.txt
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
અ
|
| 2 |
+
આ
|
| 3 |
+
ઇ
|
| 4 |
+
ઈ
|
| 5 |
+
ઉ
|
| 6 |
+
ઊ
|
| 7 |
+
ઋ
|
| 8 |
+
ઌ
|
| 9 |
+
એ
|
| 10 |
+
ઐ
|
| 11 |
+
ઓ
|
| 12 |
+
ઔ
|
| 13 |
+
અં
|
| 14 |
+
અઃ
|
| 15 |
+
ક
|
| 16 |
+
ખ
|
| 17 |
+
ગ
|
| 18 |
+
ઘ
|
| 19 |
+
ઙ
|
| 20 |
+
ચ
|
| 21 |
+
છ
|
| 22 |
+
જ
|
| 23 |
+
ઝ
|
| 24 |
+
ઞ
|
| 25 |
+
ટ
|
| 26 |
+
ઠ
|
| 27 |
+
ડ
|
| 28 |
+
ઢ
|
| 29 |
+
ણ
|
| 30 |
+
ત
|
| 31 |
+
થ
|
| 32 |
+
દ
|
| 33 |
+
ધ
|
| 34 |
+
ન
|
| 35 |
+
પ
|
| 36 |
+
ફ
|
| 37 |
+
બ
|
| 38 |
+
ભ
|
| 39 |
+
મ
|
| 40 |
+
ય
|
| 41 |
+
ર
|
| 42 |
+
લ
|
| 43 |
+
ળ
|
| 44 |
+
વ
|
| 45 |
+
શ
|
| 46 |
+
ષ
|
| 47 |
+
સ
|
| 48 |
+
હ
|