Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_41840029
PaddleOCR
提交
ed52619f
P
PaddleOCR
项目概览
weixin_41840029
/
PaddleOCR
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleOCR
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleOCR
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ed52619f
编写于
8月 24, 2020
作者:
littletomatodonkey
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add cpp zero copy run interface
上级
0a011e56
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
52 addition
and
24 deletion
+52
-24
deploy/cpp_infer/include/config.h
deploy/cpp_infer/include/config.h
+4
-0
deploy/cpp_infer/include/ocr_det.h
deploy/cpp_infer/include/ocr_det.h
+4
-2
deploy/cpp_infer/include/ocr_rec.h
deploy/cpp_infer/include/ocr_rec.h
+4
-1
deploy/cpp_infer/src/main.cpp
deploy/cpp_infer/src/main.cpp
+7
-6
deploy/cpp_infer/src/ocr_det.cpp
deploy/cpp_infer/src/ocr_det.cpp
+16
-7
deploy/cpp_infer/src/ocr_rec.cpp
deploy/cpp_infer/src/ocr_rec.cpp
+16
-8
deploy/cpp_infer/tools/config.txt
deploy/cpp_infer/tools/config.txt
+1
-0
未找到文件。
deploy/cpp_infer/include/config.h
浏览文件 @
ed52619f
...
@@ -41,6 +41,8 @@ public:
...
@@ -41,6 +41,8 @@ public:
this
->
use_mkldnn
=
bool
(
stoi
(
config_map_
[
"use_mkldnn"
]));
this
->
use_mkldnn
=
bool
(
stoi
(
config_map_
[
"use_mkldnn"
]));
this
->
use_zero_copy_run
=
bool
(
stoi
(
config_map_
[
"use_zero_copy_run"
]));
this
->
max_side_len
=
stoi
(
config_map_
[
"max_side_len"
]);
this
->
max_side_len
=
stoi
(
config_map_
[
"max_side_len"
]);
this
->
det_db_thresh
=
stod
(
config_map_
[
"det_db_thresh"
]);
this
->
det_db_thresh
=
stod
(
config_map_
[
"det_db_thresh"
]);
...
@@ -68,6 +70,8 @@ public:
...
@@ -68,6 +70,8 @@ public:
bool
use_mkldnn
=
false
;
bool
use_mkldnn
=
false
;
bool
use_zero_copy_run
=
false
;
int
max_side_len
=
960
;
int
max_side_len
=
960
;
double
det_db_thresh
=
0.3
;
double
det_db_thresh
=
0.3
;
...
...
deploy/cpp_infer/include/ocr_det.h
浏览文件 @
ed52619f
...
@@ -39,8 +39,8 @@ public:
...
@@ -39,8 +39,8 @@ public:
explicit
DBDetector
(
const
std
::
string
&
model_dir
,
const
bool
&
use_gpu
,
explicit
DBDetector
(
const
std
::
string
&
model_dir
,
const
bool
&
use_gpu
,
const
int
&
gpu_id
,
const
int
&
gpu_mem
,
const
int
&
gpu_id
,
const
int
&
gpu_mem
,
const
int
&
cpu_math_library_num_threads
,
const
int
&
cpu_math_library_num_threads
,
const
bool
&
use_mkldnn
,
const
int
&
max_side_le
n
,
const
bool
&
use_mkldnn
,
const
bool
&
use_zero_copy_ru
n
,
const
double
&
det_db_thresh
,
const
int
&
max_side_len
,
const
double
&
det_db_thresh
,
const
double
&
det_db_box_thresh
,
const
double
&
det_db_box_thresh
,
const
double
&
det_db_unclip_ratio
,
const
double
&
det_db_unclip_ratio
,
const
bool
&
visualize
)
{
const
bool
&
visualize
)
{
...
@@ -49,6 +49,7 @@ public:
...
@@ -49,6 +49,7 @@ public:
this
->
gpu_mem_
=
gpu_mem
;
this
->
gpu_mem_
=
gpu_mem
;
this
->
cpu_math_library_num_threads_
=
cpu_math_library_num_threads
;
this
->
cpu_math_library_num_threads_
=
cpu_math_library_num_threads
;
this
->
use_mkldnn_
=
use_mkldnn
;
this
->
use_mkldnn_
=
use_mkldnn
;
this
->
use_zero_copy_run_
=
use_zero_copy_run
;
this
->
max_side_len_
=
max_side_len
;
this
->
max_side_len_
=
max_side_len
;
...
@@ -75,6 +76,7 @@ private:
...
@@ -75,6 +76,7 @@ private:
int
gpu_mem_
=
4000
;
int
gpu_mem_
=
4000
;
int
cpu_math_library_num_threads_
=
4
;
int
cpu_math_library_num_threads_
=
4
;
bool
use_mkldnn_
=
false
;
bool
use_mkldnn_
=
false
;
bool
use_zero_copy_run_
=
false
;
int
max_side_len_
=
960
;
int
max_side_len_
=
960
;
...
...
deploy/cpp_infer/include/ocr_rec.h
浏览文件 @
ed52619f
...
@@ -38,12 +38,14 @@ public:
...
@@ -38,12 +38,14 @@ public:
explicit
CRNNRecognizer
(
const
std
::
string
&
model_dir
,
const
bool
&
use_gpu
,
explicit
CRNNRecognizer
(
const
std
::
string
&
model_dir
,
const
bool
&
use_gpu
,
const
int
&
gpu_id
,
const
int
&
gpu_mem
,
const
int
&
gpu_id
,
const
int
&
gpu_mem
,
const
int
&
cpu_math_library_num_threads
,
const
int
&
cpu_math_library_num_threads
,
const
bool
&
use_mkldnn
,
const
string
&
label_path
)
{
const
bool
&
use_mkldnn
,
const
bool
&
use_zero_copy_run
,
const
string
&
label_path
)
{
this
->
use_gpu_
=
use_gpu
;
this
->
use_gpu_
=
use_gpu
;
this
->
gpu_id_
=
gpu_id
;
this
->
gpu_id_
=
gpu_id
;
this
->
gpu_mem_
=
gpu_mem
;
this
->
gpu_mem_
=
gpu_mem
;
this
->
cpu_math_library_num_threads_
=
cpu_math_library_num_threads
;
this
->
cpu_math_library_num_threads_
=
cpu_math_library_num_threads
;
this
->
use_mkldnn_
=
use_mkldnn
;
this
->
use_mkldnn_
=
use_mkldnn
;
this
->
use_zero_copy_run_
=
use_zero_copy_run
;
this
->
label_list_
=
Utility
::
ReadDict
(
label_path
);
this
->
label_list_
=
Utility
::
ReadDict
(
label_path
);
this
->
label_list_
.
push_back
(
" "
);
this
->
label_list_
.
push_back
(
" "
);
...
@@ -64,6 +66,7 @@ private:
...
@@ -64,6 +66,7 @@ private:
int
gpu_mem_
=
4000
;
int
gpu_mem_
=
4000
;
int
cpu_math_library_num_threads_
=
4
;
int
cpu_math_library_num_threads_
=
4
;
bool
use_mkldnn_
=
false
;
bool
use_mkldnn_
=
false
;
bool
use_zero_copy_run_
=
false
;
std
::
vector
<
std
::
string
>
label_list_
;
std
::
vector
<
std
::
string
>
label_list_
;
...
...
deploy/cpp_infer/src/main.cpp
浏览文件 @
ed52619f
...
@@ -48,14 +48,15 @@ int main(int argc, char **argv) {
...
@@ -48,14 +48,15 @@ int main(int argc, char **argv) {
cv
::
Mat
srcimg
=
cv
::
imread
(
img_path
,
cv
::
IMREAD_COLOR
);
cv
::
Mat
srcimg
=
cv
::
imread
(
img_path
,
cv
::
IMREAD_COLOR
);
DBDetector
det
(
config
.
det_model_dir
,
config
.
use_gpu
,
config
.
gpu_id
,
DBDetector
det
(
config
.
gpu_mem
,
config
.
cpu_math_library_num_threads
,
config
.
det_model_dir
,
config
.
use_gpu
,
config
.
gpu_id
,
config
.
gpu_mem
,
config
.
use_mkldnn
,
config
.
max_side_len
,
config
.
det_db_thresh
,
config
.
cpu_math_library_num_threads
,
config
.
use_mkldnn
,
config
.
det_db_box_thresh
,
config
.
det_db_unclip_ratio
,
config
.
use_zero_copy_run
,
config
.
max_side_len
,
config
.
det_db_thresh
,
config
.
visualize
);
config
.
det_db_box_thresh
,
config
.
det_db_unclip_ratio
,
config
.
visualize
);
CRNNRecognizer
rec
(
config
.
rec_model_dir
,
config
.
use_gpu
,
config
.
gpu_id
,
CRNNRecognizer
rec
(
config
.
rec_model_dir
,
config
.
use_gpu
,
config
.
gpu_id
,
config
.
gpu_mem
,
config
.
cpu_math_library_num_threads
,
config
.
gpu_mem
,
config
.
cpu_math_library_num_threads
,
config
.
use_mkldnn
,
config
.
char_list_file
);
config
.
use_mkldnn
,
config
.
use_zero_copy_run
,
config
.
char_list_file
);
auto
start
=
std
::
chrono
::
system_clock
::
now
();
auto
start
=
std
::
chrono
::
system_clock
::
now
();
std
::
vector
<
std
::
vector
<
std
::
vector
<
int
>>>
boxes
;
std
::
vector
<
std
::
vector
<
std
::
vector
<
int
>>>
boxes
;
...
...
deploy/cpp_infer/src/ocr_det.cpp
浏览文件 @
ed52619f
...
@@ -32,7 +32,7 @@ void DBDetector::LoadModel(const std::string &model_dir) {
...
@@ -32,7 +32,7 @@ void DBDetector::LoadModel(const std::string &model_dir) {
// false for zero copy tensor
// false for zero copy tensor
// true for commom tensor
// true for commom tensor
config
.
SwitchUseFeedFetchOps
(
true
);
config
.
SwitchUseFeedFetchOps
(
!
this
->
use_zero_copy_run_
);
// true for multiple input
// true for multiple input
config
.
SwitchSpecifyInputNames
(
true
);
config
.
SwitchSpecifyInputNames
(
true
);
...
@@ -61,12 +61,21 @@ void DBDetector::Run(cv::Mat &img,
...
@@ -61,12 +61,21 @@ void DBDetector::Run(cv::Mat &img,
this
->
permute_op_
.
Run
(
&
resize_img
,
input
.
data
());
this
->
permute_op_
.
Run
(
&
resize_img
,
input
.
data
());
// Inference.
// Inference.
if
(
this
->
use_zero_copy_run_
)
{
auto
input_names
=
this
->
predictor_
->
GetInputNames
();
auto
input_t
=
this
->
predictor_
->
GetInputTensor
(
input_names
[
0
]);
input_t
->
Reshape
({
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
});
input_t
->
copy_from_cpu
(
input
.
data
());
this
->
predictor_
->
ZeroCopyRun
();
}
else
{
paddle
::
PaddleTensor
input_t
;
paddle
::
PaddleTensor
input_t
;
input_t
.
shape
=
{
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
};
input_t
.
shape
=
{
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
};
input_t
.
data
=
paddle
::
PaddleBuf
(
input
.
data
(),
input
.
size
()
*
sizeof
(
float
));
input_t
.
data
=
paddle
::
PaddleBuf
(
input
.
data
(),
input
.
size
()
*
sizeof
(
float
));
input_t
.
dtype
=
PaddleDType
::
FLOAT32
;
input_t
.
dtype
=
PaddleDType
::
FLOAT32
;
std
::
vector
<
paddle
::
PaddleTensor
>
outputs
;
std
::
vector
<
paddle
::
PaddleTensor
>
outputs
;
this
->
predictor_
->
Run
({
input_t
},
&
outputs
,
1
);
this
->
predictor_
->
Run
({
input_t
},
&
outputs
,
1
);
}
std
::
vector
<
float
>
out_data
;
std
::
vector
<
float
>
out_data
;
auto
output_names
=
this
->
predictor_
->
GetOutputNames
();
auto
output_names
=
this
->
predictor_
->
GetOutputNames
();
...
...
deploy/cpp_infer/src/ocr_rec.cpp
浏览文件 @
ed52619f
...
@@ -40,6 +40,13 @@ void CRNNRecognizer::Run(std::vector<std::vector<std::vector<int>>> boxes,
...
@@ -40,6 +40,13 @@ void CRNNRecognizer::Run(std::vector<std::vector<std::vector<int>>> boxes,
this
->
permute_op_
.
Run
(
&
resize_img
,
input
.
data
());
this
->
permute_op_
.
Run
(
&
resize_img
,
input
.
data
());
// Inference.
// Inference.
if
(
this
->
use_zero_copy_run_
)
{
auto
input_names
=
this
->
predictor_
->
GetInputNames
();
auto
input_t
=
this
->
predictor_
->
GetInputTensor
(
input_names
[
0
]);
input_t
->
Reshape
({
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
});
input_t
->
copy_from_cpu
(
input
.
data
());
this
->
predictor_
->
ZeroCopyRun
();
}
else
{
paddle
::
PaddleTensor
input_t
;
paddle
::
PaddleTensor
input_t
;
input_t
.
shape
=
{
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
};
input_t
.
shape
=
{
1
,
3
,
resize_img
.
rows
,
resize_img
.
cols
};
input_t
.
data
=
input_t
.
data
=
...
@@ -47,6 +54,7 @@ void CRNNRecognizer::Run(std::vector<std::vector<std::vector<int>>> boxes,
...
@@ -47,6 +54,7 @@ void CRNNRecognizer::Run(std::vector<std::vector<std::vector<int>>> boxes,
input_t
.
dtype
=
PaddleDType
::
FLOAT32
;
input_t
.
dtype
=
PaddleDType
::
FLOAT32
;
std
::
vector
<
paddle
::
PaddleTensor
>
outputs
;
std
::
vector
<
paddle
::
PaddleTensor
>
outputs
;
this
->
predictor_
->
Run
({
input_t
},
&
outputs
,
1
);
this
->
predictor_
->
Run
({
input_t
},
&
outputs
,
1
);
}
std
::
vector
<
int64_t
>
rec_idx
;
std
::
vector
<
int64_t
>
rec_idx
;
auto
output_names
=
this
->
predictor_
->
GetOutputNames
();
auto
output_names
=
this
->
predictor_
->
GetOutputNames
();
...
@@ -124,7 +132,7 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) {
...
@@ -124,7 +132,7 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) {
// false for zero copy tensor
// false for zero copy tensor
// true for commom tensor
// true for commom tensor
config
.
SwitchUseFeedFetchOps
(
true
);
config
.
SwitchUseFeedFetchOps
(
!
this
->
use_zero_copy_run_
);
// true for multiple input
// true for multiple input
config
.
SwitchSpecifyInputNames
(
true
);
config
.
SwitchSpecifyInputNames
(
true
);
...
...
deploy/cpp_infer/tools/config.txt
浏览文件 @
ed52619f
...
@@ -4,6 +4,7 @@ gpu_id 0
...
@@ -4,6 +4,7 @@ gpu_id 0
gpu_mem 4000
gpu_mem 4000
cpu_math_library_num_threads 10
cpu_math_library_num_threads 10
use_mkldnn 0
use_mkldnn 0
use_zero_copy_run 1
# det config
# det config
max_side_len 960
max_side_len 960
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录