From 61b94e47cbcc7aeeefddde9f41ad695c3230ffd1 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Fri, 11 Dec 2020 17:50:01 +0800 Subject: [PATCH 01/20] polish doc --- README_ch.md | 7 +-- README_en.md | 12 ++-- configs/rec/rec_icdar15_train.yml | 97 ++++++++++++++++++++++++++++++ doc/doc_ch/recognition.md | 16 +++-- doc/doc_en/recognition_en.md | 9 +-- doc/joinus.PNG | Bin 16090 -> 418144 bytes ppocr/utils/ic15_dict.txt | 2 +- 7 files changed, 117 insertions(+), 26 deletions(-) create mode 100644 configs/rec/rec_icdar15_train.yml diff --git a/README_ch.md b/README_ch.md index b1f07e29..701d0194 100644 --- a/README_ch.md +++ b/README_ch.md @@ -54,11 +54,10 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 | 模型简介 | 模型名称 |推荐场景 | 检测模型 | 方向分类器 | 识别模型 | | ------------ | --------------- | ----------------|---- | ---------- | -------- | -| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v1.1_xx |移动端&服务器端|[推理模型](link) / [预训练模型](link)|[推理模型](link) / [预训练模型](link) |[推理模型](link) / [预训练模型](link) | -| 中英文通用OCR模型(155.1M) |ch_ppocr_server_v1.1_xx|服务器端 |[推理模型](link) / [预训练模型](link) |[推理模型](link) / [预训练模型](link) |[推理模型](link) / [预训练模型](link) | -| 中英文超轻量压缩OCR模型(3.5M) | ch_ppocr_mobile_slim_v1.1_xx| 移动端 |[推理模型](link) / [slim模型](link) |[推理模型](link) / [slim模型](link)| [推理模型](link) / [slim模型](link)| +| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[推理模型](link) / [预训练模型](link) |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| 中英文通用OCR模型(155.1M) |ch_ppocr_server_v2.0_xx|服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[推理模型](link) / [预训练模型](link) |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | -更多模型下载(包括多语言),可以参考[PP-OCR v1.1 系列模型下载](./doc/doc_ch/models_list.md) +更多模型下载(包括多语言),可以参考[PP-OCR v2.0 系列模型下载](./doc/doc_ch/models_list.md) ## 文档教程 - [快速安装](./doc/doc_ch/installation.md) diff --git a/README_en.md b/README_en.md index d74c97ae..05247950 100644 --- a/README_en.md +++ b/README_en.md @@ -62,15 +62,11 @@ Mobile DEMO experience (based on EasyEdge and Paddle-Lite, supports iOS and Andr | Model introduction | Model name | Recommended scene | Detection model | Direction classifier | Recognition model | | ------------------------------------------------------------ | ---------------------------- | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| Chinese and English ultra-lightweight OCR model (8.1M) | ch_ppocr_mobile_v1.1_xx | Mobile & server | [inference model](link) / [pre-trained model](link) | [inference model](link) / [pre-trained model](link) | [inference model](link) / [pre-trained model](link) | -| Chinese and English general OCR model (155.1M) | ch_ppocr_server_v1.1_xx | Server | [inference model](link) / [pre-trained model](link) | [inference model](link) / [pre-trained model](link) | [inference model](link) / [pre-trained model](link) | -| Chinese and English ultra-lightweight compressed OCR model (3.5M) | ch_ppocr_mobile_slim_v1.1_xx | Mobile | [inference model](link) / [slim model](link) | [inference model](link) / [slim model](link) | [inference model](link) / [slim model](link) | -| French ultra-lightweight OCR model (4.6M) | french_ppocr_mobile_v1.1_xx | Mobile & server | [inference model](link) / [pre-trained model](link) | - | [inference model](link) / [pre-trained model](link) | -| German ultra-lightweight OCR model (4.6M) | german_ppocr_mobile_v1.1_xx | Mobile & server | [inference model](link) / [pre-trained model](link) | - |[inference model](link) / [pre-trained model](link) | -| Korean ultra-lightweight OCR model (5.9M) | korean_ppocr_mobile_v1.1_xx | Mobile & server | [inference model](link) / [pre-trained model](link) | - |[inference model](link) / [pre-trained model](link)| -| Japan ultra-lightweight OCR model (6.2M) | japan_ppocr_mobile_v1.1_xx | Mobile & server | [inference model](link) / [pre-trained model](link) | - |[inference model](link) / [pre-trained model](link) | +| Chinese and English ultra-lightweight OCR model (8.1M) | ch_ppocr_mobile_v2.0_xx | Mobile & server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](link) / [pre-trained model](link) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| Chinese and English general OCR model (155.1M) | ch_ppocr_server_v2.0_xx | Server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](link) / [pre-trained model](link) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | -For more model downloads (including multiple languages), please refer to [PP-OCR v1.1 series model downloads](./doc/doc_en/models_list_en.md). + +For more model downloads (including multiple languages), please refer to [PP-OCR v2.0 series model downloads](./doc/doc_en/models_list_en.md). For a new language request, please refer to [Guideline for new language_requests](#language_requests). diff --git a/configs/rec/rec_icdar15_train.yml b/configs/rec/rec_icdar15_train.yml new file mode 100644 index 00000000..7efbd5cf --- /dev/null +++ b/configs/rec/rec_icdar15_train.yml @@ -0,0 +1,97 @@ +Global: + use_gpu: true + epoch_num: 72 + log_smooth_window: 20 + print_batch_step: 10 + save_model_dir: ./output/rec/ic15/ + save_epoch_step: 3 + # evaluation is run every 2000 iterations + eval_batch_step: [0, 2000] + # if pretrained_model is saved in static mode, load_static_weights must set to True + cal_metric_during_train: True + pretrained_model: + checkpoints: + save_inference_dir: + use_visualdl: False + infer_img: doc/imgs_words_en/word_10.png + # for data or label process + character_dict_path: ppocr/utils/ic15_dict.txt + character_type: ch + max_text_length: 25 + infer_mode: False + use_space_char: False + +Optimizer: + name: Adam + beta1: 0.9 + beta2: 0.999 + lr: + learning_rate: 0.0005 + regularizer: + name: 'L2' + factor: 0 + +Architecture: + model_type: rec + algorithm: CRNN + Transform: + Backbone: + name: ResNet + layers: 34 + Neck: + name: SequenceEncoder + encoder_type: rnn + hidden_size: 256 + Head: + name: CTCHead + fc_decay: 0 + +Loss: + name: CTCLoss + +PostProcess: + name: CTCLabelDecode + +Metric: + name: RecMetric + main_indicator: acc + +Train: + dataset: + name: SimpleDataSet + data_dir: ./train_data/ + label_file_list: ["./train_data/train_list.txt"] + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - CTCLabelEncode: # Class handling label + - RecResizeImg: + image_shape: [3, 32, 100] + - KeepKeys: + keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order + loader: + shuffle: True + batch_size_per_card: 256 + drop_last: True + num_workers: 8 + +Eval: + dataset: + name: SimpleDataSet + data_dir: ./train_data/ + label_file_list: ["./train_data/train_list.txt"] + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - CTCLabelEncode: # Class handling label + - RecResizeImg: + image_shape: [3, 32, 100] + - KeepKeys: + keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order + loader: + shuffle: False + drop_last: False + batch_size_per_card: 256 + num_workers: 4 diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index 91b1af78..9dda9ded 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -37,8 +37,6 @@ ln -sf /train_data/dataset 若您本地没有数据集,可以在官网下载 [icdar2015](http://rrc.cvc.uab.es/?ch=4&com=downloads) 数据,用于快速验证。也可以参考[DTRB](https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here),下载 benchmark 所需的lmdb格式数据集。 -如果希望复现SRN的论文指标,需要下载离线[增广数据](https://pan.baidu.com/s/1-HSZ-ZVdqBF2HaBZ5pRAKA),提取码: y3ry。增广数据是由MJSynth和SynthText做旋转和扰动得到的。数据下载完成后请解压到 {your_path}/PaddleOCR/train_data/data_lmdb_release/training/ 路径下。 - * 使用自己数据集 @@ -65,7 +63,7 @@ wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_t wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt ``` -PaddleOCR 也提供了数据格式转换脚本,可以将官网 label 转换支持的数据格式。 数据转换工具在 `train_data/gen_label.py`, 这里以训练集为例: +PaddleOCR 也提供了数据格式转换脚本,可以将官网 label 转换支持的数据格式。 数据转换工具在 `ppocr/utils/gen_label.py`, 这里以训练集为例: ``` # 将官网下载的标签文件转换为 rec_gt_label.txt @@ -116,9 +114,9 @@ n word_dict.txt 每行有一个单字,将字符与数字索引映射在一起,“and” 将被映射成 [2 5 1] -`ppocr/utils/ppocr_keys_v1.txt` 是一个包含6623个字符的中文字典, +`ppocr/utils/ppocr_keys_v1.txt` 是一个包含6623个字符的中文字典 -`ppocr/utils/ic15_dict.txt` 是一个包含36个字符的英文字典, +`ppocr/utils/ic15_dict.txt` 是一个包含36个字符的英文字典 `ppocr/utils/dict/french_dict.txt` 是一个包含118个字符的法文字典 @@ -128,6 +126,8 @@ word_dict.txt 每行有一个单字,将字符与数字索引映射在一起, `ppocr/utils/dict/german_dict.txt` 是一个包含131个字符的法文字典 +`ppocr/utils/dict/en_dict.txt` 是一个包含63个字符的英文字典 + 您可以按需使用。 @@ -155,10 +155,10 @@ PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 CRNN ``` cd PaddleOCR/ # 下载MobileNetV3的预训练模型 -wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar +wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_infer.tar # 解压模型参数 cd pretrain_models -tar -xf rec_mv3_none_bilstm_ctc.tar && rm -rf rec_mv3_none_bilstm_ctc.tar +tar -xf rec_mv3_none_bilstm_ctc_v2.0_infer.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_infer.tar ``` 开始训练: @@ -204,9 +204,7 @@ PaddleOCR支持训练和评估交替进行, 可以在 `configs/rec/rec_icdar15_t | rec_mv3_tps_bilstm_attn.yml | RARE | Mobilenet_v3 large 0.5 | tps | BiLSTM | attention | | rec_r34_vd_none_bilstm_ctc.yml | CRNN | Resnet34_vd | None | BiLSTM | ctc | | rec_r34_vd_none_none_ctc.yml | Rosetta | Resnet34_vd | None | None | ctc | -| rec_r34_vd_tps_bilstm_attn.yml | RARE | Resnet34_vd | tps | BiLSTM | attention | | rec_r34_vd_tps_bilstm_ctc.yml | STARNet | Resnet34_vd | tps | BiLSTM | ctc | -| rec_r50fpn_vd_none_srn.yml | SRN | Resnet50_fpn_vd | None | rnn | srn | 训练中文数据,推荐使用[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml),如您希望尝试其他算法在中文数据集上的效果,请参考下列说明修改配置文件: diff --git a/doc/doc_en/recognition_en.md b/doc/doc_en/recognition_en.md index f9849321..14c3da73 100644 --- a/doc/doc_en/recognition_en.md +++ b/doc/doc_en/recognition_en.md @@ -114,11 +114,13 @@ In `word_dict.txt`, there is a single word in each line, which maps characters a `ppocr/utils/dict/french_dict.txt` is a French dictionary with 118 characters -`ppocr/utils/dict/japan_dict.txt` is a French dictionary with 4399 characters +`ppocr/utils/dict/japan_dict.txt` is a Japan dictionary with 4399 characters -`ppocr/utils/dict/korean_dict.txt` is a French dictionary with 3636 characters +`ppocr/utils/dict/korean_dict.txt` is a Korean dictionary with 3636 characters -`ppocr/utils/dict/german_dict.txt` is a French dictionary with 131 characters +`ppocr/utils/dict/german_dict.txt` is a German dictionary with 131 characters + +`ppocr/utils/dict/en_dict.txt` is a English dictionary with 63 characters You can use it on demand. @@ -194,7 +196,6 @@ If the evaluation set is large, the test will be time-consuming. It is recommend | rec_mv3_tps_bilstm_attn.yml | RARE | Mobilenet_v3 large 0.5 | tps | BiLSTM | attention | | rec_r34_vd_none_bilstm_ctc.yml | CRNN | Resnet34_vd | None | BiLSTM | ctc | | rec_r34_vd_none_none_ctc.yml | Rosetta | Resnet34_vd | None | None | ctc | -| rec_r34_vd_tps_bilstm_attn.yml | RARE | Resnet34_vd | tps | BiLSTM | attention | | rec_r34_vd_tps_bilstm_ctc.yml | STARNet | Resnet34_vd | tps | BiLSTM | ctc | For training Chinese data, it is recommended to use diff --git a/doc/joinus.PNG b/doc/joinus.PNG index fa11f286d7d2d56d18d94e9034c3be77c974d42f..a6e947489831d90a841c3bb6f21596d5dac7e1ac 100644 GIT binary patch literal 418144 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 z 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χflU-GA@4 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 O6owvS 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�pI_yRjpS~gy)2T01oNaUX`eKKs|RijR@Zsjkp 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 literal 16090 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 Date: Fri, 11 Dec 2020 22:06:42 +0800 Subject: [PATCH 02/20] update link --- doc/doc_ch/whl.md | 2 +- paddleocr.py | 123 ++++++++++++++++++++++++---------------------- 2 files changed, 66 insertions(+), 59 deletions(-) diff --git a/doc/doc_ch/whl.md b/doc/doc_ch/whl.md index c51f3277..587b443b 100644 --- a/doc/doc_ch/whl.md +++ b/doc/doc_ch/whl.md @@ -348,7 +348,7 @@ im_show.save('result.jpg') | cls_batch_num | 进行分类时,同时前向的图片数 |30 | | enable_mkldnn | 是否启用mkldnn | FALSE | | use_zero_copy_run | 是否通过zero_copy_run的方式进行前向 | FALSE | -| lang | 模型语言类型,目前支持 中文(ch)和英文(en) | ch | +| lang | 模型语言类型,目前支持 目前支持中英文(ch)、英文(en)、法语(french)、德语(german)、韩语(korean)、日语(japan) | ch | | det | 前向时使用启动检测 | TRUE | | rec | 前向时是否启动识别 | TRUE | | cls | 前向时是否启动分类 (命令行模式下使用use_angle_cls控制前向是否启动分类) | FALSE | diff --git a/paddleocr.py b/paddleocr.py index 17306e79..1d8cd254 100644 --- a/paddleocr.py +++ b/paddleocr.py @@ -35,44 +35,45 @@ __all__ = ['PaddleOCR'] model_urls = { 'det': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar', 'rec': { 'ch': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar', 'dict_path': './ppocr/utils/ppocr_keys_v1.txt' }, 'en': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/en/en_ppocr_mobile_v1.1_rec_infer.tar', - 'dict_path': './ppocr/utils/ic15_dict.txt' + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tar', + 'dict_path': './ppocr/utils/dict/en_dict.txt' }, 'french': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/fr/french_ppocr_mobile_v1.1_rec_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_infer.tar', 'dict_path': './ppocr/utils/dict/french_dict.txt' }, 'german': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/ge/german_ppocr_mobile_v1.1_rec_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_infer.tar', 'dict_path': './ppocr/utils/dict/german_dict.txt' }, 'korean': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/kr/korean_ppocr_mobile_v1.1_rec_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_infer.tar', 'dict_path': './ppocr/utils/dict/korean_dict.txt' }, 'japan': { 'url': - 'https://paddleocr.bj.bcebos.com/20-09-22/mobile/jp/japan_ppocr_mobile_v1.1_rec_infer.tar', + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_infer.tar', 'dict_path': './ppocr/utils/dict/japan_dict.txt' } }, 'cls': - 'https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_infer.tar' + 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar' } SUPPORT_DET_MODEL = ['DB'] +VERSION = 2.0 SUPPORT_REC_MODEL = ['CRNN'] BASE_DIR = os.path.expanduser("~/.paddleocr/") @@ -94,20 +95,24 @@ def download_with_progressbar(url, save_path): def maybe_download(model_storage_directory, url): # using custom model - if not os.path.exists(os.path.join( - model_storage_directory, 'model')) or not os.path.exists( - os.path.join(model_storage_directory, 'params')): + tar_file_name_list = [ + 'inference.pdiparams', 'inference.pdiparams.info', 'inference.pdmodel' + ] + if not os.path.exists( + os.path.join(model_storage_directory, 'inference.pdiparams') + ) or not os.path.exists( + os.path.join(model_storage_directory, 'inference.pdmodel')): tmp_path = os.path.join(model_storage_directory, url.split('/')[-1]) print('download {} to {}'.format(url, tmp_path)) os.makedirs(model_storage_directory, exist_ok=True) download_with_progressbar(url, tmp_path) with tarfile.open(tmp_path, 'r') as tarObj: for member in tarObj.getmembers(): - if "model" in member.name: - filename = 'model' - elif "params" in member.name: - filename = 'params' - else: + filename = None + for tar_file_name in tar_file_name_list: + if tar_file_name in member.name: + filename = tar_file_name + if filename is None: continue file = tarObj.extractfile(member) with open( @@ -176,43 +181,43 @@ def parse_args(mMain=True, add_help=True): parser.add_argument("--use_angle_cls", type=str2bool, default=False) return parser.parse_args() else: - return argparse.Namespace(use_gpu=True, - ir_optim=True, - use_tensorrt=False, - gpu_mem=8000, - image_dir='', - det_algorithm='DB', - det_model_dir=None, - det_limit_side_len=960, - det_limit_type='max', - det_db_thresh=0.3, - det_db_box_thresh=0.5, - det_db_unclip_ratio=2.0, - det_east_score_thresh=0.8, - det_east_cover_thresh=0.1, - det_east_nms_thresh=0.2, - rec_algorithm='CRNN', - rec_model_dir=None, - rec_image_shape="3, 32, 320", - rec_char_type='ch', - rec_batch_num=30, - max_text_length=25, - rec_char_dict_path=None, - use_space_char=True, - drop_score=0.5, - cls_model_dir=None, - cls_image_shape="3, 48, 192", - label_list=['0', '180'], - cls_batch_num=30, - cls_thresh=0.9, - enable_mkldnn=False, - use_zero_copy_run=False, - use_pdserving=False, - lang='ch', - det=True, - rec=True, - use_angle_cls=False - ) + return argparse.Namespace( + use_gpu=True, + ir_optim=True, + use_tensorrt=False, + gpu_mem=8000, + image_dir='', + det_algorithm='DB', + det_model_dir=None, + det_limit_side_len=960, + det_limit_type='max', + det_db_thresh=0.3, + det_db_box_thresh=0.5, + det_db_unclip_ratio=2.0, + det_east_score_thresh=0.8, + det_east_cover_thresh=0.1, + det_east_nms_thresh=0.2, + rec_algorithm='CRNN', + rec_model_dir=None, + rec_image_shape="3, 32, 320", + rec_char_type='ch', + rec_batch_num=30, + max_text_length=25, + rec_char_dict_path=None, + use_space_char=True, + drop_score=0.5, + cls_model_dir=None, + cls_image_shape="3, 48, 192", + label_list=['0', '180'], + cls_batch_num=30, + cls_thresh=0.9, + enable_mkldnn=False, + use_zero_copy_run=False, + use_pdserving=False, + lang='ch', + det=True, + rec=True, + use_angle_cls=False) class PaddleOCR(predict_system.TextSystem): @@ -228,19 +233,21 @@ class PaddleOCR(predict_system.TextSystem): lang = postprocess_params.lang assert lang in model_urls[ 'rec'], 'param lang must in {}, but got {}'.format( - model_urls['rec'].keys(), lang) + model_urls['rec'].keys(), lang) if postprocess_params.rec_char_dict_path is None: postprocess_params.rec_char_dict_path = model_urls['rec'][lang][ 'dict_path'] # init model dir if postprocess_params.det_model_dir is None: - postprocess_params.det_model_dir = os.path.join(BASE_DIR, 'det') + postprocess_params.det_model_dir = os.path.join( + BASE_DIR, '{}/det'.format(VERSION)) if postprocess_params.rec_model_dir is None: postprocess_params.rec_model_dir = os.path.join( - BASE_DIR, 'rec/{}'.format(lang)) + BASE_DIR, '{}/rec/{}'.format(VERSION, lang)) if postprocess_params.cls_model_dir is None: - postprocess_params.cls_model_dir = os.path.join(BASE_DIR, 'cls') + postprocess_params.cls_model_dir = os.path.join( + BASE_DIR, '{}/cls'.format(VERSION)) print(postprocess_params) # download model maybe_download(postprocess_params.det_model_dir, model_urls['det']) From 49c32f44f9bd5683be46cf82e66fe213c36412df Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Fri, 11 Dec 2020 22:20:26 +0800 Subject: [PATCH 03/20] change v1.1 to v2.0 --- doc/doc_ch/config.md | 6 +++--- doc/doc_en/config_en.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/doc_ch/config.md b/doc/doc_ch/config.md index 2cc502ca..b185929e 100644 --- a/doc/doc_ch/config.md +++ b/doc/doc_ch/config.md @@ -10,8 +10,8 @@ ## 配置文件参数介绍 -以 `rec_chinese_lite_train_v1.1.yml ` 为例 -### Global +以 `rec_chinese_lite_train_v2.0.yml ` 为例 +### Global | 字段 | 用途 | 默认值 | 备注 | | :----------------------: | :---------------------: | :--------------: | :--------------------: | @@ -119,4 +119,4 @@ | shuffle | 每个epoch是否将数据集顺序打乱 | True | \ | | batch_size_per_card | 训练时单卡batch size | 256 | \ | | drop_last | 是否丢弃因数据集样本数不能被 batch_size 整除而产生的最后一个不完整的mini-batch | True | \ | -| num_workers | 用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载 | 8 | \ | \ No newline at end of file +| num_workers | 用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载 | 8 | \ | diff --git a/doc/doc_en/config_en.md b/doc/doc_en/config_en.md index 574bb41b..6f54ce24 100644 --- a/doc/doc_en/config_en.md +++ b/doc/doc_en/config_en.md @@ -9,8 +9,8 @@ The following list can be viewed through `--help` ## INTRODUCTION TO GLOBAL PARAMETERS OF CONFIGURATION FILE -Take rec_chinese_lite_train_v1.1.yml as an example -### Global +Take rec_chinese_lite_train_v2.0.yml as an example +### Global | Parameter | Use | Defaults | Note | | :----------------------: | :---------------------: | :--------------: | :--------------------: | @@ -118,4 +118,4 @@ In ppocr, the network is divided into four stages: Transform, Backbone, Neck and | shuffle | Does each epoch disrupt the order of the data set | True | \ | | batch_size_per_card | Single card batch size during training | 256 | \ | | drop_last | Whether to discard the last incomplete mini-batch because the number of samples in the data set cannot be divisible by batch_size | True | \ | -| num_workers | The number of sub-processes used to load data, if it is 0, the sub-process is not started, and the data is loaded in the main process | 8 | \ | \ No newline at end of file +| num_workers | The number of sub-processes used to load data, if it is 0, the sub-process is not started, and the data is loaded in the main process | 8 | \ | From f4dd2ee65cfc081b819a9d71440594cc1cf17c39 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Fri, 11 Dec 2020 23:06:31 +0800 Subject: [PATCH 04/20] update pre-train model of rec --- doc/doc_ch/quickstart.md | 4 ++-- doc/doc_en/quickstart_en.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/doc_ch/quickstart.md b/doc/doc_ch/quickstart.md index e3d854eb..2fb97d82 100644 --- a/doc/doc_ch/quickstart.md +++ b/doc/doc_ch/quickstart.md @@ -13,8 +13,8 @@ | 模型简介 | 模型名称 |推荐场景 | 检测模型 | 方向分类器 | 识别模型 | | ------------ | --------------- | ----------------|---- | ---------- | -------- | -| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar) | -| 中英文通用OCR模型(155.1M) | ch_ppocr_server_v2.0_xx |服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar) | +| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| 中英文通用OCR模型(155.1M) | ch_ppocr_server_v2.0_xx |服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | * windows 环境下如果没有安装wget,下载模型时可将链接复制到浏览器中下载,并解压放置在相应目录下 diff --git a/doc/doc_en/quickstart_en.md b/doc/doc_en/quickstart_en.md index 6b3f2db0..6d7f6f8d 100644 --- a/doc/doc_en/quickstart_en.md +++ b/doc/doc_en/quickstart_en.md @@ -13,8 +13,8 @@ The detection and recognition models on the mobile and server sides are as follo | Model introduction | Model name | Recommended scene | Detection model | Direction Classifier | Recognition model | | ------------ | --------------- | ----------------|---- | ---------- | -------- | -| Ultra-lightweight Chinese OCR model(8.1M) | ch_ppocr_mobile_v2.0_xx |Mobile-side/Server-side|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar) | -| Universal Chinese OCR model(155.1M) | ch_ppocr_server_v2.0_xx |Server-side |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar) | +| Ultra-lightweight Chinese OCR model(8.1M) | ch_ppocr_mobile_v2.0_xx |Mobile-side/Server-side|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| Universal Chinese OCR model(155.1M) | ch_ppocr_server_v2.0_xx |Server-side |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | * If `wget` is not installed in the windows environment, you can copy the link to the browser to download when downloading the model, then uncompress it and place it in the corresponding directory. From 03d585324004bc1bed80837513e5dd22967d29f9 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 10:53:49 +0800 Subject: [PATCH 05/20] update model_list doc --- doc/doc_ch/models_list.md | 63 +++++++++++++++++++---------------- doc/doc_en/models_list_en.md | 64 +++++++++++++++++++----------------- 2 files changed, 69 insertions(+), 58 deletions(-) diff --git a/doc/doc_ch/models_list.md b/doc/doc_ch/models_list.md index c85def4e..f44e304f 100644 --- a/doc/doc_ch/models_list.md +++ b/doc/doc_ch/models_list.md @@ -1,4 +1,4 @@ -## OCR模型列表(V1.1,9月22日更新) +## OCR模型列表(V2.0,2020年12月11日更新) - [一、文本检测模型](#文本检测模型) - [二、文本识别模型](#文本识别模型) @@ -10,19 +10,20 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训练模型`、`slim模型`,模型区别说明如下: |模型类型|模型格式|简介| -|-|-|-| -|推理模型|model、params|用于python预测引擎推理,[详情](./inference.md)| -|训练模型、预训练模型|\*.pdmodel、\*.pdopt、\*.pdparams|训练过程中保存的checkpoints模型,保存的是模型的参数,多用于模型指标评估和恢复训练| +|--- | --- | --- | +|推理模型|inference.pdmodel、inference.pdiparams|用于python预测引擎推理,[详情](./inference.md)| +|训练模型、预训练模型|\*.pdparams、\*.pdopt、\*.states |训练过程中保存的模型的参数、优化器状态和训练中间信息,多用于模型指标评估和恢复训练| |slim模型|\*.nb|用于lite部署| ### 一、文本检测模型 + |模型名称|模型简介|配置文件|推理模型大小|下载地址| -|-|-|-|-|-| -|ch_ppocr_mobile_slim_v1.1_det|slim裁剪版超轻量模型,支持中英文、多语种文本检测|[det_mv3_db_v1.1.yml](../../configs/det/det_mv3_db_v1.1.yml)|1.4M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/det/ch_ppocr_mobile_v1.1_det_prune_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_prune_opt.nb)| -|ch_ppocr_mobile_v1.1_det|原始超轻量模型,支持中英文、多语种文本检测|[det_mv3_db_v1.1.yml](../../configs/det/det_mv3_db_v1.1.yml)|2.6M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_train.tar)| -|ch_ppocr_server_v1.1_det|通用模型,支持中英文、多语种文本检测,比超轻量模型更大,但效果更好|[det_r18_vd_db_v1.1.yml](../../configs/det/det_r18_vd_db_v1.1.yml)|47.2M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_train.tar)| +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_det|slim裁剪版超轻量模型,支持中英文、多语种文本检测|[ch_det_mv3_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml)| |[推理模型 (coming soon)](link) / [slim模型 (coming soon)](link)| +|ch_ppocr_mobile_v2.0_det|原始超轻量模型,支持中英文、多语种文本检测|[ch_det_mv3_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml)|3M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)| +|ch_ppocr_server_v2.0_det|通用模型,支持中英文、多语种文本检测,比超轻量模型更大,但效果更好|[ch_det_res18_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml)|47M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar)| @@ -30,42 +31,48 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训 #### 1. 中文识别模型 + |模型名称|模型简介|配置文件|推理模型大小|下载地址| -|-|-|-|-|-| -|ch_ppocr_mobile_slim_v1.1_rec|slim裁剪量化版超轻量模型,支持中英文、数字识别|[rec_chinese_lite_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml)|1.6M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/rec/ch_ppocr_mobile_v1.1_rec_quant_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_quant_opt.nb) | -|ch_ppocr_mobile_v1.1_rec|原始超轻量模型,支持中英文、数字识别|[rec_chinese_lite_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml)|4.6M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_train.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_pre.tar) | -|ch_ppocr_server_v1.1_rec|通用模型,支持中英文、数字识别|[rec_chinese_common_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_common_train_v1.1.yml)|105M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_train.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_pre.tar) | +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_rec|slim裁剪量化版超轻量模型,支持中英文、数字识别|[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml)| |[推理模型 (coming soon)](link) / [slim模型 (coming soon)](link) | +|ch_ppocr_mobile_v2.0_rec|原始超轻量模型,支持中英文、数字识别|[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml)|3.71M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +|ch_ppocr_server_v2.0_rec|通用模型,支持中英文、数字识别|[rec_chinese_common_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0.yml)|94.8M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | **说明:** `训练模型`是基于预训练模型在真实数据与竖排合成文本数据上finetune得到的模型,在真实应用场景中有着更好的表现,`预训练模型`则是直接基于全量真实数据与合成数据训练得到,更适合用于在自己的数据集上finetune。 #### 2. 英文识别模型 + |模型名称|模型简介|配置文件|推理模型大小|下载地址| -|-|-|-|-|-| -|en_ppocr_mobile_slim_v1.1_rec|slim裁剪量化版超轻量模型,支持英文、数字识别|[rec_en_lite_train.yml](../../configs/rec/multi_languages/rec_en_lite_train.yml)|0.9M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/en/en_ppocr_mobile_v1.1_rec_quant_infer.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/en/en_ppocr_mobile_v1.1_rec_quant_opt.nb) | -|en_ppocr_mobile_v1.1_rec|原始超轻量模型,支持英文、数字识别|[rec_en_lite_train.yml](../../configs/rec/multi_languages/rec_en_lite_train.yml)|2.0M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/en/en_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/en/en_ppocr_mobile_v1.1_rec_train.tar) | +| --- | --- | --- | --- | --- | +|en_number_mobile_slim_v2.0_rec|slim裁剪量化版超轻量模型,支持英文、数字识别|[rec_en_number_lite_train.yml](../../configs/rec/multi_language/rec_en_number_lite_train.yml)| |[推理模型 (coming soon )](link) / [slim模型 (coming soon)](link) | +|en_number_mobile_v2.0_rec|原始超轻量模型,支持英文、数字识别|[rec_en_number_lite_train.yml](../../configs/rec/multi_language/rec_en_number_lite_train.yml)|2.56M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_train.tar) | #### 3. 多语言识别模型(更多语言持续更新中...) + |模型名称|模型简介|配置文件|推理模型大小|下载地址| -|-|-|-|-|-| -| french_ppocr_mobile_v1.1_rec |法文识别|[rec_french_lite_train.yml](../../configs/rec/multi_languages/rec_french_lite_train.yml)|2.1M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/fr/french_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/fr/french_ppocr_mobile_v1.1_rec_train.tar) | -| german_ppocr_mobile_v1.1_rec |德文识别|[rec_ger_lite_train.yml](../../configs/rec/multi_languages/rec_ger_lite_train.yml)|2.1M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/ge/german_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/ge/german_ppocr_mobile_v1.1_rec_train.tar) | -| korean_ppocr_mobile_v1.1_rec |韩文识别|[rec_korean_lite_train.yml](../../configs/rec/multi_languages/rec_korean_lite_train.yml)|3.4M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/kr/korean_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/kr/korean_ppocr_mobile_v1.1_rec_train.tar) | -| japan_ppocr_mobile_v1.1_rec |日文识别|[rec_japan_lite_train.yml](../../configs/rec/multi_languages/rec_japan_lite_train.yml)|3.7M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/jp/japan_ppocr_mobile_v1.1_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/jp/japan_ppocr_mobile_v1.1_rec_train.tar) | +| --- | --- | --- | --- | --- | +| french_mobile_v2.0_rec |法文识别|[rec_french_lite_train.yml](../../configs/rec/multi_language/rec_french_lite_train.yml)|2.65M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_train.tar) | +| german_mobile_v2.0_rec |德文识别|[rec_german_lite_train.yml](../../configs/rec/multi_language/rec_german_lite_train.yml)|2.65M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_train.tar) | +| korean_mobile_v2.0_rec |韩文识别|[rec_korean_lite_train.yml](../../configs/rec/multi_language/rec_korean_lite_train.yml)|3.9M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_train.tar) | +| japan_mobile_v2.0_rec |日文识别|[rec_japan_lite_train.yml](../../configs/rec/multi_language/rec_japan_lite_train.yml)|4.23M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_train.tar) | ### 三、文本方向分类模型 + |模型名称|模型简介|配置文件|推理模型大小|下载地址| -|-|-|-|-|-| -|ch_ppocr_mobile_v1.1_cls_quant|slim量化版模型|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|0.5M|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_quant_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_quant_train.tar) / [slim模型](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_quant_opt.nb) | -|ch_ppocr_mobile_v1.1_cls|原始模型|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|850kb|[推理模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_train.tar) | +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_cls|slim量化版模型|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)| |[推理模型 (coming soon)](link) / [训练模型](link) / [slim模型](link) | +|ch_ppocr_mobile_v2.0_cls|原始模型|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|1.38M|[推理模型](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) | -## OCR模型列表(V1.0,7月16日更新) +## OCR模型列表(V1.1,9月22日更新) + +[1.1系列模型地址](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) + +使用2.0版本代码加载1.x系列模型训练模型需在配置文件进行如下设置: +1. `Global.load_static_weights=True` +2. `Global.pretrained_model={path/to/1.x_model}` -|模型名称|模型简介|检测模型地址|识别模型地址|支持空格的识别模型地址| -|-|-|-|-|-| -|chinese_db_crnn_mobile|8.6M超轻量级中文OCR模型|[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db.tar) |[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn.tar) |[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance.tar) -|chinese_db_crnn_server|通用中文OCR模型|[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db.tar) |[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn.tar) |[推理模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance.tar) diff --git a/doc/doc_en/models_list_en.md b/doc/doc_en/models_list_en.md index 3d3cdc1d..189cf76d 100644 --- a/doc/doc_en/models_list_en.md +++ b/doc/doc_en/models_list_en.md @@ -10,61 +10,65 @@ The downloadable models provided by PaddleOCR include `inference model`, `trained model`, `pre-trained model` and `slim model`. The differences between the models are as follows: |model type|model format|description| -|-|-|-| -|inference model|model、params|Used for reasoning based on Python prediction engine. [detail](./inference_en.md)| -|trained model / pre-trained model|\*.pdmodel、\*.pdopt、\*.pdparams|The checkpoints model saved in the training process, which stores the parameters of the model, mostly used for model evaluation and continuous training.| +|--- | --- | --- | +|inference model|inference.pdmodel、inference.pdiparams|Used for reasoning based on Python prediction engine,[detail](./inference.md)| +|trained model, pre-trained model|\*.pdparams、\*.pdopt、\*.states |The checkpoints model saved in the training process, which stores the parameters of the model, mostly used for model evaluation and continuous training.| |slim model|\*.nb|Generally used for Lite deployment| - ### 1. Text Detection Model -|model name|description|config|model size|download| -|-|-|-|-|-| -|ch_ppocr_mobile_slim_v1.1_det|Slim pruned lightweight model, supporting Chinese, English, multilingual text detection|[det_mv3_db_v1.1.yml](../../configs/det/det_mv3_db_v1.1.yml)|1.4M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/det/ch_ppocr_mobile_v1.1_det_prune_infer.tar) / [slim model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_prune_opt.nb)| -|ch_ppocr_mobile_v1.1_det|Original lightweight model, supporting Chinese, English, multilingual text detection|[det_mv3_db_v1.1.yml](../../configs/det/det_mv3_db_v1.1.yml)|2.6M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/det/ch_ppocr_mobile_v1.1_det_train.tar)| -|ch_ppocr_server_v1.1_det|General model, which is larger than the lightweight model, but achieved better performance|[det_r18_vd_db_v1.1.yml](../../configs/det/det_r18_vd_db_v1.1.yml)|47.2M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/server/det/ch_ppocr_server_v1.1_det_train.tar)| +|model name|description|config|model size|download| +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_det|Slim pruned lightweight model, supporting Chinese, English, multilingual text detection|[ch_det_mv3_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml)| |[inference model (coming soon)](link) / [slim model (coming soon)](link)| +|ch_ppocr_mobile_v2.0_det|Original lightweight model, supporting Chinese, English, multilingual text detection|[ch_det_mv3_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml)|3M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)| +|ch_ppocr_server_v2.0_det|General model, which is larger than the lightweight model, but achieved better performance|[ch_det_res18_db_v2.0.yml](../../configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml)|47M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar)| ### 2. Text Recognition Model #### Chinese Recognition Model + |model name|description|config|model size|download| -|-|-|-|-|-| -|ch_ppocr_mobile_slim_v1.1_rec|Slim pruned and quantized lightweight model, supporting Chinese, English and number recognition|[rec_chinese_lite_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml)|1.6M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/rec/ch_ppocr_mobile_v1.1_rec_quant_infer.tar) / [slim model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_quant_opt.nb) | -|ch_ppocr_mobile_v1.1_rec|Original lightweight model, supporting Chinese, English and number recognition|[rec_chinese_lite_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_lite_train_v1.1.yml)|4.6M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_train.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/rec/ch_ppocr_mobile_v1.1_rec_pre.tar) | -|ch_ppocr_server_v1.1_rec|General model, supporting Chinese, English and number recognition|[rec_chinese_common_train_v1.1.yml](../../configs/rec/ch_ppocr_v1.1/rec_chinese_common_train_v1.1.yml)|105M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_train.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/20-09-22/server/rec/ch_ppocr_server_v1.1_rec_pre.tar) | +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_rec|Slim pruned and quantized lightweight model, supporting Chinese, English and number recognition|[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml)| |[inference model (coming soon)](link) / [slim model (coming soon)](link) | +|ch_ppocr_mobile_v2.0_rec|Original lightweight model, supporting Chinese, English and number recognition|[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml)|3.71M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +|ch_ppocr_server_v2.0_rec|General model, supporting Chinese, English and number recognition|[rec_chinese_common_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0.yml)|94.8M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | + **Note:** The `trained model` is finetuned on the `pre-trained model` with real data and synthsized vertical text data, which achieved better performance in real scene. The `pre-trained model` is directly trained on the full amount of real data and synthsized data, which is more suitable for finetune on your own dataset. #### English Recognition Model + |model name|description|config|model size|download| -|-|-|-|-|-| -|en_ppocr_mobile_slim_v1.1_rec|Slim pruned and quantized lightweight model, supporting English and number recognition|[rec_en_lite_train.yml](../../configs/rec/multi_languages/rec_en_lite_train.yml)|0.9M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/en/en_ppocr_mobile_v1.1_rec_quant_infer.tar) / [slim model](https://paddleocr.bj.bcebos.com/20-09-22/mobile-slim/en/en_ppocr_mobile_v1.1_rec_quant_opt.nb) | -|en_ppocr_mobile_v1.1_rec|Original lightweight model, supporting English and number recognition|[rec_en_lite_train.yml](../../configs/rec/multi_languages/rec_en_lite_train.yml)|2.0M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/en/en_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/en/en_ppocr_mobile_v1.1_rec_train.tar) | +| --- | --- | --- | --- | --- | +|en_number_mobile_slim_v2.0_rec|Slim pruned and quantized lightweight model, supporting English and number recognition|[rec_en_number_lite_train.yml](../../configs/rec/multi_language/rec_en_number_lite_train.yml)| |[inference model (coming soon )](link) / [slim model (coming soon)](link) | +|en_number_mobile_v2.0_rec|Original lightweight model, supporting English and number recognition|[rec_en_number_lite_train.yml](../../configs/rec/multi_language/rec_en_number_lite_train.yml)|2.56M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_train.tar) | #### Multilingual Recognition Model(Updating...) -|model name|description|config|model size|download| -|-|-|-|-|-| -| french_ppocr_mobile_v1.1_rec |Lightweight model for French recognition|[rec_french_lite_train.yml](../../configs/rec/multi_languages/rec_french_lite_train.yml)|2.1M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/fr/french_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/fr/french_ppocr_mobile_v1.1_rec_train.tar) | -| german_ppocr_mobile_v1.1_rec |German model for French recognition|[rec_ger_lite_train.yml](../../configs/rec/multi_languages/rec_ger_lite_train.yml)|2.1M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/ge/german_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/ge/german_ppocr_mobile_v1.1_rec_train.tar) | -| korean_ppocr_mobile_v1.1_rec |Lightweight model for Korean recognition|[rec_korean_lite_train.yml](../../configs/rec/multi_languages/rec_korean_lite_train.yml)|3.4M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/kr/korean_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/kr/korean_ppocr_mobile_v1.1_rec_train.tar) | -| japan_ppocr_mobile_v1.1_rec |Lightweight model for Japanese recognition|[rec_japan_lite_train.yml](../../configs/rec/multi_languages/rec_japan_lite_train.yml)|3.7M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/jp/japan_ppocr_mobile_v1.1_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/jp/japan_ppocr_mobile_v1.1_rec_train.tar) | +|model name|description|config|model size|download| +| --- | --- | --- | --- | --- | +| french_mobile_v2.0_rec |Lightweight model for French recognition|[rec_french_lite_train.yml](../../configs/rec/multi_language/rec_french_lite_train.yml)|2.65M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/french_mobile_v2.0_rec_train.tar) | +| german_mobile_v2.0_rec |Lightweight model for French recognition|[rec_german_lite_train.yml](../../configs/rec/multi_language/rec_german_lite_train.yml)|2.65M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/german_mobile_v2.0_rec_train.tar) | +| korean_mobile_v2.0_rec |Lightweight model for Korean recognition|[rec_korean_lite_train.yml](../../configs/rec/multi_language/rec_korean_lite_train.yml)|3.9M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_train.tar) | +| japan_mobile_v2.0_rec |Lightweight model for Japanese recognition|[rec_japan_lite_train.yml](../../configs/rec/multi_language/rec_japan_lite_train.yml)|4.23M|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_train.tar) | ### 3. Text Angle Classification Model + |model name|description|config|model size|download| -|-|-|-|-|-| -|ch_ppocr_mobile_v1.1_cls_quant|Slim quantized model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|0.5M|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_quant_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_quant_train.tar) / [slim model](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_quant_opt.nb) | -|ch_ppocr_mobile_v1.1_cls|Original model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|850kb|[inference model](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/20-09-22/cls/ch_ppocr_mobile_v1.1_cls_train.tar) | +| --- | --- | --- | --- | --- | +|ch_ppocr_mobile_slim_v2.0_cls|Slim quantized model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)| |[inference model (coming soon)](link) / [trained model](link) / [slim model](link) | +|ch_ppocr_mobile_v2.0_cls|Original model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|1.38M|[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) | -## OCR model list(V1.0, updated on 7.16) -|model name|description|detection model|recognition model|recognition model supporting space recognition| -|-|-|-|-|-| -|chinese_db_crnn_mobile|8.6M lightweight OCR model|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db.tar) | [inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn.tar) |[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_enhance.tar) -|chinese_db_crnn_server|General OCR model|[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db.tar) | [inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn.tar) |[inference model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance_infer.tar) / [trained model](https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_enhance.tar) +## OCR模型列表(V1.1,9月22日更新) +[1.1 series model address](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) + +Use the 2.0 version code to load the 1.x series model training model needs to be set in the configuration file as follows: +1. `Global.load_static_weights=True` +2. `Global.pretrained_model={path/to/1.x_model}` From cee24caf515e09c9c37ac71932ed061eb0742897 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 10:54:40 +0800 Subject: [PATCH 06/20] update model size --- doc/doc_ch/quickstart.md | 2 +- doc/doc_en/quickstart_en.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doc_ch/quickstart.md b/doc/doc_ch/quickstart.md index 2fb97d82..eabf1d91 100644 --- a/doc/doc_ch/quickstart.md +++ b/doc/doc_ch/quickstart.md @@ -14,7 +14,7 @@ | 模型简介 | 模型名称 |推荐场景 | 检测模型 | 方向分类器 | 识别模型 | | ------------ | --------------- | ----------------|---- | ---------- | -------- | | 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | -| 中英文通用OCR模型(155.1M) | ch_ppocr_server_v2.0_xx |服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | +| 中英文通用OCR模型(143M) | ch_ppocr_server_v2.0_xx |服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | * windows 环境下如果没有安装wget,下载模型时可将链接复制到浏览器中下载,并解压放置在相应目录下 diff --git a/doc/doc_en/quickstart_en.md b/doc/doc_en/quickstart_en.md index 6d7f6f8d..e351ecc6 100644 --- a/doc/doc_en/quickstart_en.md +++ b/doc/doc_en/quickstart_en.md @@ -13,8 +13,8 @@ The detection and recognition models on the mobile and server sides are as follo | Model introduction | Model name | Recommended scene | Detection model | Direction Classifier | Recognition model | | ------------ | --------------- | ----------------|---- | ---------- | -------- | -| Ultra-lightweight Chinese OCR model(8.1M) | ch_ppocr_mobile_v2.0_xx |Mobile-side/Server-side|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | -| Universal Chinese OCR model(155.1M) | ch_ppocr_server_v2.0_xx |Server-side |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | +| Ultra-lightweight Chinese OCR model (8.1M) | ch_ppocr_mobile_v2.0_xx |Mobile-side/Server-side|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| Universal Chinese OCR model (143M) | ch_ppocr_server_v2.0_xx |Server-side |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pretrained 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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pretrained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | * If `wget` is not installed in the windows environment, you can copy the link to the browser to download when downloading the model, then uncompress it and place it in the corresponding directory. From 0e80bade3cb1c77e06818414c0088583d505253d Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 10:55:42 +0800 Subject: [PATCH 07/20] update inference.md to inference_en.md --- doc/doc_en/models_list_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/doc_en/models_list_en.md b/doc/doc_en/models_list_en.md index 189cf76d..8c9329c8 100644 --- a/doc/doc_en/models_list_en.md +++ b/doc/doc_en/models_list_en.md @@ -11,7 +11,7 @@ The downloadable models provided by PaddleOCR include `inference model`, `traine |model type|model format|description| |--- | --- | --- | -|inference model|inference.pdmodel、inference.pdiparams|Used for reasoning based on Python prediction engine,[detail](./inference.md)| +|inference model|inference.pdmodel、inference.pdiparams|Used for reasoning based on Python prediction engine,[detail](./inference_en.md)| |trained model, pre-trained model|\*.pdparams、\*.pdopt、\*.states |The checkpoints model saved in the training process, which stores the parameters of the model, mostly used for model evaluation and continuous training.| |slim model|\*.nb|Generally used for Lite deployment| From c3231f1b0e9d7c944e129a5ef59439959df76d1a Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 11:03:11 +0800 Subject: [PATCH 08/20] remove 2.0 load 1.1 model --- doc/doc_ch/models_list.md | 6 +----- doc/doc_en/models_list_en.md | 7 ++----- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/doc/doc_ch/models_list.md b/doc/doc_ch/models_list.md index f44e304f..965ed79c 100644 --- a/doc/doc_ch/models_list.md +++ b/doc/doc_ch/models_list.md @@ -68,11 +68,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训 |ch_ppocr_mobile_v2.0_cls|原始模型|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|1.38M|[推理模型](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) | -## OCR模型列表(V1.1,9月22日更新) +## OCR模型列表(V1.1,2020年9月22日更新) [1.1系列模型地址](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) -使用2.0版本代码加载1.x系列模型训练模型需在配置文件进行如下设置: -1. `Global.load_static_weights=True` -2. `Global.pretrained_model={path/to/1.x_model}` - diff --git a/doc/doc_en/models_list_en.md b/doc/doc_en/models_list_en.md index 8c9329c8..68a59caa 100644 --- a/doc/doc_en/models_list_en.md +++ b/doc/doc_en/models_list_en.md @@ -66,9 +66,6 @@ The downloadable models provided by PaddleOCR include `inference model`, `traine |ch_ppocr_mobile_v2.0_cls|Original model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|1.38M|[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) | -## OCR模型列表(V1.1,9月22日更新) -[1.1 series model address](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) +## OCR model list (V1.1,update in 2020.9.22) -Use the 2.0 version code to load the 1.x series model training model needs to be set in the configuration file as follows: -1. `Global.load_static_weights=True` -2. `Global.pretrained_model={path/to/1.x_model}` +[1.1 series model address](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) From 1759c1a8120ce015e68fd8a1543bbd21a39da402 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 11:03:50 +0800 Subject: [PATCH 09/20] remove 2.0 load 1.1 model --- doc/doc_ch/models_list.md | 2 +- doc/doc_en/models_list_en.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doc_ch/models_list.md b/doc/doc_ch/models_list.md index 965ed79c..b281e1e7 100644 --- a/doc/doc_ch/models_list.md +++ b/doc/doc_ch/models_list.md @@ -1,4 +1,4 @@ -## OCR模型列表(V2.0,2020年12月11日更新) +## OCR模型列表(V2.0,2020年12月12日更新) - [一、文本检测模型](#文本检测模型) - [二、文本识别模型](#文本识别模型) diff --git a/doc/doc_en/models_list_en.md b/doc/doc_en/models_list_en.md index 68a59caa..63d8c598 100644 --- a/doc/doc_en/models_list_en.md +++ b/doc/doc_en/models_list_en.md @@ -1,4 +1,4 @@ -## OCR model list(V1.1, updated on 9.22) +## OCR model list(V1.1, updated on 2020.12.12) - [1. Text Detection Model](#Detection) - [2. Text Recognition Model](#Recognition) @@ -66,6 +66,6 @@ The downloadable models provided by PaddleOCR include `inference model`, `traine |ch_ppocr_mobile_v2.0_cls|Original model|[cls_mv3.yml](../../configs/cls/cls_mv3.yml)|1.38M|[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) | -## OCR model list (V1.1,update in 2020.9.22) +## OCR model list (V1.1,updated on 2020.9.22) [1.1 series model address](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/models_list.md) From dd649a1c6cff7351fcd646ad82a4d265cd3ccca2 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 11:25:05 +0800 Subject: [PATCH 10/20] delete path in config --- configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml | 2 +- configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml | 2 +- configs/det/det_mv3_db.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml b/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml index 275c71b9..fd884959 100644 --- a/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml +++ b/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml @@ -11,7 +11,7 @@ Global: load_static_weights: True cal_metric_during_train: False pretrained_model: ./pretrain_models/MobileNetV3_large_x0_5_pretrained - checkpoints: #./output/det_db_0.001_DiceLoss_256_pp_config_2.0b_4gpu/best_accuracy + checkpoints: save_inference_dir: use_visualdl: False infer_img: doc/imgs_en/img_10.jpg diff --git a/configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml b/configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml index e34d9449..26946012 100644 --- a/configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml +++ b/configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml @@ -11,7 +11,7 @@ Global: load_static_weights: True cal_metric_during_train: False pretrained_model: ./pretrain_models/ResNet18_vd_pretrained - checkpoints: #./output/det_db_0.001_DiceLoss_256_pp_config_2.0b_4gpu/best_accuracy + checkpoints: save_inference_dir: use_visualdl: False infer_img: doc/imgs_en/img_10.jpg diff --git a/configs/det/det_mv3_db.yml b/configs/det/det_mv3_db.yml index 640f3a20..36a6f755 100644 --- a/configs/det/det_mv3_db.yml +++ b/configs/det/det_mv3_db.yml @@ -11,7 +11,7 @@ Global: load_static_weights: True cal_metric_during_train: False pretrained_model: ./pretrain_models/MobileNetV3_large_x0_5_pretrained - checkpoints: #./output/det_db_0.001_DiceLoss_256_pp_config_2.0b_4gpu/best_accuracy + checkpoints: save_inference_dir: use_visualdl: False infer_img: doc/imgs_en/img_10.jpg From 25ec8cacedfd564d93a56cac46ad320be8ee2e79 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 11:30:49 +0800 Subject: [PATCH 11/20] update inference --- doc/doc_ch/inference.md | 4 ++-- doc/doc_en/inference_en.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/doc_ch/inference.md b/doc/doc_ch/inference.md index 8f4bea07..7fc5e1bf 100644 --- a/doc/doc_ch/inference.md +++ b/doc/doc_ch/inference.md @@ -295,10 +295,10 @@ dict_character = list(self.character_str) ``` ### 4. 自定义文本识别字典的推理 -如果训练时修改了文本的字典,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径 +如果训练时修改了文本的字典,在使用inference模型预测时,需要通过`--rec_char_dict_path`指定使用的字典路径,并且设置 `rec_char_type=ch` ``` -python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="en" --rec_char_dict_path="your text dict path" +python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="ch" --rec_char_dict_path="your text dict path" ``` diff --git a/doc/doc_en/inference_en.md b/doc/doc_en/inference_en.md index ee567451..12553c4c 100644 --- a/doc/doc_en/inference_en.md +++ b/doc/doc_en/inference_en.md @@ -299,10 +299,10 @@ dict_character = list(self.character_str) ### 4. TEXT RECOGNITION MODEL INFERENCE USING CUSTOM CHARACTERS DICTIONARY -If the chars dictionary is modified during training, you need to specify the new dictionary path by setting the parameter `rec_char_dict_path` when using your inference model to predict. +If the text dictionary is modified during training, when using the inference model to predict, you need to specify the dictionary path used by `--rec_char_dict_path`, and set `rec_char_type=ch` ``` -python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="en" --rec_char_dict_path="your text dict path" +python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="ch" --rec_char_dict_path="your text dict path" ``` From 8ddeec84285df51f928314e5a27fa9b03c25e337 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 12:57:05 +0800 Subject: [PATCH 12/20] update inference doc --- doc/doc_ch/inference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/doc_ch/inference.md b/doc/doc_ch/inference.md index 7fc5e1bf..4869eb2c 100644 --- a/doc/doc_ch/inference.md +++ b/doc/doc_ch/inference.md @@ -253,7 +253,7 @@ Predicts of ./doc/imgs_words/ch/word_4.jpg:['实力活力', 0.89552695] 我们以 CRNN 为例,介绍基于CTC损失的识别模型推理。 Rosetta 使用方式类似,不用设置识别算法参数rec_algorithm。 -首先将 Rosetta 文本识别训练过程中保存的模型,转换成inference model。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText两个英文文本识别合成数据集训练 +首先将 CRNN 文本识别训练过程中保存的模型,转换成inference model。以基于Resnet34_vd骨干网络,使用MJSynth和SynthText两个英文文本识别合成数据集训练 的模型为例( [模型下载地址](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar) ),可以使用如下命令进行转换: ``` @@ -261,7 +261,7 @@ python3 tools/export_model.py -c configs/rec/rec_r34_vd_none_bilstm_ctc.yml -o G ``` -STAR-Net文本识别模型推理,可以执行如下命令: +CRNN 文本识别模型推理,可以执行如下命令: ``` python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/rec_crnn/" --rec_image_shape="3, 32, 100" --rec_char_type="en" From d3ca2e426ebf3913605141af1ac9479dc7d27568 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 13:28:33 +0800 Subject: [PATCH 13/20] update inference result --- doc/doc_ch/inference.md | 21 +++++++++++---------- doc/doc_en/inference_en.md | 25 ++++++++++++++----------- doc/imgs_results/2.jpg | Bin 151992 -> 94428 bytes doc/imgs_results/det_res_2.jpg | Bin 81368 -> 79195 bytes doc/imgs_results/det_res_img_10_db.jpg | Bin 338444 -> 339276 bytes 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/doc/doc_ch/inference.md b/doc/doc_ch/inference.md index 4869eb2c..663533c4 100644 --- a/doc/doc_ch/inference.md +++ b/doc/doc_ch/inference.md @@ -186,7 +186,7 @@ python3 tools/infer/predict_det.py --det_algorithm="EAST" --image_dir="./doc/img ``` 可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下: -![](../imgs_results/det_res_img_10_east.jpg) +(coming soon) **注意**:本代码库中,EAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。 @@ -205,7 +205,7 @@ python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/img ``` 可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下: -![](../imgs_results/det_res_img_10_sast.jpg) +(coming soon) #### (2). 弯曲文本检测模型(Total-Text) 首先将SAST文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在Total-Text英文数据集训练的模型为例([模型下载地址(coming soon)](link)),可以使用如下命令进行转换: @@ -221,7 +221,7 @@ python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/img ``` 可视化文本检测结果默认保存到`./inference_results`文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下: -![](../imgs_results/det_res_img623_sast.jpg) +(coming soon) **注意**:本代码库中,SAST后处理Locality-Aware NMS有python和c++两种版本,c++版速度明显快于python版。由于c++版本nms编译版本问题,只有python3.5环境下会调用c++版nms,其他情况将调用python版nms。 @@ -245,8 +245,9 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" 执行命令后,上面图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下: -Predicts of ./doc/imgs_words/ch/word_4.jpg:['实力活力', 0.89552695] - +```bash +Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153) +``` ### 2. 基于CTC损失的识别模型推理 @@ -281,7 +282,9 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png 执行命令后,上面图像的识别结果如下: -Predicts of ./doc/imgs_words_en/word_336.png:['super', 0.9999555] +```bash +Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) +``` **注意**:由于上述模型是参考[DTRB](https://arxiv.org/abs/1904.01906)文本识别训练和评估流程,与超轻量级中文识别模型训练有两方面不同: @@ -313,9 +316,7 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" - 执行命令后,上图的预测结果为: ``` text -2020-09-19 16:15:05,076-INFO: index: [205 206 38 39] -2020-09-19 16:15:05,077-INFO: word : 바탕으로 -2020-09-19 16:15:05,077-INFO: score: 0.9171358942985535 +Predicts of ./doc/imgs_words/korean/1.jpg:('바탕으로', 0.9948904) ``` @@ -378,4 +379,4 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --d 执行命令后,识别结果图像如下: -![](../imgs_results/img_10.jpg) +(coming soon) diff --git a/doc/doc_en/inference_en.md b/doc/doc_en/inference_en.md index 12553c4c..411a733d 100644 --- a/doc/doc_en/inference_en.md +++ b/doc/doc_en/inference_en.md @@ -192,7 +192,7 @@ python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_ The visualized text detection results are saved to the `./inference_results` folder by default, and the name of the result file is prefixed with 'det_res'. Examples of results are as follows: -![](../imgs_results/det_res_img_10_east.jpg) +(coming soon) **Note**: EAST post-processing locality aware NMS has two versions: Python and C++. The speed of C++ version is obviously faster than that of Python version. Due to the compilation version problem of NMS of C++ version, C++ version NMS will be called only in Python 3.5 environment, and python version NMS will be called in other cases. @@ -214,7 +214,7 @@ python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/img The visualized text detection results are saved to the `./inference_results` folder by default, and the name of the result file is prefixed with 'det_res'. Examples of results are as follows: -![](../imgs_results/det_res_img_10_sast.jpg) +(coming soon) #### (2). Curved text detection model (Total-Text) First, convert the model saved in the SAST text detection training process into an inference model. Taking the model based on the Resnet50_vd backbone network and trained on the Total-Text English dataset as an example ([model download link (coming soon)](https://paddleocr.bj.bcebos.com/SAST/sast_r50_vd_total_text.tar)), you can use the following command to convert: @@ -231,7 +231,7 @@ python3 tools/infer/predict_det.py --det_algorithm="SAST" --image_dir="./doc/img The visualized text detection results are saved to the `./inference_results` folder by default, and the name of the result file is prefixed with 'det_res'. Examples of results are as follows: -![](../imgs_results/det_res_img623_sast.jpg) +(coming soon) **Note**: SAST post-processing locality aware NMS has two versions: Python and C++. The speed of C++ version is obviously faster than that of Python version. Due to the compilation version problem of NMS of C++ version, C++ version NMS will be called only in Python 3.5 environment, and python version NMS will be called in other cases. @@ -254,8 +254,9 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" After executing the command, the prediction results (recognized text and score) of the above image will be printed on the screen. -Predicts of ./doc/imgs_words/ch/word_4.jpg:['实力活力', 0.89552695] - +```bash +Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153) +``` ### 2. CTC-BASED TEXT RECOGNITION MODEL INFERENCE @@ -276,7 +277,6 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png ### 3. ATTENTION-BASED TEXT RECOGNITION MODEL INFERENCE -![](../imgs_words_en/word_336.png) The recognition model based on Attention loss is different from ctc, and additional recognition algorithm parameters need to be set --rec_algorithm="RARE" After executing the command, the recognition result of the above image is as follows: @@ -284,8 +284,13 @@ After executing the command, the recognition result of the above image is as fol python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./inference/rare/" --rec_image_shape="3, 32, 100" --rec_char_type="en" --rec_algorithm="RARE" ``` -Predicts of ./doc/imgs_words_en/word_336.png:['super', 0.9999555] +![](../imgs_words_en/word_336.png) +After executing the command, the recognition result of the above image is as follows: + +```bash +Predicts of ./doc/imgs_words_en/word_336.png:('super', 0.9999073) +``` **Note**:Since the above model refers to [DTRB](https://arxiv.org/abs/1904.01906) text recognition training and evaluation process, it is different from the training of lightweight Chinese recognition model in two aspects: - The image resolution used in training is different: the image resolution used in training the above model is [3,32,100], while during our Chinese model training, in order to ensure the recognition effect of long text, the image resolution used in training is [3, 32, 320]. The default shape parameter of the inference stage is the image resolution used in training phase, that is [3, 32, 320]. Therefore, when running inference of the above English model here, you need to set the shape of the recognition image through the parameter `rec_image_shape`. @@ -318,9 +323,7 @@ python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" - After executing the command, the prediction result of the above figure is: ``` text -2020-09-19 16:15:05,076-INFO: index: [205 206 38 39] -2020-09-19 16:15:05,077-INFO: word : 바탕으로 -2020-09-19 16:15:05,077-INFO: score: 0.9171358942985535 +Predicts of ./doc/imgs_words/korean/1.jpg:('바탕으로', 0.9948904) ``` @@ -381,4 +384,4 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --d After executing the command, the recognition result image is as follows: -![](../imgs_results/img_10.jpg) +(coming soon) diff --git a/doc/imgs_results/2.jpg b/doc/imgs_results/2.jpg index 201ef9ee492702118cd1638ed8a0b832c1c6d9ed..99f7e63b02556506dadf8d838eee22534d21d82c 100644 GIT binary patch literal 94428 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 b*$EOS2#v3rz|A!r@+6Q{`hpy-0INp^*3&} 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

fb|i-{Y)b<1e6tCD)WY6j1oCfa3WK=g`4x9 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

HNNx@MW1#9 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 diff --git a/doc/imgs_results/det_res_2.jpg b/doc/imgs_results/det_res_2.jpg index aebcd8ccaca02db7ed4a09cd63ade422abc4735f..c0ae501a7aff7807f53b743745005653775b0d03 100644 GIT binary patch literal 79195 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

!KXVc%p4J_VAff`flm_k)m>$uU<7CAo0^z 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 LC#Oj3pP~N;_By(G diff --git a/doc/imgs_results/det_res_img_10_db.jpg b/doc/imgs_results/det_res_img_10_db.jpg index bde1585cb50137ae1fd33ce7edfa59e7224ddc96..6af89f6bb32191c361c439c9d26e0239b5392fd9 100644 GIT binary patch delta 45178 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

x4KpigbWT%{L@=Bns(s!M>#kV)zVzJS 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 aqsh@dBe6Xr{{x?&z-Mz+&&Zb37ylm;xN-8<0|F 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 From 4b87314a4690425cec020bcb304f4c63143deafb Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 14:12:18 +0800 Subject: [PATCH 14/20] update config --- doc/doc_ch/config.md | 2 +- doc/doc_en/config_en.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/doc_ch/config.md b/doc/doc_ch/config.md index b185929e..92cb4ed6 100644 --- a/doc/doc_ch/config.md +++ b/doc/doc_ch/config.md @@ -17,7 +17,7 @@ | :----------------------: | :---------------------: | :--------------: | :--------------------: | | use_gpu | 设置代码是否在gpu运行 | true | \ | | epoch_num | 最大训练epoch数 | 500 | \ | -| log_smooth_window | 滑动窗口大小 | 20 | \ | +| log_smooth_window | log队列长度,每次打印输出队列里的中间值 | 20 | \ | | print_batch_step | 设置打印log间隔 | 10 | \ | | save_model_dir | 设置模型保存路径 | output/{算法名称} | \ | | save_epoch_step | 设置模型保存间隔 | 3 | \ | diff --git a/doc/doc_en/config_en.md b/doc/doc_en/config_en.md index 6f54ce24..ada1678e 100644 --- a/doc/doc_en/config_en.md +++ b/doc/doc_en/config_en.md @@ -16,7 +16,7 @@ Take rec_chinese_lite_train_v2.0.yml as an example | :----------------------: | :---------------------: | :--------------: | :--------------------: | | use_gpu | Set using GPU or not | true | \ | | epoch_num | Maximum training epoch number | 500 | \ | -| log_smooth_window | Sliding window size | 20 | \ | +| log_smooth_window | Log queue length, the median value in the queue each time will be printed | 20 | \ | | print_batch_step | Set print log interval | 10 | \ | | save_model_dir | Set model save path | output/{算法名称} | \ | | save_epoch_step | Set model save interval | 3 | \ | From 3ebb4a166053845ac0e868fca644094844955d88 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Sat, 12 Dec 2020 14:13:27 +0800 Subject: [PATCH 15/20] update doc --- README_ch.md | 4 ++-- README_en.md | 4 ++-- doc/doc_ch/recognition.md | 4 ++-- doc/doc_en/recognition_en.md | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README_ch.md b/README_ch.md index 701d0194..588af59c 100644 --- a/README_ch.md +++ b/README_ch.md @@ -54,8 +54,8 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 | 模型简介 | 模型名称 |推荐场景 | 检测模型 | 方向分类器 | 识别模型 | | ------------ | --------------- | ----------------|---- | ---------- | -------- | -| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[推理模型](link) / [预训练模型](link) |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | -| 中英文通用OCR模型(155.1M) |ch_ppocr_server_v2.0_xx|服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[推理模型](link) / [预训练模型](link) |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | +| 中英文超轻量OCR模型(8.1M) | ch_ppocr_mobile_v2.0_xx |移动端&服务器端|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| 中英文通用OCR模型(143M) |ch_ppocr_server_v2.0_xx|服务器端 |[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_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/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [预训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | 更多模型下载(包括多语言),可以参考[PP-OCR v2.0 系列模型下载](./doc/doc_ch/models_list.md) diff --git a/README_en.md b/README_en.md index 05247950..9e839c44 100644 --- a/README_en.md +++ b/README_en.md @@ -62,8 +62,8 @@ Mobile DEMO experience (based on EasyEdge and Paddle-Lite, supports iOS and Andr | Model introduction | Model name | Recommended scene | Detection model | Direction classifier | Recognition model | | ------------------------------------------------------------ | ---------------------------- | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| Chinese and English ultra-lightweight OCR model (8.1M) | ch_ppocr_mobile_v2.0_xx | Mobile & server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](link) / [pre-trained model](link) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | -| Chinese and English general OCR model (155.1M) | ch_ppocr_server_v2.0_xx | Server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](link) / [pre-trained model](link) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | +| Chinese and English ultra-lightweight OCR model (8.1M) | ch_ppocr_mobile_v2.0_xx | Mobile & server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar)|[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pre-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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar) | +| Chinese and English general OCR model (143M) | ch_ppocr_server_v2.0_xx | Server |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_traingit.tar) |[inference model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar) / [pre-trained model](https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar) | For more model downloads (including multiple languages), please refer to [PP-OCR v2.0 series model downloads](./doc/doc_en/models_list_en.md). diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index 9dda9ded..25da8fce 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -155,10 +155,10 @@ PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 CRNN ``` cd PaddleOCR/ # 下载MobileNetV3的预训练模型 -wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_infer.tar +wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar # 解压模型参数 cd pretrain_models -tar -xf rec_mv3_none_bilstm_ctc_v2.0_infer.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_infer.tar +tar -xf rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_train.tar ``` 开始训练: diff --git a/doc/doc_en/recognition_en.md b/doc/doc_en/recognition_en.md index 14c3da73..bc06738c 100644 --- a/doc/doc_en/recognition_en.md +++ b/doc/doc_en/recognition_en.md @@ -151,10 +151,10 @@ First download the pretrain model, you can download the trained model to finetun ``` cd PaddleOCR/ # Download the pre-trained model of MobileNetV3 -wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar +wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar # Decompress model parameters cd pretrain_models -tar -xf rec_mv3_none_bilstm_ctc.tar && rm -rf rec_mv3_none_bilstm_ctc.tar +tar -xf rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_train.tar ``` Start training: From c12259091e9b2d4045e1984f35b158617cdb8135 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Sat, 12 Dec 2020 20:10:19 +0800 Subject: [PATCH 16/20] Fix printing problem when multi-image prediction --- tools/infer/predict_det.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/infer/predict_det.py b/tools/infer/predict_det.py index 5be27339..43db20d2 100755 --- a/tools/infer/predict_det.py +++ b/tools/infer/predict_det.py @@ -186,4 +186,4 @@ if __name__ == "__main__": cv2.imwrite(img_path, src_im) logger.info("The visualized image saved in {}".format(img_path)) if count > 1: - logger.info("Avg Time:", total_time / (count - 1)) + logger.info("Avg Time: {}".format(total_time / (count - 1))) From edc0fd0ccd93027add6e119467dd3c8ec6b86500 Mon Sep 17 00:00:00 2001 From: MissPenguin Date: Sun, 13 Dec 2020 06:18:26 +0000 Subject: [PATCH 17/20] fix predict_det --- ppocr/postprocess/db_postprocess.py | 2 +- tools/infer/predict_det.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) mode change 100644 => 100755 ppocr/postprocess/db_postprocess.py diff --git a/ppocr/postprocess/db_postprocess.py b/ppocr/postprocess/db_postprocess.py old mode 100644 new mode 100755 index 0be2c12a..16c789dc --- a/ppocr/postprocess/db_postprocess.py +++ b/ppocr/postprocess/db_postprocess.py @@ -40,7 +40,7 @@ class DBPostProcess(object): self.max_candidates = max_candidates self.unclip_ratio = unclip_ratio self.min_size = 3 - self.dilation_kernel = None if not use_dilation else [[1, 1], [1, 1]] + self.dilation_kernel = None if not use_dilation else np.array([[1, 1], [1, 1]]) def boxes_from_bitmap(self, pred, _bitmap, dest_width, dest_height): ''' diff --git a/tools/infer/predict_det.py b/tools/infer/predict_det.py index 43db20d2..6f98ded8 100755 --- a/tools/infer/predict_det.py +++ b/tools/infer/predict_det.py @@ -63,6 +63,7 @@ class TextDetector(object): postprocess_params["box_thresh"] = args.det_db_box_thresh postprocess_params["max_candidates"] = 1000 postprocess_params["unclip_ratio"] = args.det_db_unclip_ratio + postprocess_params["use_dilation"] = True else: logger.info("unknown det_algorithm:{}".format(self.det_algorithm)) sys.exit(0) @@ -111,7 +112,7 @@ class TextDetector(object): box = self.clip_det_res(box, img_height, img_width) rect_width = int(np.linalg.norm(box[0] - box[1])) rect_height = int(np.linalg.norm(box[0] - box[3])) - if rect_width <= 10 or rect_height <= 10: + if rect_width <= 3 or rect_height <= 3: continue dt_boxes_new.append(box) dt_boxes = np.array(dt_boxes_new) From e84ea2667f3da91c75e03dde86441ef3c292db3c Mon Sep 17 00:00:00 2001 From: littletomatodonkey <2120160898@bit.edu.cn> Date: Sun, 13 Dec 2020 17:19:52 +0800 Subject: [PATCH 18/20] fix prob (#1404) --- ppocr/data/imaug/rec_img_aug.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ppocr/data/imaug/rec_img_aug.py b/ppocr/data/imaug/rec_img_aug.py index 3ab5a8f3..2ccb2d1d 100644 --- a/ppocr/data/imaug/rec_img_aug.py +++ b/ppocr/data/imaug/rec_img_aug.py @@ -35,12 +35,13 @@ from .text_image_aug import tia_perspective, tia_stretch, tia_distort class RecAug(object): - def __init__(self, use_tia=True, **kwargsz): + def __init__(self, use_tia=True, aug_prob=0.4, **kwargs): self.use_tia = use_tia + self.aug_prob = aug_prob def __call__(self, data): img = data['image'] - img = warp(img, 10, self.use_tia) + img = warp(img, 10, self.use_tia, self.aug_prob) data['image'] = img return data @@ -329,7 +330,7 @@ def get_warpAffine(config): return rz -def warp(img, ang, use_tia=True): +def warp(img, ang, use_tia=True, prob=0.4): """ warp """ @@ -338,8 +339,6 @@ def warp(img, ang, use_tia=True): config.make(w, h, ang) new_img = img - prob = 0.4 - if config.distort: img_height, img_width = img.shape[0:2] if random.random() <= prob and img_height >= 20 and img_width >= 20: From 53b514e39d14dcd3ede701615be7a3bbd032ee58 Mon Sep 17 00:00:00 2001 From: Double_V Date: Sun, 13 Dec 2020 17:21:26 +0800 Subject: [PATCH 19/20] delete lite,slim, iosdemo and android demo of dyrgaph branch for now (#1403) delete lite,slim, iosdemo and android demo of dyrgaph branch for now --- README_ch.md | 9 +- README_en.md | 12 +- deploy/android_demo/.gitignore | 9 - deploy/android_demo/README.md | 19 - deploy/android_demo/app/.gitignore | 1 - deploy/android_demo/app/build.gradle | 94 - deploy/android_demo/app/proguard-rules.pro | 21 - .../demo/ocr/ExampleInstrumentedTest.java | 26 - .../app/src/main/AndroidManifest.xml | 39 - .../app/src/main/assets/images/5.jpg | Bin 63736 -> 0 bytes .../src/main/assets/labels/ppocr_keys_v1.txt | 6623 ----------------- .../app/src/main/cpp/CMakeLists.txt | 117 - deploy/android_demo/app/src/main/cpp/common.h | 48 - .../android_demo/app/src/main/cpp/native.cpp | 115 - deploy/android_demo/app/src/main/cpp/native.h | 138 - .../app/src/main/cpp/ocr_clipper.cpp | 4629 ------------ .../app/src/main/cpp/ocr_clipper.hpp | 547 -- .../app/src/main/cpp/ocr_crnn_process.cpp | 140 - .../app/src/main/cpp/ocr_crnn_process.h | 19 - .../app/src/main/cpp/ocr_db_post_process.cpp | 336 - .../app/src/main/cpp/ocr_db_post_process.h | 17 - .../app/src/main/cpp/ocr_ppredictor.cpp | 186 - .../app/src/main/cpp/ocr_ppredictor.h | 112 - .../app/src/main/cpp/ppredictor.cpp | 70 - .../app/src/main/cpp/ppredictor.h | 74 - .../app/src/main/cpp/predictor_input.cpp | 29 - .../app/src/main/cpp/predictor_input.h | 28 - .../app/src/main/cpp/predictor_output.cpp | 27 - .../app/src/main/cpp/predictor_output.h | 35 - .../app/src/main/cpp/preprocess.cpp | 84 - .../app/src/main/cpp/preprocess.h | 14 - .../demo/ocr/AppCompatPreferenceActivity.java | 128 - .../paddle/lite/demo/ocr/MainActivity.java | 473 -- .../paddle/lite/demo/ocr/MiniActivity.java | 157 - .../lite/demo/ocr/OCRPredictorNative.java | 100 - .../paddle/lite/demo/ocr/OcrResultModel.java | 52 - .../baidu/paddle/lite/demo/ocr/Predictor.java | 355 - .../lite/demo/ocr/SettingsActivity.java | 201 - .../com/baidu/paddle/lite/demo/ocr/Utils.java | 159 - .../drawable-v24/ic_launcher_foreground.xml | 34 - .../res/drawable/ic_launcher_background.xml | 170 - .../app/src/main/res/layout/activity_main.xml | 99 - .../app/src/main/res/layout/activity_mini.xml | 46 - .../src/main/res/menu/menu_action_options.xml | 21 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2963 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4905 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2060 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2783 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4490 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6895 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6387 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10413 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9128 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15132 -> 0 bytes .../app/src/main/res/values/arrays.xml | 39 - .../app/src/main/res/values/colors.xml | 6 - .../app/src/main/res/values/strings.xml | 26 - .../app/src/main/res/values/styles.xml | 25 - .../app/src/main/res/xml/file_paths.xml | 4 - .../app/src/main/res/xml/settings.xml | 75 - .../paddle/lite/demo/ocr/ExampleUnitTest.java | 17 - deploy/android_demo/build.gradle | 27 - deploy/android_demo/gradle.properties | 15 - .../gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - deploy/android_demo/gradlew | 172 - deploy/android_demo/gradlew.bat | 84 - deploy/android_demo/settings.gradle | 1 - deploy/ios_demo/download_dependencies.sh | 32 - .../ocr_demo.xcodeproj/project.pbxproj | 462 -- deploy/ios_demo/ocr_demo/AppDelegate.h | 17 - deploy/ios_demo/ocr_demo/AppDelegate.m | 51 - .../AppIcon.appiconset/Contents.json | 98 - .../ocr_demo/Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../ocr_demo/Base.lproj/Main.storyboard | 111 - deploy/ios_demo/ocr_demo/BoxLayer.h | 20 - deploy/ios_demo/ocr_demo/BoxLayer.m | 80 - deploy/ios_demo/ocr_demo/Helpers.h | 31 - deploy/ios_demo/ocr_demo/Helpers.m | 17 - deploy/ios_demo/ocr_demo/Info.plist | 49 - deploy/ios_demo/ocr_demo/OcrData.h | 15 - deploy/ios_demo/ocr_demo/OcrData.m | 12 - deploy/ios_demo/ocr_demo/ViewController.h | 16 - deploy/ios_demo/ocr_demo/ViewController.mm | 536 -- deploy/ios_demo/ocr_demo/label_list.txt | 6623 ----------------- deploy/ios_demo/ocr_demo/main.m | 16 - deploy/ios_demo/ocr_demo/ocr.png | Bin 62926 -> 0 bytes .../ios_demo/ocr_demo/pdocr/ocr_clipper.cpp | 4629 ------------ .../ios_demo/ocr_demo/pdocr/ocr_clipper.hpp | 547 -- .../ocr_demo/pdocr/ocr_crnn_process.cpp | 141 - .../ocr_demo/pdocr/ocr_crnn_process.h | 19 - .../ocr_demo/pdocr/ocr_db_post_process.cpp | 372 - .../ocr_demo/pdocr/ocr_db_post_process.h | 10 - deploy/ios_demo/ocr_demo/timer.h | 87 - deploy/lite/Makefile | 77 - deploy/lite/config.txt | 4 - deploy/lite/crnn_process.cc | 115 - deploy/lite/crnn_process.h | 38 - deploy/lite/db_post_process.cc | 301 - deploy/lite/db_post_process.h | 62 - deploy/lite/ocr_db_crnn.cc | 368 - deploy/lite/prepare.sh | 9 - deploy/lite/readme.md | 233 - deploy/lite/readme_en.md | 190 - 107 files changed, 15 insertions(+), 31524 deletions(-) delete mode 100644 deploy/android_demo/.gitignore delete mode 100644 deploy/android_demo/README.md delete mode 100644 deploy/android_demo/app/.gitignore delete mode 100644 deploy/android_demo/app/build.gradle delete mode 100644 deploy/android_demo/app/proguard-rules.pro delete mode 100644 deploy/android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/ocr/ExampleInstrumentedTest.java delete mode 100644 deploy/android_demo/app/src/main/AndroidManifest.xml delete mode 100644 deploy/android_demo/app/src/main/assets/images/5.jpg delete mode 100644 deploy/android_demo/app/src/main/assets/labels/ppocr_keys_v1.txt delete mode 100644 deploy/android_demo/app/src/main/cpp/CMakeLists.txt delete mode 100644 deploy/android_demo/app/src/main/cpp/common.h delete mode 100644 deploy/android_demo/app/src/main/cpp/native.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/native.h delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_clipper.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_clipper.hpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_crnn_process.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_crnn_process.h delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_db_post_process.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_db_post_process.h delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_ppredictor.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ocr_ppredictor.h delete mode 100644 deploy/android_demo/app/src/main/cpp/ppredictor.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/ppredictor.h delete mode 100644 deploy/android_demo/app/src/main/cpp/predictor_input.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/predictor_input.h delete mode 100644 deploy/android_demo/app/src/main/cpp/predictor_output.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/predictor_output.h delete mode 100644 deploy/android_demo/app/src/main/cpp/preprocess.cpp delete mode 100644 deploy/android_demo/app/src/main/cpp/preprocess.h delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/AppCompatPreferenceActivity.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MainActivity.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MiniActivity.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OCRPredictorNative.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OcrResultModel.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Predictor.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/SettingsActivity.java delete mode 100644 deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Utils.java delete mode 100644 deploy/android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 deploy/android_demo/app/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 deploy/android_demo/app/src/main/res/layout/activity_main.xml delete mode 100644 deploy/android_demo/app/src/main/res/layout/activity_mini.xml delete mode 100644 deploy/android_demo/app/src/main/res/menu/menu_action_options.xml delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 deploy/android_demo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 deploy/android_demo/app/src/main/res/values/arrays.xml delete mode 100644 deploy/android_demo/app/src/main/res/values/colors.xml delete mode 100644 deploy/android_demo/app/src/main/res/values/strings.xml delete mode 100644 deploy/android_demo/app/src/main/res/values/styles.xml delete mode 100644 deploy/android_demo/app/src/main/res/xml/file_paths.xml delete mode 100644 deploy/android_demo/app/src/main/res/xml/settings.xml delete mode 100644 deploy/android_demo/app/src/test/java/com/baidu/paddle/lite/demo/ocr/ExampleUnitTest.java delete mode 100644 deploy/android_demo/build.gradle delete mode 100644 deploy/android_demo/gradle.properties delete mode 100644 deploy/android_demo/gradle/wrapper/gradle-wrapper.jar delete mode 100644 deploy/android_demo/gradle/wrapper/gradle-wrapper.properties delete mode 100644 deploy/android_demo/gradlew delete mode 100644 deploy/android_demo/gradlew.bat delete mode 100644 deploy/android_demo/settings.gradle delete mode 100755 deploy/ios_demo/download_dependencies.sh delete mode 100644 deploy/ios_demo/ocr_demo.xcodeproj/project.pbxproj delete mode 100644 deploy/ios_demo/ocr_demo/AppDelegate.h delete mode 100644 deploy/ios_demo/ocr_demo/AppDelegate.m delete mode 100644 deploy/ios_demo/ocr_demo/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 deploy/ios_demo/ocr_demo/Assets.xcassets/Contents.json delete mode 100644 deploy/ios_demo/ocr_demo/Base.lproj/LaunchScreen.storyboard delete mode 100644 deploy/ios_demo/ocr_demo/Base.lproj/Main.storyboard delete mode 100644 deploy/ios_demo/ocr_demo/BoxLayer.h delete mode 100644 deploy/ios_demo/ocr_demo/BoxLayer.m delete mode 100644 deploy/ios_demo/ocr_demo/Helpers.h delete mode 100644 deploy/ios_demo/ocr_demo/Helpers.m delete mode 100644 deploy/ios_demo/ocr_demo/Info.plist delete mode 100644 deploy/ios_demo/ocr_demo/OcrData.h delete mode 100644 deploy/ios_demo/ocr_demo/OcrData.m delete mode 100644 deploy/ios_demo/ocr_demo/ViewController.h delete mode 100644 deploy/ios_demo/ocr_demo/ViewController.mm delete mode 100644 deploy/ios_demo/ocr_demo/label_list.txt delete mode 100644 deploy/ios_demo/ocr_demo/main.m delete mode 100644 deploy/ios_demo/ocr_demo/ocr.png delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_clipper.cpp delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_clipper.hpp delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_crnn_process.cpp delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_crnn_process.h delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_db_post_process.cpp delete mode 100644 deploy/ios_demo/ocr_demo/pdocr/ocr_db_post_process.h delete mode 100644 deploy/ios_demo/ocr_demo/timer.h delete mode 100644 deploy/lite/Makefile delete mode 100644 deploy/lite/config.txt delete mode 100644 deploy/lite/crnn_process.cc delete mode 100644 deploy/lite/crnn_process.h delete mode 100644 deploy/lite/db_post_process.cc delete mode 100644 deploy/lite/db_post_process.h delete mode 100644 deploy/lite/ocr_db_crnn.cc delete mode 100644 deploy/lite/prepare.sh delete mode 100644 deploy/lite/readme.md delete mode 100644 deploy/lite/readme_en.md diff --git a/README_ch.md b/README_ch.md index 588af59c..fa400d31 100644 --- a/README_ch.md +++ b/README_ch.md @@ -77,9 +77,9 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - [基于Python脚本预测引擎推理](./doc/doc_ch/inference.md) - [基于C++预测引擎推理](./deploy/cpp_infer/readme.md) - [服务化部署](./deploy/hubserving/readme.md) - - [端侧部署](./deploy/lite/readme.md) - - [模型量化](./deploy/slim/quantization/README.md) - - [模型裁剪](./deploy/slim/prune/README.md) + - [端侧部署](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/lite/readme.md) + - [模型量化](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/slim/quantization/README.md) + - [模型裁剪](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/slim/prune/README.md) - [Benchmark](./doc/doc_ch/benchmark.md) - 数据集 - [通用中英文OCR数据集](./doc/doc_ch/datasets.md) @@ -97,6 +97,9 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 - [许可证书](#许可证书) - [贡献代码](#贡献代码) +***注意:动态图端侧部署仍在开发中,目前仅支持动态图训练、python端预测,C++预测, +如果您有需要移动端部署案例或者量化裁剪,请切换到静态图分支;*** + ## PP-OCR Pipline

diff --git a/README_en.md b/README_en.md index 9e839c44..0b5eb1c6 100644 --- a/README_en.md +++ b/README_en.md @@ -88,9 +88,9 @@ For a new language request, please refer to [Guideline for new language_requests - [Python Inference](./doc/doc_en/inference_en.md) - [C++ Inference](./deploy/cpp_infer/readme_en.md) - [Serving](./deploy/hubserving/readme_en.md) - - [Mobile](./deploy/lite/readme_en.md) - - [Model Quantization](./deploy/slim/quantization/README_en.md) - - [Model Compression](./deploy/slim/prune/README_en.md) + - [Mobile](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/lite/readme_en.md) + - [Model Quantization](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/slim/quantization/README_en.md) + - [Model Compression](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/slim/prune/README_en.md) - [Benchmark](./doc/doc_en/benchmark_en.md) - Data Annotation and Synthesis - [Semi-automatic Annotation Tool](./PPOCRLabel/README_en.md) @@ -108,6 +108,12 @@ For a new language request, please refer to [Guideline for new language_requests - [License](#LICENSE) - [Contribution](#CONTRIBUTION) +***Note: The dynamic graphs branch is still under development. +Currently, only dynamic graph training, python-end prediction, and C++ prediction are supported. +If you need mobile-end deployment cases or quantitative demo, +please use the static graph branch.*** + + ## PP-OCR Pipeline diff --git a/deploy/android_demo/.gitignore b/deploy/android_demo/.gitignore deleted file mode 100644 index 93dcb293..00000000 --- a/deploy/android_demo/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/* -.DS_Store -/build -/captures -.externalNativeBuild - diff --git a/deploy/android_demo/README.md b/deploy/android_demo/README.md deleted file mode 100644 index e35e7579..00000000 --- a/deploy/android_demo/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# 如何快速测试 -### 1. 安装最新版本的Android Studio -可以从https://developer.android.com/studio 下载。本Demo使用是4.0版本Android Studio编写。 - -### 2. 按照NDK 20 以上版本 -Demo测试的时候使用的是NDK 20b版本,20版本以上均可以支持编译成功。 - -如果您是初学者,可以用以下方式安装和测试NDK编译环境。 -点击 File -> New ->New Project, 新建 "Native C++" project - -### 3. 导入项目 -点击 File->New->Import Project..., 然后跟着Android Studio的引导导入 - - -# 获得更多支持 -前往[端计算模型生成平台EasyEdge](https://ai.baidu.com/easyedge/app/open_source_demo?referrerUrl=paddlelite),获得更多开发支持: - -- Demo APP:可使用手机扫码安装,方便手机端快速体验文字识别 -- SDK:模型被封装为适配不同芯片硬件和操作系统SDK,包括完善的接口,方便进行二次开发 diff --git a/deploy/android_demo/app/.gitignore b/deploy/android_demo/app/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/deploy/android_demo/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/deploy/android_demo/app/build.gradle b/deploy/android_demo/app/build.gradle deleted file mode 100644 index 5ecb1169..00000000 --- a/deploy/android_demo/app/build.gradle +++ /dev/null @@ -1,94 +0,0 @@ -import java.security.MessageDigest - -apply plugin: 'com.android.application' - -android { - compileSdkVersion 29 - defaultConfig { - applicationId "com.baidu.paddle.lite.demo.ocr" - minSdkVersion 23 - targetSdkVersion 29 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - externalNativeBuild { - cmake { - cppFlags "-std=c++11 -frtti -fexceptions -Wno-format" - arguments '-DANDROID_PLATFORM=android-23', '-DANDROID_STL=c++_shared' ,"-DANDROID_ARM_NEON=TRUE" - } - } - ndk { - // abiFilters "arm64-v8a", "armeabi-v7a" - abiFilters "arm64-v8a", "armeabi-v7a" - ldLibs "jnigraphics" - } - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - externalNativeBuild { - cmake { - path "src/main/cpp/CMakeLists.txt" - version "3.10.2" - } - } -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' -} - -def archives = [ - [ - 'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/paddle_lite_libs_v2_6_1.tar.gz', - 'dest': 'PaddleLite' - ], - [ - 'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/opencv-4.2.0-android-sdk.tar.gz', - 'dest': 'OpenCV' - ], - [ - 'src' : 'https://paddleocr.bj.bcebos.com/deploy/lite/ocr_v1_for_cpu.tar.gz', - 'dest' : 'src/main/assets/models/ocr_v1_for_cpu' - ] -] - -task downloadAndExtractArchives(type: DefaultTask) { - doFirst { - println "Downloading and extracting archives including libs and models" - } - doLast { - // Prepare cache folder for archives - String cachePath = "cache" - if (!file("${cachePath}").exists()) { - mkdir "${cachePath}" - } - archives.eachWithIndex { archive, index -> - MessageDigest messageDigest = MessageDigest.getInstance('MD5') - messageDigest.update(archive.src.bytes) - String cacheName = new BigInteger(1, messageDigest.digest()).toString(32) - // Download the target archive if not exists - boolean copyFiles = !file("${archive.dest}").exists() - if (!file("${cachePath}/${cacheName}.tar.gz").exists()) { - ant.get(src: archive.src, dest: file("${cachePath}/${cacheName}.tar.gz")) - copyFiles = true; // force to copy files from the latest archive files - } - // Extract the target archive if its dest path does not exists - if (copyFiles) { - copy { - from tarTree("${cachePath}/${cacheName}.tar.gz") - into "${archive.dest}" - } - } - } - } -} -preBuild.dependsOn downloadAndExtractArchives \ No newline at end of file diff --git a/deploy/android_demo/app/proguard-rules.pro b/deploy/android_demo/app/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/deploy/android_demo/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/deploy/android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/ocr/ExampleInstrumentedTest.java b/deploy/android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/ocr/ExampleInstrumentedTest.java deleted file mode 100644 index 77b179da..00000000 --- a/deploy/android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/ocr/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("com.baidu.paddle.lite.demo", appContext.getPackageName()); - } -} diff --git a/deploy/android_demo/app/src/main/AndroidManifest.xml b/deploy/android_demo/app/src/main/AndroidManifest.xml deleted file mode 100644 index 54482b1d..00000000 --- a/deploy/android_demo/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/assets/images/5.jpg b/deploy/android_demo/app/src/main/assets/images/5.jpg deleted file mode 100644 index 8517e125c5e660f1bc603a844f946c68086e4616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63736 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 @{rU7nFH)Mwr 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

*c& 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 diff --git a/deploy/android_demo/app/src/main/assets/labels/ppocr_keys_v1.txt b/deploy/android_demo/app/src/main/assets/labels/ppocr_keys_v1.txt deleted file mode 100644 index 84b885d8..00000000 --- a/deploy/android_demo/app/src/main/assets/labels/ppocr_keys_v1.txt +++ /dev/null @@ -1,6623 +0,0 @@ -' -疗 -绚 -诚 -娇 -溜 -题 -贿 -者 -廖 -更 -纳 -加 -奉 -公 -一 -就 -汴 -计 -与 -路 -房 -原 -妇 -2 -0 -8 -- -7 -其 -> -: -] -, -, -骑 -刈 -全 -消 -昏 -傈 -安 -久 -钟 -嗅 -不 -影 -处 -驽 -蜿 -资 -关 -椤 -地 -瘸 -专 -问 -忖 -票 -嫉 -炎 -韵 -要 -月 -田 -节 -陂 -鄙 -捌 -备 -拳 -伺 -眼 -网 -盎 -大 -傍 -心 -东 -愉 -汇 -蹿 -科 -每 -业 -里 -航 -晏 -字 -平 -录 -先 -1 -3 -彤 -鲶 -产 -稍 -督 -腴 -有 -象 -岳 -注 -绍 -在 -泺 -文 -定 -核 -名 -水 -过 -理 -让 -偷 -率 -等 -这 -发 -” -为 -含 -肥 -酉 -相 -鄱 -七 -编 -猥 -锛 -日 -镀 -蒂 -掰 -倒 -辆 -栾 -栗 -综 -涩 -州 -雌 -滑 -馀 -了 -机 -块 -司 -宰 -甙 -兴 -矽 -抚 -保 -用 -沧 -秩 -如 -收 -息 -滥 -页 -疑 -埠 -! -! -姥 -异 -橹 -钇 -向 -下 -跄 -的 -椴 -沫 -国 -绥 -獠 -报 -开 -民 -蜇 -何 -分 -凇 -长 -讥 -藏 -掏 -施 -羽 -中 -讲 -派 -嘟 -人 -提 -浼 -间 -世 -而 -古 -多 -倪 -唇 -饯 -控 -庚 -首 -赛 -蜓 -味 -断 -制 -觉 -技 -替 -艰 -溢 -潮 -夕 -钺 -外 -摘 -枋 -动 -双 -单 -啮 -户 -枇 -确 -锦 -曜 -杜 -或 -能 -效 -霜 -盒 -然 -侗 -电 -晁 -放 -步 -鹃 -新 -杖 -蜂 -吒 -濂 -瞬 -评 -总 -隍 -对 -独 -合 -也 -是 -府 -青 -天 -诲 -墙 -组 -滴 -级 -邀 -帘 -示 -已 -时 -骸 -仄 -泅 -和 -遨 -店 -雇 -疫 -持 -巍 -踮 -境 -只 -亨 -目 -鉴 -崤 -闲 -体 -泄 -杂 -作 -般 -轰 -化 -解 -迂 -诿 -蛭 -璀 -腾 -告 -版 -服 -省 -师 -小 -规 -程 -线 -海 -办 -引 -二 -桧 -牌 -砺 -洄 -裴 -修 -图 -痫 -胡 -许 -犊 -事 -郛 -基 -柴 -呼 -食 -研 -奶 -律 -蛋 -因 -葆 -察 -戏 -褒 -戒 -再 -李 -骁 -工 -貂 -油 -鹅 -章 -啄 -休 -场 -给 -睡 -纷 -豆 -器 -捎 -说 -敏 -学 -会 -浒 -设 -诊 -格 -廓 -查 -来 -霓 -室 -溆 -¢ -诡 -寥 -焕 -舜 -柒 -狐 -回 -戟 -砾 -厄 -实 -翩 -尿 -五 -入 -径 -惭 -喹 -股 -宇 -篝 -| -; -美 -期 -云 -九 -祺 -扮 -靠 -锝 -槌 -系 -企 -酰 -阊 -暂 -蚕 -忻 -豁 -本 -羹 -执 -条 -钦 -H -獒 -限 -进 -季 -楦 -于 -芘 -玖 -铋 -茯 -未 -答 -粘 -括 -样 -精 -欠 -矢 -甥 -帷 -嵩 -扣 -令 -仔 -风 -皈 -行 -支 -部 -蓉 -刮 -站 -蜡 -救 -钊 -汗 -松 -嫌 -成 -可 -. -鹤 -院 -从 -交 -政 -怕 -活 -调 -球 -局 -验 -髌 -第 -韫 -谗 -串 -到 -圆 -年 -米 -/ -* -友 -忿 -检 -区 -看 -自 -敢 -刃 -个 -兹 -弄 -流 -留 -同 -没 -齿 -星 -聆 -轼 -湖 -什 -三 -建 -蛔 -儿 -椋 -汕 -震 -颧 -鲤 -跟 -力 -情 -璺 -铨 -陪 -务 -指 -族 -训 -滦 -鄣 -濮 -扒 -商 -箱 -十 -召 -慷 -辗 -所 -莞 -管 -护 -臭 -横 -硒 -嗓 -接 -侦 -六 -露 -党 -馋 -驾 -剖 -高 -侬 -妪 -幂 -猗 -绺 -骐 -央 -酐 -孝 -筝 -课 -徇 -缰 -门 -男 -西 -项 -句 -谙 -瞒 -秃 -篇 -教 -碲 -罚 -声 -呐 -景 -前 -富 -嘴 -鳌 -稀 -免 -朋 -啬 -睐 -去 -赈 -鱼 -住 -肩 -愕 -速 -旁 -波 -厅 -健 -茼 -厥 -鲟 -谅 -投 -攸 -炔 -数 -方 -击 -呋 -谈 -绩 -别 -愫 -僚 -躬 -鹧 -胪 -炳 -招 -喇 -膨 -泵 -蹦 -毛 -结 -5 -4 -谱 -识 -陕 -粽 -婚 -拟 -构 -且 -搜 -任 -潘 -比 -郢 -妨 -醪 -陀 -桔 -碘 -扎 -选 -哈 -骷 -楷 -亿 -明 -缆 -脯 -监 -睫 -逻 -婵 -共 -赴 -淝 -凡 -惦 -及 -达 -揖 -谩 -澹 -减 -焰 -蛹 -番 -祁 -柏 -员 -禄 -怡 -峤 -龙 -白 -叽 -生 -闯 -起 -细 -装 -谕 -竟 -聚 -钙 -上 -导 -渊 -按 -艾 -辘 -挡 -耒 -盹 -饪 -臀 -记 -邮 -蕙 -受 -各 -医 -搂 -普 -滇 -朗 -茸 -带 -翻 -酚 -( -光 -堤 -墟 -蔷 -万 -幻 -〓 -瑙 -辈 -昧 -盏 -亘 -蛀 -吉 -铰 -请 -子 -假 -闻 -税 -井 -诩 -哨 -嫂 -好 -面 -琐 -校 -馊 -鬣 -缂 -营 -访 -炖 -占 -农 -缀 -否 -经 -钚 -棵 -趟 -张 -亟 -吏 -茶 -谨 -捻 -论 -迸 -堂 -玉 -信 -吧 -瞠 -乡 -姬 -寺 -咬 -溏 -苄 -皿 -意 -赉 -宝 -尔 -钰 -艺 -特 -唳 -踉 -都 -荣 -倚 -登 -荐 -丧 -奇 -涵 -批 -炭 -近 -符 -傩 -感 -道 -着 -菊 -虹 -仲 -众 -懈 -濯 -颞 -眺 -南 -释 -北 -缝 -标 -既 -茗 -整 -撼 -迤 -贲 -挎 -耱 -拒 -某 -妍 -卫 -哇 -英 -矶 -藩 -治 -他 -元 -领 -膜 -遮 -穗 -蛾 -飞 -荒 -棺 -劫 -么 -市 -火 -温 -拈 -棚 -洼 -转 -果 -奕 -卸 -迪 -伸 -泳 -斗 -邡 -侄 -涨 -屯 -萋 -胭 -氡 -崮 -枞 -惧 -冒 -彩 -斜 -手 -豚 -随 -旭 -淑 -妞 -形 -菌 -吲 -沱 -争 -驯 -歹 -挟 -兆 -柱 -传 -至 -包 -内 -响 -临 -红 -功 -弩 -衡 -寂 -禁 -老 -棍 -耆 -渍 -织 -害 -氵 -渑 -布 -载 -靥 -嗬 -虽 -苹 -咨 -娄 -库 -雉 -榜 -帜 -嘲 -套 -瑚 -亲 -簸 -欧 -边 -6 -腿 -旮 -抛 -吹 -瞳 -得 -镓 -梗 -厨 -继 -漾 -愣 -憨 -士 -策 -窑 -抑 -躯 -襟 -脏 -参 -贸 -言 -干 -绸 -鳄 -穷 -藜 -音 -折 -详 -) -举 -悍 -甸 -癌 -黎 -谴 -死 -罩 -迁 -寒 -驷 -袖 -媒 -蒋 -掘 -模 -纠 -恣 -观 -祖 -蛆 -碍 -位 -稿 -主 -澧 -跌 -筏 -京 -锏 -帝 -贴 -证 -糠 -才 -黄 -鲸 -略 -炯 -饱 -四 -出 -园 -犀 -牧 -容 -汉 -杆 -浈 -汰 -瑷 -造 -虫 -瘩 -怪 -驴 -济 -应 -花 -沣 -谔 -夙 -旅 -价 -矿 -以 -考 -s -u -呦 -晒 -巡 -茅 -准 -肟 -瓴 -詹 -仟 -褂 -译 -桌 -混 -宁 -怦 -郑 -抿 -些 -余 -鄂 -饴 -攒 -珑 -群 -阖 -岔 -琨 -藓 -预 -环 -洮 -岌 -宀 -杲 -瀵 -最 -常 -囡 -周 -踊 -女 -鼓 -袭 -喉 -简 -范 -薯 -遐 -疏 -粱 -黜 -禧 -法 -箔 -斤 -遥 -汝 -奥 -直 -贞 -撑 -置 -绱 -集 -她 -馅 -逗 -钧 -橱 -魉 -[ -恙 -躁 -唤 -9 -旺 -膘 -待 -脾 -惫 -购 -吗 -依 -盲 -度 -瘿 -蠖 -俾 -之 -镗 -拇 -鲵 -厝 -簧 -续 -款 -展 -啃 -表 -剔 -品 -钻 -腭 -损 -清 -锶 -统 -涌 -寸 -滨 -贪 -链 -吠 -冈 -伎 -迥 -咏 -吁 -览 -防 -迅 -失 -汾 -阔 -逵 -绀 -蔑 -列 -川 -凭 -努 -熨 -揪 -利 -俱 -绉 -抢 -鸨 -我 -即 -责 -膦 -易 -毓 -鹊 -刹 -玷 -岿 -空 -嘞 -绊 -排 -术 -估 -锷 -违 -们 -苟 -铜 -播 -肘 -件 -烫 -审 -鲂 -广 -像 -铌 -惰 -铟 -巳 -胍 -鲍 -康 -憧 -色 -恢 -想 -拷 -尤 -疳 -知 -S -Y -F -D -A -峄 -裕 -帮 -握 -搔 -氐 -氘 -难 -墒 -沮 -雨 -叁 -缥 -悴 -藐 -湫 -娟 -苑 -稠 -颛 -簇 -后 -阕 -闭 -蕤 -缚 -怎 -佞 -码 -嘤 -蔡 -痊 -舱 -螯 -帕 -赫 -昵 -升 -烬 -岫 -、 -疵 -蜻 -髁 -蕨 -隶 -烛 -械 -丑 -盂 -梁 -强 -鲛 -由 -拘 -揉 -劭 -龟 -撤 -钩 -呕 -孛 -费 -妻 -漂 -求 -阑 -崖 -秤 -甘 -通 -深 -补 -赃 -坎 -床 -啪 -承 -吼 -量 -暇 -钼 -烨 -阂 -擎 -脱 -逮 -称 -P -神 -属 -矗 -华 -届 -狍 -葑 -汹 -育 -患 -窒 -蛰 -佼 -静 -槎 -运 -鳗 -庆 -逝 -曼 -疱 -克 -代 -官 -此 -麸 -耧 -蚌 -晟 -例 -础 -榛 -副 -测 -唰 -缢 -迹 -灬 -霁 -身 -岁 -赭 -扛 -又 -菡 -乜 -雾 -板 -读 -陷 -徉 -贯 -郁 -虑 -变 -钓 -菜 -圾 -现 -琢 -式 -乐 -维 -渔 -浜 -左 -吾 -脑 -钡 -警 -T -啵 -拴 -偌 -漱 -湿 -硕 -止 -骼 -魄 -积 -燥 -联 -踢 -玛 -则 -窿 -见 -振 -畿 -送 -班 -钽 -您 -赵 -刨 -印 -讨 -踝 -籍 -谡 -舌 -崧 -汽 -蔽 -沪 -酥 -绒 -怖 -财 -帖 -肱 -私 -莎 -勋 -羔 -霸 -励 -哼 -帐 -将 -帅 -渠 -纪 -婴 -娩 -岭 -厘 -滕 -吻 -伤 -坝 -冠 -戊 -隆 -瘁 -介 -涧 -物 -黍 -并 -姗 -奢 -蹑 -掣 -垸 -锴 -命 -箍 -捉 -病 -辖 -琰 -眭 -迩 -艘 -绌 -繁 -寅 -若 -毋 -思 -诉 -类 -诈 -燮 -轲 -酮 -狂 -重 -反 -职 -筱 -县 -委 -磕 -绣 -奖 -晋 -濉 -志 -徽 -肠 -呈 -獐 -坻 -口 -片 -碰 -几 -村 -柿 -劳 -料 -获 -亩 -惕 -晕 -厌 -号 -罢 -池 -正 -鏖 -煨 -家 -棕 -复 -尝 -懋 -蜥 -锅 -岛 -扰 -队 -坠 -瘾 -钬 -@ -卧 -疣 -镇 -譬 -冰 -彷 -频 -黯 -据 -垄 -采 -八 -缪 -瘫 -型 -熹 -砰 -楠 -襁 -箐 -但 -嘶 -绳 -啤 -拍 -盥 -穆 -傲 -洗 -盯 -塘 -怔 -筛 -丿 -台 -恒 -喂 -葛 -永 -¥ -烟 -酒 -桦 -书 -砂 -蚝 -缉 -态 -瀚 -袄 -圳 -轻 -蛛 -超 -榧 -遛 -姒 -奘 -铮 -右 -荽 -望 -偻 -卡 -丶 -氰 -附 -做 -革 -索 -戚 -坨 -桷 -唁 -垅 -榻 -岐 -偎 -坛 -莨 -山 -殊 -微 -骇 -陈 -爨 -推 -嗝 -驹 -澡 -藁 -呤 -卤 -嘻 -糅 -逛 -侵 -郓 -酌 -德 -摇 -※ -鬃 -被 -慨 -殡 -羸 -昌 -泡 -戛 -鞋 -河 -宪 -沿 -玲 -鲨 -翅 -哽 -源 -铅 -语 -照 -邯 -址 -荃 -佬 -顺 -鸳 -町 -霭 -睾 -瓢 -夸 -椁 -晓 -酿 -痈 -咔 -侏 -券 -噎 -湍 -签 -嚷 -离 -午 -尚 -社 -锤 -背 -孟 -使 -浪 -缦 -潍 -鞅 -军 -姹 -驶 -笑 -鳟 -鲁 -》 -孽 -钜 -绿 -洱 -礴 -焯 -椰 -颖 -囔 -乌 -孔 -巴 -互 -性 -椽 -哞 -聘 -昨 -早 -暮 -胶 -炀 -隧 -低 -彗 -昝 -铁 -呓 -氽 -藉 -喔 -癖 -瑗 -姨 -权 -胱 -韦 -堑 -蜜 -酋 -楝 -砝 -毁 -靓 -歙 -锲 -究 -屋 -喳 -骨 -辨 -碑 -武 -鸠 -宫 -辜 -烊 -适 -坡 -殃 -培 -佩 -供 -走 -蜈 -迟 -翼 -况 -姣 -凛 -浔 -吃 -飘 -债 -犟 -金 -促 -苛 -崇 -坂 -莳 -畔 -绂 -兵 -蠕 -斋 -根 -砍 -亢 -欢 -恬 -崔 -剁 -餐 -榫 -快 -扶 -‖ -濒 -缠 -鳜 -当 -彭 -驭 -浦 -篮 -昀 -锆 -秸 -钳 -弋 -娣 -瞑 -夷 -龛 -苫 -拱 -致 -% -嵊 -障 -隐 -弑 -初 -娓 -抉 -汩 -累 -蓖 -" -唬 -助 -苓 -昙 -押 -毙 -破 -城 -郧 -逢 -嚏 -獭 -瞻 -溱 -婿 -赊 -跨 -恼 -璧 -萃 -姻 -貉 -灵 -炉 -密 -氛 -陶 -砸 -谬 -衔 -点 -琛 -沛 -枳 -层 -岱 -诺 -脍 -榈 -埂 -征 -冷 -裁 -打 -蹴 -素 -瘘 -逞 -蛐 -聊 -激 -腱 -萘 -踵 -飒 -蓟 -吆 -取 -咙 -簋 -涓 -矩 -曝 -挺 -揣 -座 -你 -史 -舵 -焱 -尘 -苏 -笈 -脚 -溉 -榨 -诵 -樊 -邓 -焊 -义 -庶 -儋 -蟋 -蒲 -赦 -呷 -杞 -诠 -豪 -还 -试 -颓 -茉 -太 -除 -紫 -逃 -痴 -草 -充 -鳕 -珉 -祗 -墨 -渭 -烩 -蘸 -慕 -璇 -镶 -穴 -嵘 -恶 -骂 -险 -绋 -幕 -碉 -肺 -戳 -刘 -潞 -秣 -纾 -潜 -銮 -洛 -须 -罘 -销 -瘪 -汞 -兮 -屉 -r -林 -厕 -质 -探 -划 -狸 -殚 -善 -煊 -烹 -〒 -锈 -逯 -宸 -辍 -泱 -柚 -袍 -远 -蹋 -嶙 -绝 -峥 -娥 -缍 -雀 -徵 -认 -镱 -谷 -= -贩 -勉 -撩 -鄯 -斐 -洋 -非 -祚 -泾 -诒 -饿 -撬 -威 -晷 -搭 -芍 -锥 -笺 -蓦 -候 -琊 -档 -礁 -沼 -卵 -荠 -忑 -朝 -凹 -瑞 -头 -仪 -弧 -孵 -畏 -铆 -突 -衲 -车 -浩 -气 -茂 -悖 -厢 -枕 -酝 -戴 -湾 -邹 -飚 -攘 -锂 -写 -宵 -翁 -岷 -无 -喜 -丈 -挑 -嗟 -绛 -殉 -议 -槽 -具 -醇 -淞 -笃 -郴 -阅 -饼 -底 -壕 -砚 -弈 -询 -缕 -庹 -翟 -零 -筷 -暨 -舟 -闺 -甯 -撞 -麂 -茌 -蔼 -很 -珲 -捕 -棠 -角 -阉 -媛 -娲 -诽 -剿 -尉 -爵 -睬 -韩 -诰 -匣 -危 -糍 -镯 -立 -浏 -阳 -少 -盆 -舔 -擘 -匪 -申 -尬 -铣 -旯 -抖 -赘 -瓯 -居 -ˇ -哮 -游 -锭 -茏 -歌 -坏 -甚 -秒 -舞 -沙 -仗 -劲 -潺 -阿 -燧 -郭 -嗖 -霏 -忠 -材 -奂 -耐 -跺 -砀 -输 -岖 -媳 -氟 -极 -摆 -灿 -今 -扔 -腻 -枝 -奎 -药 -熄 -吨 -话 -q -额 -慑 -嘌 -协 -喀 -壳 -埭 -视 -著 -於 -愧 -陲 -翌 -峁 -颅 -佛 -腹 -聋 -侯 -咎 -叟 -秀 -颇 -存 -较 -罪 -哄 -岗 -扫 -栏 -钾 -羌 -己 -璨 -枭 -霉 -煌 -涸 -衿 -键 -镝 -益 -岢 -奏 -连 -夯 -睿 -冥 -均 -糖 -狞 -蹊 -稻 -爸 -刿 -胥 -煜 -丽 -肿 -璃 -掸 -跚 -灾 -垂 -樾 -濑 -乎 -莲 -窄 -犹 -撮 -战 -馄 -软 -络 -显 -鸢 -胸 -宾 -妲 -恕 -埔 -蝌 -份 -遇 -巧 -瞟 -粒 -恰 -剥 -桡 -博 -讯 -凯 -堇 -阶 -滤 -卖 -斌 -骚 -彬 -兑 -磺 -樱 -舷 -两 -娱 -福 -仃 -差 -找 -桁 -÷ -净 -把 -阴 -污 -戬 -雷 -碓 -蕲 -楚 -罡 -焖 -抽 -妫 -咒 -仑 -闱 -尽 -邑 -菁 -爱 -贷 -沥 -鞑 -牡 -嗉 -崴 -骤 -塌 -嗦 -订 -拮 -滓 -捡 -锻 -次 -坪 -杩 -臃 -箬 -融 -珂 -鹗 -宗 -枚 -降 -鸬 -妯 -阄 -堰 -盐 -毅 -必 -杨 -崃 -俺 -甬 -状 -莘 -货 -耸 -菱 -腼 -铸 -唏 -痤 -孚 -澳 -懒 -溅 -翘 -疙 -杷 -淼 -缙 -骰 -喊 -悉 -砻 -坷 -艇 -赁 -界 -谤 -纣 -宴 -晃 -茹 -归 -饭 -梢 -铡 -街 -抄 -肼 -鬟 -苯 -颂 -撷 -戈 -炒 -咆 -茭 -瘙 -负 -仰 -客 -琉 -铢 -封 -卑 -珥 -椿 -镧 -窨 -鬲 -寿 -御 -袤 -铃 -萎 -砖 -餮 -脒 -裳 -肪 -孕 -嫣 -馗 -嵇 -恳 -氯 -江 -石 -褶 -冢 -祸 -阻 -狈 -羞 -银 -靳 -透 -咳 -叼 -敷 -芷 -啥 -它 -瓤 -兰 -痘 -懊 -逑 -肌 -往 -捺 -坊 -甩 -呻 -〃 -沦 -忘 -膻 -祟 -菅 -剧 -崆 -智 -坯 -臧 -霍 -墅 -攻 -眯 -倘 -拢 -骠 -铐 -庭 -岙 -瓠 -′ -缺 -泥 -迢 -捶 -? -? -郏 -喙 -掷 -沌 -纯 -秘 -种 -听 -绘 -固 -螨 -团 -香 -盗 -妒 -埚 -蓝 -拖 -旱 -荞 -铀 -血 -遏 -汲 -辰 -叩 -拽 -幅 -硬 -惶 -桀 -漠 -措 -泼 -唑 -齐 -肾 -念 -酱 -虚 -屁 -耶 -旗 -砦 -闵 -婉 -馆 -拭 -绅 -韧 -忏 -窝 -醋 -葺 -顾 -辞 -倜 -堆 -辋 -逆 -玟 -贱 -疾 -董 -惘 -倌 -锕 -淘 -嘀 -莽 -俭 -笏 -绑 -鲷 -杈 -择 -蟀 -粥 -嗯 -驰 -逾 -案 -谪 -褓 -胫 -哩 -昕 -颚 -鲢 -绠 -躺 -鹄 -崂 -儒 -俨 -丝 -尕 -泌 -啊 -萸 -彰 -幺 -吟 -骄 -苣 -弦 -脊 -瑰 -〈 -诛 -镁 -析 -闪 -剪 -侧 -哟 -框 -螃 -守 -嬗 -燕 -狭 -铈 -缮 -概 -迳 -痧 -鲲 -俯 -售 -笼 -痣 -扉 -挖 -满 -咋 -援 -邱 -扇 -歪 -便 -玑 -绦 -峡 -蛇 -叨 -〖 -泽 -胃 -斓 -喋 -怂 -坟 -猪 -该 -蚬 -炕 -弥 -赞 -棣 -晔 -娠 -挲 -狡 -创 -疖 -铕 -镭 -稷 -挫 -弭 -啾 -翔 -粉 -履 -苘 -哦 -楼 -秕 -铂 -土 -锣 -瘟 -挣 -栉 -习 -享 -桢 -袅 -磨 -桂 -谦 -延 -坚 -蔚 -噗 -署 -谟 -猬 -钎 -恐 -嬉 -雒 -倦 -衅 -亏 -璩 -睹 -刻 -殿 -王 -算 -雕 -麻 -丘 -柯 -骆 -丸 -塍 -谚 -添 -鲈 -垓 -桎 -蚯 -芥 -予 -飕 -镦 -谌 -窗 -醚 -菀 -亮 -搪 -莺 -蒿 -羁 -足 -J -真 -轶 -悬 -衷 -靛 -翊 -掩 -哒 -炅 -掐 -冼 -妮 -l -谐 -稚 -荆 -擒 -犯 -陵 -虏 -浓 -崽 -刍 -陌 -傻 -孜 -千 -靖 -演 -矜 -钕 -煽 -杰 -酗 -渗 -伞 -栋 -俗 -泫 -戍 -罕 -沾 -疽 -灏 -煦 -芬 -磴 -叱 -阱 -榉 -湃 -蜀 -叉 -醒 -彪 -租 -郡 -篷 -屎 -良 -垢 -隗 -弱 -陨 -峪 -砷 -掴 -颁 -胎 -雯 -绵 -贬 -沐 -撵 -隘 -篙 -暖 -曹 -陡 -栓 -填 -臼 -彦 -瓶 -琪 -潼 -哪 -鸡 -摩 -啦 -俟 -锋 -域 -耻 -蔫 -疯 -纹 -撇 -毒 -绶 -痛 -酯 -忍 -爪 -赳 -歆 -嘹 -辕 -烈 -册 -朴 -钱 -吮 -毯 -癜 -娃 -谀 -邵 -厮 -炽 -璞 -邃 -丐 -追 -词 -瓒 -忆 -轧 -芫 -谯 -喷 -弟 -半 -冕 -裙 -掖 -墉 -绮 -寝 -苔 -势 -顷 -褥 -切 -衮 -君 -佳 -嫒 -蚩 -霞 -佚 -洙 -逊 -镖 -暹 -唛 -& -殒 -顶 -碗 -獗 -轭 -铺 -蛊 -废 -恹 -汨 -崩 -珍 -那 -杵 -曲 -纺 -夏 -薰 -傀 -闳 -淬 -姘 -舀 -拧 -卷 -楂 -恍 -讪 -厩 -寮 -篪 -赓 -乘 -灭 -盅 -鞣 -沟 -慎 -挂 -饺 -鼾 -杳 -树 -缨 -丛 -絮 -娌 -臻 -嗳 -篡 -侩 -述 -衰 -矛 -圈 -蚜 -匕 -筹 -匿 -濞 -晨 -叶 -骋 -郝 -挚 -蚴 -滞 -增 -侍 -描 -瓣 -吖 -嫦 -蟒 -匾 -圣 -赌 -毡 -癞 -恺 -百 -曳 -需 -篓 -肮 -庖 -帏 -卿 -驿 -遗 -蹬 -鬓 -骡 -歉 -芎 -胳 -屐 -禽 -烦 -晌 -寄 -媾 -狄 -翡 -苒 -船 -廉 -终 -痞 -殇 -々 -畦 -饶 -改 -拆 -悻 -萄 -£ -瓿 -乃 -訾 -桅 -匮 -溧 -拥 -纱 -铍 -骗 -蕃 -龋 -缬 -父 -佐 -疚 -栎 -醍 -掳 -蓄 -x -惆 -颜 -鲆 -榆 -〔 -猎 -敌 -暴 -谥 -鲫 -贾 -罗 -玻 -缄 -扦 -芪 -癣 -落 -徒 -臾 -恿 -猩 -托 -邴 -肄 -牵 -春 -陛 -耀 -刊 -拓 -蓓 -邳 -堕 -寇 -枉 -淌 -啡 -湄 -兽 -酷 -萼 -碚 -濠 -萤 -夹 -旬 -戮 -梭 -琥 -椭 -昔 -勺 -蜊 -绐 -晚 -孺 -僵 -宣 -摄 -冽 -旨 -萌 -忙 -蚤 -眉 -噼 -蟑 -付 -契 -瓜 -悼 -颡 -壁 -曾 -窕 -颢 -澎 -仿 -俑 -浑 -嵌 -浣 -乍 -碌 -褪 -乱 -蔟 -隙 -玩 -剐 -葫 -箫 -纲 -围 -伐 -决 -伙 -漩 -瑟 -刑 -肓 -镳 -缓 -蹭 -氨 -皓 -典 -畲 -坍 -铑 -檐 -塑 -洞 -倬 -储 -胴 -淳 -戾 -吐 -灼 -惺 -妙 -毕 -珐 -缈 -虱 -盖 -羰 -鸿 -磅 -谓 -髅 -娴 -苴 -唷 -蚣 -霹 -抨 -贤 -唠 -犬 -誓 -逍 -庠 -逼 -麓 -籼 -釉 -呜 -碧 -秧 -氩 -摔 -霄 -穸 -纨 -辟 -妈 -映 -完 -牛 -缴 -嗷 -炊 -恩 -荔 -茆 -掉 -紊 -慌 -莓 -羟 -阙 -萁 -磐 -另 -蕹 -辱 -鳐 -湮 -吡 -吩 -唐 -睦 -垠 -舒 -圜 -冗 -瞿 -溺 -芾 -囱 -匠 -僳 -汐 -菩 -饬 -漓 -黑 -霰 -浸 -濡 -窥 -毂 -蒡 -兢 -驻 -鹉 -芮 -诙 -迫 -雳 -厂 -忐 -臆 -猴 -鸣 -蚪 -栈 -箕 -羡 -渐 -莆 -捍 -眈 -哓 -趴 -蹼 -埕 -嚣 -骛 -宏 -淄 -斑 -噜 -严 -瑛 -垃 -椎 -诱 -压 -庾 -绞 -焘 -廿 -抡 -迄 -棘 -夫 -纬 -锹 -眨 -瞌 -侠 -脐 -竞 -瀑 -孳 -骧 -遁 -姜 -颦 -荪 -滚 -萦 -伪 -逸 -粳 -爬 -锁 -矣 -役 -趣 -洒 -颔 -诏 -逐 -奸 -甭 -惠 -攀 -蹄 -泛 -尼 -拼 -阮 -鹰 -亚 -颈 -惑 -勒 -〉 -际 -肛 -爷 -刚 -钨 -丰 -养 -冶 -鲽 -辉 -蔻 -画 -覆 -皴 -妊 -麦 -返 -醉 -皂 -擀 -〗 -酶 -凑 -粹 -悟 -诀 -硖 -港 -卜 -z -杀 -涕 -± -舍 -铠 -抵 -弛 -段 -敝 -镐 -奠 -拂 -轴 -跛 -袱 -e -t -沉 -菇 -俎 -薪 -峦 -秭 -蟹 -历 -盟 -菠 -寡 -液 -肢 -喻 -染 -裱 -悱 -抱 -氙 -赤 -捅 -猛 -跑 -氮 -谣 -仁 -尺 -辊 -窍 -烙 -衍 -架 -擦 -倏 -璐 -瑁 -币 -楞 -胖 -夔 -趸 -邛 -惴 -饕 -虔 -蝎 -§ -哉 -贝 -宽 -辫 -炮 -扩 -饲 -籽 -魏 -菟 -锰 -伍 -猝 -末 -琳 -哚 -蛎 -邂 -呀 -姿 -鄞 -却 -歧 -仙 -恸 -椐 -森 -牒 -寤 -袒 -婆 -虢 -雅 -钉 -朵 -贼 -欲 -苞 -寰 -故 -龚 -坭 -嘘 -咫 -礼 -硷 -兀 -睢 -汶 -’ -铲 -烧 -绕 -诃 -浃 -钿 -哺 -柜 -讼 -颊 -璁 -腔 -洽 -咐 -脲 -簌 -筠 -镣 -玮 -鞠 -谁 -兼 -姆 -挥 -梯 -蝴 -谘 -漕 -刷 -躏 -宦 -弼 -b -垌 -劈 -麟 -莉 -揭 -笙 -渎 -仕 -嗤 -仓 -配 -怏 -抬 -错 -泯 -镊 -孰 -猿 -邪 -仍 -秋 -鼬 -壹 -歇 -吵 -炼 -< -尧 -射 -柬 -廷 -胧 -霾 -凳 -隋 -肚 -浮 -梦 -祥 -株 -堵 -退 -L -鹫 -跎 -凶 -毽 -荟 -炫 -栩 -玳 -甜 -沂 -鹿 -顽 -伯 -爹 -赔 -蛴 -徐 -匡 -欣 -狰 -缸 -雹 -蟆 -疤 -默 -沤 -啜 -痂 -衣 -禅 -w -i -h -辽 -葳 -黝 -钗 -停 -沽 -棒 -馨 -颌 -肉 -吴 -硫 -悯 -劾 -娈 -马 -啧 -吊 -悌 -镑 -峭 -帆 -瀣 -涉 -咸 -疸 -滋 -泣 -翦 -拙 -癸 -钥 -蜒 -+ -尾 -庄 -凝 -泉 -婢 -渴 -谊 -乞 -陆 -锉 -糊 -鸦 -淮 -I -B -N -晦 -弗 -乔 -庥 -葡 -尻 -席 -橡 -傣 -渣 -拿 -惩 -麋 -斛 -缃 -矮 -蛏 -岘 -鸽 -姐 -膏 -催 -奔 -镒 -喱 -蠡 -摧 -钯 -胤 -柠 -拐 -璋 -鸥 -卢 -荡 -倾 -^ -_ -珀 -逄 -萧 -塾 -掇 -贮 -笆 -聂 -圃 -冲 -嵬 -M -滔 -笕 -值 -炙 -偶 -蜱 -搐 -梆 -汪 -蔬 -腑 -鸯 -蹇 -敞 -绯 -仨 -祯 -谆 -梧 -糗 -鑫 -啸 -豺 -囹 -猾 -巢 -柄 -瀛 -筑 -踌 -沭 -暗 -苁 -鱿 -蹉 -脂 -蘖 -牢 -热 -木 -吸 -溃 -宠 -序 -泞 -偿 -拜 -檩 -厚 -朐 -毗 -螳 -吞 -媚 -朽 -担 -蝗 -橘 -畴 -祈 -糟 -盱 -隼 -郜 -惜 -珠 -裨 -铵 -焙 -琚 -唯 -咚 -噪 -骊 -丫 -滢 -勤 -棉 -呸 -咣 -淀 -隔 -蕾 -窈 -饨 -挨 -煅 -短 -匙 -粕 -镜 -赣 -撕 -墩 -酬 -馁 -豌 -颐 -抗 -酣 -氓 -佑 -搁 -哭 -递 -耷 -涡 -桃 -贻 -碣 -截 -瘦 -昭 -镌 -蔓 -氚 -甲 -猕 -蕴 -蓬 -散 -拾 -纛 -狼 -猷 -铎 -埋 -旖 -矾 -讳 -囊 -糜 -迈 -粟 -蚂 -紧 -鲳 -瘢 -栽 -稼 -羊 -锄 -斟 -睁 -桥 -瓮 -蹙 -祉 -醺 -鼻 -昱 -剃 -跳 -篱 -跷 -蒜 -翎 -宅 -晖 -嗑 -壑 -峻 -癫 -屏 -狠 -陋 -袜 -途 -憎 -祀 -莹 -滟 -佶 -溥 -臣 -约 -盛 -峰 -磁 -慵 -婪 -拦 -莅 -朕 -鹦 -粲 -裤 -哎 -疡 -嫖 -琵 -窟 -堪 -谛 -嘉 -儡 -鳝 -斩 -郾 -驸 -酊 -妄 -胜 -贺 -徙 -傅 -噌 -钢 -栅 -庇 -恋 -匝 -巯 -邈 -尸 -锚 -粗 -佟 -蛟 -薹 -纵 -蚊 -郅 -绢 -锐 -苗 -俞 -篆 -淆 -膀 -鲜 -煎 -诶 -秽 -寻 -涮 -刺 -怀 -噶 -巨 -褰 -魅 -灶 -灌 -桉 -藕 -谜 -舸 -薄 -搀 -恽 -借 -牯 -痉 -渥 -愿 -亓 -耘 -杠 -柩 -锔 -蚶 -钣 -珈 -喘 -蹒 -幽 -赐 -稗 -晤 -莱 -泔 -扯 -肯 -菪 -裆 -腩 -豉 -疆 -骜 -腐 -倭 -珏 -唔 -粮 -亡 -润 -慰 -伽 -橄 -玄 -誉 -醐 -胆 -龊 -粼 -塬 -陇 -彼 -削 -嗣 -绾 -芽 -妗 -垭 -瘴 -爽 -薏 -寨 -龈 -泠 -弹 -赢 -漪 -猫 -嘧 -涂 -恤 -圭 -茧 -烽 -屑 -痕 -巾 -赖 -荸 -凰 -腮 -畈 -亵 -蹲 -偃 -苇 -澜 -艮 -换 -骺 -烘 -苕 -梓 -颉 -肇 -哗 -悄 -氤 -涠 -葬 -屠 -鹭 -植 -竺 -佯 -诣 -鲇 -瘀 -鲅 -邦 -移 -滁 -冯 -耕 -癔 -戌 -茬 -沁 -巩 -悠 -湘 -洪 -痹 -锟 -循 -谋 -腕 -鳃 -钠 -捞 -焉 -迎 -碱 -伫 -急 -榷 -奈 -邝 -卯 -辄 -皲 -卟 -醛 -畹 -忧 -稳 -雄 -昼 -缩 -阈 -睑 -扌 -耗 -曦 -涅 -捏 -瞧 -邕 -淖 -漉 -铝 -耦 -禹 -湛 -喽 -莼 -琅 -诸 -苎 -纂 -硅 -始 -嗨 -傥 -燃 -臂 -赅 -嘈 -呆 -贵 -屹 -壮 -肋 -亍 -蚀 -卅 -豹 -腆 -邬 -迭 -浊 -} -童 -螂 -捐 -圩 -勐 -触 -寞 -汊 -壤 -荫 -膺 -渌 -芳 -懿 -遴 -螈 -泰 -蓼 -蛤 -茜 -舅 -枫 -朔 -膝 -眙 -避 -梅 -判 -鹜 -璜 -牍 -缅 -垫 -藻 -黔 -侥 -惚 -懂 -踩 -腰 -腈 -札 -丞 -唾 -慈 -顿 -摹 -荻 -琬 -~ -斧 -沈 -滂 -胁 -胀 -幄 -莜 -Z -匀 -鄄 -掌 -绰 -茎 -焚 -赋 -萱 -谑 -汁 -铒 -瞎 -夺 -蜗 -野 -娆 -冀 -弯 -篁 -懵 -灞 -隽 -芡 -脘 -俐 -辩 -芯 -掺 -喏 -膈 -蝈 -觐 -悚 -踹 -蔗 -熠 -鼠 -呵 -抓 -橼 -峨 -畜 -缔 -禾 -崭 -弃 -熊 -摒 -凸 -拗 -穹 -蒙 -抒 -祛 -劝 -闫 -扳 -阵 -醌 -踪 -喵 -侣 -搬 -仅 -荧 -赎 -蝾 -琦 -买 -婧 -瞄 -寓 -皎 -冻 -赝 -箩 -莫 -瞰 -郊 -笫 -姝 -筒 -枪 -遣 -煸 -袋 -舆 -痱 -涛 -母 -〇 -启 -践 -耙 -绲 -盘 -遂 -昊 -搞 -槿 -诬 -纰 -泓 -惨 -檬 -亻 -越 -C -o -憩 -熵 -祷 -钒 -暧 -塔 -阗 -胰 -咄 -娶 -魔 -琶 -钞 -邻 -扬 -杉 -殴 -咽 -弓 -〆 -髻 -】 -吭 -揽 -霆 -拄 -殖 -脆 -彻 -岩 -芝 -勃 -辣 -剌 -钝 -嘎 -甄 -佘 -皖 -伦 -授 -徕 -憔 -挪 -皇 -庞 -稔 -芜 -踏 -溴 -兖 -卒 -擢 -饥 -鳞 -煲 -‰ -账 -颗 -叻 -斯 -捧 -鳍 -琮 -讹 -蛙 -纽 -谭 -酸 -兔 -莒 -睇 -伟 -觑 -羲 -嗜 -宜 -褐 -旎 -辛 -卦 -诘 -筋 -鎏 -溪 -挛 -熔 -阜 -晰 -鳅 -丢 -奚 -灸 -呱 -献 -陉 -黛 -鸪 -甾 -萨 -疮 -拯 -洲 -疹 -辑 -叙 -恻 -谒 -允 -柔 -烂 -氏 -逅 -漆 -拎 -惋 -扈 -湟 -纭 -啕 -掬 -擞 -哥 -忽 -涤 -鸵 -靡 -郗 -瓷 -扁 -廊 -怨 -雏 -钮 -敦 -E -懦 -憋 -汀 -拚 -啉 -腌 -岸 -f -痼 -瞅 -尊 -咀 -眩 -飙 -忌 -仝 -迦 -熬 -毫 -胯 -篑 -茄 -腺 -凄 -舛 -碴 -锵 -诧 -羯 -後 -漏 -汤 -宓 -仞 -蚁 -壶 -谰 -皑 -铄 -棰 -罔 -辅 -晶 -苦 -牟 -闽 -\ -烃 -饮 -聿 -丙 -蛳 -朱 -煤 -涔 -鳖 -犁 -罐 -荼 -砒 -淦 -妤 -黏 -戎 -孑 -婕 -瑾 -戢 -钵 -枣 -捋 -砥 -衩 -狙 -桠 -稣 -阎 -肃 -梏 -诫 -孪 -昶 -婊 -衫 -嗔 -侃 -塞 -蜃 -樵 -峒 -貌 -屿 -欺 -缫 -阐 -栖 -诟 -珞 -荭 -吝 -萍 -嗽 -恂 -啻 -蜴 -磬 -峋 -俸 -豫 -谎 -徊 -镍 -韬 -魇 -晴 -U -囟 -猜 -蛮 -坐 -囿 -伴 -亭 -肝 -佗 -蝠 -妃 -胞 -滩 -榴 -氖 -垩 -苋 -砣 -扪 -馏 -姓 -轩 -厉 -夥 -侈 -禀 -垒 -岑 -赏 -钛 -辐 -痔 -披 -纸 -碳 -“ -坞 -蠓 -挤 -荥 -沅 -悔 -铧 -帼 -蒌 -蝇 -a -p -y -n -g -哀 -浆 -瑶 -凿 -桶 -馈 -皮 -奴 -苜 -佤 -伶 -晗 -铱 -炬 -优 -弊 -氢 -恃 -甫 -攥 -端 -锌 -灰 -稹 -炝 -曙 -邋 -亥 -眶 -碾 -拉 -萝 -绔 -捷 -浍 -腋 -姑 -菖 -凌 -涞 -麽 -锢 -桨 -潢 -绎 -镰 -殆 -锑 -渝 -铬 -困 -绽 -觎 -匈 -糙 -暑 -裹 -鸟 -盔 -肽 -迷 -綦 -『 -亳 -佝 -俘 -钴 -觇 -骥 -仆 -疝 -跪 -婶 -郯 -瀹 -唉 -脖 -踞 -针 -晾 -忒 -扼 -瞩 -叛 -椒 -疟 -嗡 -邗 -肆 -跆 -玫 -忡 -捣 -咧 -唆 -艄 -蘑 -潦 -笛 -阚 -沸 -泻 -掊 -菽 -贫 -斥 -髂 -孢 -镂 -赂 -麝 -鸾 -屡 -衬 -苷 -恪 -叠 -希 -粤 -爻 -喝 -茫 -惬 -郸 -绻 -庸 -撅 -碟 -宄 -妹 -膛 -叮 -饵 -崛 -嗲 -椅 -冤 -搅 -咕 -敛 -尹 -垦 -闷 -蝉 -霎 -勰 -败 -蓑 -泸 -肤 -鹌 -幌 -焦 -浠 -鞍 -刁 -舰 -乙 -竿 -裔 -。 -茵 -函 -伊 -兄 -丨 -娜 -匍 -謇 -莪 -宥 -似 -蝽 -翳 -酪 -翠 -粑 -薇 -祢 -骏 -赠 -叫 -Q -噤 -噻 -竖 -芗 -莠 -潭 -俊 -羿 -耜 -O -郫 -趁 -嗪 -囚 -蹶 -芒 -洁 -笋 -鹑 -敲 -硝 -啶 -堡 -渲 -揩 -』 -携 -宿 -遒 -颍 -扭 -棱 -割 -萜 -蔸 -葵 -琴 -捂 -饰 -衙 -耿 -掠 -募 -岂 -窖 -涟 -蔺 -瘤 -柞 -瞪 -怜 -匹 -距 -楔 -炜 -哆 -秦 -缎 -幼 -茁 -绪 -痨 -恨 -楸 -娅 -瓦 -桩 -雪 -嬴 -伏 -榔 -妥 -铿 -拌 -眠 -雍 -缇 -‘ -卓 -搓 -哌 -觞 -噩 -屈 -哧 -髓 -咦 -巅 -娑 -侑 -淫 -膳 -祝 -勾 -姊 -莴 -胄 -疃 -薛 -蜷 -胛 -巷 -芙 -芋 -熙 -闰 -勿 -窃 -狱 -剩 -钏 -幢 -陟 -铛 -慧 -靴 -耍 -k -浙 -浇 -飨 -惟 -绗 -祜 -澈 -啼 -咪 -磷 -摞 -诅 -郦 -抹 -跃 -壬 -吕 -肖 -琏 -颤 -尴 -剡 -抠 -凋 -赚 -泊 -津 -宕 -殷 -倔 -氲 -漫 -邺 -涎 -怠 -$ -垮 -荬 -遵 -俏 -叹 -噢 -饽 -蜘 -孙 -筵 -疼 -鞭 -羧 -牦 -箭 -潴 -c -眸 -祭 -髯 -啖 -坳 -愁 -芩 -驮 -倡 -巽 -穰 -沃 -胚 -怒 -凤 -槛 -剂 -趵 -嫁 -v -邢 -灯 -鄢 -桐 -睽 -檗 -锯 -槟 -婷 -嵋 -圻 -诗 -蕈 -颠 -遭 -痢 -芸 -怯 -馥 -竭 -锗 -徜 -恭 -遍 -籁 -剑 -嘱 -苡 -龄 -僧 -桑 -潸 -弘 -澶 -楹 -悲 -讫 -愤 -腥 -悸 -谍 -椹 -呢 -桓 -葭 -攫 -阀 -翰 -躲 -敖 -柑 -郎 -笨 -橇 -呃 -魁 -燎 -脓 -葩 -磋 -垛 -玺 -狮 -沓 -砜 -蕊 -锺 -罹 -蕉 -翱 -虐 -闾 -巫 -旦 -茱 -嬷 -枯 -鹏 -贡 -芹 -汛 -矫 -绁 -拣 -禺 -佃 -讣 -舫 -惯 -乳 -趋 -疲 -挽 -岚 -虾 -衾 -蠹 -蹂 -飓 -氦 -铖 -孩 -稞 -瑜 -壅 -掀 -勘 -妓 -畅 -髋 -W -庐 -牲 -蓿 -榕 -练 -垣 -唱 -邸 -菲 -昆 -婺 -穿 -绡 -麒 -蚱 -掂 -愚 -泷 -涪 -漳 -妩 -娉 -榄 -讷 -觅 -旧 -藤 -煮 -呛 -柳 -腓 -叭 -庵 -烷 -阡 -罂 -蜕 -擂 -猖 -咿 -媲 -脉 -【 -沏 -貅 -黠 -熏 -哲 -烁 -坦 -酵 -兜 -× -潇 -撒 -剽 -珩 -圹 -乾 -摸 -樟 -帽 -嗒 -襄 -魂 -轿 -憬 -锡 -〕 -喃 -皆 -咖 -隅 -脸 -残 -泮 -袂 -鹂 -珊 -囤 -捆 -咤 -误 -徨 -闹 -淙 -芊 -淋 -怆 -囗 -拨 -梳 -渤 -R -G -绨 -蚓 -婀 -幡 -狩 -麾 -谢 -唢 -裸 -旌 -伉 -纶 -裂 -驳 -砼 -咛 -澄 -樨 -蹈 -宙 -澍 -倍 -貔 -操 -勇 -蟠 -摈 -砧 -虬 -够 -缁 -悦 -藿 -撸 -艹 -摁 -淹 -豇 -虎 -榭 -ˉ -吱 -d -° -喧 -荀 -踱 -侮 -奋 -偕 -饷 -犍 -惮 -坑 -璎 -徘 -宛 -妆 -袈 -倩 -窦 -昂 -荏 -乖 -K -怅 -撰 -鳙 -牙 -袁 -酞 -X -痿 -琼 -闸 -雁 -趾 -荚 -虻 -涝 -《 -杏 -韭 -偈 -烤 -绫 -鞘 -卉 -症 -遢 -蓥 -诋 -杭 -荨 -匆 -竣 -簪 -辙 -敕 -虞 -丹 -缭 -咩 -黟 -m -淤 -瑕 -咂 -铉 -硼 -茨 -嶂 -痒 -畸 -敬 -涿 -粪 -窘 -熟 -叔 -嫔 -盾 -忱 -裘 -憾 -梵 -赡 -珙 -咯 -娘 -庙 -溯 -胺 -葱 -痪 -摊 -荷 -卞 -乒 -髦 -寐 -铭 -坩 -胗 -枷 -爆 -溟 -嚼 -羚 -砬 -轨 -惊 -挠 -罄 -竽 -菏 -氧 -浅 -楣 -盼 -枢 -炸 -阆 -杯 -谏 -噬 -淇 -渺 -俪 -秆 -墓 -泪 -跻 -砌 -痰 -垡 -渡 -耽 -釜 -讶 -鳎 -煞 -呗 -韶 -舶 -绷 -鹳 -缜 -旷 -铊 -皱 -龌 -檀 -霖 -奄 -槐 -艳 -蝶 -旋 -哝 -赶 -骞 -蚧 -腊 -盈 -丁 -` -蜚 -矸 -蝙 -睨 -嚓 -僻 -鬼 -醴 -夜 -彝 -磊 -笔 -拔 -栀 -糕 -厦 -邰 -纫 -逭 -纤 -眦 -膊 -馍 -躇 -烯 -蘼 -冬 -诤 -暄 -骶 -哑 -瘠 -」 -臊 -丕 -愈 -咱 -螺 -擅 -跋 -搏 -硪 -谄 -笠 -淡 -嘿 -骅 -谧 -鼎 -皋 -姚 -歼 -蠢 -驼 -耳 -胬 -挝 -涯 -狗 -蒽 -孓 -犷 -凉 -芦 -箴 -铤 -孤 -嘛 -坤 -V -茴 -朦 -挞 -尖 -橙 -诞 -搴 -碇 -洵 -浚 -帚 -蜍 -漯 -柘 -嚎 -讽 -芭 -荤 -咻 -祠 -秉 -跖 -埃 -吓 -糯 -眷 -馒 -惹 -娼 -鲑 -嫩 -讴 -轮 -瞥 -靶 -褚 -乏 -缤 -宋 -帧 -删 -驱 -碎 -扑 -俩 -俄 -偏 -涣 -竹 -噱 -皙 -佰 -渚 -唧 -斡 -# -镉 -刀 -崎 -筐 -佣 -夭 -贰 -肴 -峙 -哔 -艿 -匐 -牺 -镛 -缘 -仡 -嫡 -劣 -枸 -堀 -梨 -簿 -鸭 -蒸 -亦 -稽 -浴 -{ -衢 -束 -槲 -j -阁 -揍 -疥 -棋 -潋 -聪 -窜 -乓 -睛 -插 -冉 -阪 -苍 -搽 -「 -蟾 -螟 -幸 -仇 -樽 -撂 -慢 -跤 -幔 -俚 -淅 -覃 -觊 -溶 -妖 -帛 -侨 -曰 -妾 -泗 -· -: -瀘 -風 -Ë -( -) -∶ -紅 -紗 -瑭 -雲 -頭 -鶏 -財 -許 -• -¥ -樂 -焗 -麗 -— -; -滙 -東 -榮 -繪 -興 -… -門 -業 -π -楊 -國 -顧 -é -盤 -寳 -Λ -龍 -鳳 -島 -誌 -緣 -結 -銭 -萬 -勝 -祎 -璟 -優 -歡 -臨 -時 -購 -= -★ -藍 -昇 -鐵 -觀 -勅 -農 -聲 -畫 -兿 -術 -發 -劉 -記 -專 -耑 -園 -書 -壴 -種 -Ο -● -褀 -號 -銀 -匯 -敟 -锘 -葉 -橪 -廣 -進 -蒄 -鑽 -阝 -祙 -貢 -鍋 -豊 -夬 -喆 -團 -閣 -開 -燁 -賓 -館 -酡 -沔 -順 -+ -硚 -劵 -饸 -陽 -車 -湓 -復 -萊 -氣 -軒 -華 -堃 -迮 -纟 -戶 -馬 -學 -裡 -電 -嶽 -獨 -マ -シ -サ -ジ -燘 -袪 -環 -❤ -臺 -灣 -専 -賣 -孖 -聖 -攝 -線 -▪ -α -傢 -俬 -夢 -達 -莊 -喬 -貝 -薩 -劍 -羅 -壓 -棛 -饦 -尃 -璈 -囍 -醫 -G -I -A -# -N -鷄 -髙 -嬰 -啓 -約 -隹 -潔 -賴 -藝 -~ -寶 -籣 -麺 -  -嶺 -√ -義 -網 -峩 -長 -∧ -魚 -機 -構 -② -鳯 -偉 -L -B -㙟 -畵 -鴿 -' -詩 -溝 -嚞 -屌 -藔 -佧 -玥 -蘭 -織 -1 -3 -9 -0 -7 -點 -砭 -鴨 -鋪 -銘 -廳 -弍 -‧ -創 -湯 -坶 -℃ -卩 -骝 -& -烜 -荘 -當 -潤 -扞 -係 -懷 -碶 -钅 -蚨 -讠 -☆ -叢 -爲 -埗 -涫 -塗 -→ -楽 -現 -鯨 -愛 -瑪 -鈺 -忄 -悶 -藥 -飾 -樓 -視 -孬 -ㆍ -燚 -苪 -師 -① -丼 -锽 -│ -韓 -標 -è -兒 -閏 -匋 -張 -漢 -Ü -髪 -會 -閑 -檔 -習 -裝 -の -峯 -菘 -輝 -И -雞 -釣 -億 -浐 -K -O -R -8 -H -E -P -T -W -D -S -C -M -F -姌 -饹 -» -晞 -廰 -ä -嵯 -鷹 -負 -飲 -絲 -冚 -楗 -澤 -綫 -區 -❋ -← -質 -靑 -揚 -③ -滬 -統 -産 -協 -﹑ -乸 -畐 -經 -運 -際 -洺 -岽 -為 -粵 -諾 -崋 -豐 -碁 -ɔ -V -2 -6 -齋 -誠 -訂 -´ -勑 -雙 -陳 -無 -í -泩 -媄 -夌 -刂 -i -c -t -o -r -a -嘢 -耄 -燴 -暃 -壽 -媽 -靈 -抻 -體 -唻 -É -冮 -甹 -鎮 -錦 -ʌ -蜛 -蠄 -尓 -駕 -戀 -飬 -逹 -倫 -貴 -極 -Я -Й -寬 -磚 -嶪 -郎 -職 -| -間 -n -d -剎 -伈 -課 -飛 -橋 -瘊 -№ -譜 -骓 -圗 -滘 -縣 -粿 -咅 -養 -濤 -彳 -® -% -Ⅱ -啰 -㴪 -見 -矞 -薬 -糁 -邨 -鲮 -顔 -罱 -З -選 -話 -贏 -氪 -俵 -競 -瑩 -繡 -枱 -β -綉 -á -獅 -爾 -™ -麵 -戋 -淩 -徳 -個 -劇 -場 -務 -簡 -寵 -h -實 -膠 -轱 -圖 -築 -嘣 -樹 -㸃 -營 -耵 -孫 -饃 -鄺 -飯 -麯 -遠 -輸 -坫 -孃 -乚 -閃 -鏢 -㎡ -題 -廠 -關 -↑ -爺 -將 -軍 -連 -篦 -覌 -參 -箸 -- -窠 -棽 -寕 -夀 -爰 -歐 -呙 -閥 -頡 -熱 -雎 -垟 -裟 -凬 -勁 -帑 -馕 -夆 -疌 -枼 -馮 -貨 -蒤 -樸 -彧 -旸 -靜 -龢 -暢 -㐱 -鳥 -珺 -鏡 -灡 -爭 -堷 -廚 -Ó -騰 -診 -┅ -蘇 -褔 -凱 -頂 -豕 -亞 -帥 -嘬 -⊥ -仺 -桖 -複 -饣 -絡 -穂 -顏 -棟 -納 -▏ -濟 -親 -設 -計 -攵 -埌 -烺 -ò -頤 -燦 -蓮 -撻 -節 -講 -濱 -濃 -娽 -洳 -朿 -燈 -鈴 -護 -膚 -铔 -過 -補 -Z -U -5 -4 -坋 -闿 -䖝 -餘 -缐 -铞 -貿 -铪 -桼 -趙 -鍊 -[ -㐂 -垚 -菓 -揸 -捲 -鐘 -滏 -𣇉 -爍 -輪 -燜 -鴻 -鮮 -動 -鹞 -鷗 -丄 -慶 -鉌 -翥 -飮 -腸 -⇋ -漁 -覺 -來 -熘 -昴 -翏 -鲱 -圧 -鄉 -萭 -頔 -爐 -嫚 -г -貭 -類 -聯 -幛 -輕 -訓 -鑒 -夋 -锨 -芃 -珣 -䝉 -扙 -嵐 -銷 -處 -ㄱ -語 -誘 -苝 -歸 -儀 -燒 -楿 -內 -粢 -葒 -奧 -麥 -礻 -滿 -蠔 -穵 -瞭 -態 -鱬 -榞 -硂 -鄭 -黃 -煙 -祐 -奓 -逺 -* -瑄 -獲 -聞 -薦 -讀 -這 -樣 -決 -問 -啟 -們 -執 -説 -轉 -單 -隨 -唘 -帶 -倉 -庫 -還 -贈 -尙 -皺 -■ -餅 -產 -○ -∈ -報 -狀 -楓 -賠 -琯 -嗮 -禮 -` -傳 -> -≤ -嗞 -Φ -≥ -換 -咭 -∣ -↓ -曬 -ε -応 -寫 -″ -終 -様 -純 -費 -療 -聨 -凍 -壐 -郵 -ü -黒 -∫ -製 -塊 -調 -軽 -確 -撃 -級 -馴 -Ⅲ -涇 -繹 -數 -碼 -證 -狒 -処 -劑 -< -晧 -賀 -衆 -] -櫥 -兩 -陰 -絶 -對 -鯉 -憶 -◎ -p -e -Y -蕒 -煖 -頓 -測 -試 -鼽 -僑 -碩 -妝 -帯 -≈ -鐡 -舖 -權 -喫 -倆 -ˋ -該 -悅 -ā -俫 -. -f -s -b -m -k -g -u -j -貼 -淨 -濕 -針 -適 -備 -l -/ -給 -謢 -強 -觸 -衛 -與 -⊙ -$ -緯 -變 -⑴ -⑵ -⑶ -㎏ -殺 -∩ -幚 -─ -價 -▲ -離 -ú -ó -飄 -烏 -関 -閟 -﹝ -﹞ -邏 -輯 -鍵 -驗 -訣 -導 -歷 -屆 -層 -▼ -儱 -錄 -熳 -ē -艦 -吋 -錶 -辧 -飼 -顯 -④ -禦 -販 -気 -対 -枰 -閩 -紀 -幹 -瞓 -貊 -淚 -△ -眞 -墊 -Ω -獻 -褲 -縫 -緑 -亜 -鉅 -餠 -{ -} -◆ -蘆 -薈 -█ -◇ -溫 -彈 -晳 -粧 -犸 -穩 -訊 -崬 -凖 -熥 -П -舊 -條 -紋 -圍 -Ⅳ -筆 -尷 -難 -雜 -錯 -綁 -識 -頰 -鎖 -艶 -□ -殁 -殼 -⑧ -├ -▕ -鵬 -ǐ -ō -ǒ -糝 -綱 -▎ -μ -盜 -饅 -醬 -籤 -蓋 -釀 -鹽 -據 -à -ɡ -辦 -◥ -彐 -┌ -婦 -獸 -鲩 -伱 -ī -蒟 -蒻 -齊 -袆 -腦 -寧 -凈 -妳 -煥 -詢 -偽 -謹 -啫 -鯽 -騷 -鱸 -損 -傷 -鎻 -髮 -買 -冏 -儥 -両 -﹢ -∞ -載 -喰 -z -羙 -悵 -燙 -曉 -員 -組 -徹 -艷 -痠 -鋼 -鼙 -縮 -細 -嚒 -爯 -≠ -維 -" -鱻 -壇 -厍 -帰 -浥 -犇 -薡 -軎 -² -應 -醜 -刪 -緻 -鶴 -賜 -噁 -軌 -尨 -镔 -鷺 -槗 -彌 -葚 -濛 -請 -溇 -緹 -賢 -訪 -獴 -瑅 -資 -縤 -陣 -蕟 -栢 -韻 -祼 -恁 -伢 -謝 -劃 -涑 -總 -衖 -踺 -砋 -凉 -籃 -駿 -苼 -瘋 -昽 -紡 -驊 -腎 -﹗ -響 -杋 -剛 -嚴 -禪 -歓 -槍 -傘 -檸 -檫 -炣 -勢 -鏜 -鎢 -銑 -尐 -減 -奪 -惡 -θ -僮 -婭 -臘 -ū -ì -殻 -鉄 -∑ -蛲 -焼 -緖 -續 -紹 -懮 \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/CMakeLists.txt b/deploy/android_demo/app/src/main/cpp/CMakeLists.txt deleted file mode 100644 index 742786ad..00000000 --- a/deploy/android_demo/app/src/main/cpp/CMakeLists.txt +++ /dev/null @@ -1,117 +0,0 @@ -# For more information about using CMake with Android Studio, read the -# documentation: https://d.android.com/studio/projects/add-native-code.html - -# Sets the minimum version of CMake required to build the native library. - -cmake_minimum_required(VERSION 3.4.1) - -# Creates and names a library, sets it as either STATIC or SHARED, and provides -# the relative paths to its source code. You can define multiple libraries, and -# CMake builds them for you. Gradle automatically packages shared libraries with -# your APK. - -set(PaddleLite_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../PaddleLite") -include_directories(${PaddleLite_DIR}/cxx/include) - -set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../OpenCV/sdk/native/jni") -message(STATUS "opencv dir: ${OpenCV_DIR}") -find_package(OpenCV REQUIRED) -message(STATUS "OpenCV libraries: ${OpenCV_LIBS}") -include_directories(${OpenCV_INCLUDE_DIRS}) -aux_source_directory(. SOURCES) -set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -ffast-math -Ofast -Os" - ) -set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fdata-sections -ffunction-sections" - ) -set(CMAKE_SHARED_LINKER_FLAGS - "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,-z,nocopyreloc") - -add_library( - # Sets the name of the library. - Native - # Sets the library as a shared library. - SHARED - # Provides a relative path to your source file(s). - ${SOURCES}) - -find_library( - # Sets the name of the path variable. - log-lib - # Specifies the name of the NDK library that you want CMake to locate. - log) - -add_library( - # Sets the name of the library. - paddle_light_api_shared - # Sets the library as a shared library. - SHARED - # Provides a relative path to your source file(s). - IMPORTED) - -set_target_properties( - # Specifies the target library. - paddle_light_api_shared - # Specifies the parameter you want to define. - PROPERTIES - IMPORTED_LOCATION - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libpaddle_light_api_shared.so - # Provides the path to the library you want to import. -) - - -# Specifies libraries CMake should link to your target library. You can link -# multiple libraries, such as libraries you define in this build script, -# prebuilt third-party libraries, or system libraries. - -target_link_libraries( - # Specifies the target library. - Native - paddle_light_api_shared - ${OpenCV_LIBS} - GLESv2 - EGL - jnigraphics - ${log-lib} -) - -add_custom_command( - TARGET Native - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libc++_shared.so - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libc++_shared.so) - -add_custom_command( - TARGET Native - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libpaddle_light_api_shared.so - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpaddle_light_api_shared.so) - -add_custom_command( - TARGET Native - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai.so - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai.so) - -add_custom_command( - TARGET Native - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai_ir.so - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai_ir.so) - -add_custom_command( - TARGET Native - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy - ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libhiai_ir_build.so - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libhiai_ir_build.so) \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/common.h b/deploy/android_demo/app/src/main/cpp/common.h deleted file mode 100644 index f3937e91..00000000 --- a/deploy/android_demo/app/src/main/cpp/common.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Created by fu on 4/25/18. -// - -#pragma once -#import -#import - -#ifdef __ANDROID__ - -#include - -#define LOG_TAG "OCR_NDK" - -#define LOGI(...) \ - __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) -#define LOGW(...) \ - __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__) -#define LOGE(...) \ - __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) -#else -#include -#define LOGI(format, ...) \ - fprintf(stdout, "[" LOG_TAG "]" format "\n", ##__VA_ARGS__) -#define LOGW(format, ...) \ - fprintf(stdout, "[" LOG_TAG "]" format "\n", ##__VA_ARGS__) -#define LOGE(format, ...) \ - fprintf(stderr, "[" LOG_TAG "]Error: " format "\n", ##__VA_ARGS__) -#endif - -enum RETURN_CODE { - RETURN_OK = 0 -}; - -enum NET_TYPE{ - NET_OCR = 900100, - NET_OCR_INTERNAL = 991008 -}; - - -template -inline T product(const std::vector &vec) { - if (vec.empty()){ - return 0; - } - return std::accumulate(vec.begin(), vec.end(), 1, std::multiplies()); -} - diff --git a/deploy/android_demo/app/src/main/cpp/native.cpp b/deploy/android_demo/app/src/main/cpp/native.cpp deleted file mode 100644 index 390c594d..00000000 --- a/deploy/android_demo/app/src/main/cpp/native.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// -// Created by fujiayi on 2020/7/5. -// - -#include "native.h" -#include "ocr_ppredictor.h" -#include -#include -#include - -static paddle::lite_api::PowerMode str_to_cpu_mode(const std::string &cpu_mode); - -extern "C" -JNIEXPORT jlong JNICALL -Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_init(JNIEnv *env, jobject thiz, - jstring j_det_model_path, - jstring j_rec_model_path, - jint j_thread_num, - jstring j_cpu_mode) { - std::string det_model_path = jstring_to_cpp_string(env, j_det_model_path); - std::string rec_model_path = jstring_to_cpp_string(env, j_rec_model_path); - int thread_num = j_thread_num; - std::string cpu_mode = jstring_to_cpp_string(env, j_cpu_mode); - ppredictor::OCR_Config conf; - conf.thread_num = thread_num; - conf.mode = str_to_cpu_mode(cpu_mode); - ppredictor::OCR_PPredictor *orc_predictor = new ppredictor::OCR_PPredictor{conf}; - orc_predictor->init_from_file(det_model_path, rec_model_path); - return reinterpret_cast(orc_predictor); -} - -/** - * "LITE_POWER_HIGH" convert to paddle::lite_api::LITE_POWER_HIGH - * @param cpu_mode - * @return - */ -static paddle::lite_api::PowerMode str_to_cpu_mode(const std::string &cpu_mode) { - static std::map cpu_mode_map{ - {"LITE_POWER_HIGH", paddle::lite_api::LITE_POWER_HIGH}, - {"LITE_POWER_LOW", paddle::lite_api::LITE_POWER_HIGH}, - {"LITE_POWER_FULL", paddle::lite_api::LITE_POWER_FULL}, - {"LITE_POWER_NO_BIND", paddle::lite_api::LITE_POWER_NO_BIND}, - {"LITE_POWER_RAND_HIGH", paddle::lite_api::LITE_POWER_RAND_HIGH}, - {"LITE_POWER_RAND_LOW", paddle::lite_api::LITE_POWER_RAND_LOW} - }; - std::string upper_key; - std::transform(cpu_mode.cbegin(), cpu_mode.cend(), upper_key.begin(), ::toupper); - auto index = cpu_mode_map.find(upper_key); - if (index == cpu_mode_map.end()) { - LOGE("cpu_mode not found %s", upper_key.c_str()); - return paddle::lite_api::LITE_POWER_HIGH; - } else { - return index->second; - } - -} - -extern "C" -JNIEXPORT jfloatArray JNICALL -Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_forward(JNIEnv *env, jobject thiz, - jlong java_pointer, jfloatArray buf, - jfloatArray ddims, - jobject original_image) { - LOGI("begin to run native forward"); - if (java_pointer == 0) { - LOGE("JAVA pointer is NULL"); - return cpp_array_to_jfloatarray(env, nullptr, 0); - } - cv::Mat origin = bitmap_to_cv_mat(env, original_image); - if (origin.size == 0) { - LOGE("origin bitmap cannot convert to CV Mat"); - return cpp_array_to_jfloatarray(env, nullptr, 0); - } - ppredictor::OCR_PPredictor *ppredictor = (ppredictor::OCR_PPredictor *) java_pointer; - std::vector dims_float_arr = jfloatarray_to_float_vector(env, ddims); - std::vector dims_arr; - dims_arr.resize(dims_float_arr.size()); - std::copy(dims_float_arr.cbegin(), dims_float_arr.cend(), dims_arr.begin()); - - // 这里值有点大,就不调用jfloatarray_to_float_vector了 - int64_t buf_len = (int64_t) env->GetArrayLength(buf); - jfloat *buf_data = env->GetFloatArrayElements(buf, JNI_FALSE); - float *data = (jfloat *) buf_data; - std::vector results = ppredictor->infer_ocr(dims_arr, data, - buf_len, - NET_OCR, origin); - LOGI("infer_ocr finished with boxes %ld", results.size()); - // 这里将std::vector 序列化成 float数组,传输到java层再反序列化 - std::vector float_arr; - for (const ppredictor::OCRPredictResult &r :results) { - float_arr.push_back(r.points.size()); - float_arr.push_back(r.word_index.size()); - float_arr.push_back(r.score); - for (const std::vector &point : r.points) { - float_arr.push_back(point.at(0)); - float_arr.push_back(point.at(1)); - } - for (int index: r.word_index) { - float_arr.push_back(index); - } - } - return cpp_array_to_jfloatarray(env, float_arr.data(), float_arr.size()); -} - -extern "C" -JNIEXPORT void JNICALL -Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_release(JNIEnv *env, jobject thiz, - jlong java_pointer){ - if (java_pointer == 0) { - LOGE("JAVA pointer is NULL"); - return; - } - ppredictor::OCR_PPredictor *ppredictor = (ppredictor::OCR_PPredictor *) java_pointer; - delete ppredictor; -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/native.h b/deploy/android_demo/app/src/main/cpp/native.h deleted file mode 100644 index 1ef6d949..00000000 --- a/deploy/android_demo/app/src/main/cpp/native.h +++ /dev/null @@ -1,138 +0,0 @@ -// -// Created by fujiayi on 2020/7/5. -// - -#pragma once - - -#include -#include -#include -#include -#include -#include "common.h" - -inline std::string jstring_to_cpp_string(JNIEnv *env, jstring jstr) { - // In java, a unicode char will be encoded using 2 bytes (utf16). - // so jstring will contain characters utf16. std::string in c++ is - // essentially a string of bytes, not characters, so if we want to - // pass jstring from JNI to c++, we have convert utf16 to bytes. - if (!jstr) { - return ""; - } - const jclass stringClass = env->GetObjectClass(jstr); - const jmethodID getBytes = - env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B"); - const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod( - jstr, getBytes, env->NewStringUTF("UTF-8")); - - size_t length = (size_t) env->GetArrayLength(stringJbytes); - jbyte *pBytes = env->GetByteArrayElements(stringJbytes, NULL); - - std::string ret = std::string(reinterpret_cast(pBytes), length); - env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT); - - env->DeleteLocalRef(stringJbytes); - env->DeleteLocalRef(stringClass); - return ret; -} - -inline jstring cpp_string_to_jstring(JNIEnv *env, std::string str) { - auto *data = str.c_str(); - jclass strClass = env->FindClass("java/lang/String"); - jmethodID strClassInitMethodID = - env->GetMethodID(strClass, "", "([BLjava/lang/String;)V"); - - jbyteArray bytes = env->NewByteArray(strlen(data)); - env->SetByteArrayRegion(bytes, 0, strlen(data), - reinterpret_cast(data)); - - jstring encoding = env->NewStringUTF("UTF-8"); - jstring res = (jstring) ( - env->NewObject(strClass, strClassInitMethodID, bytes, encoding)); - - env->DeleteLocalRef(strClass); - env->DeleteLocalRef(encoding); - env->DeleteLocalRef(bytes); - - return res; -} - -inline jfloatArray cpp_array_to_jfloatarray(JNIEnv *env, const float *buf, - int64_t len) { - if (len == 0) { - return env->NewFloatArray(0); - } - jfloatArray result = env->NewFloatArray(len); - env->SetFloatArrayRegion(result, 0, len, buf); - return result; -} - -inline jintArray cpp_array_to_jintarray(JNIEnv *env, const int *buf, - int64_t len) { - jintArray result = env->NewIntArray(len); - env->SetIntArrayRegion(result, 0, len, buf); - return result; -} - -inline jbyteArray cpp_array_to_jbytearray(JNIEnv *env, const int8_t *buf, - int64_t len) { - jbyteArray result = env->NewByteArray(len); - env->SetByteArrayRegion(result, 0, len, buf); - return result; -} - -inline jlongArray int64_vector_to_jlongarray(JNIEnv *env, - const std::vector &vec) { - jlongArray result = env->NewLongArray(vec.size()); - jlong *buf = new jlong[vec.size()]; - for (size_t i = 0; i < vec.size(); ++i) { - buf[i] = (jlong) vec[i]; - } - env->SetLongArrayRegion(result, 0, vec.size(), buf); - delete[] buf; - return result; -} - -inline std::vector jlongarray_to_int64_vector(JNIEnv *env, - jlongArray data) { - int data_size = env->GetArrayLength(data); - jlong *data_ptr = env->GetLongArrayElements(data, nullptr); - std::vector data_vec(data_ptr, data_ptr + data_size); - env->ReleaseLongArrayElements(data, data_ptr, 0); - return data_vec; -} - -inline std::vector jfloatarray_to_float_vector(JNIEnv *env, - jfloatArray data) { - int data_size = env->GetArrayLength(data); - jfloat *data_ptr = env->GetFloatArrayElements(data, nullptr); - std::vector data_vec(data_ptr, data_ptr + data_size); - env->ReleaseFloatArrayElements(data, data_ptr, 0); - return data_vec; -} - -inline cv::Mat bitmap_to_cv_mat(JNIEnv *env, jobject bitmap) { - AndroidBitmapInfo info; - int result = AndroidBitmap_getInfo(env, bitmap, &info); - if (result != ANDROID_BITMAP_RESULT_SUCCESS) { - LOGE("AndroidBitmap_getInfo failed, result: %d", result); - return cv::Mat{}; - } - if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { - LOGE("Bitmap format is not RGBA_8888 !"); - return cv::Mat{}; - } - unsigned char *srcData = NULL; - AndroidBitmap_lockPixels(env, bitmap, (void **) &srcData); - cv::Mat mat = cv::Mat::zeros(info.height, info.width, CV_8UC4); - memcpy(mat.data, srcData, info.height * info.width * 4); - AndroidBitmap_unlockPixels(env, bitmap); - cv::cvtColor(mat, mat, cv::COLOR_RGBA2BGR); - /** - if (!cv::imwrite("/sdcard/1/copy.jpg", mat)){ - LOGE("Write image failed " ); - } - */ - return mat; -} diff --git a/deploy/android_demo/app/src/main/cpp/ocr_clipper.cpp b/deploy/android_demo/app/src/main/cpp/ocr_clipper.cpp deleted file mode 100644 index d5db3472..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_clipper.cpp +++ /dev/null @@ -1,4629 +0,0 @@ -/******************************************************************************* -* * -* Author : Angus Johnson * -* Version : 6.4.2 * -* Date : 27 February 2017 * -* Website : http://www.angusj.com * -* Copyright : Angus Johnson 2010-2017 * -* * -* License: * -* Use, modification & distribution is subject to Boost Software License Ver 1. * -* http://www.boost.org/LICENSE_1_0.txt * -* * -* Attributions: * -* The code in this library is an extension of Bala Vatti's clipping algorithm: * -* "A generic solution to polygon clipping" * -* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * -* http://portal.acm.org/citation.cfm?id=129906 * -* * -* Computer graphics and geometric modeling: implementation and algorithms * -* By Max K. Agoston * -* Springer; 1 edition (January 4, 2005) * -* http://books.google.com/books?q=vatti+clipping+agoston * -* * -* See also: * -* "Polygon Offsetting by Computing Winding Numbers" * -* Paper no. DETC2005-85513 pp. 565-575 * -* ASME 2005 International Design Engineering Technical Conferences * -* and Computers and Information in Engineering Conference (IDETC/CIE2005) * -* September 24-28, 2005 , Long Beach, California, USA * -* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * -* * -*******************************************************************************/ - -/******************************************************************************* -* * -* This is a translation of the Delphi Clipper library and the naming style * -* used has retained a Delphi flavour. * -* * -*******************************************************************************/ - -#include "ocr_clipper.hpp" -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ClipperLib { - -static double const pi = 3.141592653589793238; -static double const two_pi = pi *2; -static double const def_arc_tolerance = 0.25; - -enum Direction { dRightToLeft, dLeftToRight }; - -static int const Unassigned = -1; //edge not currently 'owning' a solution -static int const Skip = -2; //edge that would otherwise close a path - -#define HORIZONTAL (-1.0E+40) -#define TOLERANCE (1.0e-20) -#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE)) - -struct TEdge { - IntPoint Bot; - IntPoint Curr; //current (updated for every new scanbeam) - IntPoint Top; - double Dx; - PolyType PolyTyp; - EdgeSide Side; //side only refers to current side of solution poly - int WindDelta; //1 or -1 depending on winding direction - int WindCnt; - int WindCnt2; //winding count of the opposite polytype - int OutIdx; - TEdge *Next; - TEdge *Prev; - TEdge *NextInLML; - TEdge *NextInAEL; - TEdge *PrevInAEL; - TEdge *NextInSEL; - TEdge *PrevInSEL; -}; - -struct IntersectNode { - TEdge *Edge1; - TEdge *Edge2; - IntPoint Pt; -}; - -struct LocalMinimum { - cInt Y; - TEdge *LeftBound; - TEdge *RightBound; -}; - -struct OutPt; - -//OutRec: contains a path in the clipping solution. Edges in the AEL will -//carry a pointer to an OutRec when they are part of the clipping solution. -struct OutRec { - int Idx; - bool IsHole; - bool IsOpen; - OutRec *FirstLeft; //see comments in clipper.pas - PolyNode *PolyNd; - OutPt *Pts; - OutPt *BottomPt; -}; - -struct OutPt { - int Idx; - IntPoint Pt; - OutPt *Next; - OutPt *Prev; -}; - -struct Join { - OutPt *OutPt1; - OutPt *OutPt2; - IntPoint OffPt; -}; - -struct LocMinSorter -{ - inline bool operator()(const LocalMinimum& locMin1, const LocalMinimum& locMin2) - { - return locMin2.Y < locMin1.Y; - } -}; - -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ - -inline cInt Round(double val) -{ - if ((val < 0)) return static_cast(val - 0.5); - else return static_cast(val + 0.5); -} -//------------------------------------------------------------------------------ - -inline cInt Abs(cInt val) -{ - return val < 0 ? -val : val; -} - -//------------------------------------------------------------------------------ -// PolyTree methods ... -//------------------------------------------------------------------------------ - -void PolyTree::Clear() -{ - for (PolyNodes::size_type i = 0; i < AllNodes.size(); ++i) - delete AllNodes[i]; - AllNodes.resize(0); - Childs.resize(0); -} -//------------------------------------------------------------------------------ - -PolyNode* PolyTree::GetFirst() const -{ - if (!Childs.empty()) - return Childs[0]; - else - return 0; -} -//------------------------------------------------------------------------------ - -int PolyTree::Total() const -{ - int result = (int)AllNodes.size(); - //with negative offsets, ignore the hidden outer polygon ... - if (result > 0 && Childs[0] != AllNodes[0]) result--; - return result; -} - -//------------------------------------------------------------------------------ -// PolyNode methods ... -//------------------------------------------------------------------------------ - -PolyNode::PolyNode(): Parent(0), Index(0), m_IsOpen(false) -{ -} -//------------------------------------------------------------------------------ - -int PolyNode::ChildCount() const -{ - return (int)Childs.size(); -} -//------------------------------------------------------------------------------ - -void PolyNode::AddChild(PolyNode& child) -{ - unsigned cnt = (unsigned)Childs.size(); - Childs.push_back(&child); - child.Parent = this; - child.Index = cnt; -} -//------------------------------------------------------------------------------ - -PolyNode* PolyNode::GetNext() const -{ - if (!Childs.empty()) - return Childs[0]; - else - return GetNextSiblingUp(); -} -//------------------------------------------------------------------------------ - -PolyNode* PolyNode::GetNextSiblingUp() const -{ - if (!Parent) //protects against PolyTree.GetNextSiblingUp() - return 0; - else if (Index == Parent->Childs.size() - 1) - return Parent->GetNextSiblingUp(); - else - return Parent->Childs[Index + 1]; -} -//------------------------------------------------------------------------------ - -bool PolyNode::IsHole() const -{ - bool result = true; - PolyNode* node = Parent; - while (node) - { - result = !result; - node = node->Parent; - } - return result; -} -//------------------------------------------------------------------------------ - -bool PolyNode::IsOpen() const -{ - return m_IsOpen; -} -//------------------------------------------------------------------------------ - -#ifndef use_int32 - -//------------------------------------------------------------------------------ -// Int128 class (enables safe math on signed 64bit integers) -// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1 -// Int128 val2((long64)9223372036854775807); -// Int128 val3 = val1 * val2; -// val3.AsString => "85070591730234615847396907784232501249" (8.5e+37) -//------------------------------------------------------------------------------ - -class Int128 -{ - public: - ulong64 lo; - long64 hi; - - Int128(long64 _lo = 0) - { - lo = (ulong64)_lo; - if (_lo < 0) hi = -1; else hi = 0; - } - - - Int128(const Int128 &val): lo(val.lo), hi(val.hi){} - - Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){} - - Int128& operator = (const long64 &val) - { - lo = (ulong64)val; - if (val < 0) hi = -1; else hi = 0; - return *this; - } - - bool operator == (const Int128 &val) const - {return (hi == val.hi && lo == val.lo);} - - bool operator != (const Int128 &val) const - { return !(*this == val);} - - bool operator > (const Int128 &val) const - { - if (hi != val.hi) - return hi > val.hi; - else - return lo > val.lo; - } - - bool operator < (const Int128 &val) const - { - if (hi != val.hi) - return hi < val.hi; - else - return lo < val.lo; - } - - bool operator >= (const Int128 &val) const - { return !(*this < val);} - - bool operator <= (const Int128 &val) const - { return !(*this > val);} - - Int128& operator += (const Int128 &rhs) - { - hi += rhs.hi; - lo += rhs.lo; - if (lo < rhs.lo) hi++; - return *this; - } - - Int128 operator + (const Int128 &rhs) const - { - Int128 result(*this); - result+= rhs; - return result; - } - - Int128& operator -= (const Int128 &rhs) - { - *this += -rhs; - return *this; - } - - Int128 operator - (const Int128 &rhs) const - { - Int128 result(*this); - result -= rhs; - return result; - } - - Int128 operator-() const //unary negation - { - if (lo == 0) - return Int128(-hi, 0); - else - return Int128(~hi, ~lo + 1); - } - - operator double() const - { - const double shift64 = 18446744073709551616.0; //2^64 - if (hi < 0) - { - if (lo == 0) return (double)hi * shift64; - else return -(double)(~lo + ~hi * shift64); - } - else - return (double)(lo + hi * shift64); - } - -}; -//------------------------------------------------------------------------------ - -Int128 Int128Mul (long64 lhs, long64 rhs) -{ - bool negate = (lhs < 0) != (rhs < 0); - - if (lhs < 0) lhs = -lhs; - ulong64 int1Hi = ulong64(lhs) >> 32; - ulong64 int1Lo = ulong64(lhs & 0xFFFFFFFF); - - if (rhs < 0) rhs = -rhs; - ulong64 int2Hi = ulong64(rhs) >> 32; - ulong64 int2Lo = ulong64(rhs & 0xFFFFFFFF); - - //nb: see comments in clipper.pas - ulong64 a = int1Hi * int2Hi; - ulong64 b = int1Lo * int2Lo; - ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi; - - Int128 tmp; - tmp.hi = long64(a + (c >> 32)); - tmp.lo = long64(c << 32); - tmp.lo += long64(b); - if (tmp.lo < b) tmp.hi++; - if (negate) tmp = -tmp; - return tmp; -}; -#endif - -//------------------------------------------------------------------------------ -// Miscellaneous global functions -//------------------------------------------------------------------------------ - -bool Orientation(const Path &poly) -{ - return Area(poly) >= 0; -} -//------------------------------------------------------------------------------ - -double Area(const Path &poly) -{ - int size = (int)poly.size(); - if (size < 3) return 0; - - double a = 0; - for (int i = 0, j = size -1; i < size; ++i) - { - a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y); - j = i; - } - return -a * 0.5; -} -//------------------------------------------------------------------------------ - -double Area(const OutPt *op) -{ - const OutPt *startOp = op; - if (!op) return 0; - double a = 0; - do { - a += (double)(op->Prev->Pt.X + op->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y); - op = op->Next; - } while (op != startOp); - return a * 0.5; -} -//------------------------------------------------------------------------------ - -double Area(const OutRec &outRec) -{ - return Area(outRec.Pts); -} -//------------------------------------------------------------------------------ - -bool PointIsVertex(const IntPoint &Pt, OutPt *pp) -{ - OutPt *pp2 = pp; - do - { - if (pp2->Pt == Pt) return true; - pp2 = pp2->Next; - } - while (pp2 != pp); - return false; -} -//------------------------------------------------------------------------------ - -//See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos -//http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf -int PointInPolygon(const IntPoint &pt, const Path &path) -{ - //returns 0 if false, +1 if true, -1 if pt ON polygon boundary - int result = 0; - size_t cnt = path.size(); - if (cnt < 3) return 0; - IntPoint ip = path[0]; - for(size_t i = 1; i <= cnt; ++i) - { - IntPoint ipNext = (i == cnt ? path[0] : path[i]); - if (ipNext.Y == pt.Y) - { - if ((ipNext.X == pt.X) || (ip.Y == pt.Y && - ((ipNext.X > pt.X) == (ip.X < pt.X)))) return -1; - } - if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y)) - { - if (ip.X >= pt.X) - { - if (ipNext.X > pt.X) result = 1 - result; - else - { - double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); - if (!d) return -1; - if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; - } - } else - { - if (ipNext.X > pt.X) - { - double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - - (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); - if (!d) return -1; - if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; - } - } - } - ip = ipNext; - } - return result; -} -//------------------------------------------------------------------------------ - -int PointInPolygon (const IntPoint &pt, OutPt *op) -{ - //returns 0 if false, +1 if true, -1 if pt ON polygon boundary - int result = 0; - OutPt* startOp = op; - for(;;) - { - if (op->Next->Pt.Y == pt.Y) - { - if ((op->Next->Pt.X == pt.X) || (op->Pt.Y == pt.Y && - ((op->Next->Pt.X > pt.X) == (op->Pt.X < pt.X)))) return -1; - } - if ((op->Pt.Y < pt.Y) != (op->Next->Pt.Y < pt.Y)) - { - if (op->Pt.X >= pt.X) - { - if (op->Next->Pt.X > pt.X) result = 1 - result; - else - { - double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y); - if (!d) return -1; - if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result; - } - } else - { - if (op->Next->Pt.X > pt.X) - { - double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - - (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y); - if (!d) return -1; - if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result; - } - } - } - op = op->Next; - if (startOp == op) break; - } - return result; -} -//------------------------------------------------------------------------------ - -bool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2) -{ - OutPt* op = OutPt1; - do - { - //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon - int res = PointInPolygon(op->Pt, OutPt2); - if (res >= 0) return res > 0; - op = op->Next; - } - while (op != OutPt1); - return true; -} -//---------------------------------------------------------------------- - -bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range) -{ -#ifndef use_int32 - if (UseFullInt64Range) - return Int128Mul(e1.Top.Y - e1.Bot.Y, e2.Top.X - e2.Bot.X) == - Int128Mul(e1.Top.X - e1.Bot.X, e2.Top.Y - e2.Bot.Y); - else -#endif - return (e1.Top.Y - e1.Bot.Y) * (e2.Top.X - e2.Bot.X) == - (e1.Top.X - e1.Bot.X) * (e2.Top.Y - e2.Bot.Y); -} -//------------------------------------------------------------------------------ - -bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, - const IntPoint pt3, bool UseFullInt64Range) -{ -#ifndef use_int32 - if (UseFullInt64Range) - return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y); - else -#endif - return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y); -} -//------------------------------------------------------------------------------ - -bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, - const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range) -{ -#ifndef use_int32 - if (UseFullInt64Range) - return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y); - else -#endif - return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y); -} -//------------------------------------------------------------------------------ - -inline bool IsHorizontal(TEdge &e) -{ - return e.Dx == HORIZONTAL; -} -//------------------------------------------------------------------------------ - -inline double GetDx(const IntPoint pt1, const IntPoint pt2) -{ - return (pt1.Y == pt2.Y) ? - HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); -} -//--------------------------------------------------------------------------- - -inline void SetDx(TEdge &e) -{ - cInt dy = (e.Top.Y - e.Bot.Y); - if (dy == 0) e.Dx = HORIZONTAL; - else e.Dx = (double)(e.Top.X - e.Bot.X) / dy; -} -//--------------------------------------------------------------------------- - -inline void SwapSides(TEdge &Edge1, TEdge &Edge2) -{ - EdgeSide Side = Edge1.Side; - Edge1.Side = Edge2.Side; - Edge2.Side = Side; -} -//------------------------------------------------------------------------------ - -inline void SwapPolyIndexes(TEdge &Edge1, TEdge &Edge2) -{ - int OutIdx = Edge1.OutIdx; - Edge1.OutIdx = Edge2.OutIdx; - Edge2.OutIdx = OutIdx; -} -//------------------------------------------------------------------------------ - -inline cInt TopX(TEdge &edge, const cInt currentY) -{ - return ( currentY == edge.Top.Y ) ? - edge.Top.X : edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y)); -} -//------------------------------------------------------------------------------ - -void IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip) -{ -#ifdef use_xyz - ip.Z = 0; -#endif - - double b1, b2; - if (Edge1.Dx == Edge2.Dx) - { - ip.Y = Edge1.Curr.Y; - ip.X = TopX(Edge1, ip.Y); - return; - } - else if (Edge1.Dx == 0) - { - ip.X = Edge1.Bot.X; - if (IsHorizontal(Edge2)) - ip.Y = Edge2.Bot.Y; - else - { - b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx); - ip.Y = Round(ip.X / Edge2.Dx + b2); - } - } - else if (Edge2.Dx == 0) - { - ip.X = Edge2.Bot.X; - if (IsHorizontal(Edge1)) - ip.Y = Edge1.Bot.Y; - else - { - b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx); - ip.Y = Round(ip.X / Edge1.Dx + b1); - } - } - else - { - b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx; - b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx; - double q = (b2-b1) / (Edge1.Dx - Edge2.Dx); - ip.Y = Round(q); - if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) - ip.X = Round(Edge1.Dx * q + b1); - else - ip.X = Round(Edge2.Dx * q + b2); - } - - if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y) - { - if (Edge1.Top.Y > Edge2.Top.Y) - ip.Y = Edge1.Top.Y; - else - ip.Y = Edge2.Top.Y; - if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx)) - ip.X = TopX(Edge1, ip.Y); - else - ip.X = TopX(Edge2, ip.Y); - } - //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ... - if (ip.Y > Edge1.Curr.Y) - { - ip.Y = Edge1.Curr.Y; - //use the more vertical edge to derive X ... - if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx)) - ip.X = TopX(Edge2, ip.Y); else - ip.X = TopX(Edge1, ip.Y); - } -} -//------------------------------------------------------------------------------ - -void ReversePolyPtLinks(OutPt *pp) -{ - if (!pp) return; - OutPt *pp1, *pp2; - pp1 = pp; - do { - pp2 = pp1->Next; - pp1->Next = pp1->Prev; - pp1->Prev = pp2; - pp1 = pp2; - } while( pp1 != pp ); -} -//------------------------------------------------------------------------------ - -void DisposeOutPts(OutPt*& pp) -{ - if (pp == 0) return; - pp->Prev->Next = 0; - while( pp ) - { - OutPt *tmpPp = pp; - pp = pp->Next; - delete tmpPp; - } -} -//------------------------------------------------------------------------------ - -inline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt) -{ - std::memset(e, 0, sizeof(TEdge)); - e->Next = eNext; - e->Prev = ePrev; - e->Curr = Pt; - e->OutIdx = Unassigned; -} -//------------------------------------------------------------------------------ - -void InitEdge2(TEdge& e, PolyType Pt) -{ - if (e.Curr.Y >= e.Next->Curr.Y) - { - e.Bot = e.Curr; - e.Top = e.Next->Curr; - } else - { - e.Top = e.Curr; - e.Bot = e.Next->Curr; - } - SetDx(e); - e.PolyTyp = Pt; -} -//------------------------------------------------------------------------------ - -TEdge* RemoveEdge(TEdge* e) -{ - //removes e from double_linked_list (but without removing from memory) - e->Prev->Next = e->Next; - e->Next->Prev = e->Prev; - TEdge* result = e->Next; - e->Prev = 0; //flag as removed (see ClipperBase.Clear) - return result; -} -//------------------------------------------------------------------------------ - -inline void ReverseHorizontal(TEdge &e) -{ - //swap horizontal edges' Top and Bottom x's so they follow the natural - //progression of the bounds - ie so their xbots will align with the - //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] - std::swap(e.Top.X, e.Bot.X); -#ifdef use_xyz - std::swap(e.Top.Z, e.Bot.Z); -#endif -} -//------------------------------------------------------------------------------ - -void SwapPoints(IntPoint &pt1, IntPoint &pt2) -{ - IntPoint tmp = pt1; - pt1 = pt2; - pt2 = tmp; -} -//------------------------------------------------------------------------------ - -bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a, - IntPoint pt2b, IntPoint &pt1, IntPoint &pt2) -{ - //precondition: segments are Collinear. - if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y)) - { - if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b); - if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b); - if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a; - if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b; - return pt1.X < pt2.X; - } else - { - if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b); - if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b); - if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a; - if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b; - return pt1.Y > pt2.Y; - } -} -//------------------------------------------------------------------------------ - -bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2) -{ - OutPt *p = btmPt1->Prev; - while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev; - double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt)); - p = btmPt1->Next; - while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next; - double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt)); - - p = btmPt2->Prev; - while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev; - double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt)); - p = btmPt2->Next; - while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Next; - double dx2n = std::fabs(GetDx(btmPt2->Pt, p->Pt)); - - if (std::max(dx1p, dx1n) == std::max(dx2p, dx2n) && - std::min(dx1p, dx1n) == std::min(dx2p, dx2n)) - return Area(btmPt1) > 0; //if otherwise identical use orientation - else - return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); -} -//------------------------------------------------------------------------------ - -OutPt* GetBottomPt(OutPt *pp) -{ - OutPt* dups = 0; - OutPt* p = pp->Next; - while (p != pp) - { - if (p->Pt.Y > pp->Pt.Y) - { - pp = p; - dups = 0; - } - else if (p->Pt.Y == pp->Pt.Y && p->Pt.X <= pp->Pt.X) - { - if (p->Pt.X < pp->Pt.X) - { - dups = 0; - pp = p; - } else - { - if (p->Next != pp && p->Prev != pp) dups = p; - } - } - p = p->Next; - } - if (dups) - { - //there appears to be at least 2 vertices at BottomPt so ... - while (dups != p) - { - if (!FirstIsBottomPt(p, dups)) pp = dups; - dups = dups->Next; - while (dups->Pt != pp->Pt) dups = dups->Next; - } - } - return pp; -} -//------------------------------------------------------------------------------ - -bool Pt2IsBetweenPt1AndPt3(const IntPoint pt1, - const IntPoint pt2, const IntPoint pt3) -{ - if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2)) - return false; - else if (pt1.X != pt3.X) - return (pt2.X > pt1.X) == (pt2.X < pt3.X); - else - return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y); -} -//------------------------------------------------------------------------------ - -bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b) -{ - if (seg1a > seg1b) std::swap(seg1a, seg1b); - if (seg2a > seg2b) std::swap(seg2a, seg2b); - return (seg1a < seg2b) && (seg2a < seg1b); -} - -//------------------------------------------------------------------------------ -// ClipperBase class methods ... -//------------------------------------------------------------------------------ - -ClipperBase::ClipperBase() //constructor -{ - m_CurrentLM = m_MinimaList.begin(); //begin() == end() here - m_UseFullRange = false; -} -//------------------------------------------------------------------------------ - -ClipperBase::~ClipperBase() //destructor -{ - Clear(); -} -//------------------------------------------------------------------------------ - -void RangeTest(const IntPoint& Pt, bool& useFullRange) -{ - if (useFullRange) - { - if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange) - throw clipperException("Coordinate outside allowed range"); - } - else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange) - { - useFullRange = true; - RangeTest(Pt, useFullRange); - } -} -//------------------------------------------------------------------------------ - -TEdge* FindNextLocMin(TEdge* E) -{ - for (;;) - { - while (E->Bot != E->Prev->Bot || E->Curr == E->Top) E = E->Next; - if (!IsHorizontal(*E) && !IsHorizontal(*E->Prev)) break; - while (IsHorizontal(*E->Prev)) E = E->Prev; - TEdge* E2 = E; - while (IsHorizontal(*E)) E = E->Next; - if (E->Top.Y == E->Prev->Bot.Y) continue; //ie just an intermediate horz. - if (E2->Prev->Bot.X < E->Bot.X) E = E2; - break; - } - return E; -} -//------------------------------------------------------------------------------ - -TEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward) -{ - TEdge *Result = E; - TEdge *Horz = 0; - - if (E->OutIdx == Skip) - { - //if edges still remain in the current bound beyond the skip edge then - //create another LocMin and call ProcessBound once more - if (NextIsForward) - { - while (E->Top.Y == E->Next->Bot.Y) E = E->Next; - //don't include top horizontals when parsing a bound a second time, - //they will be contained in the opposite bound ... - while (E != Result && IsHorizontal(*E)) E = E->Prev; - } - else - { - while (E->Top.Y == E->Prev->Bot.Y) E = E->Prev; - while (E != Result && IsHorizontal(*E)) E = E->Next; - } - - if (E == Result) - { - if (NextIsForward) Result = E->Next; - else Result = E->Prev; - } - else - { - //there are more edges in the bound beyond result starting with E - if (NextIsForward) - E = Result->Next; - else - E = Result->Prev; - MinimaList::value_type locMin; - locMin.Y = E->Bot.Y; - locMin.LeftBound = 0; - locMin.RightBound = E; - E->WindDelta = 0; - Result = ProcessBound(E, NextIsForward); - m_MinimaList.push_back(locMin); - } - return Result; - } - - TEdge *EStart; - - if (IsHorizontal(*E)) - { - //We need to be careful with open paths because this may not be a - //true local minima (ie E may be following a skip edge). - //Also, consecutive horz. edges may start heading left before going right. - if (NextIsForward) - EStart = E->Prev; - else - EStart = E->Next; - if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge - { - if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X) - ReverseHorizontal(*E); - } - else if (EStart->Bot.X != E->Bot.X) - ReverseHorizontal(*E); - } - - EStart = E; - if (NextIsForward) - { - while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip) - Result = Result->Next; - if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip) - { - //nb: at the top of a bound, horizontals are added to the bound - //only when the preceding edge attaches to the horizontal's left vertex - //unless a Skip edge is encountered when that becomes the top divide - Horz = Result; - while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev; - if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev; - } - while (E != Result) - { - E->NextInLML = E->Next; - if (IsHorizontal(*E) && E != EStart && - E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E); - E = E->Next; - } - if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X) - ReverseHorizontal(*E); - Result = Result->Next; //move to the edge just beyond current bound - } else - { - while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip) - Result = Result->Prev; - if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip) - { - Horz = Result; - while (IsHorizontal(*Horz->Next)) Horz = Horz->Next; - if (Horz->Next->Top.X == Result->Prev->Top.X || - Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next; - } - - while (E != Result) - { - E->NextInLML = E->Prev; - if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X) - ReverseHorizontal(*E); - E = E->Prev; - } - if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X) - ReverseHorizontal(*E); - Result = Result->Prev; //move to the edge just beyond current bound - } - - return Result; -} -//------------------------------------------------------------------------------ - -bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed) -{ -#ifdef use_lines - if (!Closed && PolyTyp == ptClip) - throw clipperException("AddPath: Open paths must be subject."); -#else - if (!Closed) - throw clipperException("AddPath: Open paths have been disabled."); -#endif - - int highI = (int)pg.size() -1; - if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI; - while (highI > 0 && (pg[highI] == pg[highI -1])) --highI; - if ((Closed && highI < 2) || (!Closed && highI < 1)) return false; - - //create a new edge array ... - TEdge *edges = new TEdge [highI +1]; - - bool IsFlat = true; - //1. Basic (first) edge initialization ... - try - { - edges[1].Curr = pg[1]; - RangeTest(pg[0], m_UseFullRange); - RangeTest(pg[highI], m_UseFullRange); - InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]); - InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]); - for (int i = highI - 1; i >= 1; --i) - { - RangeTest(pg[i], m_UseFullRange); - InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]); - } - } - catch(...) - { - delete [] edges; - throw; //range test fails - } - TEdge *eStart = &edges[0]; - - //2. Remove duplicate vertices, and (when closed) collinear edges ... - TEdge *E = eStart, *eLoopStop = eStart; - for (;;) - { - //nb: allows matching start and end points when not Closed ... - if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart)) - { - if (E == E->Next) break; - if (E == eStart) eStart = E->Next; - E = RemoveEdge(E); - eLoopStop = E; - continue; - } - if (E->Prev == E->Next) - break; //only two vertices - else if (Closed && - SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) && - (!m_PreserveCollinear || - !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr))) - { - //Collinear edges are allowed for open paths but in closed paths - //the default is to merge adjacent collinear edges into a single edge. - //However, if the PreserveCollinear property is enabled, only overlapping - //collinear edges (ie spikes) will be removed from closed paths. - if (E == eStart) eStart = E->Next; - E = RemoveEdge(E); - E = E->Prev; - eLoopStop = E; - continue; - } - E = E->Next; - if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break; - } - - if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next))) - { - delete [] edges; - return false; - } - - if (!Closed) - { - m_HasOpenPaths = true; - eStart->Prev->OutIdx = Skip; - } - - //3. Do second stage of edge initialization ... - E = eStart; - do - { - InitEdge2(*E, PolyTyp); - E = E->Next; - if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false; - } - while (E != eStart); - - //4. Finally, add edge bounds to LocalMinima list ... - - //Totally flat paths must be handled differently when adding them - //to LocalMinima list to avoid endless loops etc ... - if (IsFlat) - { - if (Closed) - { - delete [] edges; - return false; - } - E->Prev->OutIdx = Skip; - MinimaList::value_type locMin; - locMin.Y = E->Bot.Y; - locMin.LeftBound = 0; - locMin.RightBound = E; - locMin.RightBound->Side = esRight; - locMin.RightBound->WindDelta = 0; - for (;;) - { - if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E); - if (E->Next->OutIdx == Skip) break; - E->NextInLML = E->Next; - E = E->Next; - } - m_MinimaList.push_back(locMin); - m_edges.push_back(edges); - return true; - } - - m_edges.push_back(edges); - bool leftBoundIsForward; - TEdge* EMin = 0; - - //workaround to avoid an endless loop in the while loop below when - //open paths have matching start and end points ... - if (E->Prev->Bot == E->Prev->Top) E = E->Next; - - for (;;) - { - E = FindNextLocMin(E); - if (E == EMin) break; - else if (!EMin) EMin = E; - - //E and E.Prev now share a local minima (left aligned if horizontal). - //Compare their slopes to find which starts which bound ... - MinimaList::value_type locMin; - locMin.Y = E->Bot.Y; - if (E->Dx < E->Prev->Dx) - { - locMin.LeftBound = E->Prev; - locMin.RightBound = E; - leftBoundIsForward = false; //Q.nextInLML = Q.prev - } else - { - locMin.LeftBound = E; - locMin.RightBound = E->Prev; - leftBoundIsForward = true; //Q.nextInLML = Q.next - } - - if (!Closed) locMin.LeftBound->WindDelta = 0; - else if (locMin.LeftBound->Next == locMin.RightBound) - locMin.LeftBound->WindDelta = -1; - else locMin.LeftBound->WindDelta = 1; - locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta; - - E = ProcessBound(locMin.LeftBound, leftBoundIsForward); - if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward); - - TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward); - if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward); - - if (locMin.LeftBound->OutIdx == Skip) - locMin.LeftBound = 0; - else if (locMin.RightBound->OutIdx == Skip) - locMin.RightBound = 0; - m_MinimaList.push_back(locMin); - if (!leftBoundIsForward) E = E2; - } - return true; -} -//------------------------------------------------------------------------------ - -bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed) -{ - bool result = false; - for (Paths::size_type i = 0; i < ppg.size(); ++i) - if (AddPath(ppg[i], PolyTyp, Closed)) result = true; - return result; -} -//------------------------------------------------------------------------------ - -void ClipperBase::Clear() -{ - DisposeLocalMinimaList(); - for (EdgeList::size_type i = 0; i < m_edges.size(); ++i) - { - TEdge* edges = m_edges[i]; - delete [] edges; - } - m_edges.clear(); - m_UseFullRange = false; - m_HasOpenPaths = false; -} -//------------------------------------------------------------------------------ - -void ClipperBase::Reset() -{ - m_CurrentLM = m_MinimaList.begin(); - if (m_CurrentLM == m_MinimaList.end()) return; //ie nothing to process - std::sort(m_MinimaList.begin(), m_MinimaList.end(), LocMinSorter()); - - m_Scanbeam = ScanbeamList(); //clears/resets priority_queue - //reset all edges ... - for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm) - { - InsertScanbeam(lm->Y); - TEdge* e = lm->LeftBound; - if (e) - { - e->Curr = e->Bot; - e->Side = esLeft; - e->OutIdx = Unassigned; - } - - e = lm->RightBound; - if (e) - { - e->Curr = e->Bot; - e->Side = esRight; - e->OutIdx = Unassigned; - } - } - m_ActiveEdges = 0; - m_CurrentLM = m_MinimaList.begin(); -} -//------------------------------------------------------------------------------ - -void ClipperBase::DisposeLocalMinimaList() -{ - m_MinimaList.clear(); - m_CurrentLM = m_MinimaList.begin(); -} -//------------------------------------------------------------------------------ - -bool ClipperBase::PopLocalMinima(cInt Y, const LocalMinimum *&locMin) -{ - if (m_CurrentLM == m_MinimaList.end() || (*m_CurrentLM).Y != Y) return false; - locMin = &(*m_CurrentLM); - ++m_CurrentLM; - return true; -} -//------------------------------------------------------------------------------ - -IntRect ClipperBase::GetBounds() -{ - IntRect result; - MinimaList::iterator lm = m_MinimaList.begin(); - if (lm == m_MinimaList.end()) - { - result.left = result.top = result.right = result.bottom = 0; - return result; - } - result.left = lm->LeftBound->Bot.X; - result.top = lm->LeftBound->Bot.Y; - result.right = lm->LeftBound->Bot.X; - result.bottom = lm->LeftBound->Bot.Y; - while (lm != m_MinimaList.end()) - { - //todo - needs fixing for open paths - result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y); - TEdge* e = lm->LeftBound; - for (;;) { - TEdge* bottomE = e; - while (e->NextInLML) - { - if (e->Bot.X < result.left) result.left = e->Bot.X; - if (e->Bot.X > result.right) result.right = e->Bot.X; - e = e->NextInLML; - } - result.left = std::min(result.left, e->Bot.X); - result.right = std::max(result.right, e->Bot.X); - result.left = std::min(result.left, e->Top.X); - result.right = std::max(result.right, e->Top.X); - result.top = std::min(result.top, e->Top.Y); - if (bottomE == lm->LeftBound) e = lm->RightBound; - else break; - } - ++lm; - } - return result; -} -//------------------------------------------------------------------------------ - -void ClipperBase::InsertScanbeam(const cInt Y) -{ - m_Scanbeam.push(Y); -} -//------------------------------------------------------------------------------ - -bool ClipperBase::PopScanbeam(cInt &Y) -{ - if (m_Scanbeam.empty()) return false; - Y = m_Scanbeam.top(); - m_Scanbeam.pop(); - while (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) { m_Scanbeam.pop(); } // Pop duplicates. - return true; -} -//------------------------------------------------------------------------------ - -void ClipperBase::DisposeAllOutRecs(){ - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - DisposeOutRec(i); - m_PolyOuts.clear(); -} -//------------------------------------------------------------------------------ - -void ClipperBase::DisposeOutRec(PolyOutList::size_type index) -{ - OutRec *outRec = m_PolyOuts[index]; - if (outRec->Pts) DisposeOutPts(outRec->Pts); - delete outRec; - m_PolyOuts[index] = 0; -} -//------------------------------------------------------------------------------ - -void ClipperBase::DeleteFromAEL(TEdge *e) -{ - TEdge* AelPrev = e->PrevInAEL; - TEdge* AelNext = e->NextInAEL; - if (!AelPrev && !AelNext && (e != m_ActiveEdges)) return; //already deleted - if (AelPrev) AelPrev->NextInAEL = AelNext; - else m_ActiveEdges = AelNext; - if (AelNext) AelNext->PrevInAEL = AelPrev; - e->NextInAEL = 0; - e->PrevInAEL = 0; -} -//------------------------------------------------------------------------------ - -OutRec* ClipperBase::CreateOutRec() -{ - OutRec* result = new OutRec; - result->IsHole = false; - result->IsOpen = false; - result->FirstLeft = 0; - result->Pts = 0; - result->BottomPt = 0; - result->PolyNd = 0; - m_PolyOuts.push_back(result); - result->Idx = (int)m_PolyOuts.size() - 1; - return result; -} -//------------------------------------------------------------------------------ - -void ClipperBase::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2) -{ - //check that one or other edge hasn't already been removed from AEL ... - if (Edge1->NextInAEL == Edge1->PrevInAEL || - Edge2->NextInAEL == Edge2->PrevInAEL) return; - - if (Edge1->NextInAEL == Edge2) - { - TEdge* Next = Edge2->NextInAEL; - if (Next) Next->PrevInAEL = Edge1; - TEdge* Prev = Edge1->PrevInAEL; - if (Prev) Prev->NextInAEL = Edge2; - Edge2->PrevInAEL = Prev; - Edge2->NextInAEL = Edge1; - Edge1->PrevInAEL = Edge2; - Edge1->NextInAEL = Next; - } - else if (Edge2->NextInAEL == Edge1) - { - TEdge* Next = Edge1->NextInAEL; - if (Next) Next->PrevInAEL = Edge2; - TEdge* Prev = Edge2->PrevInAEL; - if (Prev) Prev->NextInAEL = Edge1; - Edge1->PrevInAEL = Prev; - Edge1->NextInAEL = Edge2; - Edge2->PrevInAEL = Edge1; - Edge2->NextInAEL = Next; - } - else - { - TEdge* Next = Edge1->NextInAEL; - TEdge* Prev = Edge1->PrevInAEL; - Edge1->NextInAEL = Edge2->NextInAEL; - if (Edge1->NextInAEL) Edge1->NextInAEL->PrevInAEL = Edge1; - Edge1->PrevInAEL = Edge2->PrevInAEL; - if (Edge1->PrevInAEL) Edge1->PrevInAEL->NextInAEL = Edge1; - Edge2->NextInAEL = Next; - if (Edge2->NextInAEL) Edge2->NextInAEL->PrevInAEL = Edge2; - Edge2->PrevInAEL = Prev; - if (Edge2->PrevInAEL) Edge2->PrevInAEL->NextInAEL = Edge2; - } - - if (!Edge1->PrevInAEL) m_ActiveEdges = Edge1; - else if (!Edge2->PrevInAEL) m_ActiveEdges = Edge2; -} -//------------------------------------------------------------------------------ - -void ClipperBase::UpdateEdgeIntoAEL(TEdge *&e) -{ - if (!e->NextInLML) - throw clipperException("UpdateEdgeIntoAEL: invalid call"); - - e->NextInLML->OutIdx = e->OutIdx; - TEdge* AelPrev = e->PrevInAEL; - TEdge* AelNext = e->NextInAEL; - if (AelPrev) AelPrev->NextInAEL = e->NextInLML; - else m_ActiveEdges = e->NextInLML; - if (AelNext) AelNext->PrevInAEL = e->NextInLML; - e->NextInLML->Side = e->Side; - e->NextInLML->WindDelta = e->WindDelta; - e->NextInLML->WindCnt = e->WindCnt; - e->NextInLML->WindCnt2 = e->WindCnt2; - e = e->NextInLML; - e->Curr = e->Bot; - e->PrevInAEL = AelPrev; - e->NextInAEL = AelNext; - if (!IsHorizontal(*e)) InsertScanbeam(e->Top.Y); -} -//------------------------------------------------------------------------------ - -bool ClipperBase::LocalMinimaPending() -{ - return (m_CurrentLM != m_MinimaList.end()); -} - -//------------------------------------------------------------------------------ -// TClipper methods ... -//------------------------------------------------------------------------------ - -Clipper::Clipper(int initOptions) : ClipperBase() //constructor -{ - m_ExecuteLocked = false; - m_UseFullRange = false; - m_ReverseOutput = ((initOptions & ioReverseSolution) != 0); - m_StrictSimple = ((initOptions & ioStrictlySimple) != 0); - m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0); - m_HasOpenPaths = false; -#ifdef use_xyz - m_ZFill = 0; -#endif -} -//------------------------------------------------------------------------------ - -#ifdef use_xyz -void Clipper::ZFillFunction(ZFillCallback zFillFunc) -{ - m_ZFill = zFillFunc; -} -//------------------------------------------------------------------------------ -#endif - -bool Clipper::Execute(ClipType clipType, Paths &solution, PolyFillType fillType) -{ - return Execute(clipType, solution, fillType, fillType); -} -//------------------------------------------------------------------------------ - -bool Clipper::Execute(ClipType clipType, PolyTree &polytree, PolyFillType fillType) -{ - return Execute(clipType, polytree, fillType, fillType); -} -//------------------------------------------------------------------------------ - -bool Clipper::Execute(ClipType clipType, Paths &solution, - PolyFillType subjFillType, PolyFillType clipFillType) -{ - if( m_ExecuteLocked ) return false; - if (m_HasOpenPaths) - throw clipperException("Error: PolyTree struct is needed for open path clipping."); - m_ExecuteLocked = true; - solution.resize(0); - m_SubjFillType = subjFillType; - m_ClipFillType = clipFillType; - m_ClipType = clipType; - m_UsingPolyTree = false; - bool succeeded = ExecuteInternal(); - if (succeeded) BuildResult(solution); - DisposeAllOutRecs(); - m_ExecuteLocked = false; - return succeeded; -} -//------------------------------------------------------------------------------ - -bool Clipper::Execute(ClipType clipType, PolyTree& polytree, - PolyFillType subjFillType, PolyFillType clipFillType) -{ - if( m_ExecuteLocked ) return false; - m_ExecuteLocked = true; - m_SubjFillType = subjFillType; - m_ClipFillType = clipFillType; - m_ClipType = clipType; - m_UsingPolyTree = true; - bool succeeded = ExecuteInternal(); - if (succeeded) BuildResult2(polytree); - DisposeAllOutRecs(); - m_ExecuteLocked = false; - return succeeded; -} -//------------------------------------------------------------------------------ - -void Clipper::FixHoleLinkage(OutRec &outrec) -{ - //skip OutRecs that (a) contain outermost polygons or - //(b) already have the correct owner/child linkage ... - if (!outrec.FirstLeft || - (outrec.IsHole != outrec.FirstLeft->IsHole && - outrec.FirstLeft->Pts)) return; - - OutRec* orfl = outrec.FirstLeft; - while (orfl && ((orfl->IsHole == outrec.IsHole) || !orfl->Pts)) - orfl = orfl->FirstLeft; - outrec.FirstLeft = orfl; -} -//------------------------------------------------------------------------------ - -bool Clipper::ExecuteInternal() -{ - bool succeeded = true; - try { - Reset(); - m_Maxima = MaximaList(); - m_SortedEdges = 0; - - succeeded = true; - cInt botY, topY; - if (!PopScanbeam(botY)) return false; - InsertLocalMinimaIntoAEL(botY); - while (PopScanbeam(topY) || LocalMinimaPending()) - { - ProcessHorizontals(); - ClearGhostJoins(); - if (!ProcessIntersections(topY)) - { - succeeded = false; - break; - } - ProcessEdgesAtTopOfScanbeam(topY); - botY = topY; - InsertLocalMinimaIntoAEL(botY); - } - } - catch(...) - { - succeeded = false; - } - - if (succeeded) - { - //fix orientations ... - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - OutRec *outRec = m_PolyOuts[i]; - if (!outRec->Pts || outRec->IsOpen) continue; - if ((outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0)) - ReversePolyPtLinks(outRec->Pts); - } - - if (!m_Joins.empty()) JoinCommonEdges(); - - //unfortunately FixupOutPolygon() must be done after JoinCommonEdges() - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - OutRec *outRec = m_PolyOuts[i]; - if (!outRec->Pts) continue; - if (outRec->IsOpen) - FixupOutPolyline(*outRec); - else - FixupOutPolygon(*outRec); - } - - if (m_StrictSimple) DoSimplePolygons(); - } - - ClearJoins(); - ClearGhostJoins(); - return succeeded; -} -//------------------------------------------------------------------------------ - -void Clipper::SetWindingCount(TEdge &edge) -{ - TEdge *e = edge.PrevInAEL; - //find the edge of the same polytype that immediately preceeds 'edge' in AEL - while (e && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL; - if (!e) - { - if (edge.WindDelta == 0) - { - PolyFillType pft = (edge.PolyTyp == ptSubject ? m_SubjFillType : m_ClipFillType); - edge.WindCnt = (pft == pftNegative ? -1 : 1); - } - else - edge.WindCnt = edge.WindDelta; - edge.WindCnt2 = 0; - e = m_ActiveEdges; //ie get ready to calc WindCnt2 - } - else if (edge.WindDelta == 0 && m_ClipType != ctUnion) - { - edge.WindCnt = 1; - edge.WindCnt2 = e->WindCnt2; - e = e->NextInAEL; //ie get ready to calc WindCnt2 - } - else if (IsEvenOddFillType(edge)) - { - //EvenOdd filling ... - if (edge.WindDelta == 0) - { - //are we inside a subj polygon ... - bool Inside = true; - TEdge *e2 = e->PrevInAEL; - while (e2) - { - if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0) - Inside = !Inside; - e2 = e2->PrevInAEL; - } - edge.WindCnt = (Inside ? 0 : 1); - } - else - { - edge.WindCnt = edge.WindDelta; - } - edge.WindCnt2 = e->WindCnt2; - e = e->NextInAEL; //ie get ready to calc WindCnt2 - } - else - { - //nonZero, Positive or Negative filling ... - if (e->WindCnt * e->WindDelta < 0) - { - //prev edge is 'decreasing' WindCount (WC) toward zero - //so we're outside the previous polygon ... - if (Abs(e->WindCnt) > 1) - { - //outside prev poly but still inside another. - //when reversing direction of prev poly use the same WC - if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt; - //otherwise continue to 'decrease' WC ... - else edge.WindCnt = e->WindCnt + edge.WindDelta; - } - else - //now outside all polys of same polytype so set own WC ... - edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta); - } else - { - //prev edge is 'increasing' WindCount (WC) away from zero - //so we're inside the previous polygon ... - if (edge.WindDelta == 0) - edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1); - //if wind direction is reversing prev then use same WC - else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt; - //otherwise add to WC ... - else edge.WindCnt = e->WindCnt + edge.WindDelta; - } - edge.WindCnt2 = e->WindCnt2; - e = e->NextInAEL; //ie get ready to calc WindCnt2 - } - - //update WindCnt2 ... - if (IsEvenOddAltFillType(edge)) - { - //EvenOdd filling ... - while (e != &edge) - { - if (e->WindDelta != 0) - edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0); - e = e->NextInAEL; - } - } else - { - //nonZero, Positive or Negative filling ... - while ( e != &edge ) - { - edge.WindCnt2 += e->WindDelta; - e = e->NextInAEL; - } - } -} -//------------------------------------------------------------------------------ - -bool Clipper::IsEvenOddFillType(const TEdge& edge) const -{ - if (edge.PolyTyp == ptSubject) - return m_SubjFillType == pftEvenOdd; else - return m_ClipFillType == pftEvenOdd; -} -//------------------------------------------------------------------------------ - -bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const -{ - if (edge.PolyTyp == ptSubject) - return m_ClipFillType == pftEvenOdd; else - return m_SubjFillType == pftEvenOdd; -} -//------------------------------------------------------------------------------ - -bool Clipper::IsContributing(const TEdge& edge) const -{ - PolyFillType pft, pft2; - if (edge.PolyTyp == ptSubject) - { - pft = m_SubjFillType; - pft2 = m_ClipFillType; - } else - { - pft = m_ClipFillType; - pft2 = m_SubjFillType; - } - - switch(pft) - { - case pftEvenOdd: - //return false if a subj line has been flagged as inside a subj polygon - if (edge.WindDelta == 0 && edge.WindCnt != 1) return false; - break; - case pftNonZero: - if (Abs(edge.WindCnt) != 1) return false; - break; - case pftPositive: - if (edge.WindCnt != 1) return false; - break; - default: //pftNegative - if (edge.WindCnt != -1) return false; - } - - switch(m_ClipType) - { - case ctIntersection: - switch(pft2) - { - case pftEvenOdd: - case pftNonZero: - return (edge.WindCnt2 != 0); - case pftPositive: - return (edge.WindCnt2 > 0); - default: - return (edge.WindCnt2 < 0); - } - break; - case ctUnion: - switch(pft2) - { - case pftEvenOdd: - case pftNonZero: - return (edge.WindCnt2 == 0); - case pftPositive: - return (edge.WindCnt2 <= 0); - default: - return (edge.WindCnt2 >= 0); - } - break; - case ctDifference: - if (edge.PolyTyp == ptSubject) - switch(pft2) - { - case pftEvenOdd: - case pftNonZero: - return (edge.WindCnt2 == 0); - case pftPositive: - return (edge.WindCnt2 <= 0); - default: - return (edge.WindCnt2 >= 0); - } - else - switch(pft2) - { - case pftEvenOdd: - case pftNonZero: - return (edge.WindCnt2 != 0); - case pftPositive: - return (edge.WindCnt2 > 0); - default: - return (edge.WindCnt2 < 0); - } - break; - case ctXor: - if (edge.WindDelta == 0) //XOr always contributing unless open - switch(pft2) - { - case pftEvenOdd: - case pftNonZero: - return (edge.WindCnt2 == 0); - case pftPositive: - return (edge.WindCnt2 <= 0); - default: - return (edge.WindCnt2 >= 0); - } - else - return true; - break; - default: - return true; - } -} -//------------------------------------------------------------------------------ - -OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt) -{ - OutPt* result; - TEdge *e, *prevE; - if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx )) - { - result = AddOutPt(e1, Pt); - e2->OutIdx = e1->OutIdx; - e1->Side = esLeft; - e2->Side = esRight; - e = e1; - if (e->PrevInAEL == e2) - prevE = e2->PrevInAEL; - else - prevE = e->PrevInAEL; - } else - { - result = AddOutPt(e2, Pt); - e1->OutIdx = e2->OutIdx; - e1->Side = esRight; - e2->Side = esLeft; - e = e2; - if (e->PrevInAEL == e1) - prevE = e1->PrevInAEL; - else - prevE = e->PrevInAEL; - } - - if (prevE && prevE->OutIdx >= 0 && prevE->Top.Y < Pt.Y && e->Top.Y < Pt.Y) - { - cInt xPrev = TopX(*prevE, Pt.Y); - cInt xE = TopX(*e, Pt.Y); - if (xPrev == xE && (e->WindDelta != 0) && (prevE->WindDelta != 0) && - SlopesEqual(IntPoint(xPrev, Pt.Y), prevE->Top, IntPoint(xE, Pt.Y), e->Top, m_UseFullRange)) - { - OutPt* outPt = AddOutPt(prevE, Pt); - AddJoin(result, outPt, e->Top); - } - } - return result; -} -//------------------------------------------------------------------------------ - -void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt) -{ - AddOutPt( e1, Pt ); - if (e2->WindDelta == 0) AddOutPt(e2, Pt); - if( e1->OutIdx == e2->OutIdx ) - { - e1->OutIdx = Unassigned; - e2->OutIdx = Unassigned; - } - else if (e1->OutIdx < e2->OutIdx) - AppendPolygon(e1, e2); - else - AppendPolygon(e2, e1); -} -//------------------------------------------------------------------------------ - -void Clipper::AddEdgeToSEL(TEdge *edge) -{ - //SEL pointers in PEdge are reused to build a list of horizontal edges. - //However, we don't need to worry about order with horizontal edge processing. - if( !m_SortedEdges ) - { - m_SortedEdges = edge; - edge->PrevInSEL = 0; - edge->NextInSEL = 0; - } - else - { - edge->NextInSEL = m_SortedEdges; - edge->PrevInSEL = 0; - m_SortedEdges->PrevInSEL = edge; - m_SortedEdges = edge; - } -} -//------------------------------------------------------------------------------ - -bool Clipper::PopEdgeFromSEL(TEdge *&edge) -{ - if (!m_SortedEdges) return false; - edge = m_SortedEdges; - DeleteFromSEL(m_SortedEdges); - return true; -} -//------------------------------------------------------------------------------ - -void Clipper::CopyAELToSEL() -{ - TEdge* e = m_ActiveEdges; - m_SortedEdges = e; - while ( e ) - { - e->PrevInSEL = e->PrevInAEL; - e->NextInSEL = e->NextInAEL; - e = e->NextInAEL; - } -} -//------------------------------------------------------------------------------ - -void Clipper::AddJoin(OutPt *op1, OutPt *op2, const IntPoint OffPt) -{ - Join* j = new Join; - j->OutPt1 = op1; - j->OutPt2 = op2; - j->OffPt = OffPt; - m_Joins.push_back(j); -} -//------------------------------------------------------------------------------ - -void Clipper::ClearJoins() -{ - for (JoinList::size_type i = 0; i < m_Joins.size(); i++) - delete m_Joins[i]; - m_Joins.resize(0); -} -//------------------------------------------------------------------------------ - -void Clipper::ClearGhostJoins() -{ - for (JoinList::size_type i = 0; i < m_GhostJoins.size(); i++) - delete m_GhostJoins[i]; - m_GhostJoins.resize(0); -} -//------------------------------------------------------------------------------ - -void Clipper::AddGhostJoin(OutPt *op, const IntPoint OffPt) -{ - Join* j = new Join; - j->OutPt1 = op; - j->OutPt2 = 0; - j->OffPt = OffPt; - m_GhostJoins.push_back(j); -} -//------------------------------------------------------------------------------ - -void Clipper::InsertLocalMinimaIntoAEL(const cInt botY) -{ - const LocalMinimum *lm; - while (PopLocalMinima(botY, lm)) - { - TEdge* lb = lm->LeftBound; - TEdge* rb = lm->RightBound; - - OutPt *Op1 = 0; - if (!lb) - { - //nb: don't insert LB into either AEL or SEL - InsertEdgeIntoAEL(rb, 0); - SetWindingCount(*rb); - if (IsContributing(*rb)) - Op1 = AddOutPt(rb, rb->Bot); - } - else if (!rb) - { - InsertEdgeIntoAEL(lb, 0); - SetWindingCount(*lb); - if (IsContributing(*lb)) - Op1 = AddOutPt(lb, lb->Bot); - InsertScanbeam(lb->Top.Y); - } - else - { - InsertEdgeIntoAEL(lb, 0); - InsertEdgeIntoAEL(rb, lb); - SetWindingCount( *lb ); - rb->WindCnt = lb->WindCnt; - rb->WindCnt2 = lb->WindCnt2; - if (IsContributing(*lb)) - Op1 = AddLocalMinPoly(lb, rb, lb->Bot); - InsertScanbeam(lb->Top.Y); - } - - if (rb) - { - if (IsHorizontal(*rb)) - { - AddEdgeToSEL(rb); - if (rb->NextInLML) - InsertScanbeam(rb->NextInLML->Top.Y); - } - else InsertScanbeam( rb->Top.Y ); - } - - if (!lb || !rb) continue; - - //if any output polygons share an edge, they'll need joining later ... - if (Op1 && IsHorizontal(*rb) && - m_GhostJoins.size() > 0 && (rb->WindDelta != 0)) - { - for (JoinList::size_type i = 0; i < m_GhostJoins.size(); ++i) - { - Join* jr = m_GhostJoins[i]; - //if the horizontal Rb and a 'ghost' horizontal overlap, then convert - //the 'ghost' join to a real join ready for later ... - if (HorzSegmentsOverlap(jr->OutPt1->Pt.X, jr->OffPt.X, rb->Bot.X, rb->Top.X)) - AddJoin(jr->OutPt1, Op1, jr->OffPt); - } - } - - if (lb->OutIdx >= 0 && lb->PrevInAEL && - lb->PrevInAEL->Curr.X == lb->Bot.X && - lb->PrevInAEL->OutIdx >= 0 && - SlopesEqual(lb->PrevInAEL->Bot, lb->PrevInAEL->Top, lb->Curr, lb->Top, m_UseFullRange) && - (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0)) - { - OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot); - AddJoin(Op1, Op2, lb->Top); - } - - if(lb->NextInAEL != rb) - { - - if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 && - SlopesEqual(rb->PrevInAEL->Curr, rb->PrevInAEL->Top, rb->Curr, rb->Top, m_UseFullRange) && - (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0)) - { - OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot); - AddJoin(Op1, Op2, rb->Top); - } - - TEdge* e = lb->NextInAEL; - if (e) - { - while( e != rb ) - { - //nb: For calculating winding counts etc, IntersectEdges() assumes - //that param1 will be to the Right of param2 ABOVE the intersection ... - IntersectEdges(rb , e , lb->Curr); //order important here - e = e->NextInAEL; - } - } - } - - } -} -//------------------------------------------------------------------------------ - -void Clipper::DeleteFromSEL(TEdge *e) -{ - TEdge* SelPrev = e->PrevInSEL; - TEdge* SelNext = e->NextInSEL; - if( !SelPrev && !SelNext && (e != m_SortedEdges) ) return; //already deleted - if( SelPrev ) SelPrev->NextInSEL = SelNext; - else m_SortedEdges = SelNext; - if( SelNext ) SelNext->PrevInSEL = SelPrev; - e->NextInSEL = 0; - e->PrevInSEL = 0; -} -//------------------------------------------------------------------------------ - -#ifdef use_xyz -void Clipper::SetZ(IntPoint& pt, TEdge& e1, TEdge& e2) -{ - if (pt.Z != 0 || !m_ZFill) return; - else if (pt == e1.Bot) pt.Z = e1.Bot.Z; - else if (pt == e1.Top) pt.Z = e1.Top.Z; - else if (pt == e2.Bot) pt.Z = e2.Bot.Z; - else if (pt == e2.Top) pt.Z = e2.Top.Z; - else (*m_ZFill)(e1.Bot, e1.Top, e2.Bot, e2.Top, pt); -} -//------------------------------------------------------------------------------ -#endif - -void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &Pt) -{ - bool e1Contributing = ( e1->OutIdx >= 0 ); - bool e2Contributing = ( e2->OutIdx >= 0 ); - -#ifdef use_xyz - SetZ(Pt, *e1, *e2); -#endif - -#ifdef use_lines - //if either edge is on an OPEN path ... - if (e1->WindDelta == 0 || e2->WindDelta == 0) - { - //ignore subject-subject open path intersections UNLESS they - //are both open paths, AND they are both 'contributing maximas' ... - if (e1->WindDelta == 0 && e2->WindDelta == 0) return; - - //if intersecting a subj line with a subj poly ... - else if (e1->PolyTyp == e2->PolyTyp && - e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion) - { - if (e1->WindDelta == 0) - { - if (e2Contributing) - { - AddOutPt(e1, Pt); - if (e1Contributing) e1->OutIdx = Unassigned; - } - } - else - { - if (e1Contributing) - { - AddOutPt(e2, Pt); - if (e2Contributing) e2->OutIdx = Unassigned; - } - } - } - else if (e1->PolyTyp != e2->PolyTyp) - { - //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ... - if ((e1->WindDelta == 0) && abs(e2->WindCnt) == 1 && - (m_ClipType != ctUnion || e2->WindCnt2 == 0)) - { - AddOutPt(e1, Pt); - if (e1Contributing) e1->OutIdx = Unassigned; - } - else if ((e2->WindDelta == 0) && (abs(e1->WindCnt) == 1) && - (m_ClipType != ctUnion || e1->WindCnt2 == 0)) - { - AddOutPt(e2, Pt); - if (e2Contributing) e2->OutIdx = Unassigned; - } - } - return; - } -#endif - - //update winding counts... - //assumes that e1 will be to the Right of e2 ABOVE the intersection - if ( e1->PolyTyp == e2->PolyTyp ) - { - if ( IsEvenOddFillType( *e1) ) - { - int oldE1WindCnt = e1->WindCnt; - e1->WindCnt = e2->WindCnt; - e2->WindCnt = oldE1WindCnt; - } else - { - if (e1->WindCnt + e2->WindDelta == 0 ) e1->WindCnt = -e1->WindCnt; - else e1->WindCnt += e2->WindDelta; - if ( e2->WindCnt - e1->WindDelta == 0 ) e2->WindCnt = -e2->WindCnt; - else e2->WindCnt -= e1->WindDelta; - } - } else - { - if (!IsEvenOddFillType(*e2)) e1->WindCnt2 += e2->WindDelta; - else e1->WindCnt2 = ( e1->WindCnt2 == 0 ) ? 1 : 0; - if (!IsEvenOddFillType(*e1)) e2->WindCnt2 -= e1->WindDelta; - else e2->WindCnt2 = ( e2->WindCnt2 == 0 ) ? 1 : 0; - } - - PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; - if (e1->PolyTyp == ptSubject) - { - e1FillType = m_SubjFillType; - e1FillType2 = m_ClipFillType; - } else - { - e1FillType = m_ClipFillType; - e1FillType2 = m_SubjFillType; - } - if (e2->PolyTyp == ptSubject) - { - e2FillType = m_SubjFillType; - e2FillType2 = m_ClipFillType; - } else - { - e2FillType = m_ClipFillType; - e2FillType2 = m_SubjFillType; - } - - cInt e1Wc, e2Wc; - switch (e1FillType) - { - case pftPositive: e1Wc = e1->WindCnt; break; - case pftNegative: e1Wc = -e1->WindCnt; break; - default: e1Wc = Abs(e1->WindCnt); - } - switch(e2FillType) - { - case pftPositive: e2Wc = e2->WindCnt; break; - case pftNegative: e2Wc = -e2->WindCnt; break; - default: e2Wc = Abs(e2->WindCnt); - } - - if ( e1Contributing && e2Contributing ) - { - if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || - (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) ) - { - AddLocalMaxPoly(e1, e2, Pt); - } - else - { - AddOutPt(e1, Pt); - AddOutPt(e2, Pt); - SwapSides( *e1 , *e2 ); - SwapPolyIndexes( *e1 , *e2 ); - } - } - else if ( e1Contributing ) - { - if (e2Wc == 0 || e2Wc == 1) - { - AddOutPt(e1, Pt); - SwapSides(*e1, *e2); - SwapPolyIndexes(*e1, *e2); - } - } - else if ( e2Contributing ) - { - if (e1Wc == 0 || e1Wc == 1) - { - AddOutPt(e2, Pt); - SwapSides(*e1, *e2); - SwapPolyIndexes(*e1, *e2); - } - } - else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1)) - { - //neither edge is currently contributing ... - - cInt e1Wc2, e2Wc2; - switch (e1FillType2) - { - case pftPositive: e1Wc2 = e1->WindCnt2; break; - case pftNegative : e1Wc2 = -e1->WindCnt2; break; - default: e1Wc2 = Abs(e1->WindCnt2); - } - switch (e2FillType2) - { - case pftPositive: e2Wc2 = e2->WindCnt2; break; - case pftNegative: e2Wc2 = -e2->WindCnt2; break; - default: e2Wc2 = Abs(e2->WindCnt2); - } - - if (e1->PolyTyp != e2->PolyTyp) - { - AddLocalMinPoly(e1, e2, Pt); - } - else if (e1Wc == 1 && e2Wc == 1) - switch( m_ClipType ) { - case ctIntersection: - if (e1Wc2 > 0 && e2Wc2 > 0) - AddLocalMinPoly(e1, e2, Pt); - break; - case ctUnion: - if ( e1Wc2 <= 0 && e2Wc2 <= 0 ) - AddLocalMinPoly(e1, e2, Pt); - break; - case ctDifference: - if (((e1->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || - ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) - AddLocalMinPoly(e1, e2, Pt); - break; - case ctXor: - AddLocalMinPoly(e1, e2, Pt); - } - else - SwapSides( *e1, *e2 ); - } -} -//------------------------------------------------------------------------------ - -void Clipper::SetHoleState(TEdge *e, OutRec *outrec) -{ - TEdge *e2 = e->PrevInAEL; - TEdge *eTmp = 0; - while (e2) - { - if (e2->OutIdx >= 0 && e2->WindDelta != 0) - { - if (!eTmp) eTmp = e2; - else if (eTmp->OutIdx == e2->OutIdx) eTmp = 0; - } - e2 = e2->PrevInAEL; - } - if (!eTmp) - { - outrec->FirstLeft = 0; - outrec->IsHole = false; - } - else - { - outrec->FirstLeft = m_PolyOuts[eTmp->OutIdx]; - outrec->IsHole = !outrec->FirstLeft->IsHole; - } -} -//------------------------------------------------------------------------------ - -OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2) -{ - //work out which polygon fragment has the correct hole state ... - if (!outRec1->BottomPt) - outRec1->BottomPt = GetBottomPt(outRec1->Pts); - if (!outRec2->BottomPt) - outRec2->BottomPt = GetBottomPt(outRec2->Pts); - OutPt *OutPt1 = outRec1->BottomPt; - OutPt *OutPt2 = outRec2->BottomPt; - if (OutPt1->Pt.Y > OutPt2->Pt.Y) return outRec1; - else if (OutPt1->Pt.Y < OutPt2->Pt.Y) return outRec2; - else if (OutPt1->Pt.X < OutPt2->Pt.X) return outRec1; - else if (OutPt1->Pt.X > OutPt2->Pt.X) return outRec2; - else if (OutPt1->Next == OutPt1) return outRec2; - else if (OutPt2->Next == OutPt2) return outRec1; - else if (FirstIsBottomPt(OutPt1, OutPt2)) return outRec1; - else return outRec2; -} -//------------------------------------------------------------------------------ - -bool OutRec1RightOfOutRec2(OutRec* outRec1, OutRec* outRec2) -{ - do - { - outRec1 = outRec1->FirstLeft; - if (outRec1 == outRec2) return true; - } while (outRec1); - return false; -} -//------------------------------------------------------------------------------ - -OutRec* Clipper::GetOutRec(int Idx) -{ - OutRec* outrec = m_PolyOuts[Idx]; - while (outrec != m_PolyOuts[outrec->Idx]) - outrec = m_PolyOuts[outrec->Idx]; - return outrec; -} -//------------------------------------------------------------------------------ - -void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) -{ - //get the start and ends of both output polygons ... - OutRec *outRec1 = m_PolyOuts[e1->OutIdx]; - OutRec *outRec2 = m_PolyOuts[e2->OutIdx]; - - OutRec *holeStateRec; - if (OutRec1RightOfOutRec2(outRec1, outRec2)) - holeStateRec = outRec2; - else if (OutRec1RightOfOutRec2(outRec2, outRec1)) - holeStateRec = outRec1; - else - holeStateRec = GetLowermostRec(outRec1, outRec2); - - //get the start and ends of both output polygons and - //join e2 poly onto e1 poly and delete pointers to e2 ... - - OutPt* p1_lft = outRec1->Pts; - OutPt* p1_rt = p1_lft->Prev; - OutPt* p2_lft = outRec2->Pts; - OutPt* p2_rt = p2_lft->Prev; - - //join e2 poly onto e1 poly and delete pointers to e2 ... - if( e1->Side == esLeft ) - { - if( e2->Side == esLeft ) - { - //z y x a b c - ReversePolyPtLinks(p2_lft); - p2_lft->Next = p1_lft; - p1_lft->Prev = p2_lft; - p1_rt->Next = p2_rt; - p2_rt->Prev = p1_rt; - outRec1->Pts = p2_rt; - } else - { - //x y z a b c - p2_rt->Next = p1_lft; - p1_lft->Prev = p2_rt; - p2_lft->Prev = p1_rt; - p1_rt->Next = p2_lft; - outRec1->Pts = p2_lft; - } - } else - { - if( e2->Side == esRight ) - { - //a b c z y x - ReversePolyPtLinks(p2_lft); - p1_rt->Next = p2_rt; - p2_rt->Prev = p1_rt; - p2_lft->Next = p1_lft; - p1_lft->Prev = p2_lft; - } else - { - //a b c x y z - p1_rt->Next = p2_lft; - p2_lft->Prev = p1_rt; - p1_lft->Prev = p2_rt; - p2_rt->Next = p1_lft; - } - } - - outRec1->BottomPt = 0; - if (holeStateRec == outRec2) - { - if (outRec2->FirstLeft != outRec1) - outRec1->FirstLeft = outRec2->FirstLeft; - outRec1->IsHole = outRec2->IsHole; - } - outRec2->Pts = 0; - outRec2->BottomPt = 0; - outRec2->FirstLeft = outRec1; - - int OKIdx = e1->OutIdx; - int ObsoleteIdx = e2->OutIdx; - - e1->OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly - e2->OutIdx = Unassigned; - - TEdge* e = m_ActiveEdges; - while( e ) - { - if( e->OutIdx == ObsoleteIdx ) - { - e->OutIdx = OKIdx; - e->Side = e1->Side; - break; - } - e = e->NextInAEL; - } - - outRec2->Idx = outRec1->Idx; -} -//------------------------------------------------------------------------------ - -OutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt) -{ - if( e->OutIdx < 0 ) - { - OutRec *outRec = CreateOutRec(); - outRec->IsOpen = (e->WindDelta == 0); - OutPt* newOp = new OutPt; - outRec->Pts = newOp; - newOp->Idx = outRec->Idx; - newOp->Pt = pt; - newOp->Next = newOp; - newOp->Prev = newOp; - if (!outRec->IsOpen) - SetHoleState(e, outRec); - e->OutIdx = outRec->Idx; - return newOp; - } else - { - OutRec *outRec = m_PolyOuts[e->OutIdx]; - //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most' - OutPt* op = outRec->Pts; - - bool ToFront = (e->Side == esLeft); - if (ToFront && (pt == op->Pt)) return op; - else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev; - - OutPt* newOp = new OutPt; - newOp->Idx = outRec->Idx; - newOp->Pt = pt; - newOp->Next = op; - newOp->Prev = op->Prev; - newOp->Prev->Next = newOp; - op->Prev = newOp; - if (ToFront) outRec->Pts = newOp; - return newOp; - } -} -//------------------------------------------------------------------------------ - -OutPt* Clipper::GetLastOutPt(TEdge *e) -{ - OutRec *outRec = m_PolyOuts[e->OutIdx]; - if (e->Side == esLeft) - return outRec->Pts; - else - return outRec->Pts->Prev; -} -//------------------------------------------------------------------------------ - -void Clipper::ProcessHorizontals() -{ - TEdge* horzEdge; - while (PopEdgeFromSEL(horzEdge)) - ProcessHorizontal(horzEdge); -} -//------------------------------------------------------------------------------ - -inline bool IsMinima(TEdge *e) -{ - return e && (e->Prev->NextInLML != e) && (e->Next->NextInLML != e); -} -//------------------------------------------------------------------------------ - -inline bool IsMaxima(TEdge *e, const cInt Y) -{ - return e && e->Top.Y == Y && !e->NextInLML; -} -//------------------------------------------------------------------------------ - -inline bool IsIntermediate(TEdge *e, const cInt Y) -{ - return e->Top.Y == Y && e->NextInLML; -} -//------------------------------------------------------------------------------ - -TEdge *GetMaximaPair(TEdge *e) -{ - if ((e->Next->Top == e->Top) && !e->Next->NextInLML) - return e->Next; - else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML) - return e->Prev; - else return 0; -} -//------------------------------------------------------------------------------ - -TEdge *GetMaximaPairEx(TEdge *e) -{ - //as GetMaximaPair() but returns 0 if MaxPair isn't in AEL (unless it's horizontal) - TEdge* result = GetMaximaPair(e); - if (result && (result->OutIdx == Skip || - (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result)))) return 0; - return result; -} -//------------------------------------------------------------------------------ - -void Clipper::SwapPositionsInSEL(TEdge *Edge1, TEdge *Edge2) -{ - if( !( Edge1->NextInSEL ) && !( Edge1->PrevInSEL ) ) return; - if( !( Edge2->NextInSEL ) && !( Edge2->PrevInSEL ) ) return; - - if( Edge1->NextInSEL == Edge2 ) - { - TEdge* Next = Edge2->NextInSEL; - if( Next ) Next->PrevInSEL = Edge1; - TEdge* Prev = Edge1->PrevInSEL; - if( Prev ) Prev->NextInSEL = Edge2; - Edge2->PrevInSEL = Prev; - Edge2->NextInSEL = Edge1; - Edge1->PrevInSEL = Edge2; - Edge1->NextInSEL = Next; - } - else if( Edge2->NextInSEL == Edge1 ) - { - TEdge* Next = Edge1->NextInSEL; - if( Next ) Next->PrevInSEL = Edge2; - TEdge* Prev = Edge2->PrevInSEL; - if( Prev ) Prev->NextInSEL = Edge1; - Edge1->PrevInSEL = Prev; - Edge1->NextInSEL = Edge2; - Edge2->PrevInSEL = Edge1; - Edge2->NextInSEL = Next; - } - else - { - TEdge* Next = Edge1->NextInSEL; - TEdge* Prev = Edge1->PrevInSEL; - Edge1->NextInSEL = Edge2->NextInSEL; - if( Edge1->NextInSEL ) Edge1->NextInSEL->PrevInSEL = Edge1; - Edge1->PrevInSEL = Edge2->PrevInSEL; - if( Edge1->PrevInSEL ) Edge1->PrevInSEL->NextInSEL = Edge1; - Edge2->NextInSEL = Next; - if( Edge2->NextInSEL ) Edge2->NextInSEL->PrevInSEL = Edge2; - Edge2->PrevInSEL = Prev; - if( Edge2->PrevInSEL ) Edge2->PrevInSEL->NextInSEL = Edge2; - } - - if( !Edge1->PrevInSEL ) m_SortedEdges = Edge1; - else if( !Edge2->PrevInSEL ) m_SortedEdges = Edge2; -} -//------------------------------------------------------------------------------ - -TEdge* GetNextInAEL(TEdge *e, Direction dir) -{ - return dir == dLeftToRight ? e->NextInAEL : e->PrevInAEL; -} -//------------------------------------------------------------------------------ - -void GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right) -{ - if (HorzEdge.Bot.X < HorzEdge.Top.X) - { - Left = HorzEdge.Bot.X; - Right = HorzEdge.Top.X; - Dir = dLeftToRight; - } else - { - Left = HorzEdge.Top.X; - Right = HorzEdge.Bot.X; - Dir = dRightToLeft; - } -} -//------------------------------------------------------------------------ - -/******************************************************************************* -* Notes: Horizontal edges (HEs) at scanline intersections (ie at the Top or * -* Bottom of a scanbeam) are processed as if layered. The order in which HEs * -* are processed doesn't matter. HEs intersect with other HE Bot.Xs only [#] * -* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs), * -* and with other non-horizontal edges [*]. Once these intersections are * -* processed, intermediate HEs then 'promote' the Edge above (NextInLML) into * -* the AEL. These 'promoted' edges may in turn intersect [%] with other HEs. * -*******************************************************************************/ - -void Clipper::ProcessHorizontal(TEdge *horzEdge) -{ - Direction dir; - cInt horzLeft, horzRight; - bool IsOpen = (horzEdge->WindDelta == 0); - - GetHorzDirection(*horzEdge, dir, horzLeft, horzRight); - - TEdge* eLastHorz = horzEdge, *eMaxPair = 0; - while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML)) - eLastHorz = eLastHorz->NextInLML; - if (!eLastHorz->NextInLML) - eMaxPair = GetMaximaPair(eLastHorz); - - MaximaList::const_iterator maxIt; - MaximaList::const_reverse_iterator maxRit; - if (m_Maxima.size() > 0) - { - //get the first maxima in range (X) ... - if (dir == dLeftToRight) - { - maxIt = m_Maxima.begin(); - while (maxIt != m_Maxima.end() && *maxIt <= horzEdge->Bot.X) maxIt++; - if (maxIt != m_Maxima.end() && *maxIt >= eLastHorz->Top.X) - maxIt = m_Maxima.end(); - } - else - { - maxRit = m_Maxima.rbegin(); - while (maxRit != m_Maxima.rend() && *maxRit > horzEdge->Bot.X) maxRit++; - if (maxRit != m_Maxima.rend() && *maxRit <= eLastHorz->Top.X) - maxRit = m_Maxima.rend(); - } - } - - OutPt* op1 = 0; - - for (;;) //loop through consec. horizontal edges - { - - bool IsLastHorz = (horzEdge == eLastHorz); - TEdge* e = GetNextInAEL(horzEdge, dir); - while(e) - { - - //this code block inserts extra coords into horizontal edges (in output - //polygons) whereever maxima touch these horizontal edges. This helps - //'simplifying' polygons (ie if the Simplify property is set). - if (m_Maxima.size() > 0) - { - if (dir == dLeftToRight) - { - while (maxIt != m_Maxima.end() && *maxIt < e->Curr.X) - { - if (horzEdge->OutIdx >= 0 && !IsOpen) - AddOutPt(horzEdge, IntPoint(*maxIt, horzEdge->Bot.Y)); - maxIt++; - } - } - else - { - while (maxRit != m_Maxima.rend() && *maxRit > e->Curr.X) - { - if (horzEdge->OutIdx >= 0 && !IsOpen) - AddOutPt(horzEdge, IntPoint(*maxRit, horzEdge->Bot.Y)); - maxRit++; - } - } - }; - - if ((dir == dLeftToRight && e->Curr.X > horzRight) || - (dir == dRightToLeft && e->Curr.X < horzLeft)) break; - - //Also break if we've got to the end of an intermediate horizontal edge ... - //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal. - if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML && - e->Dx < horzEdge->NextInLML->Dx) break; - - if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times - { -#ifdef use_xyz - if (dir == dLeftToRight) SetZ(e->Curr, *horzEdge, *e); - else SetZ(e->Curr, *e, *horzEdge); -#endif - op1 = AddOutPt(horzEdge, e->Curr); - TEdge* eNextHorz = m_SortedEdges; - while (eNextHorz) - { - if (eNextHorz->OutIdx >= 0 && - HorzSegmentsOverlap(horzEdge->Bot.X, - horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X)) - { - OutPt* op2 = GetLastOutPt(eNextHorz); - AddJoin(op2, op1, eNextHorz->Top); - } - eNextHorz = eNextHorz->NextInSEL; - } - AddGhostJoin(op1, horzEdge->Bot); - } - - //OK, so far we're still in range of the horizontal Edge but make sure - //we're at the last of consec. horizontals when matching with eMaxPair - if(e == eMaxPair && IsLastHorz) - { - if (horzEdge->OutIdx >= 0) - AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge->Top); - DeleteFromAEL(horzEdge); - DeleteFromAEL(eMaxPair); - return; - } - - if(dir == dLeftToRight) - { - IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y); - IntersectEdges(horzEdge, e, Pt); - } - else - { - IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y); - IntersectEdges( e, horzEdge, Pt); - } - TEdge* eNext = GetNextInAEL(e, dir); - SwapPositionsInAEL( horzEdge, e ); - e = eNext; - } //end while(e) - - //Break out of loop if HorzEdge.NextInLML is not also horizontal ... - if (!horzEdge->NextInLML || !IsHorizontal(*horzEdge->NextInLML)) break; - - UpdateEdgeIntoAEL(horzEdge); - if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot); - GetHorzDirection(*horzEdge, dir, horzLeft, horzRight); - - } //end for (;;) - - if (horzEdge->OutIdx >= 0 && !op1) - { - op1 = GetLastOutPt(horzEdge); - TEdge* eNextHorz = m_SortedEdges; - while (eNextHorz) - { - if (eNextHorz->OutIdx >= 0 && - HorzSegmentsOverlap(horzEdge->Bot.X, - horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X)) - { - OutPt* op2 = GetLastOutPt(eNextHorz); - AddJoin(op2, op1, eNextHorz->Top); - } - eNextHorz = eNextHorz->NextInSEL; - } - AddGhostJoin(op1, horzEdge->Top); - } - - if (horzEdge->NextInLML) - { - if(horzEdge->OutIdx >= 0) - { - op1 = AddOutPt( horzEdge, horzEdge->Top); - UpdateEdgeIntoAEL(horzEdge); - if (horzEdge->WindDelta == 0) return; - //nb: HorzEdge is no longer horizontal here - TEdge* ePrev = horzEdge->PrevInAEL; - TEdge* eNext = horzEdge->NextInAEL; - if (ePrev && ePrev->Curr.X == horzEdge->Bot.X && - ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 && - (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y && - SlopesEqual(*horzEdge, *ePrev, m_UseFullRange))) - { - OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot); - AddJoin(op1, op2, horzEdge->Top); - } - else if (eNext && eNext->Curr.X == horzEdge->Bot.X && - eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 && - eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y && - SlopesEqual(*horzEdge, *eNext, m_UseFullRange)) - { - OutPt* op2 = AddOutPt(eNext, horzEdge->Bot); - AddJoin(op1, op2, horzEdge->Top); - } - } - else - UpdateEdgeIntoAEL(horzEdge); - } - else - { - if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top); - DeleteFromAEL(horzEdge); - } -} -//------------------------------------------------------------------------------ - -bool Clipper::ProcessIntersections(const cInt topY) -{ - if( !m_ActiveEdges ) return true; - try { - BuildIntersectList(topY); - size_t IlSize = m_IntersectList.size(); - if (IlSize == 0) return true; - if (IlSize == 1 || FixupIntersectionOrder()) ProcessIntersectList(); - else return false; - } - catch(...) - { - m_SortedEdges = 0; - DisposeIntersectNodes(); - throw clipperException("ProcessIntersections error"); - } - m_SortedEdges = 0; - return true; -} -//------------------------------------------------------------------------------ - -void Clipper::DisposeIntersectNodes() -{ - for (size_t i = 0; i < m_IntersectList.size(); ++i ) - delete m_IntersectList[i]; - m_IntersectList.clear(); -} -//------------------------------------------------------------------------------ - -void Clipper::BuildIntersectList(const cInt topY) -{ - if ( !m_ActiveEdges ) return; - - //prepare for sorting ... - TEdge* e = m_ActiveEdges; - m_SortedEdges = e; - while( e ) - { - e->PrevInSEL = e->PrevInAEL; - e->NextInSEL = e->NextInAEL; - e->Curr.X = TopX( *e, topY ); - e = e->NextInAEL; - } - - //bubblesort ... - bool isModified; - do - { - isModified = false; - e = m_SortedEdges; - while( e->NextInSEL ) - { - TEdge *eNext = e->NextInSEL; - IntPoint Pt; - if(e->Curr.X > eNext->Curr.X) - { - IntersectPoint(*e, *eNext, Pt); - if (Pt.Y < topY) Pt = IntPoint(TopX(*e, topY), topY); - IntersectNode * newNode = new IntersectNode; - newNode->Edge1 = e; - newNode->Edge2 = eNext; - newNode->Pt = Pt; - m_IntersectList.push_back(newNode); - - SwapPositionsInSEL(e, eNext); - isModified = true; - } - else - e = eNext; - } - if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0; - else break; - } - while ( isModified ); - m_SortedEdges = 0; //important -} -//------------------------------------------------------------------------------ - - -void Clipper::ProcessIntersectList() -{ - for (size_t i = 0; i < m_IntersectList.size(); ++i) - { - IntersectNode* iNode = m_IntersectList[i]; - { - IntersectEdges( iNode->Edge1, iNode->Edge2, iNode->Pt); - SwapPositionsInAEL( iNode->Edge1 , iNode->Edge2 ); - } - delete iNode; - } - m_IntersectList.clear(); -} -//------------------------------------------------------------------------------ - -bool IntersectListSort(IntersectNode* node1, IntersectNode* node2) -{ - return node2->Pt.Y < node1->Pt.Y; -} -//------------------------------------------------------------------------------ - -inline bool EdgesAdjacent(const IntersectNode &inode) -{ - return (inode.Edge1->NextInSEL == inode.Edge2) || - (inode.Edge1->PrevInSEL == inode.Edge2); -} -//------------------------------------------------------------------------------ - -bool Clipper::FixupIntersectionOrder() -{ - //pre-condition: intersections are sorted Bottom-most first. - //Now it's crucial that intersections are made only between adjacent edges, - //so to ensure this the order of intersections may need adjusting ... - CopyAELToSEL(); - std::sort(m_IntersectList.begin(), m_IntersectList.end(), IntersectListSort); - size_t cnt = m_IntersectList.size(); - for (size_t i = 0; i < cnt; ++i) - { - if (!EdgesAdjacent(*m_IntersectList[i])) - { - size_t j = i + 1; - while (j < cnt && !EdgesAdjacent(*m_IntersectList[j])) j++; - if (j == cnt) return false; - std::swap(m_IntersectList[i], m_IntersectList[j]); - } - SwapPositionsInSEL(m_IntersectList[i]->Edge1, m_IntersectList[i]->Edge2); - } - return true; -} -//------------------------------------------------------------------------------ - -void Clipper::DoMaxima(TEdge *e) -{ - TEdge* eMaxPair = GetMaximaPairEx(e); - if (!eMaxPair) - { - if (e->OutIdx >= 0) - AddOutPt(e, e->Top); - DeleteFromAEL(e); - return; - } - - TEdge* eNext = e->NextInAEL; - while(eNext && eNext != eMaxPair) - { - IntersectEdges(e, eNext, e->Top); - SwapPositionsInAEL(e, eNext); - eNext = e->NextInAEL; - } - - if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned) - { - DeleteFromAEL(e); - DeleteFromAEL(eMaxPair); - } - else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 ) - { - if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top); - DeleteFromAEL(e); - DeleteFromAEL(eMaxPair); - } -#ifdef use_lines - else if (e->WindDelta == 0) - { - if (e->OutIdx >= 0) - { - AddOutPt(e, e->Top); - e->OutIdx = Unassigned; - } - DeleteFromAEL(e); - - if (eMaxPair->OutIdx >= 0) - { - AddOutPt(eMaxPair, e->Top); - eMaxPair->OutIdx = Unassigned; - } - DeleteFromAEL(eMaxPair); - } -#endif - else throw clipperException("DoMaxima error"); -} -//------------------------------------------------------------------------------ - -void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY) -{ - TEdge* e = m_ActiveEdges; - while( e ) - { - //1. process maxima, treating them as if they're 'bent' horizontal edges, - // but exclude maxima with horizontal edges. nb: e can't be a horizontal. - bool IsMaximaEdge = IsMaxima(e, topY); - - if(IsMaximaEdge) - { - TEdge* eMaxPair = GetMaximaPairEx(e); - IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair)); - } - - if(IsMaximaEdge) - { - if (m_StrictSimple) m_Maxima.push_back(e->Top.X); - TEdge* ePrev = e->PrevInAEL; - DoMaxima(e); - if( !ePrev ) e = m_ActiveEdges; - else e = ePrev->NextInAEL; - } - else - { - //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ... - if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML)) - { - UpdateEdgeIntoAEL(e); - if (e->OutIdx >= 0) - AddOutPt(e, e->Bot); - AddEdgeToSEL(e); - } - else - { - e->Curr.X = TopX( *e, topY ); - e->Curr.Y = topY; -#ifdef use_xyz - e->Curr.Z = topY == e->Top.Y ? e->Top.Z : (topY == e->Bot.Y ? e->Bot.Z : 0); -#endif - } - - //When StrictlySimple and 'e' is being touched by another edge, then - //make sure both edges have a vertex here ... - if (m_StrictSimple) - { - TEdge* ePrev = e->PrevInAEL; - if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) && - (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0)) - { - IntPoint pt = e->Curr; -#ifdef use_xyz - SetZ(pt, *ePrev, *e); -#endif - OutPt* op = AddOutPt(ePrev, pt); - OutPt* op2 = AddOutPt(e, pt); - AddJoin(op, op2, pt); //StrictlySimple (type-3) join - } - } - - e = e->NextInAEL; - } - } - - //3. Process horizontals at the Top of the scanbeam ... - m_Maxima.sort(); - ProcessHorizontals(); - m_Maxima.clear(); - - //4. Promote intermediate vertices ... - e = m_ActiveEdges; - while(e) - { - if(IsIntermediate(e, topY)) - { - OutPt* op = 0; - if( e->OutIdx >= 0 ) - op = AddOutPt(e, e->Top); - UpdateEdgeIntoAEL(e); - - //if output polygons share an edge, they'll need joining later ... - TEdge* ePrev = e->PrevInAEL; - TEdge* eNext = e->NextInAEL; - if (ePrev && ePrev->Curr.X == e->Bot.X && - ePrev->Curr.Y == e->Bot.Y && op && - ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y && - SlopesEqual(e->Curr, e->Top, ePrev->Curr, ePrev->Top, m_UseFullRange) && - (e->WindDelta != 0) && (ePrev->WindDelta != 0)) - { - OutPt* op2 = AddOutPt(ePrev, e->Bot); - AddJoin(op, op2, e->Top); - } - else if (eNext && eNext->Curr.X == e->Bot.X && - eNext->Curr.Y == e->Bot.Y && op && - eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y && - SlopesEqual(e->Curr, e->Top, eNext->Curr, eNext->Top, m_UseFullRange) && - (e->WindDelta != 0) && (eNext->WindDelta != 0)) - { - OutPt* op2 = AddOutPt(eNext, e->Bot); - AddJoin(op, op2, e->Top); - } - } - e = e->NextInAEL; - } -} -//------------------------------------------------------------------------------ - -void Clipper::FixupOutPolyline(OutRec &outrec) -{ - OutPt *pp = outrec.Pts; - OutPt *lastPP = pp->Prev; - while (pp != lastPP) - { - pp = pp->Next; - if (pp->Pt == pp->Prev->Pt) - { - if (pp == lastPP) lastPP = pp->Prev; - OutPt *tmpPP = pp->Prev; - tmpPP->Next = pp->Next; - pp->Next->Prev = tmpPP; - delete pp; - pp = tmpPP; - } - } - - if (pp == pp->Prev) - { - DisposeOutPts(pp); - outrec.Pts = 0; - return; - } -} -//------------------------------------------------------------------------------ - -void Clipper::FixupOutPolygon(OutRec &outrec) -{ - //FixupOutPolygon() - removes duplicate points and simplifies consecutive - //parallel edges by removing the middle vertex. - OutPt *lastOK = 0; - outrec.BottomPt = 0; - OutPt *pp = outrec.Pts; - bool preserveCol = m_PreserveCollinear || m_StrictSimple; - - for (;;) - { - if (pp->Prev == pp || pp->Prev == pp->Next) - { - DisposeOutPts(pp); - outrec.Pts = 0; - return; - } - - //test for duplicate points and collinear edges ... - if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) || - (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) && - (!preserveCol || !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt)))) - { - lastOK = 0; - OutPt *tmp = pp; - pp->Prev->Next = pp->Next; - pp->Next->Prev = pp->Prev; - pp = pp->Prev; - delete tmp; - } - else if (pp == lastOK) break; - else - { - if (!lastOK) lastOK = pp; - pp = pp->Next; - } - } - outrec.Pts = pp; -} -//------------------------------------------------------------------------------ - -int PointCount(OutPt *Pts) -{ - if (!Pts) return 0; - int result = 0; - OutPt* p = Pts; - do - { - result++; - p = p->Next; - } - while (p != Pts); - return result; -} -//------------------------------------------------------------------------------ - -void Clipper::BuildResult(Paths &polys) -{ - polys.reserve(m_PolyOuts.size()); - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - if (!m_PolyOuts[i]->Pts) continue; - Path pg; - OutPt* p = m_PolyOuts[i]->Pts->Prev; - int cnt = PointCount(p); - if (cnt < 2) continue; - pg.reserve(cnt); - for (int i = 0; i < cnt; ++i) - { - pg.push_back(p->Pt); - p = p->Prev; - } - polys.push_back(pg); - } -} -//------------------------------------------------------------------------------ - -void Clipper::BuildResult2(PolyTree& polytree) -{ - polytree.Clear(); - polytree.AllNodes.reserve(m_PolyOuts.size()); - //add each output polygon/contour to polytree ... - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) - { - OutRec* outRec = m_PolyOuts[i]; - int cnt = PointCount(outRec->Pts); - if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3)) continue; - FixHoleLinkage(*outRec); - PolyNode* pn = new PolyNode(); - //nb: polytree takes ownership of all the PolyNodes - polytree.AllNodes.push_back(pn); - outRec->PolyNd = pn; - pn->Parent = 0; - pn->Index = 0; - pn->Contour.reserve(cnt); - OutPt *op = outRec->Pts->Prev; - for (int j = 0; j < cnt; j++) - { - pn->Contour.push_back(op->Pt); - op = op->Prev; - } - } - - //fixup PolyNode links etc ... - polytree.Childs.reserve(m_PolyOuts.size()); - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++) - { - OutRec* outRec = m_PolyOuts[i]; - if (!outRec->PolyNd) continue; - if (outRec->IsOpen) - { - outRec->PolyNd->m_IsOpen = true; - polytree.AddChild(*outRec->PolyNd); - } - else if (outRec->FirstLeft && outRec->FirstLeft->PolyNd) - outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd); - else - polytree.AddChild(*outRec->PolyNd); - } -} -//------------------------------------------------------------------------------ - -void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2) -{ - //just swap the contents (because fIntersectNodes is a single-linked-list) - IntersectNode inode = int1; //gets a copy of Int1 - int1.Edge1 = int2.Edge1; - int1.Edge2 = int2.Edge2; - int1.Pt = int2.Pt; - int2.Edge1 = inode.Edge1; - int2.Edge2 = inode.Edge2; - int2.Pt = inode.Pt; -} -//------------------------------------------------------------------------------ - -inline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2) -{ - if (e2.Curr.X == e1.Curr.X) - { - if (e2.Top.Y > e1.Top.Y) - return e2.Top.X < TopX(e1, e2.Top.Y); - else return e1.Top.X > TopX(e2, e1.Top.Y); - } - else return e2.Curr.X < e1.Curr.X; -} -//------------------------------------------------------------------------------ - -bool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2, - cInt& Left, cInt& Right) -{ - if (a1 < a2) - { - if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);} - else {Left = std::max(a1,b2); Right = std::min(a2,b1);} - } - else - { - if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);} - else {Left = std::max(a2,b2); Right = std::min(a1,b1);} - } - return Left < Right; -} -//------------------------------------------------------------------------------ - -inline void UpdateOutPtIdxs(OutRec& outrec) -{ - OutPt* op = outrec.Pts; - do - { - op->Idx = outrec.Idx; - op = op->Prev; - } - while(op != outrec.Pts); -} -//------------------------------------------------------------------------------ - -void Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge) -{ - if(!m_ActiveEdges) - { - edge->PrevInAEL = 0; - edge->NextInAEL = 0; - m_ActiveEdges = edge; - } - else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge)) - { - edge->PrevInAEL = 0; - edge->NextInAEL = m_ActiveEdges; - m_ActiveEdges->PrevInAEL = edge; - m_ActiveEdges = edge; - } - else - { - if(!startEdge) startEdge = m_ActiveEdges; - while(startEdge->NextInAEL && - !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge)) - startEdge = startEdge->NextInAEL; - edge->NextInAEL = startEdge->NextInAEL; - if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge; - edge->PrevInAEL = startEdge; - startEdge->NextInAEL = edge; - } -} -//---------------------------------------------------------------------- - -OutPt* DupOutPt(OutPt* outPt, bool InsertAfter) -{ - OutPt* result = new OutPt; - result->Pt = outPt->Pt; - result->Idx = outPt->Idx; - if (InsertAfter) - { - result->Next = outPt->Next; - result->Prev = outPt; - outPt->Next->Prev = result; - outPt->Next = result; - } - else - { - result->Prev = outPt->Prev; - result->Next = outPt; - outPt->Prev->Next = result; - outPt->Prev = result; - } - return result; -} -//------------------------------------------------------------------------------ - -bool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b, - const IntPoint Pt, bool DiscardLeft) -{ - Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight); - Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight); - if (Dir1 == Dir2) return false; - - //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we - //want Op1b to be on the Right. (And likewise with Op2 and Op2b.) - //So, to facilitate this while inserting Op1b and Op2b ... - //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b, - //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.) - if (Dir1 == dLeftToRight) - { - while (op1->Next->Pt.X <= Pt.X && - op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y) - op1 = op1->Next; - if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next; - op1b = DupOutPt(op1, !DiscardLeft); - if (op1b->Pt != Pt) - { - op1 = op1b; - op1->Pt = Pt; - op1b = DupOutPt(op1, !DiscardLeft); - } - } - else - { - while (op1->Next->Pt.X >= Pt.X && - op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y) - op1 = op1->Next; - if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next; - op1b = DupOutPt(op1, DiscardLeft); - if (op1b->Pt != Pt) - { - op1 = op1b; - op1->Pt = Pt; - op1b = DupOutPt(op1, DiscardLeft); - } - } - - if (Dir2 == dLeftToRight) - { - while (op2->Next->Pt.X <= Pt.X && - op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y) - op2 = op2->Next; - if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next; - op2b = DupOutPt(op2, !DiscardLeft); - if (op2b->Pt != Pt) - { - op2 = op2b; - op2->Pt = Pt; - op2b = DupOutPt(op2, !DiscardLeft); - }; - } else - { - while (op2->Next->Pt.X >= Pt.X && - op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y) - op2 = op2->Next; - if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next; - op2b = DupOutPt(op2, DiscardLeft); - if (op2b->Pt != Pt) - { - op2 = op2b; - op2->Pt = Pt; - op2b = DupOutPt(op2, DiscardLeft); - }; - }; - - if ((Dir1 == dLeftToRight) == DiscardLeft) - { - op1->Prev = op2; - op2->Next = op1; - op1b->Next = op2b; - op2b->Prev = op1b; - } - else - { - op1->Next = op2; - op2->Prev = op1; - op1b->Prev = op2b; - op2b->Next = op1b; - } - return true; -} -//------------------------------------------------------------------------------ - -bool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2) -{ - OutPt *op1 = j->OutPt1, *op1b; - OutPt *op2 = j->OutPt2, *op2b; - - //There are 3 kinds of joins for output polygons ... - //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are vertices anywhere - //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal). - //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same - //location at the Bottom of the overlapping segment (& Join.OffPt is above). - //3. StrictSimple joins where edges touch but are not collinear and where - //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point. - bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y); - - if (isHorizontal && (j->OffPt == j->OutPt1->Pt) && - (j->OffPt == j->OutPt2->Pt)) - { - //Strictly Simple join ... - if (outRec1 != outRec2) return false; - op1b = j->OutPt1->Next; - while (op1b != op1 && (op1b->Pt == j->OffPt)) - op1b = op1b->Next; - bool reverse1 = (op1b->Pt.Y > j->OffPt.Y); - op2b = j->OutPt2->Next; - while (op2b != op2 && (op2b->Pt == j->OffPt)) - op2b = op2b->Next; - bool reverse2 = (op2b->Pt.Y > j->OffPt.Y); - if (reverse1 == reverse2) return false; - if (reverse1) - { - op1b = DupOutPt(op1, false); - op2b = DupOutPt(op2, true); - op1->Prev = op2; - op2->Next = op1; - op1b->Next = op2b; - op2b->Prev = op1b; - j->OutPt1 = op1; - j->OutPt2 = op1b; - return true; - } else - { - op1b = DupOutPt(op1, true); - op2b = DupOutPt(op2, false); - op1->Next = op2; - op2->Prev = op1; - op1b->Prev = op2b; - op2b->Next = op1b; - j->OutPt1 = op1; - j->OutPt2 = op1b; - return true; - } - } - else if (isHorizontal) - { - //treat horizontal joins differently to non-horizontal joins since with - //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt - //may be anywhere along the horizontal edge. - op1b = op1; - while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2) - op1 = op1->Prev; - while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2) - op1b = op1b->Next; - if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon' - - op2b = op2; - while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b) - op2 = op2->Prev; - while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1) - op2b = op2b->Next; - if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon' - - cInt Left, Right; - //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges - if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right)) - return false; - - //DiscardLeftSide: when overlapping edges are joined, a spike will created - //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up - //on the discard Side as either may still be needed for other joins ... - IntPoint Pt; - bool DiscardLeftSide; - if (op1->Pt.X >= Left && op1->Pt.X <= Right) - { - Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X); - } - else if (op2->Pt.X >= Left&& op2->Pt.X <= Right) - { - Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X); - } - else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right) - { - Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X; - } - else - { - Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X); - } - j->OutPt1 = op1; j->OutPt2 = op2; - return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide); - } else - { - //nb: For non-horizontal joins ... - // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y - // 2. Jr.OutPt1.Pt > Jr.OffPt.Y - - //make sure the polygons are correctly oriented ... - op1b = op1->Next; - while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next; - bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) || - !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)); - if (Reverse1) - { - op1b = op1->Prev; - while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev; - if ((op1b->Pt.Y > op1->Pt.Y) || - !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false; - }; - op2b = op2->Next; - while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next; - bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) || - !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)); - if (Reverse2) - { - op2b = op2->Prev; - while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev; - if ((op2b->Pt.Y > op2->Pt.Y) || - !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false; - } - - if ((op1b == op1) || (op2b == op2) || (op1b == op2b) || - ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false; - - if (Reverse1) - { - op1b = DupOutPt(op1, false); - op2b = DupOutPt(op2, true); - op1->Prev = op2; - op2->Next = op1; - op1b->Next = op2b; - op2b->Prev = op1b; - j->OutPt1 = op1; - j->OutPt2 = op1b; - return true; - } else - { - op1b = DupOutPt(op1, true); - op2b = DupOutPt(op2, false); - op1->Next = op2; - op2->Prev = op1; - op1b->Prev = op2b; - op2b->Next = op1b; - j->OutPt1 = op1; - j->OutPt2 = op1b; - return true; - } - } -} -//---------------------------------------------------------------------- - -static OutRec* ParseFirstLeft(OutRec* FirstLeft) -{ - while (FirstLeft && !FirstLeft->Pts) - FirstLeft = FirstLeft->FirstLeft; - return FirstLeft; -} -//------------------------------------------------------------------------------ - -void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) -{ - //tests if NewOutRec contains the polygon before reassigning FirstLeft - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - OutRec* outRec = m_PolyOuts[i]; - OutRec* firstLeft = ParseFirstLeft(outRec->FirstLeft); - if (outRec->Pts && firstLeft == OldOutRec) - { - if (Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts)) - outRec->FirstLeft = NewOutRec; - } - } -} -//---------------------------------------------------------------------- - -void Clipper::FixupFirstLefts2(OutRec* InnerOutRec, OutRec* OuterOutRec) -{ - //A polygon has split into two such that one is now the inner of the other. - //It's possible that these polygons now wrap around other polygons, so check - //every polygon that's also contained by OuterOutRec's FirstLeft container - //(including 0) to see if they've become inner to the new inner polygon ... - OutRec* orfl = OuterOutRec->FirstLeft; - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - OutRec* outRec = m_PolyOuts[i]; - - if (!outRec->Pts || outRec == OuterOutRec || outRec == InnerOutRec) - continue; - OutRec* firstLeft = ParseFirstLeft(outRec->FirstLeft); - if (firstLeft != orfl && firstLeft != InnerOutRec && firstLeft != OuterOutRec) - continue; - if (Poly2ContainsPoly1(outRec->Pts, InnerOutRec->Pts)) - outRec->FirstLeft = InnerOutRec; - else if (Poly2ContainsPoly1(outRec->Pts, OuterOutRec->Pts)) - outRec->FirstLeft = OuterOutRec; - else if (outRec->FirstLeft == InnerOutRec || outRec->FirstLeft == OuterOutRec) - outRec->FirstLeft = orfl; - } -} -//---------------------------------------------------------------------- -void Clipper::FixupFirstLefts3(OutRec* OldOutRec, OutRec* NewOutRec) -{ - //reassigns FirstLeft WITHOUT testing if NewOutRec contains the polygon - for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) - { - OutRec* outRec = m_PolyOuts[i]; - OutRec* firstLeft = ParseFirstLeft(outRec->FirstLeft); - if (outRec->Pts && firstLeft == OldOutRec) - outRec->FirstLeft = NewOutRec; - } -} -//---------------------------------------------------------------------- - -void Clipper::JoinCommonEdges() -{ - for (JoinList::size_type i = 0; i < m_Joins.size(); i++) - { - Join* join = m_Joins[i]; - - OutRec *outRec1 = GetOutRec(join->OutPt1->Idx); - OutRec *outRec2 = GetOutRec(join->OutPt2->Idx); - - if (!outRec1->Pts || !outRec2->Pts) continue; - if (outRec1->IsOpen || outRec2->IsOpen) continue; - - //get the polygon fragment with the correct hole state (FirstLeft) - //before calling JoinPoints() ... - OutRec *holeStateRec; - if (outRec1 == outRec2) holeStateRec = outRec1; - else if (OutRec1RightOfOutRec2(outRec1, outRec2)) holeStateRec = outRec2; - else if (OutRec1RightOfOutRec2(outRec2, outRec1)) holeStateRec = outRec1; - else holeStateRec = GetLowermostRec(outRec1, outRec2); - - if (!JoinPoints(join, outRec1, outRec2)) continue; - - if (outRec1 == outRec2) - { - //instead of joining two polygons, we've just created a new one by - //splitting one polygon into two. - outRec1->Pts = join->OutPt1; - outRec1->BottomPt = 0; - outRec2 = CreateOutRec(); - outRec2->Pts = join->OutPt2; - - //update all OutRec2.Pts Idx's ... - UpdateOutPtIdxs(*outRec2); - - if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts)) - { - //outRec1 contains outRec2 ... - outRec2->IsHole = !outRec1->IsHole; - outRec2->FirstLeft = outRec1; - - if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); - - if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0)) - ReversePolyPtLinks(outRec2->Pts); - - } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts)) - { - //outRec2 contains outRec1 ... - outRec2->IsHole = outRec1->IsHole; - outRec1->IsHole = !outRec2->IsHole; - outRec2->FirstLeft = outRec1->FirstLeft; - outRec1->FirstLeft = outRec2; - - if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); - - if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0)) - ReversePolyPtLinks(outRec1->Pts); - } - else - { - //the 2 polygons are completely separate ... - outRec2->IsHole = outRec1->IsHole; - outRec2->FirstLeft = outRec1->FirstLeft; - - //fixup FirstLeft pointers that may need reassigning to OutRec2 - if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); - } - - } else - { - //joined 2 polygons together ... - - outRec2->Pts = 0; - outRec2->BottomPt = 0; - outRec2->Idx = outRec1->Idx; - - outRec1->IsHole = holeStateRec->IsHole; - if (holeStateRec == outRec2) - outRec1->FirstLeft = outRec2->FirstLeft; - outRec2->FirstLeft = outRec1; - - if (m_UsingPolyTree) FixupFirstLefts3(outRec2, outRec1); - } - } -} - -//------------------------------------------------------------------------------ -// ClipperOffset support functions ... -//------------------------------------------------------------------------------ - -DoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2) -{ - if(pt2.X == pt1.X && pt2.Y == pt1.Y) - return DoublePoint(0, 0); - - double Dx = (double)(pt2.X - pt1.X); - double dy = (double)(pt2.Y - pt1.Y); - double f = 1 *1.0/ std::sqrt( Dx*Dx + dy*dy ); - Dx *= f; - dy *= f; - return DoublePoint(dy, -Dx); -} - -//------------------------------------------------------------------------------ -// ClipperOffset class -//------------------------------------------------------------------------------ - -ClipperOffset::ClipperOffset(double miterLimit, double arcTolerance) -{ - this->MiterLimit = miterLimit; - this->ArcTolerance = arcTolerance; - m_lowest.X = -1; -} -//------------------------------------------------------------------------------ - -ClipperOffset::~ClipperOffset() -{ - Clear(); -} -//------------------------------------------------------------------------------ - -void ClipperOffset::Clear() -{ - for (int i = 0; i < m_polyNodes.ChildCount(); ++i) - delete m_polyNodes.Childs[i]; - m_polyNodes.Childs.clear(); - m_lowest.X = -1; -} -//------------------------------------------------------------------------------ - -void ClipperOffset::AddPath(const Path& path, JoinType joinType, EndType endType) -{ - int highI = (int)path.size() - 1; - if (highI < 0) return; - PolyNode* newNode = new PolyNode(); - newNode->m_jointype = joinType; - newNode->m_endtype = endType; - - //strip duplicate points from path and also get index to the lowest point ... - if (endType == etClosedLine || endType == etClosedPolygon) - while (highI > 0 && path[0] == path[highI]) highI--; - newNode->Contour.reserve(highI + 1); - newNode->Contour.push_back(path[0]); - int j = 0, k = 0; - for (int i = 1; i <= highI; i++) - if (newNode->Contour[j] != path[i]) - { - j++; - newNode->Contour.push_back(path[i]); - if (path[i].Y > newNode->Contour[k].Y || - (path[i].Y == newNode->Contour[k].Y && - path[i].X < newNode->Contour[k].X)) k = j; - } - if (endType == etClosedPolygon && j < 2) - { - delete newNode; - return; - } - m_polyNodes.AddChild(*newNode); - - //if this path's lowest pt is lower than all the others then update m_lowest - if (endType != etClosedPolygon) return; - if (m_lowest.X < 0) - m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k); - else - { - IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X]->Contour[(int)m_lowest.Y]; - if (newNode->Contour[k].Y > ip.Y || - (newNode->Contour[k].Y == ip.Y && - newNode->Contour[k].X < ip.X)) - m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k); - } -} -//------------------------------------------------------------------------------ - -void ClipperOffset::AddPaths(const Paths& paths, JoinType joinType, EndType endType) -{ - for (Paths::size_type i = 0; i < paths.size(); ++i) - AddPath(paths[i], joinType, endType); -} -//------------------------------------------------------------------------------ - -void ClipperOffset::FixOrientations() -{ - //fixup orientations of all closed paths if the orientation of the - //closed path with the lowermost vertex is wrong ... - if (m_lowest.X >= 0 && - !Orientation(m_polyNodes.Childs[(int)m_lowest.X]->Contour)) - { - for (int i = 0; i < m_polyNodes.ChildCount(); ++i) - { - PolyNode& node = *m_polyNodes.Childs[i]; - if (node.m_endtype == etClosedPolygon || - (node.m_endtype == etClosedLine && Orientation(node.Contour))) - ReversePath(node.Contour); - } - } else - { - for (int i = 0; i < m_polyNodes.ChildCount(); ++i) - { - PolyNode& node = *m_polyNodes.Childs[i]; - if (node.m_endtype == etClosedLine && !Orientation(node.Contour)) - ReversePath(node.Contour); - } - } -} -//------------------------------------------------------------------------------ - -void ClipperOffset::Execute(Paths& solution, double delta) -{ - solution.clear(); - FixOrientations(); - DoOffset(delta); - - //now clean up 'corners' ... - Clipper clpr; - clpr.AddPaths(m_destPolys, ptSubject, true); - if (delta > 0) - { - clpr.Execute(ctUnion, solution, pftPositive, pftPositive); - } - else - { - IntRect r = clpr.GetBounds(); - Path outer(4); - outer[0] = IntPoint(r.left - 10, r.bottom + 10); - outer[1] = IntPoint(r.right + 10, r.bottom + 10); - outer[2] = IntPoint(r.right + 10, r.top - 10); - outer[3] = IntPoint(r.left - 10, r.top - 10); - - clpr.AddPath(outer, ptSubject, true); - clpr.ReverseSolution(true); - clpr.Execute(ctUnion, solution, pftNegative, pftNegative); - if (solution.size() > 0) solution.erase(solution.begin()); - } -} -//------------------------------------------------------------------------------ - -void ClipperOffset::Execute(PolyTree& solution, double delta) -{ - solution.Clear(); - FixOrientations(); - DoOffset(delta); - - //now clean up 'corners' ... - Clipper clpr; - clpr.AddPaths(m_destPolys, ptSubject, true); - if (delta > 0) - { - clpr.Execute(ctUnion, solution, pftPositive, pftPositive); - } - else - { - IntRect r = clpr.GetBounds(); - Path outer(4); - outer[0] = IntPoint(r.left - 10, r.bottom + 10); - outer[1] = IntPoint(r.right + 10, r.bottom + 10); - outer[2] = IntPoint(r.right + 10, r.top - 10); - outer[3] = IntPoint(r.left - 10, r.top - 10); - - clpr.AddPath(outer, ptSubject, true); - clpr.ReverseSolution(true); - clpr.Execute(ctUnion, solution, pftNegative, pftNegative); - //remove the outer PolyNode rectangle ... - if (solution.ChildCount() == 1 && solution.Childs[0]->ChildCount() > 0) - { - PolyNode* outerNode = solution.Childs[0]; - solution.Childs.reserve(outerNode->ChildCount()); - solution.Childs[0] = outerNode->Childs[0]; - solution.Childs[0]->Parent = outerNode->Parent; - for (int i = 1; i < outerNode->ChildCount(); ++i) - solution.AddChild(*outerNode->Childs[i]); - } - else - solution.Clear(); - } -} -//------------------------------------------------------------------------------ - -void ClipperOffset::DoOffset(double delta) -{ - m_destPolys.clear(); - m_delta = delta; - - //if Zero offset, just copy any CLOSED polygons to m_p and return ... - if (NEAR_ZERO(delta)) - { - m_destPolys.reserve(m_polyNodes.ChildCount()); - for (int i = 0; i < m_polyNodes.ChildCount(); i++) - { - PolyNode& node = *m_polyNodes.Childs[i]; - if (node.m_endtype == etClosedPolygon) - m_destPolys.push_back(node.Contour); - } - return; - } - - //see offset_triginometry3.svg in the documentation folder ... - if (MiterLimit > 2) m_miterLim = 2/(MiterLimit * MiterLimit); - else m_miterLim = 0.5; - - double y; - if (ArcTolerance <= 0.0) y = def_arc_tolerance; - else if (ArcTolerance > std::fabs(delta) * def_arc_tolerance) - y = std::fabs(delta) * def_arc_tolerance; - else y = ArcTolerance; - //see offset_triginometry2.svg in the documentation folder ... - double steps = pi / std::acos(1 - y / std::fabs(delta)); - if (steps > std::fabs(delta) * pi) - steps = std::fabs(delta) * pi; //ie excessive precision check - m_sin = std::sin(two_pi / steps); - m_cos = std::cos(two_pi / steps); - m_StepsPerRad = steps / two_pi; - if (delta < 0.0) m_sin = -m_sin; - - m_destPolys.reserve(m_polyNodes.ChildCount() * 2); - for (int i = 0; i < m_polyNodes.ChildCount(); i++) - { - PolyNode& node = *m_polyNodes.Childs[i]; - m_srcPoly = node.Contour; - - int len = (int)m_srcPoly.size(); - if (len == 0 || (delta <= 0 && (len < 3 || node.m_endtype != etClosedPolygon))) - continue; - - m_destPoly.clear(); - if (len == 1) - { - if (node.m_jointype == jtRound) - { - double X = 1.0, Y = 0.0; - for (cInt j = 1; j <= steps; j++) - { - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[0].X + X * delta), - Round(m_srcPoly[0].Y + Y * delta))); - double X2 = X; - X = X * m_cos - m_sin * Y; - Y = X2 * m_sin + Y * m_cos; - } - } - else - { - double X = -1.0, Y = -1.0; - for (int j = 0; j < 4; ++j) - { - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[0].X + X * delta), - Round(m_srcPoly[0].Y + Y * delta))); - if (X < 0) X = 1; - else if (Y < 0) Y = 1; - else X = -1; - } - } - m_destPolys.push_back(m_destPoly); - continue; - } - //build m_normals ... - m_normals.clear(); - m_normals.reserve(len); - for (int j = 0; j < len - 1; ++j) - m_normals.push_back(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1])); - if (node.m_endtype == etClosedLine || node.m_endtype == etClosedPolygon) - m_normals.push_back(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0])); - else - m_normals.push_back(DoublePoint(m_normals[len - 2])); - - if (node.m_endtype == etClosedPolygon) - { - int k = len - 1; - for (int j = 0; j < len; ++j) - OffsetPoint(j, k, node.m_jointype); - m_destPolys.push_back(m_destPoly); - } - else if (node.m_endtype == etClosedLine) - { - int k = len - 1; - for (int j = 0; j < len; ++j) - OffsetPoint(j, k, node.m_jointype); - m_destPolys.push_back(m_destPoly); - m_destPoly.clear(); - //re-build m_normals ... - DoublePoint n = m_normals[len -1]; - for (int j = len - 1; j > 0; j--) - m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); - m_normals[0] = DoublePoint(-n.X, -n.Y); - k = 0; - for (int j = len - 1; j >= 0; j--) - OffsetPoint(j, k, node.m_jointype); - m_destPolys.push_back(m_destPoly); - } - else - { - int k = 0; - for (int j = 1; j < len - 1; ++j) - OffsetPoint(j, k, node.m_jointype); - - IntPoint pt1; - if (node.m_endtype == etOpenButt) - { - int j = len - 1; - pt1 = IntPoint((cInt)Round(m_srcPoly[j].X + m_normals[j].X * - delta), (cInt)Round(m_srcPoly[j].Y + m_normals[j].Y * delta)); - m_destPoly.push_back(pt1); - pt1 = IntPoint((cInt)Round(m_srcPoly[j].X - m_normals[j].X * - delta), (cInt)Round(m_srcPoly[j].Y - m_normals[j].Y * delta)); - m_destPoly.push_back(pt1); - } - else - { - int j = len - 1; - k = len - 2; - m_sinA = 0; - m_normals[j] = DoublePoint(-m_normals[j].X, -m_normals[j].Y); - if (node.m_endtype == etOpenSquare) - DoSquare(j, k); - else - DoRound(j, k); - } - - //re-build m_normals ... - for (int j = len - 1; j > 0; j--) - m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); - m_normals[0] = DoublePoint(-m_normals[1].X, -m_normals[1].Y); - - k = len - 1; - for (int j = k - 1; j > 0; --j) OffsetPoint(j, k, node.m_jointype); - - if (node.m_endtype == etOpenButt) - { - pt1 = IntPoint((cInt)Round(m_srcPoly[0].X - m_normals[0].X * delta), - (cInt)Round(m_srcPoly[0].Y - m_normals[0].Y * delta)); - m_destPoly.push_back(pt1); - pt1 = IntPoint((cInt)Round(m_srcPoly[0].X + m_normals[0].X * delta), - (cInt)Round(m_srcPoly[0].Y + m_normals[0].Y * delta)); - m_destPoly.push_back(pt1); - } - else - { - k = 1; - m_sinA = 0; - if (node.m_endtype == etOpenSquare) - DoSquare(0, 1); - else - DoRound(0, 1); - } - m_destPolys.push_back(m_destPoly); - } - } -} -//------------------------------------------------------------------------------ - -void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype) -{ - //cross product ... - m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y); - if (std::fabs(m_sinA * m_delta) < 1.0) - { - //dot product ... - double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y ); - if (cosA > 0) // angle => 0 degrees - { - m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), - Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); - return; - } - //else angle => 180 degrees - } - else if (m_sinA > 1.0) m_sinA = 1.0; - else if (m_sinA < -1.0) m_sinA = -1.0; - - if (m_sinA * m_delta < 0) - { - m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), - Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); - m_destPoly.push_back(m_srcPoly[j]); - m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta), - Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); - } - else - switch (jointype) - { - case jtMiter: - { - double r = 1 + (m_normals[j].X * m_normals[k].X + - m_normals[j].Y * m_normals[k].Y); - if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k); - break; - } - case jtSquare: DoSquare(j, k); break; - case jtRound: DoRound(j, k); break; - } - k = j; -} -//------------------------------------------------------------------------------ - -void ClipperOffset::DoSquare(int j, int k) -{ - double dx = std::tan(std::atan2(m_sinA, - m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4); - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)), - Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx)))); - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)), - Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx)))); -} -//------------------------------------------------------------------------------ - -void ClipperOffset::DoMiter(int j, int k, double r) -{ - double q = m_delta / r; - m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q), - Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q))); -} -//------------------------------------------------------------------------------ - -void ClipperOffset::DoRound(int j, int k) -{ - double a = std::atan2(m_sinA, - m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y); - int steps = std::max((int)Round(m_StepsPerRad * std::fabs(a)), 1); - - double X = m_normals[k].X, Y = m_normals[k].Y, X2; - for (int i = 0; i < steps; ++i) - { - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[j].X + X * m_delta), - Round(m_srcPoly[j].Y + Y * m_delta))); - X2 = X; - X = X * m_cos - m_sin * Y; - Y = X2 * m_sin + Y * m_cos; - } - m_destPoly.push_back(IntPoint( - Round(m_srcPoly[j].X + m_normals[j].X * m_delta), - Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); -} - -//------------------------------------------------------------------------------ -// Miscellaneous public functions -//------------------------------------------------------------------------------ - -void Clipper::DoSimplePolygons() -{ - PolyOutList::size_type i = 0; - while (i < m_PolyOuts.size()) - { - OutRec* outrec = m_PolyOuts[i++]; - OutPt* op = outrec->Pts; - if (!op || outrec->IsOpen) continue; - do //for each Pt in Polygon until duplicate found do ... - { - OutPt* op2 = op->Next; - while (op2 != outrec->Pts) - { - if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op) - { - //split the polygon into two ... - OutPt* op3 = op->Prev; - OutPt* op4 = op2->Prev; - op->Prev = op4; - op4->Next = op; - op2->Prev = op3; - op3->Next = op2; - - outrec->Pts = op; - OutRec* outrec2 = CreateOutRec(); - outrec2->Pts = op2; - UpdateOutPtIdxs(*outrec2); - if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts)) - { - //OutRec2 is contained by OutRec1 ... - outrec2->IsHole = !outrec->IsHole; - outrec2->FirstLeft = outrec; - if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec); - } - else - if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts)) - { - //OutRec1 is contained by OutRec2 ... - outrec2->IsHole = outrec->IsHole; - outrec->IsHole = !outrec2->IsHole; - outrec2->FirstLeft = outrec->FirstLeft; - outrec->FirstLeft = outrec2; - if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2); - } - else - { - //the 2 polygons are separate ... - outrec2->IsHole = outrec->IsHole; - outrec2->FirstLeft = outrec->FirstLeft; - if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2); - } - op2 = op; //ie get ready for the Next iteration - } - op2 = op2->Next; - } - op = op->Next; - } - while (op != outrec->Pts); - } -} -//------------------------------------------------------------------------------ - -void ReversePath(Path& p) -{ - std::reverse(p.begin(), p.end()); -} -//------------------------------------------------------------------------------ - -void ReversePaths(Paths& p) -{ - for (Paths::size_type i = 0; i < p.size(); ++i) - ReversePath(p[i]); -} -//------------------------------------------------------------------------------ - -void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType) -{ - Clipper c; - c.StrictlySimple(true); - c.AddPath(in_poly, ptSubject, true); - c.Execute(ctUnion, out_polys, fillType, fillType); -} -//------------------------------------------------------------------------------ - -void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType) -{ - Clipper c; - c.StrictlySimple(true); - c.AddPaths(in_polys, ptSubject, true); - c.Execute(ctUnion, out_polys, fillType, fillType); -} -//------------------------------------------------------------------------------ - -void SimplifyPolygons(Paths &polys, PolyFillType fillType) -{ - SimplifyPolygons(polys, polys, fillType); -} -//------------------------------------------------------------------------------ - -inline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2) -{ - double Dx = ((double)pt1.X - pt2.X); - double dy = ((double)pt1.Y - pt2.Y); - return (Dx*Dx + dy*dy); -} -//------------------------------------------------------------------------------ - -double DistanceFromLineSqrd( - const IntPoint& pt, const IntPoint& ln1, const IntPoint& ln2) -{ - //The equation of a line in general form (Ax + By + C = 0) - //given 2 points (x�,y�) & (x�,y�) is ... - //(y� - y�)x + (x� - x�)y + (y� - y�)x� - (x� - x�)y� = 0 - //A = (y� - y�); B = (x� - x�); C = (y� - y�)x� - (x� - x�)y� - //perpendicular distance of point (x�,y�) = (Ax� + By� + C)/Sqrt(A� + B�) - //see http://en.wikipedia.org/wiki/Perpendicular_distance - double A = double(ln1.Y - ln2.Y); - double B = double(ln2.X - ln1.X); - double C = A * ln1.X + B * ln1.Y; - C = A * pt.X + B * pt.Y - C; - return (C * C) / (A * A + B * B); -} -//--------------------------------------------------------------------------- - -bool SlopesNearCollinear(const IntPoint& pt1, - const IntPoint& pt2, const IntPoint& pt3, double distSqrd) -{ - //this function is more accurate when the point that's geometrically - //between the other 2 points is the one that's tested for distance. - //ie makes it more likely to pick up 'spikes' ... - if (Abs(pt1.X - pt2.X) > Abs(pt1.Y - pt2.Y)) - { - if ((pt1.X > pt2.X) == (pt1.X < pt3.X)) - return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; - else if ((pt2.X > pt1.X) == (pt2.X < pt3.X)) - return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; - else - return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; - } - else - { - if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y)) - return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; - else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y)) - return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; - else - return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; - } -} -//------------------------------------------------------------------------------ - -bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd) -{ - double Dx = (double)pt1.X - pt2.X; - double dy = (double)pt1.Y - pt2.Y; - return ((Dx * Dx) + (dy * dy) <= distSqrd); -} -//------------------------------------------------------------------------------ - -OutPt* ExcludeOp(OutPt* op) -{ - OutPt* result = op->Prev; - result->Next = op->Next; - op->Next->Prev = result; - result->Idx = 0; - return result; -} -//------------------------------------------------------------------------------ - -void CleanPolygon(const Path& in_poly, Path& out_poly, double distance) -{ - //distance = proximity in units/pixels below which vertices - //will be stripped. Default ~= sqrt(2). - - size_t size = in_poly.size(); - - if (size == 0) - { - out_poly.clear(); - return; - } - - OutPt* outPts = new OutPt[size]; - for (size_t i = 0; i < size; ++i) - { - outPts[i].Pt = in_poly[i]; - outPts[i].Next = &outPts[(i + 1) % size]; - outPts[i].Next->Prev = &outPts[i]; - outPts[i].Idx = 0; - } - - double distSqrd = distance * distance; - OutPt* op = &outPts[0]; - while (op->Idx == 0 && op->Next != op->Prev) - { - if (PointsAreClose(op->Pt, op->Prev->Pt, distSqrd)) - { - op = ExcludeOp(op); - size--; - } - else if (PointsAreClose(op->Prev->Pt, op->Next->Pt, distSqrd)) - { - ExcludeOp(op->Next); - op = ExcludeOp(op); - size -= 2; - } - else if (SlopesNearCollinear(op->Prev->Pt, op->Pt, op->Next->Pt, distSqrd)) - { - op = ExcludeOp(op); - size--; - } - else - { - op->Idx = 1; - op = op->Next; - } - } - - if (size < 3) size = 0; - out_poly.resize(size); - for (size_t i = 0; i < size; ++i) - { - out_poly[i] = op->Pt; - op = op->Next; - } - delete [] outPts; -} -//------------------------------------------------------------------------------ - -void CleanPolygon(Path& poly, double distance) -{ - CleanPolygon(poly, poly, distance); -} -//------------------------------------------------------------------------------ - -void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance) -{ - out_polys.resize(in_polys.size()); - for (Paths::size_type i = 0; i < in_polys.size(); ++i) - CleanPolygon(in_polys[i], out_polys[i], distance); -} -//------------------------------------------------------------------------------ - -void CleanPolygons(Paths& polys, double distance) -{ - CleanPolygons(polys, polys, distance); -} -//------------------------------------------------------------------------------ - -void Minkowski(const Path& poly, const Path& path, - Paths& solution, bool isSum, bool isClosed) -{ - int delta = (isClosed ? 1 : 0); - size_t polyCnt = poly.size(); - size_t pathCnt = path.size(); - Paths pp; - pp.reserve(pathCnt); - if (isSum) - for (size_t i = 0; i < pathCnt; ++i) - { - Path p; - p.reserve(polyCnt); - for (size_t j = 0; j < poly.size(); ++j) - p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y)); - pp.push_back(p); - } - else - for (size_t i = 0; i < pathCnt; ++i) - { - Path p; - p.reserve(polyCnt); - for (size_t j = 0; j < poly.size(); ++j) - p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y)); - pp.push_back(p); - } - - solution.clear(); - solution.reserve((pathCnt + delta) * (polyCnt + 1)); - for (size_t i = 0; i < pathCnt - 1 + delta; ++i) - for (size_t j = 0; j < polyCnt; ++j) - { - Path quad; - quad.reserve(4); - quad.push_back(pp[i % pathCnt][j % polyCnt]); - quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]); - quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]); - quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]); - if (!Orientation(quad)) ReversePath(quad); - solution.push_back(quad); - } -} -//------------------------------------------------------------------------------ - -void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed) -{ - Minkowski(pattern, path, solution, true, pathIsClosed); - Clipper c; - c.AddPaths(solution, ptSubject, true); - c.Execute(ctUnion, solution, pftNonZero, pftNonZero); -} -//------------------------------------------------------------------------------ - -void TranslatePath(const Path& input, Path& output, const IntPoint delta) -{ - //precondition: input != output - output.resize(input.size()); - for (size_t i = 0; i < input.size(); ++i) - output[i] = IntPoint(input[i].X + delta.X, input[i].Y + delta.Y); -} -//------------------------------------------------------------------------------ - -void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed) -{ - Clipper c; - for (size_t i = 0; i < paths.size(); ++i) - { - Paths tmp; - Minkowski(pattern, paths[i], tmp, true, pathIsClosed); - c.AddPaths(tmp, ptSubject, true); - if (pathIsClosed) - { - Path tmp2; - TranslatePath(paths[i], tmp2, pattern[0]); - c.AddPath(tmp2, ptClip, true); - } - } - c.Execute(ctUnion, solution, pftNonZero, pftNonZero); -} -//------------------------------------------------------------------------------ - -void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution) -{ - Minkowski(poly1, poly2, solution, false, true); - Clipper c; - c.AddPaths(solution, ptSubject, true); - c.Execute(ctUnion, solution, pftNonZero, pftNonZero); -} -//------------------------------------------------------------------------------ - -enum NodeType {ntAny, ntOpen, ntClosed}; - -void AddPolyNodeToPaths(const PolyNode& polynode, NodeType nodetype, Paths& paths) -{ - bool match = true; - if (nodetype == ntClosed) match = !polynode.IsOpen(); - else if (nodetype == ntOpen) return; - - if (!polynode.Contour.empty() && match) - paths.push_back(polynode.Contour); - for (int i = 0; i < polynode.ChildCount(); ++i) - AddPolyNodeToPaths(*polynode.Childs[i], nodetype, paths); -} -//------------------------------------------------------------------------------ - -void PolyTreeToPaths(const PolyTree& polytree, Paths& paths) -{ - paths.resize(0); - paths.reserve(polytree.Total()); - AddPolyNodeToPaths(polytree, ntAny, paths); -} -//------------------------------------------------------------------------------ - -void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths) -{ - paths.resize(0); - paths.reserve(polytree.Total()); - AddPolyNodeToPaths(polytree, ntClosed, paths); -} -//------------------------------------------------------------------------------ - -void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths) -{ - paths.resize(0); - paths.reserve(polytree.Total()); - //Open paths are top level only, so ... - for (int i = 0; i < polytree.ChildCount(); ++i) - if (polytree.Childs[i]->IsOpen()) - paths.push_back(polytree.Childs[i]->Contour); -} -//------------------------------------------------------------------------------ - -std::ostream& operator <<(std::ostream &s, const IntPoint &p) -{ - s << "(" << p.X << "," << p.Y << ")"; - return s; -} -//------------------------------------------------------------------------------ - -std::ostream& operator <<(std::ostream &s, const Path &p) -{ - if (p.empty()) return s; - Path::size_type last = p.size() -1; - for (Path::size_type i = 0; i < last; i++) - s << "(" << p[i].X << "," << p[i].Y << "), "; - s << "(" << p[last].X << "," << p[last].Y << ")\n"; - return s; -} -//------------------------------------------------------------------------------ - -std::ostream& operator <<(std::ostream &s, const Paths &p) -{ - for (Paths::size_type i = 0; i < p.size(); i++) - s << p[i]; - s << "\n"; - return s; -} -//------------------------------------------------------------------------------ - -} //ClipperLib namespace diff --git a/deploy/android_demo/app/src/main/cpp/ocr_clipper.hpp b/deploy/android_demo/app/src/main/cpp/ocr_clipper.hpp deleted file mode 100644 index 7129b535..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_clipper.hpp +++ /dev/null @@ -1,547 +0,0 @@ -/******************************************************************************* -* * -* Author : Angus Johnson * -* Version : 6.4.2 * -* Date : 27 February 2017 * -* Website : http://www.angusj.com * -* Copyright : Angus Johnson 2010-2017 * -* * -* License: * -* Use, modification & distribution is subject to Boost Software License Ver 1. * -* http://www.boost.org/LICENSE_1_0.txt * -* * -* Attributions: * -* The code in this library is an extension of Bala Vatti's clipping algorithm: * -* "A generic solution to polygon clipping" * -* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * -* http://portal.acm.org/citation.cfm?id=129906 * -* * -* Computer graphics and geometric modeling: implementation and algorithms * -* By Max K. Agoston * -* Springer; 1 edition (January 4, 2005) * -* http://books.google.com/books?q=vatti+clipping+agoston * -* * -* See also: * -* "Polygon Offsetting by Computing Winding Numbers" * -* Paper no. DETC2005-85513 pp. 565-575 * -* ASME 2005 International Design Engineering Technical Conferences * -* and Computers and Information in Engineering Conference (IDETC/CIE2005) * -* September 24-28, 2005 , Long Beach, California, USA * -* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * -* * -*******************************************************************************/ - -#ifndef clipper_hpp -#define clipper_hpp - -#define CLIPPER_VERSION "6.4.2" - -//use_int32: When enabled 32bit ints are used instead of 64bit ints. This -//improve performance but coordinate values are limited to the range +/- 46340 -//#define use_int32 - -//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance. -//#define use_xyz - -//use_lines: Enables line clipping. Adds a very minor cost to performance. -#define use_lines - -//use_deprecated: Enables temporary support for the obsolete functions -//#define use_deprecated - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ClipperLib { - -enum ClipType { - ctIntersection, ctUnion, ctDifference, ctXor -}; -enum PolyType { - ptSubject, ptClip -}; -//By far the most widely used winding rules for polygon filling are -//EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) -//Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) -//see http://glprogramming.com/red/chapter11.html -enum PolyFillType { - pftEvenOdd, pftNonZero, pftPositive, pftNegative -}; - -#ifdef use_int32 -typedef int cInt; -static cInt const loRange = 0x7FFF; -static cInt const hiRange = 0x7FFF; -#else -typedef signed long long cInt; -static cInt const loRange = 0x3FFFFFFF; -static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL; -typedef signed long long long64; //used by Int128 class -typedef unsigned long long ulong64; - -#endif - -struct IntPoint { - cInt X; - cInt Y; -#ifdef use_xyz - cInt Z; - IntPoint(cInt x = 0, cInt y = 0, cInt z = 0): X(x), Y(y), Z(z) {}; -#else - - IntPoint(cInt x = 0, cInt y = 0) : X(x), Y(y) {}; -#endif - - friend inline bool operator==(const IntPoint &a, const IntPoint &b) { - return a.X == b.X && a.Y == b.Y; - } - - friend inline bool operator!=(const IntPoint &a, const IntPoint &b) { - return a.X != b.X || a.Y != b.Y; - } -}; -//------------------------------------------------------------------------------ - -typedef std::vector Path; -typedef std::vector Paths; - -inline Path &operator<<(Path &poly, const IntPoint &p) { - poly.push_back(p); - return poly; -} - -inline Paths &operator<<(Paths &polys, const Path &p) { - polys.push_back(p); - return polys; -} - -std::ostream &operator<<(std::ostream &s, const IntPoint &p); - -std::ostream &operator<<(std::ostream &s, const Path &p); - -std::ostream &operator<<(std::ostream &s, const Paths &p); - -struct DoublePoint { - double X; - double Y; - - DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {} - - DoublePoint(IntPoint ip) : X((double) ip.X), Y((double) ip.Y) {} -}; -//------------------------------------------------------------------------------ - -#ifdef use_xyz -typedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt); -#endif - -enum InitOptions { - ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4 -}; -enum JoinType { - jtSquare, jtRound, jtMiter -}; -enum EndType { - etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound -}; - -class PolyNode; - -typedef std::vector PolyNodes; - -class PolyNode { -public: - PolyNode(); - - virtual ~PolyNode() {}; - Path Contour; - PolyNodes Childs; - PolyNode *Parent; - - PolyNode *GetNext() const; - - bool IsHole() const; - - bool IsOpen() const; - - int ChildCount() const; - -private: - //PolyNode& operator =(PolyNode& other); - unsigned Index; //node index in Parent.Childs - bool m_IsOpen; - JoinType m_jointype; - EndType m_endtype; - - PolyNode *GetNextSiblingUp() const; - - void AddChild(PolyNode &child); - - friend class Clipper; //to access Index - friend class ClipperOffset; -}; - -class PolyTree : public PolyNode { -public: - ~PolyTree() { Clear(); }; - - PolyNode *GetFirst() const; - - void Clear(); - - int Total() const; - -private: - //PolyTree& operator =(PolyTree& other); - PolyNodes AllNodes; - - friend class Clipper; //to access AllNodes -}; - -bool Orientation(const Path &poly); - -double Area(const Path &poly); - -int PointInPolygon(const IntPoint &pt, const Path &path); - -void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd); - -void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd); - -void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd); - -void CleanPolygon(const Path &in_poly, Path &out_poly, double distance = 1.415); - -void CleanPolygon(Path &poly, double distance = 1.415); - -void CleanPolygons(const Paths &in_polys, Paths &out_polys, double distance = 1.415); - -void CleanPolygons(Paths &polys, double distance = 1.415); - -void MinkowskiSum(const Path &pattern, const Path &path, Paths &solution, bool pathIsClosed); - -void MinkowskiSum(const Path &pattern, const Paths &paths, Paths &solution, bool pathIsClosed); - -void MinkowskiDiff(const Path &poly1, const Path &poly2, Paths &solution); - -void PolyTreeToPaths(const PolyTree &polytree, Paths &paths); - -void ClosedPathsFromPolyTree(const PolyTree &polytree, Paths &paths); - -void OpenPathsFromPolyTree(PolyTree &polytree, Paths &paths); - -void ReversePath(Path &p); - -void ReversePaths(Paths &p); - -struct IntRect { - cInt left; - cInt top; - cInt right; - cInt bottom; -}; - -//enums that are used internally ... -enum EdgeSide { - esLeft = 1, esRight = 2 -}; - -//forward declarations (for stuff used internally) ... -struct TEdge; -struct IntersectNode; -struct LocalMinimum; -struct OutPt; -struct OutRec; -struct Join; - -typedef std::vector PolyOutList; -typedef std::vector EdgeList; -typedef std::vector JoinList; -typedef std::vector IntersectList; - -//------------------------------------------------------------------------------ - -//ClipperBase is the ancestor to the Clipper class. It should not be -//instantiated directly. This class simply abstracts the conversion of sets of -//polygon coordinates into edge objects that are stored in a LocalMinima list. -class ClipperBase { -public: - ClipperBase(); - - virtual ~ClipperBase(); - - virtual bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed); - - bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed); - - virtual void Clear(); - - IntRect GetBounds(); - - bool PreserveCollinear() { return m_PreserveCollinear; }; - - void PreserveCollinear(bool value) { m_PreserveCollinear = value; }; -protected: - void DisposeLocalMinimaList(); - - TEdge *AddBoundsToLML(TEdge *e, bool IsClosed); - - virtual void Reset(); - - TEdge *ProcessBound(TEdge *E, bool IsClockwise); - - void InsertScanbeam(const cInt Y); - - bool PopScanbeam(cInt &Y); - - bool LocalMinimaPending(); - - bool PopLocalMinima(cInt Y, const LocalMinimum *&locMin); - - OutRec *CreateOutRec(); - - void DisposeAllOutRecs(); - - void DisposeOutRec(PolyOutList::size_type index); - - void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2); - - void DeleteFromAEL(TEdge *e); - - void UpdateEdgeIntoAEL(TEdge *&e); - - typedef std::vector MinimaList; - MinimaList::iterator m_CurrentLM; - MinimaList m_MinimaList; - - bool m_UseFullRange; - EdgeList m_edges; - bool m_PreserveCollinear; - bool m_HasOpenPaths; - PolyOutList m_PolyOuts; - TEdge *m_ActiveEdges; - - typedef std::priority_queue ScanbeamList; - ScanbeamList m_Scanbeam; -}; -//------------------------------------------------------------------------------ - -class Clipper : public virtual ClipperBase { -public: - Clipper(int initOptions = 0); - - bool Execute(ClipType clipType, - Paths &solution, - PolyFillType fillType = pftEvenOdd); - - bool Execute(ClipType clipType, - Paths &solution, - PolyFillType subjFillType, - PolyFillType clipFillType); - - bool Execute(ClipType clipType, - PolyTree &polytree, - PolyFillType fillType = pftEvenOdd); - - bool Execute(ClipType clipType, - PolyTree &polytree, - PolyFillType subjFillType, - PolyFillType clipFillType); - - bool ReverseSolution() { return m_ReverseOutput; }; - - void ReverseSolution(bool value) { m_ReverseOutput = value; }; - - bool StrictlySimple() { return m_StrictSimple; }; - - void StrictlySimple(bool value) { m_StrictSimple = value; }; - //set the callback function for z value filling on intersections (otherwise Z is 0) -#ifdef use_xyz - void ZFillFunction(ZFillCallback zFillFunc); -#endif -protected: - virtual bool ExecuteInternal(); - -private: - JoinList m_Joins; - JoinList m_GhostJoins; - IntersectList m_IntersectList; - ClipType m_ClipType; - typedef std::list MaximaList; - MaximaList m_Maxima; - TEdge *m_SortedEdges; - bool m_ExecuteLocked; - PolyFillType m_ClipFillType; - PolyFillType m_SubjFillType; - bool m_ReverseOutput; - bool m_UsingPolyTree; - bool m_StrictSimple; -#ifdef use_xyz - ZFillCallback m_ZFill; //custom callback -#endif - - void SetWindingCount(TEdge &edge); - - bool IsEvenOddFillType(const TEdge &edge) const; - - bool IsEvenOddAltFillType(const TEdge &edge) const; - - void InsertLocalMinimaIntoAEL(const cInt botY); - - void InsertEdgeIntoAEL(TEdge *edge, TEdge *startEdge); - - void AddEdgeToSEL(TEdge *edge); - - bool PopEdgeFromSEL(TEdge *&edge); - - void CopyAELToSEL(); - - void DeleteFromSEL(TEdge *e); - - void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2); - - bool IsContributing(const TEdge &edge) const; - - bool IsTopHorz(const cInt XPos); - - void DoMaxima(TEdge *e); - - void ProcessHorizontals(); - - void ProcessHorizontal(TEdge *horzEdge); - - void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); - - OutPt *AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); - - OutRec *GetOutRec(int idx); - - void AppendPolygon(TEdge *e1, TEdge *e2); - - void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt); - - OutPt *AddOutPt(TEdge *e, const IntPoint &pt); - - OutPt *GetLastOutPt(TEdge *e); - - bool ProcessIntersections(const cInt topY); - - void BuildIntersectList(const cInt topY); - - void ProcessIntersectList(); - - void ProcessEdgesAtTopOfScanbeam(const cInt topY); - - void BuildResult(Paths &polys); - - void BuildResult2(PolyTree &polytree); - - void SetHoleState(TEdge *e, OutRec *outrec); - - void DisposeIntersectNodes(); - - bool FixupIntersectionOrder(); - - void FixupOutPolygon(OutRec &outrec); - - void FixupOutPolyline(OutRec &outrec); - - bool IsHole(TEdge *e); - - bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl); - - void FixHoleLinkage(OutRec &outrec); - - void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt); - - void ClearJoins(); - - void ClearGhostJoins(); - - void AddGhostJoin(OutPt *op, const IntPoint offPt); - - bool JoinPoints(Join *j, OutRec *outRec1, OutRec *outRec2); - - void JoinCommonEdges(); - - void DoSimplePolygons(); - - void FixupFirstLefts1(OutRec *OldOutRec, OutRec *NewOutRec); - - void FixupFirstLefts2(OutRec *InnerOutRec, OutRec *OuterOutRec); - - void FixupFirstLefts3(OutRec *OldOutRec, OutRec *NewOutRec); - -#ifdef use_xyz - void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2); -#endif -}; -//------------------------------------------------------------------------------ - -class ClipperOffset { -public: - ClipperOffset(double miterLimit = 2.0, double roundPrecision = 0.25); - - ~ClipperOffset(); - - void AddPath(const Path &path, JoinType joinType, EndType endType); - - void AddPaths(const Paths &paths, JoinType joinType, EndType endType); - - void Execute(Paths &solution, double delta); - - void Execute(PolyTree &solution, double delta); - - void Clear(); - - double MiterLimit; - double ArcTolerance; -private: - Paths m_destPolys; - Path m_srcPoly; - Path m_destPoly; - std::vector m_normals; - double m_delta, m_sinA, m_sin, m_cos; - double m_miterLim, m_StepsPerRad; - IntPoint m_lowest; - PolyNode m_polyNodes; - - void FixOrientations(); - - void DoOffset(double delta); - - void OffsetPoint(int j, int &k, JoinType jointype); - - void DoSquare(int j, int k); - - void DoMiter(int j, int k, double r); - - void DoRound(int j, int k); -}; -//------------------------------------------------------------------------------ - -class clipperException : public std::exception { -public: - clipperException(const char *description) : m_descr(description) {} - - virtual ~clipperException() throw() {} - - virtual const char *what() const throw() { return m_descr.c_str(); } - -private: - std::string m_descr; -}; -//------------------------------------------------------------------------------ - -} //ClipperLib namespace - -#endif //clipper_hpp - - diff --git a/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.cpp b/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.cpp deleted file mode 100644 index 96f37b9b..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "ocr_crnn_process.h" -#include -#include -#include -#include -#include -#include - -const std::string CHARACTER_TYPE = "ch"; -const int MAX_DICT_LENGTH = 6624; -const std::vector REC_IMAGE_SHAPE = {3, 32, 320}; - -static cv::Mat crnn_resize_norm_img(cv::Mat img, float wh_ratio) { - int imgC = REC_IMAGE_SHAPE[0]; - int imgW = REC_IMAGE_SHAPE[2]; - int imgH = REC_IMAGE_SHAPE[1]; - - if (CHARACTER_TYPE == "ch") - imgW = int(32 * wh_ratio); - - float ratio = float(img.cols) / float(img.rows); - int resize_w = 0; - if (ceilf(imgH * ratio) > imgW) - resize_w = imgW; - else - resize_w = int(ceilf(imgH * ratio)); - cv::Mat resize_img; - cv::resize(img, resize_img, cv::Size(resize_w, imgH), 0.f, 0.f, cv::INTER_CUBIC); - - resize_img.convertTo(resize_img, CV_32FC3, 1 / 255.f); - - for (int h = 0; h < resize_img.rows; h++) { - for (int w = 0; w < resize_img.cols; w++) { - resize_img.at(h, w)[0] = (resize_img.at(h, w)[0] - 0.5) * 2; - resize_img.at(h, w)[1] = (resize_img.at(h, w)[1] - 0.5) * 2; - resize_img.at(h, w)[2] = (resize_img.at(h, w)[2] - 0.5) * 2; - } - } - - cv::Mat dist; - cv::copyMakeBorder(resize_img, dist, 0, 0, 0, int(imgW - resize_w), cv::BORDER_CONSTANT, - {0, 0, 0}); - - return dist; - -} - -cv::Mat crnn_resize_img(const cv::Mat &img, float wh_ratio) { - int imgC = REC_IMAGE_SHAPE[0]; - int imgW = REC_IMAGE_SHAPE[2]; - int imgH = REC_IMAGE_SHAPE[1]; - - if (CHARACTER_TYPE == "ch") { - imgW = int(32 * wh_ratio); - } - - float ratio = float(img.cols) / float(img.rows); - int resize_w = 0; - if (ceilf(imgH * ratio) > imgW) - resize_w = imgW; - else - resize_w = int(ceilf(imgH * ratio)); - cv::Mat resize_img; - cv::resize(img, resize_img, cv::Size(resize_w, imgH)); - return resize_img; -} - - -cv::Mat get_rotate_crop_image(const cv::Mat &srcimage, const std::vector> &box) { - - std::vector> points = box; - - int x_collect[4] = {box[0][0], box[1][0], box[2][0], box[3][0]}; - int y_collect[4] = {box[0][1], box[1][1], box[2][1], box[3][1]}; - int left = int(*std::min_element(x_collect, x_collect + 4)); - int right = int(*std::max_element(x_collect, x_collect + 4)); - int top = int(*std::min_element(y_collect, y_collect + 4)); - int bottom = int(*std::max_element(y_collect, y_collect + 4)); - - cv::Mat img_crop; - srcimage(cv::Rect(left, top, right - left, bottom - top)).copyTo(img_crop); - - for (int i = 0; i < points.size(); i++) { - points[i][0] -= left; - points[i][1] -= top; - } - - int img_crop_width = int(sqrt(pow(points[0][0] - points[1][0], 2) + - pow(points[0][1] - points[1][1], 2))); - int img_crop_height = int(sqrt(pow(points[0][0] - points[3][0], 2) + - pow(points[0][1] - points[3][1], 2))); - - cv::Point2f pts_std[4]; - pts_std[0] = cv::Point2f(0., 0.); - pts_std[1] = cv::Point2f(img_crop_width, 0.); - pts_std[2] = cv::Point2f(img_crop_width, img_crop_height); - pts_std[3] = cv::Point2f(0.f, img_crop_height); - - cv::Point2f pointsf[4]; - pointsf[0] = cv::Point2f(points[0][0], points[0][1]); - pointsf[1] = cv::Point2f(points[1][0], points[1][1]); - pointsf[2] = cv::Point2f(points[2][0], points[2][1]); - pointsf[3] = cv::Point2f(points[3][0], points[3][1]); - - cv::Mat M = cv::getPerspectiveTransform(pointsf, pts_std); - - cv::Mat dst_img; - cv::warpPerspective(img_crop, dst_img, M, cv::Size(img_crop_width, img_crop_height), - cv::BORDER_REPLICATE); - - if (float(dst_img.rows) >= float(dst_img.cols) * 1.5) { - /* - cv::Mat srcCopy = cv::Mat(dst_img.rows, dst_img.cols, dst_img.depth()); - cv::transpose(dst_img, srcCopy); - cv::flip(srcCopy, srcCopy, 0); - return srcCopy; - */ - cv::transpose(dst_img, dst_img); - cv::flip(dst_img, dst_img, 0); - return dst_img; - } else { - return dst_img; - } - -} - diff --git a/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.h b/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.h deleted file mode 100644 index 99d0124a..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_crnn_process.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Created by fujiayi on 2020/7/3. -// -#pragma once - -#include -#include -#include "common.h" - -extern const std::vector REC_IMAGE_SHAPE; - -cv::Mat get_rotate_crop_image(const cv::Mat &srcimage, const std::vector> &box); - -cv::Mat crnn_resize_img(const cv::Mat &img, float wh_ratio); - -template -inline size_t argmax(ForwardIterator first, ForwardIterator last) { - return std::distance(first, std::max_element(first, last)); -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.cpp b/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.cpp deleted file mode 100644 index 7c3c60db..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.cpp +++ /dev/null @@ -1,336 +0,0 @@ -// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include -#include -#include "opencv2/core.hpp" -#include "opencv2/imgcodecs.hpp" -#include "opencv2/imgproc.hpp" -#include "ocr_clipper.hpp" - -static void getcontourarea(float **box, float unclip_ratio, float &distance) { - int pts_num = 4; - float area = 0.0f; - float dist = 0.0f; - for (int i = 0; i < pts_num; i++) { - area += box[i][0] * box[(i + 1) % pts_num][1] - box[i][1] * box[(i + 1) % pts_num][0]; - dist += sqrtf( - (box[i][0] - box[(i + 1) % pts_num][0]) * (box[i][0] - box[(i + 1) % pts_num][0]) + - (box[i][1] - box[(i + 1) % pts_num][1]) * (box[i][1] - box[(i + 1) % pts_num][1])); - } - area = fabs(float(area / 2.0)); - - distance = area * unclip_ratio / dist; - -} - -static cv::RotatedRect unclip(float **box) { - float unclip_ratio = 2.0; - float distance = 1.0; - - getcontourarea(box, unclip_ratio, distance); - - ClipperLib::ClipperOffset offset; - ClipperLib::Path p; - p << ClipperLib::IntPoint(int(box[0][0]), int(box[0][1])) - << ClipperLib::IntPoint(int(box[1][0]), int(box[1][1])) << - ClipperLib::IntPoint(int(box[2][0]), int(box[2][1])) - << ClipperLib::IntPoint(int(box[3][0]), int(box[3][1])); - offset.AddPath(p, ClipperLib::jtRound, ClipperLib::etClosedPolygon); - - ClipperLib::Paths soln; - offset.Execute(soln, distance); - std::vector points; - - for (int j = 0; j < soln.size(); j++) { - for (int i = 0; i < soln[soln.size() - 1].size(); i++) { - points.emplace_back(soln[j][i].X, soln[j][i].Y); - } - } - cv::RotatedRect res = cv::minAreaRect(points); - - return res; -} - -static float **Mat2Vec(cv::Mat mat) { - auto **array = new float *[mat.rows]; - for (int i = 0; i < mat.rows; ++i){ - array[i] = new float[mat.cols]; - } - for (int i = 0; i < mat.rows; ++i) { - for (int j = 0; j < mat.cols; ++j) { - array[i][j] = mat.at(i, j); - } - } - - return array; -} - -static void quickSort(float **s, int l, int r) { - if (l < r) { - int i = l, j = r; - float x = s[l][0]; - float *xp = s[l]; - while (i < j) { - while (i < j && s[j][0] >= x){ - j--; - } - if (i < j){ - std::swap(s[i++], s[j]); - } - while (i < j && s[i][0] < x){ - i++; - } - if (i < j){ - std::swap(s[j--], s[i]); - } - } - s[i] = xp; - quickSort(s, l, i - 1); - quickSort(s, i + 1, r); - } -} - -static void quickSort_vector(std::vector> &box, int l, int r, int axis) { - if (l < r) { - int i = l, j = r; - int x = box[l][axis]; - std::vector xp(box[l]); - while (i < j) { - while (i < j && box[j][axis] >= x){ - j--; - } - if (i < j){ - std::swap(box[i++], box[j]); - } - while (i < j && box[i][axis] < x){ - i++; - } - if (i < j){ - std::swap(box[j--], box[i]); - } - } - box[i] = xp; - quickSort_vector(box, l, i - 1, axis); - quickSort_vector(box, i + 1, r, axis); - } -} - -static std::vector> order_points_clockwise(std::vector> pts) { - std::vector> box = pts; - quickSort_vector(box, 0, int(box.size() - 1), 0); - std::vector> leftmost = {box[0], box[1]}; - std::vector> rightmost = {box[2], box[3]}; - - if (leftmost[0][1] > leftmost[1][1]){ - std::swap(leftmost[0], leftmost[1]); - } - - if (rightmost[0][1] > rightmost[1][1]){ - std::swap(rightmost[0], rightmost[1]); - } - - std::vector> rect = {leftmost[0], rightmost[0], rightmost[1], leftmost[1]}; - return rect; -} - -static float **get_mini_boxes(cv::RotatedRect box, float &ssid) { - ssid = box.size.width >= box.size.height ? box.size.height : box.size.width; - - cv::Mat points; - cv::boxPoints(box, points); - // sorted box points - auto array = Mat2Vec(points); - quickSort(array, 0, 3); - - float *idx1 = array[0], *idx2 = array[1], *idx3 = array[2], *idx4 = array[3]; - if (array[3][1] <= array[2][1]) { - idx2 = array[3]; - idx3 = array[2]; - } else { - idx2 = array[2]; - idx3 = array[3]; - } - if (array[1][1] <= array[0][1]) { - idx1 = array[1]; - idx4 = array[0]; - } else { - idx1 = array[0]; - idx4 = array[1]; - } - - array[0] = idx1; - array[1] = idx2; - array[2] = idx3; - array[3] = idx4; - - return array; -} - -template T clamp(T x, T min, T max) { - if (x > max){ - return max; - } - if (x < min){ - return min; - } - return x; -} - -static float clampf(float x, float min, float max) { - if (x > max) - return max; - if (x < min) - return min; - return x; -} - - -float box_score_fast(float **box_array, cv::Mat pred) { - auto array = box_array; - int width = pred.cols; - int height = pred.rows; - - float box_x[4] = {array[0][0], array[1][0], array[2][0], array[3][0]}; - float box_y[4] = {array[0][1], array[1][1], array[2][1], array[3][1]}; - - int xmin = clamp(int(std::floorf(*(std::min_element(box_x, box_x + 4)))), 0, width - 1); - int xmax = clamp(int(std::ceilf(*(std::max_element(box_x, box_x + 4)))), 0, width - 1); - int ymin = clamp(int(std::floorf(*(std::min_element(box_y, box_y + 4)))), 0, height - 1); - int ymax = clamp(int(std::ceilf(*(std::max_element(box_y, box_y + 4)))), 0, height - 1); - - cv::Mat mask; - mask = cv::Mat::zeros(ymax - ymin + 1, xmax - xmin + 1, CV_8UC1); - - cv::Point root_point[4]; - root_point[0] = cv::Point(int(array[0][0]) - xmin, int(array[0][1]) - ymin); - root_point[1] = cv::Point(int(array[1][0]) - xmin, int(array[1][1]) - ymin); - root_point[2] = cv::Point(int(array[2][0]) - xmin, int(array[2][1]) - ymin); - root_point[3] = cv::Point(int(array[3][0]) - xmin, int(array[3][1]) - ymin); - const cv::Point *ppt[1] = {root_point}; - int npt[] = {4}; - cv::fillPoly(mask, ppt, npt, 1, cv::Scalar(1)); - - cv::Mat croppedImg; - pred(cv::Rect(xmin, ymin, xmax - xmin + 1, ymax - ymin + 1)).copyTo(croppedImg); - - auto score = cv::mean(croppedImg, mask)[0]; - return score; -} - - -std::vector>> -boxes_from_bitmap(const cv::Mat& pred, const cv::Mat& bitmap) { - const int min_size = 3; - const int max_candidates = 1000; - const float box_thresh = 0.5; - - int width = bitmap.cols; - int height = bitmap.rows; - - std::vector> contours; - std::vector hierarchy; - - cv::findContours(bitmap, contours, hierarchy, cv::RETR_LIST, cv::CHAIN_APPROX_SIMPLE); - - int num_contours = contours.size() >= max_candidates ? max_candidates : contours.size(); - - std::vector>> boxes; - - for (int _i = 0; _i < num_contours; _i++) { - float ssid; - cv::RotatedRect box = cv::minAreaRect(contours[_i]); - auto array = get_mini_boxes(box, ssid); - - auto box_for_unclip = array; - //end get_mini_box - - if (ssid < min_size) { - continue; - } - - float score; - score = box_score_fast(array, pred); - //end box_score_fast - if (score < box_thresh){ - continue; - } - - - // start for unclip - cv::RotatedRect points = unclip(box_for_unclip); - // end for unclip - - cv::RotatedRect clipbox = points; - auto cliparray = get_mini_boxes(clipbox, ssid); - - if (ssid < min_size + 2) continue; - - int dest_width = pred.cols; - int dest_height = pred.rows; - std::vector> intcliparray; - - for (int num_pt = 0; num_pt < 4; num_pt++) { - std::vector a{ - int(clampf(roundf(cliparray[num_pt][0] / float(width) * float(dest_width)), 0, - float(dest_width))), - int(clampf(roundf(cliparray[num_pt][1] / float(height) * float(dest_height)), 0, - float(dest_height)))}; - intcliparray.emplace_back(std::move(a)); - } - boxes.emplace_back(std::move(intcliparray)); - - }//end for - return boxes; -} - -int _max(int a, int b) { - return a >= b ? a : b; -} - -int _min(int a, int b) { - return a >= b ? b : a; -} - -std::vector>> -filter_tag_det_res(const std::vector>>& o_boxes, - float ratio_h, float ratio_w,const cv::Mat& srcimg) { - int oriimg_h = srcimg.rows; - int oriimg_w = srcimg.cols; - std::vector>> boxes{o_boxes}; - std::vector>> root_points; - for (int n = 0; n < boxes.size(); n++) { - boxes[n] = order_points_clockwise(boxes[n]); - for (int m = 0; m < boxes[0].size(); m++) { - boxes[n][m][0] /= ratio_w; - boxes[n][m][1] /= ratio_h; - - boxes[n][m][0] = int(_min(_max(boxes[n][m][0], 0), oriimg_w - 1)); - boxes[n][m][1] = int(_min(_max(boxes[n][m][1], 0), oriimg_h - 1)); - } - } - - for (int n = 0; n < boxes.size(); n++) { - int rect_width, rect_height; - rect_width = int(sqrt( - pow(boxes[n][0][0] - boxes[n][1][0], 2) + pow(boxes[n][0][1] - boxes[n][1][1], 2))); - rect_height = int(sqrt( - pow(boxes[n][0][0] - boxes[n][3][0], 2) + pow(boxes[n][0][1] - boxes[n][3][1], 2))); - if (rect_width <= 10 || rect_height <= 10) - continue; - root_points.push_back(boxes[n]); - } - return root_points; -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.h b/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.h deleted file mode 100644 index 86117512..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_db_post_process.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// Created by fujiayi on 2020/7/2. -// -#pragma once -#include -#include - -std::vector>> -boxes_from_bitmap(const cv::Mat &pred, const cv::Mat &bitmap); - -std::vector>> -filter_tag_det_res( - const std::vector>> &o_boxes, - float ratio_h, - float ratio_w, - const cv::Mat &srcimg -); \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.cpp b/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.cpp deleted file mode 100644 index 3d014771..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.cpp +++ /dev/null @@ -1,186 +0,0 @@ -// -// Created by fujiayi on 2020/7/1. -// - -#include "ocr_ppredictor.h" -#include "preprocess.h" -#include "common.h" -#include "ocr_db_post_process.h" -#include "ocr_crnn_process.h" - -namespace ppredictor { - -OCR_PPredictor::OCR_PPredictor(const OCR_Config &config) : _config(config) { - -} - -int -OCR_PPredictor::init(const std::string &det_model_content, const std::string &rec_model_content) { - _det_predictor = std::unique_ptr( - new PPredictor{_config.thread_num, NET_OCR, _config.mode}); - _det_predictor->init_nb(det_model_content); - - _rec_predictor = std::unique_ptr( - new PPredictor{_config.thread_num, NET_OCR_INTERNAL, _config.mode}); - _rec_predictor->init_nb(rec_model_content); - return RETURN_OK; -} - -int OCR_PPredictor::init_from_file(const std::string &det_model_path, const std::string &rec_model_path){ - _det_predictor = std::unique_ptr( - new PPredictor{_config.thread_num, NET_OCR, _config.mode}); - _det_predictor->init_from_file(det_model_path); - - _rec_predictor = std::unique_ptr( - new PPredictor{_config.thread_num, NET_OCR_INTERNAL, _config.mode}); - _rec_predictor->init_from_file(rec_model_path); - return RETURN_OK; -} -/** - * for debug use, show result of First Step - * @param filter_boxes - * @param boxes - * @param srcimg - */ -static void visual_img(const std::vector>> &filter_boxes, - const std::vector>> &boxes, - const cv::Mat &srcimg) { - // visualization - cv::Point rook_points[filter_boxes.size()][4]; - for (int n = 0; n < filter_boxes.size(); n++) { - for (int m = 0; m < filter_boxes[0].size(); m++) { - rook_points[n][m] = cv::Point(int(filter_boxes[n][m][0]), int(filter_boxes[n][m][1])); - } - } - - cv::Mat img_vis; - srcimg.copyTo(img_vis); - for (int n = 0; n < boxes.size(); n++) { - const cv::Point *ppt[1] = {rook_points[n]}; - int npt[] = {4}; - cv::polylines(img_vis, ppt, npt, 1, 1, CV_RGB(0, 255, 0), 2, 8, 0); - } - // 调试用,自行替换需要修改的路径 - cv::imwrite("/sdcard/1/vis.png", img_vis); -} - -std::vector -OCR_PPredictor::infer_ocr(const std::vector &dims, const float *input_data, int input_len, - int net_flag, cv::Mat &origin) { - - PredictorInput input = _det_predictor->get_first_input(); - input.set_dims(dims); - input.set_data(input_data, input_len); - std::vector results = _det_predictor->infer(); - PredictorOutput &res = results.at(0); - std::vector>> filtered_box - = calc_filtered_boxes(res.get_float_data(), res.get_size(), (int) dims[2], (int) dims[3], - origin); - LOGI("Filter_box size %ld", filtered_box.size()); - return infer_rec(filtered_box, origin); -} - -std::vector -OCR_PPredictor::infer_rec(const std::vector>> &boxes, - const cv::Mat &origin_img) { - std::vector mean = {0.5f, 0.5f, 0.5f}; - std::vector scale = {1 / 0.5f, 1 / 0.5f, 1 / 0.5f}; - std::vector dims = {1, 3, 0, 0}; - std::vector ocr_results; - - PredictorInput input = _rec_predictor->get_first_input(); - for (auto bp = boxes.crbegin(); bp != boxes.crend(); ++bp) { - const std::vector> &box = *bp; - cv::Mat crop_img = get_rotate_crop_image(origin_img, box); - float wh_ratio = float(crop_img.cols) / float(crop_img.rows); - cv::Mat input_image = crnn_resize_img(crop_img, wh_ratio); - input_image.convertTo(input_image, CV_32FC3, 1 / 255.0f); - const float *dimg = reinterpret_cast(input_image.data); - int input_size = input_image.rows * input_image.cols; - - dims[2] = input_image.rows; - dims[3] = input_image.cols; - input.set_dims(dims); - - neon_mean_scale(dimg, input.get_mutable_float_data(), input_size, mean, scale); - - std::vector results = _rec_predictor->infer(); - - OCRPredictResult res; - res.word_index = postprocess_rec_word_index(results.at(0)); - if (res.word_index.empty()) { - continue; - } - res.score = postprocess_rec_score(results.at(1)); - res.points = box; - ocr_results.emplace_back(std::move(res)); - } - LOGI("ocr_results finished %lu", ocr_results.size()); - return ocr_results; -} - -std::vector>> -OCR_PPredictor::calc_filtered_boxes(const float *pred, int pred_size, int output_height, - int output_width, const cv::Mat &origin) { - const double threshold = 0.3; - const double maxvalue = 1; - - cv::Mat pred_map = cv::Mat::zeros(output_height, output_width, CV_32F); - memcpy(pred_map.data, pred, pred_size * sizeof(float)); - cv::Mat cbuf_map; - pred_map.convertTo(cbuf_map, CV_8UC1); - - cv::Mat bit_map; - cv::threshold(cbuf_map, bit_map, threshold, maxvalue, cv::THRESH_BINARY); - - std::vector>> boxes = boxes_from_bitmap(pred_map, bit_map); - float ratio_h = output_height * 1.0f / origin.rows; - float ratio_w = output_width * 1.0f / origin.cols; - std::vector>> filter_boxes = filter_tag_det_res(boxes, ratio_h, - ratio_w, origin); - return filter_boxes; -} - -std::vector OCR_PPredictor::postprocess_rec_word_index(const PredictorOutput &res) { - const int *rec_idx = res.get_int_data(); - const std::vector> rec_idx_lod = res.get_lod(); - - std::vector pred_idx; - for (int n = int(rec_idx_lod[0][0]); n < int(rec_idx_lod[0][1] * 2); n += 2) { - pred_idx.emplace_back(rec_idx[n]); - } - return pred_idx; -} - -float OCR_PPredictor::postprocess_rec_score(const PredictorOutput &res) { - const float *predict_batch = res.get_float_data(); - const std::vector predict_shape = res.get_shape(); - const std::vector> predict_lod = res.get_lod(); - int blank = predict_shape[1]; - float score = 0.f; - int count = 0; - for (int n = predict_lod[0][0]; n < predict_lod[0][1] - 1; n++) { - int argmax_idx = argmax(predict_batch + n * predict_shape[1], - predict_batch + (n + 1) * predict_shape[1]); - float max_value = predict_batch[n * predict_shape[1] + argmax_idx]; - if (blank - 1 - argmax_idx > 1e-5) { - score += max_value; - count += 1; - } - - } - if (count == 0) { - LOGE("calc score count 0"); - } else { - score /= count; - } - LOGI("calc score: %f", score); - return score; - -} - - -NET_TYPE OCR_PPredictor::get_net_flag() const { - return NET_OCR; -} -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.h b/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.h deleted file mode 100644 index eb2bc3bc..00000000 --- a/deploy/android_demo/app/src/main/cpp/ocr_ppredictor.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// Created by fujiayi on 2020/7/1. -// - -#pragma once - -#include -#include -#include -#include "ppredictor.h" - -namespace ppredictor { - -/** - * Config - */ -struct OCR_Config { - int thread_num = 4; // Thread num - paddle::lite_api::PowerMode mode = paddle::lite_api::LITE_POWER_HIGH; // PaddleLite Mode -}; - -/** - * PolyGone Result - */ -struct OCRPredictResult { - std::vector word_index; - std::vector> points; - float score; -}; - -/** - * OCR there are 2 models - * 1. First model(det),select polygones to show where are the texts - * 2. crop from the origin images, use these polygones to infer - */ -class OCR_PPredictor : public PPredictor_Interface { -public: - OCR_PPredictor(const OCR_Config &config); - - virtual ~OCR_PPredictor() { - - } - - /** - * 初始化二个模型的Predictor - * @param det_model_content - * @param rec_model_content - * @return - */ - int init(const std::string &det_model_content, const std::string &rec_model_content); - int init_from_file(const std::string &det_model_path, const std::string &rec_model_path); - /** - * Return OCR result - * @param dims - * @param input_data - * @param input_len - * @param net_flag - * @param origin - * @return - */ - virtual std::vector - infer_ocr(const std::vector &dims, const float *input_data, int input_len, - int net_flag, cv::Mat &origin); - - - virtual NET_TYPE get_net_flag() const; - - -private: - - /** - * calcul Polygone from the result image of first model - * @param pred - * @param output_height - * @param output_width - * @param origin - * @return - */ - std::vector>> - calc_filtered_boxes(const float *pred, int pred_size, int output_height, int output_width, - const cv::Mat &origin); - - /** - * infer for second model - * - * @param boxes - * @param origin - * @return - */ - std::vector - infer_rec(const std::vector>> &boxes, const cv::Mat &origin); - - /** - * Postprocess or sencod model to extract text - * @param res - * @return - */ - std::vector postprocess_rec_word_index(const PredictorOutput &res); - - /** - * calculate confidence of second model text result - * @param res - * @return - */ - float postprocess_rec_score(const PredictorOutput &res); - - std::unique_ptr _det_predictor; - std::unique_ptr _rec_predictor; - OCR_Config _config; - -}; -} diff --git a/deploy/android_demo/app/src/main/cpp/ppredictor.cpp b/deploy/android_demo/app/src/main/cpp/ppredictor.cpp deleted file mode 100644 index a9086bc6..00000000 --- a/deploy/android_demo/app/src/main/cpp/ppredictor.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "ppredictor.h" -#include "common.h" - -namespace ppredictor { -PPredictor::PPredictor(int thread_num, int net_flag, paddle::lite_api::PowerMode mode) : - _thread_num(thread_num), _net_flag(net_flag), _mode(mode) { -} - -int PPredictor::init_nb(const std::string &model_content) { - paddle::lite_api::MobileConfig config; - config.set_model_from_buffer(model_content); - return _init(config); -} - -int PPredictor::init_from_file(const std::string &model_content){ - paddle::lite_api::MobileConfig config; - config.set_model_from_file(model_content); - return _init(config); -} - -template -int PPredictor::_init(ConfigT &config) { - config.set_threads(_thread_num); - config.set_power_mode(_mode); - _predictor = paddle::lite_api::CreatePaddlePredictor(config); - LOGI("paddle instance created"); - return RETURN_OK; -} - -PredictorInput PPredictor::get_input(int index) { - PredictorInput input{_predictor->GetInput(index), index, _net_flag}; - _is_input_get = true; - return input; -} - -std::vector PPredictor::get_inputs(int num) { - std::vector results; - for (int i = 0; i < num; i++) { - results.emplace_back(get_input(i)); - } - return results; -} - -PredictorInput PPredictor::get_first_input() { - return get_input(0); -} - -std::vector PPredictor::infer() { - LOGI("infer Run start %d", _net_flag); - std::vector results; - if (!_is_input_get) { - return results; - } - _predictor->Run(); - LOGI("infer Run end"); - - for (int i = 0; i < _predictor->GetOutputNames().size(); i++) { - std::unique_ptr output_tensor = _predictor->GetOutput(i); - LOGI("output tensor[%d] size %ld", i, product(output_tensor->shape())); - PredictorOutput result{std::move(output_tensor), i, _net_flag}; - results.emplace_back(std::move(result)); - } - return results; -} - -NET_TYPE PPredictor::get_net_flag() const { - return (NET_TYPE) _net_flag; -} - -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/ppredictor.h b/deploy/android_demo/app/src/main/cpp/ppredictor.h deleted file mode 100644 index 1391109f..00000000 --- a/deploy/android_demo/app/src/main/cpp/ppredictor.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -#include "paddle_api.h" -#include "predictor_input.h" -#include "predictor_output.h" - -namespace ppredictor { - -/** - * PaddleLite Preditor Common Interface - */ -class PPredictor_Interface { -public: - virtual ~PPredictor_Interface() { - - } - - - virtual NET_TYPE get_net_flag() const = 0; - -}; - -/** - * Common Predictor - */ -class PPredictor : public PPredictor_Interface { -public: - PPredictor(int thread_num, int net_flag = 0, - paddle::lite_api::PowerMode mode = paddle::lite_api::LITE_POWER_HIGH); - - virtual ~PPredictor() { - - } - - /** - * init paddlitelite opt model,nb format ,or use ini_paddle - * @param model_content - * @return 0 - */ - virtual int init_nb(const std::string &model_content); - - virtual int init_from_file(const std::string &model_content); - - std::vector infer(); - - std::shared_ptr get_predictor() { - return _predictor; - } - - virtual std::vector get_inputs(int num); - - virtual PredictorInput get_input(int index); - - virtual PredictorInput get_first_input(); - - virtual NET_TYPE get_net_flag() const; - -protected: - template - int _init(ConfigT &config); - -private: - int _thread_num; - paddle::lite_api::PowerMode _mode; - std::shared_ptr _predictor; - bool _is_input_get = false; - int _net_flag; - -}; - - -} - - diff --git a/deploy/android_demo/app/src/main/cpp/predictor_input.cpp b/deploy/android_demo/app/src/main/cpp/predictor_input.cpp deleted file mode 100644 index 9a1dd223..00000000 --- a/deploy/android_demo/app/src/main/cpp/predictor_input.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "predictor_input.h" - -namespace ppredictor { - - -void PredictorInput::set_dims(std::vector dims) { - // yolov3 - if (_net_flag == 101 && _index == 1) { - _tensor->Resize({1, 2}); - _tensor->mutable_data()[0] = (int) dims.at(2); - _tensor->mutable_data()[1] = (int) dims.at(3); - } else { - _tensor->Resize(dims); - } - _is_dims_set = true; -} - -float *PredictorInput::get_mutable_float_data() { - if (!_is_dims_set) { - LOGE("PredictorInput::set_dims is not called"); - } - return _tensor->mutable_data(); -} - -void PredictorInput::set_data(const float *input_data, int input_float_len) { - float *input_raw_data = get_mutable_float_data(); - memcpy(input_raw_data, input_data, input_float_len * sizeof(float)); -} -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/predictor_input.h b/deploy/android_demo/app/src/main/cpp/predictor_input.h deleted file mode 100644 index b48db189..00000000 --- a/deploy/android_demo/app/src/main/cpp/predictor_input.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include -#include -#include "common.h" - -namespace ppredictor { -class PredictorInput { -public: - PredictorInput(std::unique_ptr &&tensor, int index, int net_flag) : - _tensor(std::move(tensor)), _index(index),_net_flag(net_flag) { - - } - - - void set_dims(std::vector dims); - - float *get_mutable_float_data(); - - void set_data(const float *input_data, int input_float_len); - -private: - std::unique_ptr _tensor; - bool _is_dims_set = false; - int _index; - int _net_flag; -}; -} diff --git a/deploy/android_demo/app/src/main/cpp/predictor_output.cpp b/deploy/android_demo/app/src/main/cpp/predictor_output.cpp deleted file mode 100644 index 08155633..00000000 --- a/deploy/android_demo/app/src/main/cpp/predictor_output.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "predictor_output.h" -namespace ppredictor { -const float* PredictorOutput::get_float_data() const{ - return _tensor->data(); -} - -const int* PredictorOutput::get_int_data() const{ - return _tensor->data(); -} - -const std::vector> PredictorOutput::get_lod() const{ - return _tensor->lod(); -} - -int64_t PredictorOutput::get_size() const{ - if (_net_flag == NET_OCR) { - return _tensor->shape().at(2) * _tensor->shape().at(3); - } else { - return product(_tensor->shape()); - } -} - -const std::vector PredictorOutput::get_shape() const{ - return _tensor->shape(); - -} -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/predictor_output.h b/deploy/android_demo/app/src/main/cpp/predictor_output.h deleted file mode 100644 index ec7086c6..00000000 --- a/deploy/android_demo/app/src/main/cpp/predictor_output.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include -#include -#include "common.h" - -namespace ppredictor { -class PredictorOutput { -public: - PredictorOutput(){ - - } - PredictorOutput(std::unique_ptr &&tensor, int index, int net_flag) : - _tensor(std::move(tensor)), _index(index), _net_flag(net_flag) { - - } - - const float* get_float_data() const; - const int* get_int_data() const; - int64_t get_size() const; - const std::vector> get_lod() const; - const std::vector get_shape() const; - - std::vector data; // return float, or use data_int - std::vector data_int; // several layers return int ,or use data - std::vector shape; // PaddleLite output shape - std::vector> lod; // PaddleLite output lod - -private: - std::unique_ptr _tensor; - int _index; - int _net_flag; -}; -} - diff --git a/deploy/android_demo/app/src/main/cpp/preprocess.cpp b/deploy/android_demo/app/src/main/cpp/preprocess.cpp deleted file mode 100644 index 5543cdd1..00000000 --- a/deploy/android_demo/app/src/main/cpp/preprocess.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "preprocess.h" -#include - -cv::Mat bitmap_to_cv_mat(JNIEnv *env, jobject bitmap) { - AndroidBitmapInfo info; - int result = AndroidBitmap_getInfo(env, bitmap, &info); - if (result != ANDROID_BITMAP_RESULT_SUCCESS) { - LOGE("AndroidBitmap_getInfo failed, result: %d", result); - return cv::Mat{}; - } - if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { - LOGE("Bitmap format is not RGBA_8888 !"); - return cv::Mat{}; - } - unsigned char *srcData = NULL; - AndroidBitmap_lockPixels(env, bitmap, (void **) &srcData); - cv::Mat mat = cv::Mat::zeros(info.height, info.width, CV_8UC4); - memcpy(mat.data, srcData, info.height * info.width * 4); - AndroidBitmap_unlockPixels(env, bitmap); - cv::cvtColor(mat, mat, cv::COLOR_RGBA2BGR); - /** - if (!cv::imwrite("/sdcard/1/copy.jpg", mat)){ - LOGE("Write image failed " ); - } - */ - - return mat; -} - -cv::Mat resize_img(const cv::Mat& img, int height, int width){ - if (img.rows == height && img.cols == width){ - return img; - } - cv::Mat new_img; - cv::resize(img, new_img, cv::Size(height, width)); - return new_img; -} - -// fill tensor with mean and scale and trans layout: nhwc -> nchw, neon speed up -void neon_mean_scale(const float* din, - float* dout, - int size, - const std::vector& mean, - const std::vector& scale) { - if (mean.size() != 3 || scale.size() != 3) { - LOGE("[ERROR] mean or scale size must equal to 3"); - return; - } - - float32x4_t vmean0 = vdupq_n_f32(mean[0]); - float32x4_t vmean1 = vdupq_n_f32(mean[1]); - float32x4_t vmean2 = vdupq_n_f32(mean[2]); - float32x4_t vscale0 = vdupq_n_f32(scale[0]); - float32x4_t vscale1 = vdupq_n_f32(scale[1]); - float32x4_t vscale2 = vdupq_n_f32(scale[2]); - - float* dout_c0 = dout; - float* dout_c1 = dout + size; - float* dout_c2 = dout + size * 2; - - int i = 0; - for (; i < size - 3; i += 4) { - float32x4x3_t vin3 = vld3q_f32(din); - float32x4_t vsub0 = vsubq_f32(vin3.val[0], vmean0); - float32x4_t vsub1 = vsubq_f32(vin3.val[1], vmean1); - float32x4_t vsub2 = vsubq_f32(vin3.val[2], vmean2); - float32x4_t vs0 = vmulq_f32(vsub0, vscale0); - float32x4_t vs1 = vmulq_f32(vsub1, vscale1); - float32x4_t vs2 = vmulq_f32(vsub2, vscale2); - vst1q_f32(dout_c0, vs0); - vst1q_f32(dout_c1, vs1); - vst1q_f32(dout_c2, vs2); - - din += 12; - dout_c0 += 4; - dout_c1 += 4; - dout_c2 += 4; - } - for (; i < size; i++) { - *(dout_c0++) = (*(din++) - mean[0]) * scale[0]; - *(dout_c1++) = (*(din++) - mean[1]) * scale[1]; - *(dout_c2++) = (*(din++) - mean[2]) * scale[2]; - } -} \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/cpp/preprocess.h b/deploy/android_demo/app/src/main/cpp/preprocess.h deleted file mode 100644 index c256c440..00000000 --- a/deploy/android_demo/app/src/main/cpp/preprocess.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include -#include -#include "common.h" -cv::Mat bitmap_to_cv_mat(JNIEnv *env, jobject bitmap); - -cv::Mat resize_img(const cv::Mat& img, int height, int width); - -void neon_mean_scale(const float* din, - float* dout, - int size, - const std::vector& mean, - const std::vector& scale); diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/AppCompatPreferenceActivity.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/AppCompatPreferenceActivity.java deleted file mode 100644 index 49af0afe..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/AppCompatPreferenceActivity.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.baidu.paddle.lite.demo.ocr; - -import android.content.res.Configuration; -import android.os.Bundle; -import android.preference.PreferenceActivity; -import android.view.MenuInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.LayoutRes; -import androidx.annotation.Nullable; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.appcompat.widget.Toolbar; - -/** - * A {@link PreferenceActivity} which implements and proxies the necessary calls - * to be used with AppCompat. - *

- * This technique can be used with an {@link android.app.Activity} class, not just - * {@link PreferenceActivity}. - */ -public abstract class AppCompatPreferenceActivity extends PreferenceActivity { - private AppCompatDelegate mDelegate; - - @Override - protected void onCreate(Bundle savedInstanceState) { - getDelegate().installViewFactory(); - getDelegate().onCreate(savedInstanceState); - super.onCreate(savedInstanceState); - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - getDelegate().onPostCreate(savedInstanceState); - } - - public ActionBar getSupportActionBar() { - return getDelegate().getSupportActionBar(); - } - - public void setSupportActionBar(@Nullable Toolbar toolbar) { - getDelegate().setSupportActionBar(toolbar); - } - - @Override - public MenuInflater getMenuInflater() { - return getDelegate().getMenuInflater(); - } - - @Override - public void setContentView(@LayoutRes int layoutResID) { - getDelegate().setContentView(layoutResID); - } - - @Override - public void setContentView(View view) { - getDelegate().setContentView(view); - } - - @Override - public void setContentView(View view, ViewGroup.LayoutParams params) { - getDelegate().setContentView(view, params); - } - - @Override - public void addContentView(View view, ViewGroup.LayoutParams params) { - getDelegate().addContentView(view, params); - } - - @Override - protected void onPostResume() { - super.onPostResume(); - getDelegate().onPostResume(); - } - - @Override - protected void onTitleChanged(CharSequence title, int color) { - super.onTitleChanged(title, color); - getDelegate().setTitle(title); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - getDelegate().onConfigurationChanged(newConfig); - } - - @Override - protected void onStop() { - super.onStop(); - getDelegate().onStop(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - getDelegate().onDestroy(); - } - - public void invalidateOptionsMenu() { - getDelegate().invalidateOptionsMenu(); - } - - private AppCompatDelegate getDelegate() { - if (mDelegate == null) { - mDelegate = AppCompatDelegate.create(this, null); - } - return mDelegate; - } -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MainActivity.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MainActivity.java deleted file mode 100644 index afb261dc..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MainActivity.java +++ /dev/null @@ -1,473 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.Manifest; -import android.app.ProgressDialog; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.media.ExifInterface; -import android.net.Uri; -import android.os.Bundle; -import android.os.Environment; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Message; -import android.preference.PreferenceManager; -import android.provider.MediaStore; -import android.text.method.ScrollingMovementMethod; -import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.core.content.FileProvider; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class MainActivity extends AppCompatActivity { - private static final String TAG = MainActivity.class.getSimpleName(); - public static final int OPEN_GALLERY_REQUEST_CODE = 0; - public static final int TAKE_PHOTO_REQUEST_CODE = 1; - - public static final int REQUEST_LOAD_MODEL = 0; - public static final int REQUEST_RUN_MODEL = 1; - public static final int RESPONSE_LOAD_MODEL_SUCCESSED = 0; - public static final int RESPONSE_LOAD_MODEL_FAILED = 1; - public static final int RESPONSE_RUN_MODEL_SUCCESSED = 2; - public static final int RESPONSE_RUN_MODEL_FAILED = 3; - - protected ProgressDialog pbLoadModel = null; - protected ProgressDialog pbRunModel = null; - - protected Handler receiver = null; // Receive messages from worker thread - protected Handler sender = null; // Send command to worker thread - protected HandlerThread worker = null; // Worker thread to load&run model - - // UI components of object detection - protected TextView tvInputSetting; - protected ImageView ivInputImage; - protected TextView tvOutputResult; - protected TextView tvInferenceTime; - - // Model settings of object detection - protected String modelPath = ""; - protected String labelPath = ""; - protected String imagePath = ""; - protected int cpuThreadNum = 1; - protected String cpuPowerMode = ""; - protected String inputColorFormat = ""; - protected long[] inputShape = new long[]{}; - protected float[] inputMean = new float[]{}; - protected float[] inputStd = new float[]{}; - protected float scoreThreshold = 0.1f; - private String currentPhotoPath; - - protected Predictor predictor = new Predictor(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - // Clear all setting items to avoid app crashing due to the incorrect settings - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.clear(); - editor.commit(); - - // Prepare the worker thread for mode loading and inference - receiver = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case RESPONSE_LOAD_MODEL_SUCCESSED: - pbLoadModel.dismiss(); - onLoadModelSuccessed(); - break; - case RESPONSE_LOAD_MODEL_FAILED: - pbLoadModel.dismiss(); - Toast.makeText(MainActivity.this, "Load model failed!", Toast.LENGTH_SHORT).show(); - onLoadModelFailed(); - break; - case RESPONSE_RUN_MODEL_SUCCESSED: - pbRunModel.dismiss(); - onRunModelSuccessed(); - break; - case RESPONSE_RUN_MODEL_FAILED: - pbRunModel.dismiss(); - Toast.makeText(MainActivity.this, "Run model failed!", Toast.LENGTH_SHORT).show(); - onRunModelFailed(); - break; - default: - break; - } - } - }; - - worker = new HandlerThread("Predictor Worker"); - worker.start(); - sender = new Handler(worker.getLooper()) { - public void handleMessage(Message msg) { - switch (msg.what) { - case REQUEST_LOAD_MODEL: - // Load model and reload test image - if (onLoadModel()) { - receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_SUCCESSED); - } else { - receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_FAILED); - } - break; - case REQUEST_RUN_MODEL: - // Run model if model is loaded - if (onRunModel()) { - receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_SUCCESSED); - } else { - receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_FAILED); - } - break; - default: - break; - } - } - }; - - // Setup the UI components - tvInputSetting = findViewById(R.id.tv_input_setting); - ivInputImage = findViewById(R.id.iv_input_image); - tvInferenceTime = findViewById(R.id.tv_inference_time); - tvOutputResult = findViewById(R.id.tv_output_result); - tvInputSetting.setMovementMethod(ScrollingMovementMethod.getInstance()); - tvOutputResult.setMovementMethod(ScrollingMovementMethod.getInstance()); - } - - @Override - protected void onResume() { - super.onResume(); - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - boolean settingsChanged = false; - String model_path = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY), - getString(R.string.MODEL_PATH_DEFAULT)); - String label_path = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY), - getString(R.string.LABEL_PATH_DEFAULT)); - String image_path = sharedPreferences.getString(getString(R.string.IMAGE_PATH_KEY), - getString(R.string.IMAGE_PATH_DEFAULT)); - settingsChanged |= !model_path.equalsIgnoreCase(modelPath); - settingsChanged |= !label_path.equalsIgnoreCase(labelPath); - settingsChanged |= !image_path.equalsIgnoreCase(imagePath); - int cpu_thread_num = Integer.parseInt(sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY), - getString(R.string.CPU_THREAD_NUM_DEFAULT))); - settingsChanged |= cpu_thread_num != cpuThreadNum; - String cpu_power_mode = - sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY), - getString(R.string.CPU_POWER_MODE_DEFAULT)); - settingsChanged |= !cpu_power_mode.equalsIgnoreCase(cpuPowerMode); - String input_color_format = - sharedPreferences.getString(getString(R.string.INPUT_COLOR_FORMAT_KEY), - getString(R.string.INPUT_COLOR_FORMAT_DEFAULT)); - settingsChanged |= !input_color_format.equalsIgnoreCase(inputColorFormat); - long[] input_shape = - Utils.parseLongsFromString(sharedPreferences.getString(getString(R.string.INPUT_SHAPE_KEY), - getString(R.string.INPUT_SHAPE_DEFAULT)), ","); - float[] input_mean = - Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_MEAN_KEY), - getString(R.string.INPUT_MEAN_DEFAULT)), ","); - float[] input_std = - Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_STD_KEY) - , getString(R.string.INPUT_STD_DEFAULT)), ","); - settingsChanged |= input_shape.length != inputShape.length; - settingsChanged |= input_mean.length != inputMean.length; - settingsChanged |= input_std.length != inputStd.length; - if (!settingsChanged) { - for (int i = 0; i < input_shape.length; i++) { - settingsChanged |= input_shape[i] != inputShape[i]; - } - for (int i = 0; i < input_mean.length; i++) { - settingsChanged |= input_mean[i] != inputMean[i]; - } - for (int i = 0; i < input_std.length; i++) { - settingsChanged |= input_std[i] != inputStd[i]; - } - } - float score_threshold = - Float.parseFloat(sharedPreferences.getString(getString(R.string.SCORE_THRESHOLD_KEY), - getString(R.string.SCORE_THRESHOLD_DEFAULT))); - settingsChanged |= scoreThreshold != score_threshold; - if (settingsChanged) { - modelPath = model_path; - labelPath = label_path; - imagePath = image_path; - cpuThreadNum = cpu_thread_num; - cpuPowerMode = cpu_power_mode; - inputColorFormat = input_color_format; - inputShape = input_shape; - inputMean = input_mean; - inputStd = input_std; - scoreThreshold = score_threshold; - // Update UI - tvInputSetting.setText("Model: " + modelPath.substring(modelPath.lastIndexOf("/") + 1) + "\n" + "CPU" + - " Thread Num: " + Integer.toString(cpuThreadNum) + "\n" + "CPU Power Mode: " + cpuPowerMode); - tvInputSetting.scrollTo(0, 0); - // Reload model if configure has been changed - loadModel(); - } - } - - public void loadModel() { - pbLoadModel = ProgressDialog.show(this, "", "Loading model...", false, false); - sender.sendEmptyMessage(REQUEST_LOAD_MODEL); - } - - public void runModel() { - pbRunModel = ProgressDialog.show(this, "", "Running model...", false, false); - sender.sendEmptyMessage(REQUEST_RUN_MODEL); - } - - public boolean onLoadModel() { - return predictor.init(MainActivity.this, modelPath, labelPath, cpuThreadNum, - cpuPowerMode, - inputColorFormat, - inputShape, inputMean, - inputStd, scoreThreshold); - } - - public boolean onRunModel() { - return predictor.isLoaded() && predictor.runModel(); - } - - public void onLoadModelSuccessed() { - // Load test image from path and run model - try { - if (imagePath.isEmpty()) { - return; - } - Bitmap image = null; - // Read test image file from custom path if the first character of mode path is '/', otherwise read test - // image file from assets - if (!imagePath.substring(0, 1).equals("/")) { - InputStream imageStream = getAssets().open(imagePath); - image = BitmapFactory.decodeStream(imageStream); - } else { - if (!new File(imagePath).exists()) { - return; - } - image = BitmapFactory.decodeFile(imagePath); - } - if (image != null && predictor.isLoaded()) { - predictor.setInputImage(image); - runModel(); - } - } catch (IOException e) { - Toast.makeText(MainActivity.this, "Load image failed!", Toast.LENGTH_SHORT).show(); - e.printStackTrace(); - } - } - - public void onLoadModelFailed() { - } - - public void onRunModelSuccessed() { - // Obtain results and update UI - tvInferenceTime.setText("Inference time: " + predictor.inferenceTime() + " ms"); - Bitmap outputImage = predictor.outputImage(); - if (outputImage != null) { - ivInputImage.setImageBitmap(outputImage); - } - tvOutputResult.setText(predictor.outputResult()); - tvOutputResult.scrollTo(0, 0); - } - - public void onRunModelFailed() { - } - - public void onImageChanged(Bitmap image) { - // Rerun model if users pick test image from gallery or camera - if (image != null && predictor.isLoaded()) { - predictor.setInputImage(image); - runModel(); - } - } - - public void onSettingsClicked() { - startActivity(new Intent(MainActivity.this, SettingsActivity.class)); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.menu_action_options, menu); - return true; - } - - public boolean onPrepareOptionsMenu(Menu menu) { - boolean isLoaded = predictor.isLoaded(); - menu.findItem(R.id.open_gallery).setEnabled(isLoaded); - menu.findItem(R.id.take_photo).setEnabled(isLoaded); - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - break; - case R.id.open_gallery: - if (requestAllPermissions()) { - openGallery(); - } - break; - case R.id.take_photo: - if (requestAllPermissions()) { - takePhoto(); - } - break; - case R.id.settings: - if (requestAllPermissions()) { - // Make sure we have SDCard r&w permissions to load model from SDCard - onSettingsClicked(); - } - break; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) { - Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show(); - } - } - - private boolean requestAllPermissions() { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, - Manifest.permission.CAMERA) - != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.CAMERA}, - 0); - return false; - } - return true; - } - - private void openGallery() { - Intent intent = new Intent(Intent.ACTION_PICK, null); - intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); - startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE); - } - - private void takePhoto() { - Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - // Ensure that there's a camera activity to handle the intent - if (takePictureIntent.resolveActivity(getPackageManager()) != null) { - // Create the File where the photo should go - File photoFile = null; - try { - photoFile = createImageFile(); - } catch (IOException ex) { - Log.e("MainActitity", ex.getMessage(), ex); - Toast.makeText(MainActivity.this, - "Create Camera temp file failed: " + ex.getMessage(), Toast.LENGTH_SHORT).show(); - } - // Continue only if the File was successfully created - if (photoFile != null) { - Log.i(TAG, "FILEPATH " + getExternalFilesDir("Pictures").getAbsolutePath()); - Uri photoURI = FileProvider.getUriForFile(this, - "com.baidu.paddle.lite.demo.ocr.fileprovider", - photoFile); - currentPhotoPath = photoFile.getAbsolutePath(); - takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); - startActivityForResult(takePictureIntent, TAKE_PHOTO_REQUEST_CODE); - Log.i(TAG, "startActivityForResult finished"); - } - } - - } - - private File createImageFile() throws IOException { - // Create an image file name - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String imageFileName = "JPEG_" + timeStamp + "_"; - File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); - File image = File.createTempFile( - imageFileName, /* prefix */ - ".bmp", /* suffix */ - storageDir /* directory */ - ); - - return image; - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { - switch (requestCode) { - case OPEN_GALLERY_REQUEST_CODE: - if (data == null) { - break; - } - try { - ContentResolver resolver = getContentResolver(); - Uri uri = data.getData(); - Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri); - String[] proj = {MediaStore.Images.Media.DATA}; - Cursor cursor = managedQuery(uri, proj, null, null, null); - cursor.moveToFirst(); - onImageChanged(image); - } catch (IOException e) { - Log.e(TAG, e.toString()); - } - break; - case TAKE_PHOTO_REQUEST_CODE: - if (currentPhotoPath != null) { - ExifInterface exif = null; - try { - exif = new ExifInterface(currentPhotoPath); - } catch (IOException e) { - e.printStackTrace(); - } - int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, - ExifInterface.ORIENTATION_UNDEFINED); - Log.i(TAG, "rotation " + orientation); - Bitmap image = BitmapFactory.decodeFile(currentPhotoPath); - image = Utils.rotateBitmap(image, orientation); - onImageChanged(image); - } else { - Log.e(TAG, "currentPhotoPath is null"); - } - break; - default: - break; - } - } - } - - @Override - protected void onDestroy() { - if (predictor != null) { - predictor.releaseModel(); - } - worker.quit(); - super.onDestroy(); - } -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MiniActivity.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MiniActivity.java deleted file mode 100644 index d5608911..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/MiniActivity.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Message; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.appcompat.app.AppCompatActivity; - -import java.io.IOException; -import java.io.InputStream; - -public class MiniActivity extends AppCompatActivity { - - - public static final int REQUEST_LOAD_MODEL = 0; - public static final int REQUEST_RUN_MODEL = 1; - public static final int REQUEST_UNLOAD_MODEL = 2; - public static final int RESPONSE_LOAD_MODEL_SUCCESSED = 0; - public static final int RESPONSE_LOAD_MODEL_FAILED = 1; - public static final int RESPONSE_RUN_MODEL_SUCCESSED = 2; - public static final int RESPONSE_RUN_MODEL_FAILED = 3; - - private static final String TAG = "MiniActivity"; - - protected Handler receiver = null; // Receive messages from worker thread - protected Handler sender = null; // Send command to worker thread - protected HandlerThread worker = null; // Worker thread to load&run model - protected volatile Predictor predictor = null; - - private String assetModelDirPath = "models/ocr_v1_for_cpu"; - private String assetlabelFilePath = "labels/ppocr_keys_v1.txt"; - - private Button button; - private ImageView imageView; // image result - private TextView textView; // text result - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_mini); - - Log.i(TAG, "SHOW in Logcat"); - - // Prepare the worker thread for mode loading and inference - worker = new HandlerThread("Predictor Worker"); - worker.start(); - sender = new Handler(worker.getLooper()) { - public void handleMessage(Message msg) { - switch (msg.what) { - case REQUEST_LOAD_MODEL: - // Load model and reload test image - if (!onLoadModel()) { - runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(MiniActivity.this, "Load model failed!", Toast.LENGTH_SHORT).show(); - } - }); - } - break; - case REQUEST_RUN_MODEL: - // Run model if model is loaded - final boolean isSuccessed = onRunModel(); - runOnUiThread(new Runnable() { - @Override - public void run() { - if (isSuccessed){ - onRunModelSuccessed(); - }else{ - Toast.makeText(MiniActivity.this, "Run model failed!", Toast.LENGTH_SHORT).show(); - } - } - }); - break; - } - } - }; - sender.sendEmptyMessage(REQUEST_LOAD_MODEL); // corresponding to REQUEST_LOAD_MODEL, to call onLoadModel() - - imageView = findViewById(R.id.imageView); - textView = findViewById(R.id.sample_text); - button = findViewById(R.id.button); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sender.sendEmptyMessage(REQUEST_RUN_MODEL); - } - }); - - - } - - @Override - protected void onDestroy() { - onUnloadModel(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - worker.quitSafely(); - } else { - worker.quit(); - } - super.onDestroy(); - } - - /** - * call in onCreate, model init - * - * @return - */ - private boolean onLoadModel() { - if (predictor == null) { - predictor = new Predictor(); - } - return predictor.init(this, assetModelDirPath, assetlabelFilePath); - } - - /** - * init engine - * call in onCreate - * - * @return - */ - private boolean onRunModel() { - try { - String assetImagePath = "images/5.jpg"; - InputStream imageStream = getAssets().open(assetImagePath); - Bitmap image = BitmapFactory.decodeStream(imageStream); - // Input is Bitmap - predictor.setInputImage(image); - return predictor.isLoaded() && predictor.runModel(); - } catch (IOException e) { - e.printStackTrace(); - return false; - } - } - - private void onRunModelSuccessed() { - Log.i(TAG, "onRunModelSuccessed"); - textView.setText(predictor.outputResult); - imageView.setImageBitmap(predictor.outputImage); - } - - private void onUnloadModel() { - if (predictor != null) { - predictor.releaseModel(); - } - } -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OCRPredictorNative.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OCRPredictorNative.java deleted file mode 100644 index 2e78a3ec..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OCRPredictorNative.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.graphics.Bitmap; -import android.util.Log; - -import java.util.ArrayList; -import java.util.concurrent.atomic.AtomicBoolean; - -public class OCRPredictorNative { - - private static final AtomicBoolean isSOLoaded = new AtomicBoolean(); - - public static void loadLibrary() throws RuntimeException { - if (!isSOLoaded.get() && isSOLoaded.compareAndSet(false, true)) { - try { - System.loadLibrary("Native"); - } catch (Throwable e) { - RuntimeException exception = new RuntimeException( - "Load libNative.so failed, please check it exists in apk file.", e); - throw exception; - } - } - } - - private Config config; - - private long nativePointer = 0; - - public OCRPredictorNative(Config config) { - this.config = config; - loadLibrary(); - nativePointer = init(config.detModelFilename, config.recModelFilename, - config.cpuThreadNum, config.cpuPower); - Log.i("OCRPredictorNative", "load success " + nativePointer); - - } - - public void release() { - if (nativePointer != 0) { - nativePointer = 0; - destory(nativePointer); - } - } - - public ArrayList runImage(float[] inputData, int width, int height, int channels, Bitmap originalImage) { - Log.i("OCRPredictorNative", "begin to run image " + inputData.length + " " + width + " " + height); - float[] dims = new float[]{1, channels, height, width}; - float[] rawResults = forward(nativePointer, inputData, dims, originalImage); - ArrayList results = postprocess(rawResults); - return results; - } - - public static class Config { - public int cpuThreadNum; - public String cpuPower; - public String detModelFilename; - public String recModelFilename; - - } - - protected native long init(String detModelPath, String recModelPath, int threadNum, String cpuMode); - - protected native float[] forward(long pointer, float[] buf, float[] ddims, Bitmap originalImage); - - protected native void destory(long pointer); - - private ArrayList postprocess(float[] raw) { - ArrayList results = new ArrayList(); - int begin = 0; - - while (begin < raw.length) { - int point_num = Math.round(raw[begin]); - int word_num = Math.round(raw[begin + 1]); - OcrResultModel model = parse(raw, begin + 2, point_num, word_num); - begin += 2 + 1 + point_num * 2 + word_num; - results.add(model); - } - - return results; - } - - private OcrResultModel parse(float[] raw, int begin, int pointNum, int wordNum) { - int current = begin; - OcrResultModel model = new OcrResultModel(); - model.setConfidence(raw[current]); - current++; - for (int i = 0; i < pointNum; i++) { - model.addPoints(Math.round(raw[current + i * 2]), Math.round(raw[current + i * 2 + 1])); - } - current += (pointNum * 2); - for (int i = 0; i < wordNum; i++) { - int index = Math.round(raw[current + i]); - model.addWordIndex(index); - } - Log.i("OCRPredictorNative", "word finished " + wordNum); - return model; - } - - -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OcrResultModel.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OcrResultModel.java deleted file mode 100644 index 9494574e..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/OcrResultModel.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.graphics.Point; - -import java.util.ArrayList; -import java.util.List; - -public class OcrResultModel { - private List points; - private List wordIndex; - private String label; - private float confidence; - - public OcrResultModel() { - super(); - points = new ArrayList<>(); - wordIndex = new ArrayList<>(); - } - - public void addPoints(int x, int y) { - Point point = new Point(x, y); - points.add(point); - } - - public void addWordIndex(int index) { - wordIndex.add(index); - } - - public List getPoints() { - return points; - } - - public List getWordIndex() { - return wordIndex; - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public float getConfidence() { - return confidence; - } - - public void setConfidence(float confidence) { - this.confidence = confidence; - } -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Predictor.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Predictor.java deleted file mode 100644 index 078bba28..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Predictor.java +++ /dev/null @@ -1,355 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Point; -import android.util.Log; - -import java.io.File; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Vector; - -import static android.graphics.Color.*; - -public class Predictor { - private static final String TAG = Predictor.class.getSimpleName(); - public boolean isLoaded = false; - public int warmupIterNum = 1; - public int inferIterNum = 1; - public int cpuThreadNum = 4; - public String cpuPowerMode = "LITE_POWER_HIGH"; - public String modelPath = ""; - public String modelName = ""; - protected OCRPredictorNative paddlePredictor = null; - protected float inferenceTime = 0; - // Only for object detection - protected Vector wordLabels = new Vector(); - protected String inputColorFormat = "BGR"; - protected long[] inputShape = new long[]{1, 3, 960}; - protected float[] inputMean = new float[]{0.485f, 0.456f, 0.406f}; - protected float[] inputStd = new float[]{1.0f / 0.229f, 1.0f / 0.224f, 1.0f / 0.225f}; - protected float scoreThreshold = 0.1f; - protected Bitmap inputImage = null; - protected Bitmap outputImage = null; - protected volatile String outputResult = ""; - protected float preprocessTime = 0; - protected float postprocessTime = 0; - - - public Predictor() { - } - - public boolean init(Context appCtx, String modelPath, String labelPath) { - isLoaded = loadModel(appCtx, modelPath, cpuThreadNum, cpuPowerMode); - if (!isLoaded) { - return false; - } - isLoaded = loadLabel(appCtx, labelPath); - return isLoaded; - } - - - public boolean init(Context appCtx, String modelPath, String labelPath, int cpuThreadNum, String cpuPowerMode, - String inputColorFormat, - long[] inputShape, float[] inputMean, - float[] inputStd, float scoreThreshold) { - if (inputShape.length != 3) { - Log.e(TAG, "Size of input shape should be: 3"); - return false; - } - if (inputMean.length != inputShape[1]) { - Log.e(TAG, "Size of input mean should be: " + Long.toString(inputShape[1])); - return false; - } - if (inputStd.length != inputShape[1]) { - Log.e(TAG, "Size of input std should be: " + Long.toString(inputShape[1])); - return false; - } - if (inputShape[0] != 1) { - Log.e(TAG, "Only one batch is supported in the image classification demo, you can use any batch size in " + - "your Apps!"); - return false; - } - if (inputShape[1] != 1 && inputShape[1] != 3) { - Log.e(TAG, "Only one/three channels are supported in the image classification demo, you can use any " + - "channel size in your Apps!"); - return false; - } - if (!inputColorFormat.equalsIgnoreCase("BGR")) { - Log.e(TAG, "Only BGR color format is supported."); - return false; - } - boolean isLoaded = init(appCtx, modelPath, labelPath); - if (!isLoaded) { - return false; - } - this.inputColorFormat = inputColorFormat; - this.inputShape = inputShape; - this.inputMean = inputMean; - this.inputStd = inputStd; - this.scoreThreshold = scoreThreshold; - return true; - } - - protected boolean loadModel(Context appCtx, String modelPath, int cpuThreadNum, String cpuPowerMode) { - // Release model if exists - releaseModel(); - - // Load model - if (modelPath.isEmpty()) { - return false; - } - String realPath = modelPath; - if (!modelPath.substring(0, 1).equals("/")) { - // Read model files from custom path if the first character of mode path is '/' - // otherwise copy model to cache from assets - realPath = appCtx.getCacheDir() + "/" + modelPath; - Utils.copyDirectoryFromAssets(appCtx, modelPath, realPath); - } - if (realPath.isEmpty()) { - return false; - } - - OCRPredictorNative.Config config = new OCRPredictorNative.Config(); - config.cpuThreadNum = cpuThreadNum; - config.detModelFilename = realPath + File.separator + "ch_det_mv3_db_opt.nb"; - config.recModelFilename = realPath + File.separator + "ch_rec_mv3_crnn_opt.nb"; - Log.e("Predictor", "model path" + config.detModelFilename + " ; " + config.recModelFilename); - config.cpuPower = cpuPowerMode; - paddlePredictor = new OCRPredictorNative(config); - - this.cpuThreadNum = cpuThreadNum; - this.cpuPowerMode = cpuPowerMode; - this.modelPath = realPath; - this.modelName = realPath.substring(realPath.lastIndexOf("/") + 1); - return true; - } - - public void releaseModel() { - if (paddlePredictor != null) { - paddlePredictor.release(); - paddlePredictor = null; - } - isLoaded = false; - cpuThreadNum = 1; - cpuPowerMode = "LITE_POWER_HIGH"; - modelPath = ""; - modelName = ""; - } - - protected boolean loadLabel(Context appCtx, String labelPath) { - wordLabels.clear(); - // Load word labels from file - try { - InputStream assetsInputStream = appCtx.getAssets().open(labelPath); - int available = assetsInputStream.available(); - byte[] lines = new byte[available]; - assetsInputStream.read(lines); - assetsInputStream.close(); - String words = new String(lines); - String[] contents = words.split("\n"); - for (String content : contents) { - wordLabels.add(content); - } - Log.i(TAG, "Word label size: " + wordLabels.size()); - } catch (Exception e) { - Log.e(TAG, e.getMessage()); - return false; - } - return true; - } - - - public boolean runModel() { - if (inputImage == null || !isLoaded()) { - return false; - } - - // Pre-process image, and feed input tensor with pre-processed data - - Bitmap scaleImage = Utils.resizeWithStep(inputImage, Long.valueOf(inputShape[2]).intValue(), 32); - - Date start = new Date(); - int channels = (int) inputShape[1]; - int width = scaleImage.getWidth(); - int height = scaleImage.getHeight(); - float[] inputData = new float[channels * width * height]; - if (channels == 3) { - int[] channelIdx = null; - if (inputColorFormat.equalsIgnoreCase("RGB")) { - channelIdx = new int[]{0, 1, 2}; - } else if (inputColorFormat.equalsIgnoreCase("BGR")) { - channelIdx = new int[]{2, 1, 0}; - } else { - Log.i(TAG, "Unknown color format " + inputColorFormat + ", only RGB and BGR color format is " + - "supported!"); - return false; - } - int[] channelStride = new int[]{width * height, width * height * 2}; - int p = scaleImage.getPixel(scaleImage.getWidth() - 1, scaleImage.getHeight() - 1); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - int color = scaleImage.getPixel(x, y); - float[] rgb = new float[]{(float) red(color) / 255.0f, (float) green(color) / 255.0f, - (float) blue(color) / 255.0f}; - inputData[y * width + x] = (rgb[channelIdx[0]] - inputMean[0]) / inputStd[0]; - inputData[y * width + x + channelStride[0]] = (rgb[channelIdx[1]] - inputMean[1]) / inputStd[1]; - inputData[y * width + x + channelStride[1]] = (rgb[channelIdx[2]] - inputMean[2]) / inputStd[2]; - - } - } - } else if (channels == 1) { - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - int color = inputImage.getPixel(x, y); - float gray = (float) (red(color) + green(color) + blue(color)) / 3.0f / 255.0f; - inputData[y * width + x] = (gray - inputMean[0]) / inputStd[0]; - } - } - } else { - Log.i(TAG, "Unsupported channel size " + Integer.toString(channels) + ", only channel 1 and 3 is " + - "supported!"); - return false; - } - float[] pixels = inputData; - Log.i(TAG, "pixels " + pixels[0] + " " + pixels[1] + " " + pixels[2] + " " + pixels[3] - + " " + pixels[pixels.length / 2] + " " + pixels[pixels.length / 2 + 1] + " " + pixels[pixels.length - 2] + " " + pixels[pixels.length - 1]); - Date end = new Date(); - preprocessTime = (float) (end.getTime() - start.getTime()); - - // Warm up - for (int i = 0; i < warmupIterNum; i++) { - paddlePredictor.runImage(inputData, width, height, channels, inputImage); - } - warmupIterNum = 0; // do not need warm - // Run inference - start = new Date(); - ArrayList results = paddlePredictor.runImage(inputData, width, height, channels, inputImage); - end = new Date(); - inferenceTime = (end.getTime() - start.getTime()) / (float) inferIterNum; - - results = postprocess(results); - Log.i(TAG, "[stat] Preprocess Time: " + preprocessTime - + " ; Inference Time: " + inferenceTime + " ;Box Size " + results.size()); - drawResults(results); - - return true; - } - - - public boolean isLoaded() { - return paddlePredictor != null && isLoaded; - } - - public String modelPath() { - return modelPath; - } - - public String modelName() { - return modelName; - } - - public int cpuThreadNum() { - return cpuThreadNum; - } - - public String cpuPowerMode() { - return cpuPowerMode; - } - - public float inferenceTime() { - return inferenceTime; - } - - public Bitmap inputImage() { - return inputImage; - } - - public Bitmap outputImage() { - return outputImage; - } - - public String outputResult() { - return outputResult; - } - - public float preprocessTime() { - return preprocessTime; - } - - public float postprocessTime() { - return postprocessTime; - } - - - public void setInputImage(Bitmap image) { - if (image == null) { - return; - } - this.inputImage = image.copy(Bitmap.Config.ARGB_8888, true); - } - - private ArrayList postprocess(ArrayList results) { - for (OcrResultModel r : results) { - StringBuffer word = new StringBuffer(); - for (int index : r.getWordIndex()) { - if (index >= 0 && index < wordLabels.size()) { - word.append(wordLabels.get(index)); - } else { - Log.e(TAG, "Word index is not in label list:" + index); - word.append("×"); - } - } - r.setLabel(word.toString()); - } - return results; - } - - private void drawResults(ArrayList results) { - StringBuffer outputResultSb = new StringBuffer(""); - for (int i = 0; i < results.size(); i++) { - OcrResultModel result = results.get(i); - StringBuilder sb = new StringBuilder(""); - sb.append(result.getLabel()); - sb.append(" ").append(result.getConfidence()); - sb.append("; Points: "); - for (Point p : result.getPoints()) { - sb.append("(").append(p.x).append(",").append(p.y).append(") "); - } - Log.i(TAG, sb.toString()); // show LOG in Logcat panel - outputResultSb.append(i + 1).append(": ").append(result.getLabel()).append("\n"); - } - outputResult = outputResultSb.toString(); - outputImage = inputImage; - Canvas canvas = new Canvas(outputImage); - Paint paintFillAlpha = new Paint(); - paintFillAlpha.setStyle(Paint.Style.FILL); - paintFillAlpha.setColor(Color.parseColor("#3B85F5")); - paintFillAlpha.setAlpha(50); - - Paint paint = new Paint(); - paint.setColor(Color.parseColor("#3B85F5")); - paint.setStrokeWidth(5); - paint.setStyle(Paint.Style.STROKE); - - for (OcrResultModel result : results) { - Path path = new Path(); - List points = result.getPoints(); - path.moveTo(points.get(0).x, points.get(0).y); - for (int i = points.size() - 1; i >= 0; i--) { - Point p = points.get(i); - path.lineTo(p.x, p.y); - } - canvas.drawPath(path, paint); - canvas.drawPath(path, paintFillAlpha); - } - } - -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/SettingsActivity.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/SettingsActivity.java deleted file mode 100644 index b3653ccc..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/SettingsActivity.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.CheckBoxPreference; -import android.preference.EditTextPreference; -import android.preference.ListPreference; - -import androidx.appcompat.app.ActionBar; - -import java.util.ArrayList; -import java.util.List; - - -public class SettingsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { - ListPreference lpChoosePreInstalledModel = null; - CheckBoxPreference cbEnableCustomSettings = null; - EditTextPreference etModelPath = null; - EditTextPreference etLabelPath = null; - EditTextPreference etImagePath = null; - ListPreference lpCPUThreadNum = null; - ListPreference lpCPUPowerMode = null; - ListPreference lpInputColorFormat = null; - EditTextPreference etInputShape = null; - EditTextPreference etInputMean = null; - EditTextPreference etInputStd = null; - EditTextPreference etScoreThreshold = null; - - List preInstalledModelPaths = null; - List preInstalledLabelPaths = null; - List preInstalledImagePaths = null; - List preInstalledInputShapes = null; - List preInstalledCPUThreadNums = null; - List preInstalledCPUPowerModes = null; - List preInstalledInputColorFormats = null; - List preInstalledInputMeans = null; - List preInstalledInputStds = null; - List preInstalledScoreThresholds = null; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.settings); - ActionBar supportActionBar = getSupportActionBar(); - if (supportActionBar != null) { - supportActionBar.setDisplayHomeAsUpEnabled(true); - } - - // Initialized pre-installed models - preInstalledModelPaths = new ArrayList(); - preInstalledLabelPaths = new ArrayList(); - preInstalledImagePaths = new ArrayList(); - preInstalledInputShapes = new ArrayList(); - preInstalledCPUThreadNums = new ArrayList(); - preInstalledCPUPowerModes = new ArrayList(); - preInstalledInputColorFormats = new ArrayList(); - preInstalledInputMeans = new ArrayList(); - preInstalledInputStds = new ArrayList(); - preInstalledScoreThresholds = new ArrayList(); - // Add ssd_mobilenet_v1_pascalvoc_for_cpu - preInstalledModelPaths.add(getString(R.string.MODEL_PATH_DEFAULT)); - preInstalledLabelPaths.add(getString(R.string.LABEL_PATH_DEFAULT)); - preInstalledImagePaths.add(getString(R.string.IMAGE_PATH_DEFAULT)); - preInstalledCPUThreadNums.add(getString(R.string.CPU_THREAD_NUM_DEFAULT)); - preInstalledCPUPowerModes.add(getString(R.string.CPU_POWER_MODE_DEFAULT)); - preInstalledInputColorFormats.add(getString(R.string.INPUT_COLOR_FORMAT_DEFAULT)); - preInstalledInputShapes.add(getString(R.string.INPUT_SHAPE_DEFAULT)); - preInstalledInputMeans.add(getString(R.string.INPUT_MEAN_DEFAULT)); - preInstalledInputStds.add(getString(R.string.INPUT_STD_DEFAULT)); - preInstalledScoreThresholds.add(getString(R.string.SCORE_THRESHOLD_DEFAULT)); - - // Setup UI components - lpChoosePreInstalledModel = - (ListPreference) findPreference(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY)); - String[] preInstalledModelNames = new String[preInstalledModelPaths.size()]; - for (int i = 0; i < preInstalledModelPaths.size(); i++) { - preInstalledModelNames[i] = - preInstalledModelPaths.get(i).substring(preInstalledModelPaths.get(i).lastIndexOf("/") + 1); - } - lpChoosePreInstalledModel.setEntries(preInstalledModelNames); - lpChoosePreInstalledModel.setEntryValues(preInstalledModelPaths.toArray(new String[preInstalledModelPaths.size()])); - cbEnableCustomSettings = - (CheckBoxPreference) findPreference(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY)); - etModelPath = (EditTextPreference) findPreference(getString(R.string.MODEL_PATH_KEY)); - etModelPath.setTitle("Model Path (SDCard: " + Utils.getSDCardDirectory() + ")"); - etLabelPath = (EditTextPreference) findPreference(getString(R.string.LABEL_PATH_KEY)); - etImagePath = (EditTextPreference) findPreference(getString(R.string.IMAGE_PATH_KEY)); - lpCPUThreadNum = - (ListPreference) findPreference(getString(R.string.CPU_THREAD_NUM_KEY)); - lpCPUPowerMode = - (ListPreference) findPreference(getString(R.string.CPU_POWER_MODE_KEY)); - lpInputColorFormat = - (ListPreference) findPreference(getString(R.string.INPUT_COLOR_FORMAT_KEY)); - etInputShape = (EditTextPreference) findPreference(getString(R.string.INPUT_SHAPE_KEY)); - etInputMean = (EditTextPreference) findPreference(getString(R.string.INPUT_MEAN_KEY)); - etInputStd = (EditTextPreference) findPreference(getString(R.string.INPUT_STD_KEY)); - etScoreThreshold = (EditTextPreference) findPreference(getString(R.string.SCORE_THRESHOLD_KEY)); - } - - private void reloadPreferenceAndUpdateUI() { - SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); - boolean enableCustomSettings = - sharedPreferences.getBoolean(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY), false); - String modelPath = sharedPreferences.getString(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY), - getString(R.string.MODEL_PATH_DEFAULT)); - int modelIdx = lpChoosePreInstalledModel.findIndexOfValue(modelPath); - if (modelIdx >= 0 && modelIdx < preInstalledModelPaths.size()) { - if (!enableCustomSettings) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(getString(R.string.MODEL_PATH_KEY), preInstalledModelPaths.get(modelIdx)); - editor.putString(getString(R.string.LABEL_PATH_KEY), preInstalledLabelPaths.get(modelIdx)); - editor.putString(getString(R.string.IMAGE_PATH_KEY), preInstalledImagePaths.get(modelIdx)); - editor.putString(getString(R.string.CPU_THREAD_NUM_KEY), preInstalledCPUThreadNums.get(modelIdx)); - editor.putString(getString(R.string.CPU_POWER_MODE_KEY), preInstalledCPUPowerModes.get(modelIdx)); - editor.putString(getString(R.string.INPUT_COLOR_FORMAT_KEY), - preInstalledInputColorFormats.get(modelIdx)); - editor.putString(getString(R.string.INPUT_SHAPE_KEY), preInstalledInputShapes.get(modelIdx)); - editor.putString(getString(R.string.INPUT_MEAN_KEY), preInstalledInputMeans.get(modelIdx)); - editor.putString(getString(R.string.INPUT_STD_KEY), preInstalledInputStds.get(modelIdx)); - editor.putString(getString(R.string.SCORE_THRESHOLD_KEY), - preInstalledScoreThresholds.get(modelIdx)); - editor.commit(); - } - lpChoosePreInstalledModel.setSummary(modelPath); - } - cbEnableCustomSettings.setChecked(enableCustomSettings); - etModelPath.setEnabled(enableCustomSettings); - etLabelPath.setEnabled(enableCustomSettings); - etImagePath.setEnabled(enableCustomSettings); - lpCPUThreadNum.setEnabled(enableCustomSettings); - lpCPUPowerMode.setEnabled(enableCustomSettings); - lpInputColorFormat.setEnabled(enableCustomSettings); - etInputShape.setEnabled(enableCustomSettings); - etInputMean.setEnabled(enableCustomSettings); - etInputStd.setEnabled(enableCustomSettings); - etScoreThreshold.setEnabled(enableCustomSettings); - modelPath = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY), - getString(R.string.MODEL_PATH_DEFAULT)); - String labelPath = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY), - getString(R.string.LABEL_PATH_DEFAULT)); - String imagePath = sharedPreferences.getString(getString(R.string.IMAGE_PATH_KEY), - getString(R.string.IMAGE_PATH_DEFAULT)); - String cpuThreadNum = sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY), - getString(R.string.CPU_THREAD_NUM_DEFAULT)); - String cpuPowerMode = sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY), - getString(R.string.CPU_POWER_MODE_DEFAULT)); - String inputColorFormat = sharedPreferences.getString(getString(R.string.INPUT_COLOR_FORMAT_KEY), - getString(R.string.INPUT_COLOR_FORMAT_DEFAULT)); - String inputShape = sharedPreferences.getString(getString(R.string.INPUT_SHAPE_KEY), - getString(R.string.INPUT_SHAPE_DEFAULT)); - String inputMean = sharedPreferences.getString(getString(R.string.INPUT_MEAN_KEY), - getString(R.string.INPUT_MEAN_DEFAULT)); - String inputStd = sharedPreferences.getString(getString(R.string.INPUT_STD_KEY), - getString(R.string.INPUT_STD_DEFAULT)); - String scoreThreshold = sharedPreferences.getString(getString(R.string.SCORE_THRESHOLD_KEY), - getString(R.string.SCORE_THRESHOLD_DEFAULT)); - etModelPath.setSummary(modelPath); - etModelPath.setText(modelPath); - etLabelPath.setSummary(labelPath); - etLabelPath.setText(labelPath); - etImagePath.setSummary(imagePath); - etImagePath.setText(imagePath); - lpCPUThreadNum.setValue(cpuThreadNum); - lpCPUThreadNum.setSummary(cpuThreadNum); - lpCPUPowerMode.setValue(cpuPowerMode); - lpCPUPowerMode.setSummary(cpuPowerMode); - lpInputColorFormat.setValue(inputColorFormat); - lpInputColorFormat.setSummary(inputColorFormat); - etInputShape.setSummary(inputShape); - etInputShape.setText(inputShape); - etInputMean.setSummary(inputMean); - etInputMean.setText(inputMean); - etInputStd.setSummary(inputStd); - etInputStd.setText(inputStd); - etScoreThreshold.setText(scoreThreshold); - etScoreThreshold.setSummary(scoreThreshold); - } - - @Override - protected void onResume() { - super.onResume(); - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); - reloadPreferenceAndUpdateUI(); - } - - @Override - protected void onPause() { - super.onPause(); - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (key.equals(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY))) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY), false); - editor.commit(); - } - reloadPreferenceAndUpdateUI(); - } -} diff --git a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Utils.java b/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Utils.java deleted file mode 100644 index ef468057..00000000 --- a/deploy/android_demo/app/src/main/java/com/baidu/paddle/lite/demo/ocr/Utils.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.baidu.paddle.lite.demo.ocr; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Matrix; -import android.media.ExifInterface; -import android.os.Environment; - -import java.io.*; - -public class Utils { - private static final String TAG = Utils.class.getSimpleName(); - - public static void copyFileFromAssets(Context appCtx, String srcPath, String dstPath) { - if (srcPath.isEmpty() || dstPath.isEmpty()) { - return; - } - InputStream is = null; - OutputStream os = null; - try { - is = new BufferedInputStream(appCtx.getAssets().open(srcPath)); - os = new BufferedOutputStream(new FileOutputStream(new File(dstPath))); - byte[] buffer = new byte[1024]; - int length = 0; - while ((length = is.read(buffer)) != -1) { - os.write(buffer, 0, length); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - os.close(); - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - public static void copyDirectoryFromAssets(Context appCtx, String srcDir, String dstDir) { - if (srcDir.isEmpty() || dstDir.isEmpty()) { - return; - } - try { - if (!new File(dstDir).exists()) { - new File(dstDir).mkdirs(); - } - for (String fileName : appCtx.getAssets().list(srcDir)) { - String srcSubPath = srcDir + File.separator + fileName; - String dstSubPath = dstDir + File.separator + fileName; - if (new File(srcSubPath).isDirectory()) { - copyDirectoryFromAssets(appCtx, srcSubPath, dstSubPath); - } else { - copyFileFromAssets(appCtx, srcSubPath, dstSubPath); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static float[] parseFloatsFromString(String string, String delimiter) { - String[] pieces = string.trim().toLowerCase().split(delimiter); - float[] floats = new float[pieces.length]; - for (int i = 0; i < pieces.length; i++) { - floats[i] = Float.parseFloat(pieces[i].trim()); - } - return floats; - } - - public static long[] parseLongsFromString(String string, String delimiter) { - String[] pieces = string.trim().toLowerCase().split(delimiter); - long[] longs = new long[pieces.length]; - for (int i = 0; i < pieces.length; i++) { - longs[i] = Long.parseLong(pieces[i].trim()); - } - return longs; - } - - public static String getSDCardDirectory() { - return Environment.getExternalStorageDirectory().getAbsolutePath(); - } - - public static boolean isSupportedNPU() { - return false; - // String hardware = android.os.Build.HARDWARE; - // return hardware.equalsIgnoreCase("kirin810") || hardware.equalsIgnoreCase("kirin990"); - } - - public static Bitmap resizeWithStep(Bitmap bitmap, int maxLength, int step) { - int width = bitmap.getWidth(); - int height = bitmap.getHeight(); - int maxWH = Math.max(width, height); - float ratio = 1; - int newWidth = width; - int newHeight = height; - if (maxWH > maxLength) { - ratio = maxLength * 1.0f / maxWH; - newWidth = (int) Math.floor(ratio * width); - newHeight = (int) Math.floor(ratio * height); - } - - newWidth = newWidth - newWidth % step; - if (newWidth == 0) { - newWidth = step; - } - newHeight = newHeight - newHeight % step; - if (newHeight == 0) { - newHeight = step; - } - return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true); - } - - public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) { - - Matrix matrix = new Matrix(); - switch (orientation) { - case ExifInterface.ORIENTATION_NORMAL: - return bitmap; - case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: - matrix.setScale(-1, 1); - break; - case ExifInterface.ORIENTATION_ROTATE_180: - matrix.setRotate(180); - break; - case ExifInterface.ORIENTATION_FLIP_VERTICAL: - matrix.setRotate(180); - matrix.postScale(-1, 1); - break; - case ExifInterface.ORIENTATION_TRANSPOSE: - matrix.setRotate(90); - matrix.postScale(-1, 1); - break; - case ExifInterface.ORIENTATION_ROTATE_90: - matrix.setRotate(90); - break; - case ExifInterface.ORIENTATION_TRANSVERSE: - matrix.setRotate(-90); - matrix.postScale(-1, 1); - break; - case ExifInterface.ORIENTATION_ROTATE_270: - matrix.setRotate(-90); - break; - default: - return bitmap; - } - try { - Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); - bitmap.recycle(); - return bmRotated; - } - catch (OutOfMemoryError e) { - e.printStackTrace(); - return null; - } - } -} diff --git a/deploy/android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/deploy/android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 1f6bb290..00000000 --- a/deploy/android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/deploy/android_demo/app/src/main/res/drawable/ic_launcher_background.xml b/deploy/android_demo/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 0d025f9b..00000000 --- a/deploy/android_demo/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deploy/android_demo/app/src/main/res/layout/activity_main.xml b/deploy/android_demo/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index adc70e20..00000000 --- a/deploy/android_demo/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deploy/android_demo/app/src/main/res/layout/activity_mini.xml b/deploy/android_demo/app/src/main/res/layout/activity_mini.xml deleted file mode 100644 index ec4622ae..00000000 --- a/deploy/android_demo/app/src/main/res/layout/activity_mini.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - -