[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:
DefTruth
2022-12-01 11:16:40 +08:00
committed by GitHub
parent 9afb4d4296
commit 63f60aa35c
4 changed files with 31 additions and 8 deletions

View File

@@ -79,6 +79,26 @@ public boolean initialized(); // 检查是否初始化成功
<string name="OCR_MODEL_DIR_DEFAULT">models</string> <string name="OCR_MODEL_DIR_DEFAULT">models</string>
<string name="OCR_LABEL_PATH_DEFAULT">labels/ppocr_keys_v1.txt</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感兴趣可以参考以下内容: 如果您想知道更多的FastDeploy Java API文档以及如何通过JNI来接入FastDeploy C++ API感兴趣可以参考以下内容:

View File

@@ -15,14 +15,14 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".keypointdetection.KeyPointDetectionMainActivity"> <activity android:name=".ocr.OcrMainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name=".keypointdetection.KeyPointDetectionSettingsActivity" android:name=".ocr.OcrSettingsActivity"
android:label="Settings"> android:label="Settings">
</activity> </activity>
</application> </application>

View File

@@ -31,6 +31,7 @@ import android.widget.TextView;
import com.baidu.paddle.fastdeploy.RuntimeOption; import com.baidu.paddle.fastdeploy.RuntimeOption;
import com.baidu.paddle.fastdeploy.app.examples.R; import com.baidu.paddle.fastdeploy.app.examples.R;
import com.baidu.paddle.fastdeploy.pipeline.PPOCRv2; 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.Utils;
import com.baidu.paddle.fastdeploy.ui.view.CameraSurfaceView; import com.baidu.paddle.fastdeploy.ui.view.CameraSurfaceView;
import com.baidu.paddle.fastdeploy.ui.view.ResultListView; 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.Classifier;
import com.baidu.paddle.fastdeploy.vision.ocr.DBDetector; import com.baidu.paddle.fastdeploy.vision.ocr.DBDetector;
import com.baidu.paddle.fastdeploy.vision.ocr.Recognizer; import com.baidu.paddle.fastdeploy.vision.ocr.Recognizer;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -423,9 +425,7 @@ public class OcrMainActivity extends Activity implements View.OnClickListener, C
if (OcrSettingsActivity.checkAndUpdateSettings(this)) { if (OcrSettingsActivity.checkAndUpdateSettings(this)) {
String realModelDir = getCacheDir() + "/" + OcrSettingsActivity.modelDir; String realModelDir = getCacheDir() + "/" + OcrSettingsActivity.modelDir;
String detModelName = "ch_PP-OCRv2_det_infer"; 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 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 recModelName = "ch_PP-OCRv2_rec_infer";
String realDetModelDir = realModelDir + "/" + detModelName; String realDetModelDir = realModelDir + "/" + detModelName;
String realClsModelDir = realModelDir + "/" + clsModelName; String realClsModelDir = realModelDir + "/" + clsModelName;
@@ -460,11 +460,11 @@ public class OcrMainActivity extends Activity implements View.OnClickListener, C
clsOption.enableLiteFp16(); clsOption.enableLiteFp16();
recOption.enableLiteFp16(); recOption.enableLiteFp16();
} }
DBDetector detModel = new DBDetector(detModelFile, detParamsFile, detOption); DBDetector detModel = new DBDetector(detModelFile, detParamsFile, detOption);
Classifier clsModel = new Classifier(clsModelFile, clsParamsFile, clsOption); Classifier clsModel = new Classifier(clsModelFile, clsParamsFile, clsOption);
Recognizer recModel = new Recognizer(recModelFile, recParamsFile, recLabelFilePath, recOption); Recognizer recModel = new Recognizer(recModelFile, recParamsFile, recLabelFilePath, recOption);
predictor.init(detModel, clsModel, recModel); predictor.init(detModel, clsModel, recModel);
} }
} }

View File

@@ -842,9 +842,12 @@ bool AllocateOCRResultFromJava(
return false; return false;
} }
const int cls_len = env->GetArrayLength(j_ocr_cls_scores_float_arr); int cls_len = 0;
if (cls_len != env->GetArrayLength(j_ocr_cls_labels_int_arr)) { if ((j_ocr_cls_labels_int_arr != NULL) && (j_ocr_cls_scores_float_arr != NULL)) {
return false; 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 // Init cxx result