Fix (#14795)
parent
1d52a2b2e1
commit
f35dfef921
benchmark/PaddleOCR_DBNet
models
backbone
losses
post_processing
tools
utils/cal_recall
deploy
android_demo
app/src/main/cpp
cpp_infer
include
paddlejs
docs
algorithm/text_recognition
infer_deploy
ppocr/postprocess
tools/infer
|
@ -265,7 +265,7 @@ def resnet18(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
print("load from imagenet")
|
||||
load_models(model, "resnet18")
|
||||
return model
|
||||
|
@ -280,7 +280,7 @@ def deformable_resnet18(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
print("load from imagenet")
|
||||
model.load_state_dict(model_zoo.load_url(model_urls["resnet18"]), strict=False)
|
||||
return model
|
||||
|
@ -295,7 +295,7 @@ def resnet34(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
model.load_state_dict(model_zoo.load_url(model_urls["resnet34"]), strict=False)
|
||||
return model
|
||||
|
||||
|
@ -309,7 +309,7 @@ def resnet50(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
load_models(model, "resnet50")
|
||||
return model
|
||||
|
||||
|
@ -323,7 +323,7 @@ def deformable_resnet50(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
model.load_state_dict(model_zoo.load_url(model_urls["resnet50"]), strict=False)
|
||||
return model
|
||||
|
||||
|
@ -337,7 +337,7 @@ def resnet101(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
model.load_state_dict(model_zoo.load_url(model_urls["resnet101"]), strict=False)
|
||||
return model
|
||||
|
||||
|
@ -351,7 +351,7 @@ def resnet152(pretrained=True, **kwargs):
|
|||
if pretrained:
|
||||
assert (
|
||||
kwargs.get("in_channels", 3) == 3
|
||||
), "in_channels must be 3 whem pretrained is True"
|
||||
), "in_channels must be 3 when pretrained is True"
|
||||
model.load_state_dict(model_zoo.load_url(model_urls["resnet152"]), strict=False)
|
||||
return model
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ class DiceLoss(nn.Layer):
|
|||
"""
|
||||
Loss function from https://arxiv.org/abs/1707.03237,
|
||||
where iou computation is introduced heatmap manner to measure the
|
||||
diversity bwtween tow heatmaps.
|
||||
diversity between tow heatmaps.
|
||||
"""
|
||||
|
||||
def __init__(self, eps=1e-6):
|
||||
|
|
|
@ -27,7 +27,7 @@ class SegDetectorRepresenter:
|
|||
pred:
|
||||
binary: text region segmentation map, with shape (N, H, W)
|
||||
thresh: [if exists] thresh hold prediction with shape (N, H, W)
|
||||
thresh_binary: [if exists] binarized with threshhold, (N, H, W)
|
||||
thresh_binary: [if exists] binarized with threshold, (N, H, W)
|
||||
"""
|
||||
if isinstance(pred, paddle.Tensor):
|
||||
pred = pred.numpy()
|
||||
|
|
|
@ -96,7 +96,7 @@ class InferenceEngine(object):
|
|||
initialize the inference engine
|
||||
Args:
|
||||
model_file_path: inference model path (*.pdmodel)
|
||||
model_file_path: inference parmaeter path (*.pdiparams)
|
||||
model_file_path: inference parameter path (*.pdiparams)
|
||||
Return:
|
||||
predictor: Predictor created using Paddle Inference.
|
||||
config: Configuration of the predictor.
|
||||
|
@ -112,7 +112,7 @@ class InferenceEngine(object):
|
|||
workspace_size=1 << 30,
|
||||
precision_mode=precision,
|
||||
max_batch_size=args.max_batch_size,
|
||||
min_subgraph_size=args.min_subgraph_size, # skip the minmum trt subgraph
|
||||
min_subgraph_size=args.min_subgraph_size, # skip the minimum trt subgraph
|
||||
use_calib_mode=False,
|
||||
)
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ def print_help():
|
|||
def load_zip_file_keys(file, fileNameRegExp=""):
|
||||
"""
|
||||
Returns an array with the entries of the ZIP file that match with the regular expression.
|
||||
The key's are the names or the file or the capturing group definied in the fileNameRegExp
|
||||
The key's are the names or the file or the capturing group defined in the fileNameRegExp
|
||||
"""
|
||||
try:
|
||||
archive = zipfile.ZipFile(file, mode="r", allowZip64=True)
|
||||
|
@ -54,7 +54,7 @@ def load_zip_file_keys(file, fileNameRegExp=""):
|
|||
def load_zip_file(file, fileNameRegExp="", allEntries=False):
|
||||
"""
|
||||
Returns an array with the contents (filtered by fileNameRegExp) of a ZIP file.
|
||||
The key's are the names or the file or the capturing group definied in the fileNameRegExp
|
||||
The key's are the names or the file or the capturing group defined in the fileNameRegExp
|
||||
allEntries validates that all entries in the ZIP file pass the fileNameRegExp
|
||||
"""
|
||||
try:
|
||||
|
@ -86,7 +86,7 @@ def load_zip_file(file, fileNameRegExp="", allEntries=False):
|
|||
def load_folder_file(file, fileNameRegExp="", allEntries=False):
|
||||
"""
|
||||
Returns an array with the contents (filtered by fileNameRegExp) of a ZIP file.
|
||||
The key's are the names or the file or the capturing group definied in the fileNameRegExp
|
||||
The key's are the names or the file or the capturing group defined in the fileNameRegExp
|
||||
allEntries validates that all entries in the ZIP file pass the fileNameRegExp
|
||||
"""
|
||||
pairs = []
|
||||
|
@ -164,8 +164,8 @@ def validate_tl_line(
|
|||
):
|
||||
"""
|
||||
Validate the format of the line. If the line is not valid an exception will be raised.
|
||||
If maxWidth and maxHeight are specified, all points must be inside the imgage bounds.
|
||||
Posible values are:
|
||||
If maxWidth and maxHeight are specified, all points must be inside the image bounds.
|
||||
Possible values are:
|
||||
LTRB=True: xmin,ymin,xmax,ymax[,confidence][,transcription]
|
||||
LTRB=False: x1,y1,x2,y2,x3,y3,x4,y4[,confidence][,transcription]
|
||||
"""
|
||||
|
@ -182,8 +182,8 @@ def get_tl_line_values(
|
|||
):
|
||||
"""
|
||||
Validate the format of the line. If the line is not valid an exception will be raised.
|
||||
If maxWidth and maxHeight are specified, all points must be inside the imgage bounds.
|
||||
Posible values are:
|
||||
If maxWidth and maxHeight are specified, all points must be inside the image bounds.
|
||||
Possible values are:
|
||||
LTRB=True: xmin,ymin,xmax,ymax[,confidence][,transcription]
|
||||
LTRB=False: x1,y1,x2,y2,x3,y3,x4,y4[,confidence][,transcription]
|
||||
Returns values from a textline. Points , [Confidences], [Transcriptions]
|
||||
|
@ -409,11 +409,11 @@ def main_evaluation(
|
|||
per_sample=True,
|
||||
):
|
||||
"""
|
||||
This process validates a method, evaluates it and if it succed generates a ZIP file with a JSON entry for each sample.
|
||||
This process validates a method, evaluates it and if it succeed generates a ZIP file with a JSON entry for each sample.
|
||||
Params:
|
||||
p: Dictionary of parmeters with the GT/submission locations. If None is passed, the parameters send by the system are used.
|
||||
p: Dictionary of parameters with the GT/submission locations. If None is passed, the parameters send by the system are used.
|
||||
default_evaluation_params_fn: points to a function that returns a dictionary with the default parameters used for the evaluation
|
||||
validate_data_fn: points to a method that validates the corrct format of the submission
|
||||
validate_data_fn: points to a method that validates the correct format of the submission
|
||||
evaluate_method_fn: points to a function that evaluated the submission and return a Dictionary with the results
|
||||
"""
|
||||
evalParams = default_evaluation_params_fn()
|
||||
|
@ -476,7 +476,7 @@ def main_validation(default_evaluation_params_fn, validate_data_fn):
|
|||
This process validates a method
|
||||
Params:
|
||||
default_evaluation_params_fn: points to a function that returns a dictionary with the default parameters used for the evaluation
|
||||
validate_data_fn: points to a method that validates the corrct format of the submission
|
||||
validate_data_fn: points to a method that validates the correct format of the submission
|
||||
"""
|
||||
try:
|
||||
p = dict([s[1:].split("=") for s in sys.argv[1:]])
|
||||
|
|
|
@ -2,8 +2,9 @@ English | [简体中文](README_ch.md)
|
|||
|
||||
# PP-OCR Deployment
|
||||
|
||||
- [Paddle Deployment Introduction](#1)
|
||||
- [PP-OCR Deployment](#2)
|
||||
- [PP-OCR Deployment](#pp-ocr-deployment)
|
||||
- [Paddle Deployment Introduction](#paddle-deployment-introduction)
|
||||
- [PP-OCR Deployment](#pp-ocr-deployment-1)
|
||||
|
||||
<a name="1"></a>
|
||||
## Paddle Deployment Introduction
|
||||
|
@ -18,7 +19,7 @@ Paddle provides a variety of deployment schemes to meet the deployment requireme
|
|||
<a name="2"></a>
|
||||
## PP-OCR Deployment
|
||||
|
||||
PP-OCR has supported muti deployment schemes. Click the link to get the specific tutorial.
|
||||
PP-OCR has supported multi deployment schemes. Click the link to get the specific tutorial.
|
||||
|
||||
- [Python Inference](../doc/doc_en/inference_ppocr_en.md)
|
||||
- [C++ Inference](./cpp_infer/readme.md)
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
## 3. 快速使用
|
||||
|
||||
### 3.1 环境准备
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Stuido 官网](https://developer.android.com/studio)。
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Studio 官网](https://developer.android.com/studio)。
|
||||
2. 准备一部 Android 手机,并开启 USB 调试模式。开启方法: `手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式`
|
||||
|
||||
**注意**:如果您的 Android Studio 尚未配置 NDK ,请根据 Android Studio 用户指南中的[安装及配置 NDK 和 CMake ](https://developer.android.com/studio/projects/install-ndk)内容,预先配置好 NDK 。您可以选择最新的 NDK 版本,或者使用 Paddle Lite 预测库版本一样的 NDK
|
||||
|
|
|
@ -2566,7 +2566,7 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge) {
|
|||
while (e) {
|
||||
|
||||
// this code block inserts extra coords into horizontal edges (in output
|
||||
// polygons) whereever maxima touch these horizontal edges. This helps
|
||||
// polygons) wherever maxima touch these horizontal edges. This helps
|
||||
//'simplifying' polygons (ie if the Simplify property is set).
|
||||
if (m_Maxima.size() > 0) {
|
||||
if (dir == dLeftToRight) {
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
// 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.
|
||||
// use_xyz: adds a Z member to IntPoint. Adds a minor cost to performance.
|
||||
//#define use_xyz
|
||||
|
||||
// use_lines: Enables line clipping. Adds a very minor cost to performance.
|
||||
|
|
|
@ -59,7 +59,7 @@ DEFINE_string(layout_dict_path,
|
|||
DEFINE_double(layout_score_threshold, 0.5, "Threshold of score.");
|
||||
DEFINE_double(layout_nms_threshold, 0.5, "Threshold of nms.");
|
||||
// structure model related
|
||||
DEFINE_string(table_model_dir, "", "Path of table struture inference model.");
|
||||
DEFINE_string(table_model_dir, "", "Path of table structure inference model.");
|
||||
DEFINE_int32(table_max_len, 488, "max len size of input image.");
|
||||
DEFINE_int32(table_batch_num, 1, "table_batch_num.");
|
||||
DEFINE_bool(merge_no_span_structure, true,
|
||||
|
|
|
@ -2571,7 +2571,7 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge) noexcept {
|
|||
while (e) {
|
||||
|
||||
// this code block inserts extra coords into horizontal edges (in output
|
||||
// polygons) whereever maxima touch these horizontal edges. This helps
|
||||
// polygons) wherever maxima touch these horizontal edges. This helps
|
||||
//'simplifying' polygons (ie if the Simplify property is set).
|
||||
if (m_Maxima.size() > 0) {
|
||||
if (dir == dLeftToRight) {
|
||||
|
|
|
@ -74,7 +74,7 @@ void check_params() {
|
|||
}
|
||||
if (FLAGS_precision != "fp32" && FLAGS_precision != "fp16" &&
|
||||
FLAGS_precision != "int8") {
|
||||
std::cout << "precison should be 'fp32'(default), 'fp16' or 'int8'. "
|
||||
std::cout << "precision should be 'fp32'(default), 'fp16' or 'int8'. "
|
||||
<< std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
## 环境准备
|
||||
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Stuido 官网](https://developer.android.com/studio)。
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Studio 官网](https://developer.android.com/studio)。
|
||||
2. 准备一部 Android 手机,并开启 USB 调试模式。开启方法: `手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式`
|
||||
|
||||
## 部署步骤
|
||||
|
|
|
@ -217,7 +217,7 @@ ppocr_v3.rec_batch_size = args.rec_bs
|
|||
# Read the input image
|
||||
im = cv2.imread(args.image)
|
||||
|
||||
# Predict and reutrn the results
|
||||
# Predict and return the results
|
||||
result = ppocr_v3.predict(im)
|
||||
|
||||
print(result)
|
||||
|
|
|
@ -33,7 +33,7 @@ class TritonPythonModel:
|
|||
def initialize(self, args):
|
||||
"""`initialize` is called only once when the model is being loaded.
|
||||
Implementing `initialize` function is optional. This function allows
|
||||
the model to intialize any state associated with this model.
|
||||
the model to initialize any state associated with this model.
|
||||
Parameters
|
||||
----------
|
||||
args : dict
|
||||
|
|
|
@ -83,7 +83,7 @@ class TritonPythonModel:
|
|||
def initialize(self, args):
|
||||
"""`initialize` is called only once when the model is being loaded.
|
||||
Implementing `initialize` function is optional. This function allows
|
||||
the model to intialize any state associated with this model.
|
||||
the model to initialize any state associated with this model.
|
||||
Parameters
|
||||
----------
|
||||
args : dict
|
||||
|
|
|
@ -33,7 +33,7 @@ class TritonPythonModel:
|
|||
def initialize(self, args):
|
||||
"""`initialize` is called only once when the model is being loaded.
|
||||
Implementing `initialize` function is optional. This function allows
|
||||
the model to intialize any state associated with this model.
|
||||
the model to initialize any state associated with this model.
|
||||
Parameters
|
||||
----------
|
||||
args : dict
|
||||
|
|
|
@ -35,7 +35,7 @@ class TritonPythonModel:
|
|||
def initialize(self, args):
|
||||
"""`initialize` is called only once when the model is being loaded.
|
||||
Implementing `initialize` function is optional. This function allows
|
||||
the model to intialize any state associated with this model.
|
||||
the model to initialize any state associated with this model.
|
||||
Parameters
|
||||
----------
|
||||
args : dict
|
||||
|
|
|
@ -72,7 +72,7 @@ class KIESer(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -72,7 +72,7 @@ class KIESerRE(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -68,7 +68,7 @@ class OCRCls(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -70,7 +70,7 @@ class OCRDet(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -30,14 +30,14 @@ def read_params():
|
|||
cfg.det_limit_side_len = 960
|
||||
cfg.det_limit_type = "max"
|
||||
|
||||
# DB parmas
|
||||
# DB params
|
||||
cfg.det_db_thresh = 0.3
|
||||
cfg.det_db_box_thresh = 0.6
|
||||
cfg.det_db_unclip_ratio = 1.5
|
||||
cfg.use_dilation = False
|
||||
cfg.det_db_score_mode = "fast"
|
||||
|
||||
# #EAST parmas
|
||||
# #EAST params
|
||||
# cfg.det_east_score_thresh = 0.8
|
||||
# cfg.det_east_cover_thresh = 0.1
|
||||
# cfg.det_east_nms_thresh = 0.2
|
||||
|
|
|
@ -68,7 +68,7 @@ class OCRRec(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -71,7 +71,7 @@ class OCRSystem(hub.Module):
|
|||
def merge_configs(
|
||||
self,
|
||||
):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -30,14 +30,14 @@ def read_params():
|
|||
cfg.det_limit_side_len = 960
|
||||
cfg.det_limit_type = "max"
|
||||
|
||||
# DB parmas
|
||||
# DB params
|
||||
cfg.det_db_thresh = 0.3
|
||||
cfg.det_db_box_thresh = 0.5
|
||||
cfg.det_db_unclip_ratio = 1.6
|
||||
cfg.use_dilation = False
|
||||
cfg.det_db_score_mode = "fast"
|
||||
|
||||
# EAST parmas
|
||||
# EAST params
|
||||
cfg.det_east_score_thresh = 0.8
|
||||
cfg.det_east_cover_thresh = 0.1
|
||||
cfg.det_east_nms_thresh = 0.2
|
||||
|
|
|
@ -67,7 +67,7 @@ class LayoutPredictor(hub.Module):
|
|||
self.layout_predictor = _LayoutPredictor(cfg)
|
||||
|
||||
def merge_configs(self):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -70,7 +70,7 @@ class StructureSystem(hub.Module):
|
|||
self.table_sys = PPStructureSystem(cfg)
|
||||
|
||||
def merge_configs(self):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -69,7 +69,7 @@ class TableSystem(hub.Module):
|
|||
self.table_sys = _TableSystem(cfg)
|
||||
|
||||
def merge_configs(self):
|
||||
# deafult cfg
|
||||
# default cfg
|
||||
backup_argv = copy.deepcopy(sys.argv)
|
||||
sys.argv = sys.argv[:1]
|
||||
cfg = parse_args()
|
||||
|
|
|
@ -13,7 +13,7 @@ Run OCR demo in browser refer to [tutorial](https://github.com/PaddlePaddle/Fast
|
|||
|
||||
|
||||
## Mini Program Demo
|
||||
The Mini Program demo running tutorial eference
|
||||
The Mini Program demo running tutorial reference
|
||||
Run OCR demo in wechat miniprogram refer to [tutorial](https://github.com/PaddlePaddle/FastDeploy/tree/develop/examples/application/js/mini_program).
|
||||
|
||||
|demo|directory|
|
||||
|
|
|
@ -40,7 +40,7 @@ The accuracy (%) and model files of CPPD on the public dataset of scene text rec
|
|||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|:-----:|:-------:|:-------:|
|
||||
| CPPD Base 32*128 | 87.5 | 70.7 | 78.2 | 82.9 | 85.5 | 85.4 | 84.3 | 82.08 | Same as the table above. |
|
||||
|
||||
* Chinese dataset from [Chinese Benckmark](https://github.com/FudanVI/benchmarking-chinese-text-recognition).
|
||||
* Chinese dataset from [Chinese Benchmark](https://github.com/FudanVI/benchmarking-chinese-text-recognition).
|
||||
|
||||
| Model | Scene | Web | Document | Handwriting | Avg | Download |
|
||||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|
|
||||
|
|
|
@ -52,7 +52,7 @@ CPPD在场景文本识别公开数据集上的精度(%)和模型文件如下:
|
|||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|:-----:|:-------:|:-------:|
|
||||
| CPPD Base 32*128 | 87.5 | 70.7 | 78.2 | 82.9 | 85.5 | 85.4 | 84.3 | 82.08 | 同上表 |
|
||||
|
||||
* 中文训练集和测试集来自于[Chinese Benckmark](https://github.com/FudanVI/benchmarking-chinese-text-recognition)。
|
||||
* 中文训练集和测试集来自于[Chinese Benchmark](https://github.com/FudanVI/benchmarking-chinese-text-recognition)。
|
||||
|
||||
| 模型 | Scene | Web | Document | Handwriting | Avg | 下载链接 |
|
||||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|
|
||||
|
|
|
@ -13,7 +13,7 @@ Paper:
|
|||
|
||||
The accuracy (%) and model files of SVTR on the public dataset of scene text recognition are as follows:
|
||||
|
||||
* Chinese dataset from [Chinese Benckmark](https://arxiv.org/abs/2112.15093) , and the Chinese training evaluation strategy of SVTR follows the paper.
|
||||
* Chinese dataset from [Chinese Benchmark](https://arxiv.org/abs/2112.15093) , and the Chinese training evaluation strategy of SVTR follows the paper.
|
||||
|
||||
| Model |IC13<br/>857 | SVT |IIIT5k<br/>3000 |IC15<br/>1811| SVTP |CUTE80 | Avg_6 |IC15<br/>2077 |IC13<br/>1015 |IC03<br/>867|IC03<br/>860|Avg_10 | Chinese<br/>scene_test| Download link |
|
||||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|:-----:|:-------:|:-------:|:-----:|:-----:|:---------------------------------------------:|:-----:|:------:|
|
||||
|
|
|
@ -23,7 +23,7 @@ comments: true
|
|||
|
||||
SVTR在场景文本识别公开数据集上的精度(%)和模型文件如下:
|
||||
|
||||
* 中文数据集来自于[Chinese Benckmark](https://arxiv.org/abs/2112.15093) ,SVTR的中文训练评估策略遵循该论文。
|
||||
* 中文数据集来自于[Chinese Benchmark](https://arxiv.org/abs/2112.15093) ,SVTR的中文训练评估策略遵循该论文。
|
||||
|
||||
| 模型 |IC13<br/>857 | SVT |IIIT5k<br/>3000 |IC15<br/>1811| SVTP |CUTE80 | Avg_6 |IC15<br/>2077 |IC13<br/>1015 |IC03<br/>867|IC03<br/>860|Avg_10 | Chinese<br/>scene_test| 下载链接 |
|
||||
|:----------:|:------:|:-----:|:---------:|:------:|:-----:|:-----:|:-----:|:-------:|:-------:|:-----:|:-----:|:------:|:-----:|:-----:|
|
||||
|
|
|
@ -27,7 +27,7 @@ hide:
|
|||
|
||||
### 3.1 环境准备
|
||||
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Stuido 官网](https://developer.android.com/studio)。
|
||||
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Studio 官网](https://developer.android.com/studio)。
|
||||
2. 准备一部 Android 手机,并开启 USB 调试模式。开启方法: `手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式`
|
||||
|
||||
**注意**:如果您的 Android Studio 尚未配置 NDK ,请根据 Android Studio 用户指南中的[安装及配置 NDK 和 CMake](https://developer.android.com/studio/projects/install-ndk)内容,预先配置好 NDK 。您可以选择最新的 NDK 版本,或者使用 Paddle Lite 预测库版本一样的 NDK
|
||||
|
|
|
@ -85,7 +85,7 @@ class EASTPostProcess(object):
|
|||
if boxes.shape[0] == 0:
|
||||
return []
|
||||
# Here we filter some low score boxes by the average score map,
|
||||
# this is different from the orginal paper.
|
||||
# this is different from the original paper.
|
||||
for i, box in enumerate(boxes):
|
||||
mask = np.zeros_like(score_map, dtype=np.uint8)
|
||||
cv2.fillPoly(mask, box[:8].reshape((-1, 4, 2)).astype(np.int32) // 4, 1)
|
||||
|
|
|
@ -63,7 +63,7 @@ def init_args():
|
|||
parser.add_argument("--det_limit_type", type=str, default="max")
|
||||
parser.add_argument("--det_box_type", type=str, default="quad")
|
||||
|
||||
# DB parmas
|
||||
# DB params
|
||||
parser.add_argument("--det_db_thresh", type=float, default=0.3)
|
||||
parser.add_argument("--det_db_box_thresh", type=float, default=0.6)
|
||||
parser.add_argument("--det_db_unclip_ratio", type=float, default=1.5)
|
||||
|
@ -71,22 +71,22 @@ def init_args():
|
|||
parser.add_argument("--use_dilation", type=str2bool, default=False)
|
||||
parser.add_argument("--det_db_score_mode", type=str, default="fast")
|
||||
|
||||
# EAST parmas
|
||||
# EAST params
|
||||
parser.add_argument("--det_east_score_thresh", type=float, default=0.8)
|
||||
parser.add_argument("--det_east_cover_thresh", type=float, default=0.1)
|
||||
parser.add_argument("--det_east_nms_thresh", type=float, default=0.2)
|
||||
|
||||
# SAST parmas
|
||||
# SAST params
|
||||
parser.add_argument("--det_sast_score_thresh", type=float, default=0.5)
|
||||
parser.add_argument("--det_sast_nms_thresh", type=float, default=0.2)
|
||||
|
||||
# PSE parmas
|
||||
# PSE params
|
||||
parser.add_argument("--det_pse_thresh", type=float, default=0)
|
||||
parser.add_argument("--det_pse_box_thresh", type=float, default=0.85)
|
||||
parser.add_argument("--det_pse_min_area", type=float, default=16)
|
||||
parser.add_argument("--det_pse_scale", type=int, default=1)
|
||||
|
||||
# FCE parmas
|
||||
# FCE params
|
||||
parser.add_argument("--scales", type=list, default=[8, 16, 32])
|
||||
parser.add_argument("--alpha", type=float, default=1.0)
|
||||
parser.add_argument("--beta", type=float, default=1.0)
|
||||
|
@ -112,7 +112,7 @@ def init_args():
|
|||
parser.add_argument("--e2e_limit_side_len", type=float, default=768)
|
||||
parser.add_argument("--e2e_limit_type", type=str, default="max")
|
||||
|
||||
# PGNet parmas
|
||||
# PGNet params
|
||||
parser.add_argument("--e2e_pgnet_score_thresh", type=float, default=0.5)
|
||||
parser.add_argument(
|
||||
"--e2e_char_dict_path", type=str, default="./ppocr/utils/ic15_dict.txt"
|
||||
|
@ -133,7 +133,7 @@ def init_args():
|
|||
parser.add_argument("--use_pdserving", type=str2bool, default=False)
|
||||
parser.add_argument("--warmup", type=str2bool, default=False)
|
||||
|
||||
# SR parmas
|
||||
# SR params
|
||||
parser.add_argument("--sr_model_dir", type=str)
|
||||
parser.add_argument("--sr_image_shape", type=str, default="3, 32, 128")
|
||||
parser.add_argument("--sr_batch_num", type=int, default=1)
|
||||
|
|
Loading…
Reference in New Issue