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_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感兴趣,可以参考以下内容:
|
||||||
|
@@ -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>
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user