mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-04 00:06:38 +08:00
[Android] Add PP-OCRv3 int8 docs and fix NULL cls result error (#762)
* [Android] Update ppseg jni via new api and optimize jni vis funcs * delete local refs * [Android] Add PPTinyPose jni and java api * [Android] Update gradle download tasks info * [Android] Add PPTinyPose Android app example * update app build.gradle * [Android] Add PP-OCRv3 int8 docs and fix NULL cls result error
This commit is contained in:
@@ -79,6 +79,26 @@ public boolean initialized(); // 检查是否初始化成功
|
||||
<string name="OCR_MODEL_DIR_DEFAULT">models</string>
|
||||
<string name="OCR_LABEL_PATH_DEFAULT">labels/ppocr_keys_v1.txt</string>
|
||||
```
|
||||
## 使用量化模型
|
||||
如果您使用的是量化格式的模型,只需要使用RuntimeOption的enableLiteInt8()接口设置Int8精度推理即可。
|
||||
```java
|
||||
String detModelFile = "ch_ppocrv3_plate_det_quant/inference.pdmodel";
|
||||
String detParamsFile = "ch_ppocrv3_plate_det_quant/inference.pdiparams";
|
||||
String recModelFile = "ch_ppocrv3_plate_rec_distillation_quant/inference.pdmodel";
|
||||
String recParamsFile = "ch_ppocrv3_plate_rec_distillation_quant/inference.pdiparams";
|
||||
String recLabelFilePath = "ppocr_keys_v1.txt"; // ppocr_keys_v1.txt
|
||||
RuntimeOption detOption = new RuntimeOption();
|
||||
RuntimeOption recOption = new RuntimeOption();
|
||||
// 使用Int8精度进行推理
|
||||
detOption.enableLiteInt8();
|
||||
recOption.enableLiteInt8();
|
||||
// 初始化PP-OCRv3 Pipeline
|
||||
PPOCRv3 predictor = new PPOCRv3();
|
||||
DBDetector detModel = new DBDetector(detModelFile, detParamsFile, detOption);
|
||||
Recognizer recModel = new Recognizer(recModelFile, recParamsFile, recLabelFilePath, recOption);
|
||||
predictor.init(detModel, recModel);
|
||||
```
|
||||
在App中使用,可以参考 [OcrMainActivity.java](./app/src/main/java/com/baidu/paddle/fastdeploy/app/examples/ocr/OcrMainActivity.java) 中的用法。
|
||||
|
||||
## 更多参考文档
|
||||
如果您想知道更多的FastDeploy Java API文档以及如何通过JNI来接入FastDeploy C++ API感兴趣,可以参考以下内容:
|
||||
|
@@ -15,14 +15,14 @@
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity android:name=".keypointdetection.KeyPointDetectionMainActivity">
|
||||
<activity android:name=".ocr.OcrMainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".keypointdetection.KeyPointDetectionSettingsActivity"
|
||||
android:name=".ocr.OcrSettingsActivity"
|
||||
android:label="Settings">
|
||||
</activity>
|
||||
</application>
|
||||
|
@@ -31,6 +31,7 @@ import android.widget.TextView;
|
||||
import com.baidu.paddle.fastdeploy.RuntimeOption;
|
||||
import com.baidu.paddle.fastdeploy.app.examples.R;
|
||||
import com.baidu.paddle.fastdeploy.pipeline.PPOCRv2;
|
||||
import com.baidu.paddle.fastdeploy.pipeline.PPOCRv3;
|
||||
import com.baidu.paddle.fastdeploy.ui.Utils;
|
||||
import com.baidu.paddle.fastdeploy.ui.view.CameraSurfaceView;
|
||||
import com.baidu.paddle.fastdeploy.ui.view.ResultListView;
|
||||
@@ -41,6 +42,7 @@ import com.baidu.paddle.fastdeploy.vision.Visualize;
|
||||
import com.baidu.paddle.fastdeploy.vision.ocr.Classifier;
|
||||
import com.baidu.paddle.fastdeploy.vision.ocr.DBDetector;
|
||||
import com.baidu.paddle.fastdeploy.vision.ocr.Recognizer;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -423,9 +425,7 @@ public class OcrMainActivity extends Activity implements View.OnClickListener, C
|
||||
if (OcrSettingsActivity.checkAndUpdateSettings(this)) {
|
||||
String realModelDir = getCacheDir() + "/" + OcrSettingsActivity.modelDir;
|
||||
String detModelName = "ch_PP-OCRv2_det_infer";
|
||||
// String detModelName = "ch_ppocr_mobile_v2.0_det_infer";
|
||||
String clsModelName = "ch_ppocr_mobile_v2.0_cls_infer";
|
||||
// String recModelName = "ch_ppocr_mobile_v2.0_rec_infer";
|
||||
String recModelName = "ch_PP-OCRv2_rec_infer";
|
||||
String realDetModelDir = realModelDir + "/" + detModelName;
|
||||
String realClsModelDir = realModelDir + "/" + clsModelName;
|
||||
@@ -460,11 +460,11 @@ public class OcrMainActivity extends Activity implements View.OnClickListener, C
|
||||
clsOption.enableLiteFp16();
|
||||
recOption.enableLiteFp16();
|
||||
}
|
||||
|
||||
DBDetector detModel = new DBDetector(detModelFile, detParamsFile, detOption);
|
||||
Classifier clsModel = new Classifier(clsModelFile, clsParamsFile, clsOption);
|
||||
Recognizer recModel = new Recognizer(recModelFile, recParamsFile, recLabelFilePath, recOption);
|
||||
predictor.init(detModel, clsModel, recModel);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -842,10 +842,13 @@ bool AllocateOCRResultFromJava(
|
||||
return false;
|
||||
}
|
||||
|
||||
const int cls_len = env->GetArrayLength(j_ocr_cls_scores_float_arr);
|
||||
int cls_len = 0;
|
||||
if ((j_ocr_cls_labels_int_arr != NULL) && (j_ocr_cls_scores_float_arr != NULL)) {
|
||||
cls_len = env->GetArrayLength(j_ocr_cls_scores_float_arr);
|
||||
if (cls_len != env->GetArrayLength(j_ocr_cls_labels_int_arr)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Init cxx result
|
||||
c_result_ptr->Clear();
|
||||
|
Reference in New Issue
Block a user