mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-05 16:48:03 +08:00
[Android] Update Android SDK usage docs (#586)
* [FlyCV] Add global SetProcLibCpuNumThreads method * [Android] Support segmentation and facedet in Android * [Android] add JNI instance check to j_runtime_option_obj * [Model] fixed ppseg flycv resize error * [FlyCV] fix FlyCV resize flags * [cmake] remove un-need lite compile option * [Android] add PaddleSegModel JNI and fix some bugs * [Android] bind PaddleSegModel via JNI * [Android] bind VisSegmentation via JNI * [Android] bind YOLOv5Face and SCRFD via JNI * [Android] fix NewJavaFaceDetectionResultFromCxx error * [Android] remove un-need option in Java RuntimeOption * [Android] fixed OcrMainActivity setting errors * [Android] Update Android SDK usage docs * [Android] Update Android SDK usage docs
This commit is contained in:
@@ -1,3 +1,333 @@
|
|||||||
# FastDeploy Android AAR 包使用文档
|
# FastDeploy Android AAR 包使用文档
|
||||||
|
FastDeploy Android SDK 目前支持图像分类、目标检测、OCR文字识别、语义分割和人脸检测等任务,对更多的AI任务支持将会陆续添加进来。以下为各个任务对应的API文档,在Android下使用FastDeploy中集成的模型,只需以下几个步骤:
|
||||||
|
- 模型初始化
|
||||||
|
- 调用`predict`接口
|
||||||
|
- 可视化验证(可选)
|
||||||
|
|
||||||
- TODO
|
## 图像分类
|
||||||
|
### PaddleClasModel Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PaddleClasModel初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- configFile: String, 模型推理的预处理配置文件,如 infer_cfg.yml
|
||||||
|
- labelFile: String, 可选参数,表示label标签文件所在路径,用于可视化,如 imagenet1k_label_list.txt,每一行包含一个label
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public PaddleClasModel(); // 空构造函数,之后可以调用init初始化
|
||||||
|
public PaddleClasModel(String modelFile, String paramsFile, String configFile);
|
||||||
|
public PaddleClasModel(String modelFile, String paramsFile, String configFile, String labelFile);
|
||||||
|
public PaddleClasModel(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
public PaddleClasModel(String modelFile, String paramsFile, String configFile, String labelFile, RuntimeOption option);
|
||||||
|
// 手动调用init初始化: call init manually w/o label file
|
||||||
|
public boolean init(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
public boolean init(String modelFile, String paramsFile, String configFile, String labelFile, RuntimeOption option);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public ClassifyResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public ClassifyResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float scoreThreshold);
|
||||||
|
public ClassifyResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float scoreThreshold); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
## 目标检测
|
||||||
|
### PicoDet Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PicoDet初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- configFile: String, 模型推理的预处理配置文件,如 infer_cfg.yml
|
||||||
|
- labelFile: String, 可选参数,表示label标签文件所在路径,用于可视化,如 coco_label_list.txt,每一行包含一个label
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public PicoDet(); // 空构造函数,之后可以调用init初始化
|
||||||
|
public PicoDet(String modelFile, String paramsFile, String configFile);
|
||||||
|
public PicoDet(String modelFile, String paramsFile, String configFile, String labelFile);
|
||||||
|
public PicoDet(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
public PicoDet(String modelFile, String paramsFile, String configFile, String labelFile, RuntimeOption option);
|
||||||
|
// 手动调用init初始化: call init manually w/o label file
|
||||||
|
public boolean init(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
public boolean init(String modelFile, String paramsFile, String configFile, String labelFile, RuntimeOption option);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public DetectionResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public DetectionResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float scoreThreshold);
|
||||||
|
public DetectionResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float scoreThreshold); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
## OCR文字识别
|
||||||
|
### PP-OCRv2 & PP-OCRv3 Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。 PP-OCR初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- labelFile: String, 可选参数,表示label标签文件所在路径,用于可视化,如 ppocr_keys_v1.txt,每一行包含一个label
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
与其他模型不同的是,PP-OCRv2 和 PP-OCRv3 包含 DBDetector、Classifier和Recognizer等基础模型,以及PPOCRv2和PPOCRv3等pipeline类型。
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public DBDetector(String modelFile, String paramsFile);
|
||||||
|
public DBDetector(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
public Classifier(String modelFile, String paramsFile);
|
||||||
|
public Classifier(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
public Recognizer(String modelFile, String paramsFile, String labelPath);
|
||||||
|
public Recognizer(String modelFile, String paramsFile, String labelPath, RuntimeOption option);
|
||||||
|
public PPOCRv2(); // 空构造函数,之后可以调用init初始化
|
||||||
|
// Constructor w/o classifier
|
||||||
|
public PPOCRv2(DBDetector detModel, Recognizer recModel);
|
||||||
|
public PPOCRv2(DBDetector detModel, Classifier clsModel, Recognizer recModel);
|
||||||
|
public PPOCRv3(); // 空构造函数,之后可以调用init初始化
|
||||||
|
// Constructor w/o classifier
|
||||||
|
public PPOCRv3(DBDetector detModel, Recognizer recModel);
|
||||||
|
public PPOCRv3(DBDetector detModel, Classifier clsModel, Recognizer recModel);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public OCRResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public OCRResult predict(Bitmap ARGB8888Bitmap, String savedImagePath);
|
||||||
|
public OCRResult predict(Bitmap ARGB8888Bitmap, boolean rendering); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
## 语义分割
|
||||||
|
### PaddleSegModel Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PaddleSegModel初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- configFile: String, 模型推理的预处理配置文件,如 infer_cfg.yml
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public PaddleSegModel(); // 空构造函数,之后可以调用init初始化
|
||||||
|
public PaddleSegModel(String modelFile, String paramsFile, String configFile);
|
||||||
|
public PaddleSegModel(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
// 手动调用init初始化: call init manually w/o label file
|
||||||
|
public boolean init(String modelFile, String paramsFile, String configFile, RuntimeOption option);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public SegmentationResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public SegmentationResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float weight);
|
||||||
|
public SegmentationResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float weight); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
## 人脸检测
|
||||||
|
### SCRFD Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PaddleSegModel初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public SCRFD(); // 空构造函数,之后可以调用init初始化
|
||||||
|
public SCRFD(String modelFile, String paramsFile);
|
||||||
|
public SCRFD(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
// 手动调用init初始化: call init manually w/o label file
|
||||||
|
public boolean init(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float scoreThreshold);
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float scoreThreshold); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
### YOLOv5Face Java API 说明
|
||||||
|
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PaddleSegModel初始化参数说明如下:
|
||||||
|
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
|
||||||
|
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
|
||||||
|
- option: RuntimeOption,可选参数,模型初始化option。如果不传入该参数则会使用默认的运行时选项。
|
||||||
|
|
||||||
|
```java
|
||||||
|
// 构造函数: constructor w/o label file
|
||||||
|
public YOLOv5Face(); // 空构造函数,之后可以调用init初始化
|
||||||
|
public YOLOv5Face(String modelFile, String paramsFile);
|
||||||
|
public YOLOv5Face(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
// 手动调用init初始化: call init manually w/o label file
|
||||||
|
public boolean init(String modelFile, String paramsFile, RuntimeOption option);
|
||||||
|
```
|
||||||
|
- 模型预测 API:模型预测API包含直接预测的API以及带可视化功能的API。直接预测是指,不保存图片以及不渲染结果到Bitmap上,仅预测推理结果。预测并且可视化是指,预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap(目前支持ARGB8888格式的Bitmap), 后续可将该Bitmap在camera中进行显示。
|
||||||
|
```java
|
||||||
|
// 直接预测:不保存图片以及不渲染结果到Bitmap上
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap);
|
||||||
|
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float scoreThreshold);
|
||||||
|
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float scoreThreshold); // 只渲染 不保存图片
|
||||||
|
```
|
||||||
|
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
|
||||||
|
```java
|
||||||
|
public boolean release(); // 释放native资源
|
||||||
|
public boolean initialized(); // 检查是否初始化成功
|
||||||
|
```
|
||||||
|
|
||||||
|
## 结果说明
|
||||||
|
- 图像分类ClassifyResult说明
|
||||||
|
```java
|
||||||
|
public class ClassifyResult {
|
||||||
|
public float[] mScores; // [n] 每个类别的得分(概率)
|
||||||
|
public int[] mLabelIds; // [n] 分类ID 具体的类别类型
|
||||||
|
public boolean initialized(); // 检测结果是否有效
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其他参考:C++/Python对应的ClassifyResult说明 [api/vision_results/classification_result.md](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/classification_result.md)
|
||||||
|
|
||||||
|
- 目标检测DetectionResult说明
|
||||||
|
```java
|
||||||
|
public class DetectionResult {
|
||||||
|
public float[][] mBoxes; // [n,4] 检测框 (x1,y1,x2,y2)
|
||||||
|
public float[] mScores; // [n] 每个检测框得分(置信度,概率值)
|
||||||
|
public int[] mLabelIds; // [n] 分类ID
|
||||||
|
public boolean initialized(); // 检测结果是否有效
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其他参考:C++/Python对应的DetectionResult说明 [api/vision_results/detection_result.md](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/detection_result.md)
|
||||||
|
|
||||||
|
- OCR文字识别OCRResult说明
|
||||||
|
```java
|
||||||
|
public class OCRResult {
|
||||||
|
public int[][] mBoxes; // [n,8] 表示单张图片检测出来的所有目标框坐标 每个框以8个int数值依次表示框的4个坐标点,顺序为左下,右下,右上,左上
|
||||||
|
public String[] mText; // [n] 表示多个文本框内被识别出来的文本内容
|
||||||
|
public float[] mRecScores; // [n] 表示文本框内识别出来的文本的置信度
|
||||||
|
public float[] mClsScores; // [n] 表示文本框的分类结果的置信度
|
||||||
|
public int[] mClsLabels; // [n] 表示文本框的方向分类类别
|
||||||
|
public boolean initialized(); // 检测结果是否有效
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其他参考:C++/Python对应的OCRResult说明 [api/vision_results/ocr_result.md](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/ocr_result.md)
|
||||||
|
|
||||||
|
- 语义分割SegmentationResult结果说明
|
||||||
|
```java
|
||||||
|
public class SegmentationResult {
|
||||||
|
public int[] mLabelMap; // 预测到的label map 每个像素位置对应一个label HxW
|
||||||
|
public float[] mScoreMap; // 预测到的得分 map 每个像素位置对应一个score HxW
|
||||||
|
public long[] mShape; // label map实际的shape (H,W)
|
||||||
|
public boolean mContainScoreMap = false; // 是否包含 score map
|
||||||
|
public boolean initialized(); // 检测结果是否有效
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其他参考:C++/Python对应的SegmentationResult说明 [api/vision_results/segmentation_result.md](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/segmentation_result.md)
|
||||||
|
|
||||||
|
- 人脸检测FaceDetectionResult结果说明
|
||||||
|
```java
|
||||||
|
public class FaceDetectionResult {
|
||||||
|
public float[][] mBoxes; // [n,4] 检测框 (x1,y1,x2,y2)
|
||||||
|
public float[] mScores; // [n] 每个检测框得分(置信度,概率值)
|
||||||
|
public float[][] mLandmarks; // [nx?,2] 每个检测到的人脸对应关键点
|
||||||
|
int mLandmarksPerFace = 0; // 每个人脸对应的关键点个数
|
||||||
|
public boolean initialized(); // 检测结果是否有效
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其他参考:C++/Python对应的FaceDetectionResult说明 [api/vision_results/face_detection_result.md](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/face_detection_result.md)
|
||||||
|
|
||||||
|
## RuntimeOption说明
|
||||||
|
- RuntimeOption设置说明
|
||||||
|
```java
|
||||||
|
public class RuntimeOption {
|
||||||
|
public void enableLiteFp16(); // 开启fp16精度推理
|
||||||
|
public void disableLiteFP16(); // 关闭fp16精度推理
|
||||||
|
public void setCpuThreadNum(int threadNum); // 设置线程数
|
||||||
|
public void setLitePowerMode(LitePowerMode mode); // 设置能耗模式
|
||||||
|
public void setLitePowerMode(String modeStr); // 通过字符串形式设置能耗模式
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可视化接口
|
||||||
|
FastDeploy Android SDK同时提供一些可视化接口,可用于快速验证推理结果。以下接口均把结果result渲染在输入的Bitmap上。具体的可视化API接口如下:
|
||||||
|
|
||||||
|
```java
|
||||||
|
public class Visualize {
|
||||||
|
public static boolean visClassification(Bitmap ARGB8888Bitmap, ClassifyResult result);
|
||||||
|
public static boolean visDetection(Bitmap ARGB8888Bitmap, DetectionResult result);
|
||||||
|
public static boolean visFaceDetection(Bitmap ARGB8888Bitmap, FaceDetectionResult result);
|
||||||
|
public static boolean visOcr(Bitmap ARGB8888Bitmap, OCRResult result);
|
||||||
|
public static boolean visSegmentation(Bitmap ARGB8888Bitmap, SegmentationResult result);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
对应的可视化类型为:
|
||||||
|
```java
|
||||||
|
import com.baidu.paddle.fastdeploy.vision.Visualize;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用示例
|
||||||
|
- 模型调用示例1:使用构造函数以及默认的RuntimeOption
|
||||||
|
```java
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.opengl.GLES20;
|
||||||
|
|
||||||
|
import com.baidu.paddle.fastdeploy.vision.DetectionResult;
|
||||||
|
import com.baidu.paddle.fastdeploy.vision.detection.PicoDet;
|
||||||
|
|
||||||
|
// 初始化模型
|
||||||
|
PicoDet model = new PicoDet("picodet_s_320_coco_lcnet/model.pdmodel",
|
||||||
|
"picodet_s_320_coco_lcnet/model.pdiparams",
|
||||||
|
"picodet_s_320_coco_lcnet/infer_cfg.yml");
|
||||||
|
|
||||||
|
// 模型推理
|
||||||
|
DetectionResult result = model.predict(ARGB8888ImageBitmap);
|
||||||
|
|
||||||
|
// 释放模型资源
|
||||||
|
model.release();
|
||||||
|
```
|
||||||
|
|
||||||
|
- 模型调用示例2: 在合适的程序节点,手动调用init,并自定义RuntimeOption
|
||||||
|
```java
|
||||||
|
// import 同上 ...
|
||||||
|
import com.baidu.paddle.fastdeploy.RuntimeOption;
|
||||||
|
import com.baidu.paddle.fastdeploy.LitePowerMode;
|
||||||
|
import com.baidu.paddle.fastdeploy.vision.DetectionResult;
|
||||||
|
import com.baidu.paddle.fastdeploy.vision.detection.PicoDet;
|
||||||
|
// 新建空模型
|
||||||
|
PicoDet model = new PicoDet();
|
||||||
|
// 模型路径
|
||||||
|
String modelFile = "picodet_s_320_coco_lcnet/model.pdmodel";
|
||||||
|
String paramFile = "picodet_s_320_coco_lcnet/model.pdiparams";
|
||||||
|
String configFile = "picodet_s_320_coco_lcnet/infer_cfg.yml";
|
||||||
|
// 指定RuntimeOption
|
||||||
|
RuntimeOption option = new RuntimeOption();
|
||||||
|
option.setCpuThreadNum(2);
|
||||||
|
option.setLitePowerMode(LitePowerMode.LITE_POWER_HIGH);
|
||||||
|
option.enableRecordTimeOfRuntime();
|
||||||
|
option.enableLiteFp16();
|
||||||
|
// 使用init函数初始化
|
||||||
|
model.init(modelFile, paramFile, configFile, option);
|
||||||
|
// Bitmap读取、模型预测、资源释放 同上 ...
|
||||||
|
```
|
||||||
|
@@ -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=".ocr.OcrMainActivity">
|
<activity android:name=".detection.DetectionMainActivity">
|
||||||
<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=".ocr.OcrSettingsActivity"
|
android:name=".detection.DetectionSettingsActivity"
|
||||||
android:label="Settings">
|
android:label="Settings">
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
@@ -68,9 +68,10 @@ public class DetectionMainActivity extends Activity implements View.OnClickListe
|
|||||||
private Bitmap originShutterBitmap;
|
private Bitmap originShutterBitmap;
|
||||||
private Bitmap picBitmap;
|
private Bitmap picBitmap;
|
||||||
private Bitmap originPicBitmap;
|
private Bitmap originPicBitmap;
|
||||||
|
public static final int TYPE_UNKNOWN = -1;
|
||||||
public static final int BTN_SHUTTER = 0;
|
public static final int BTN_SHUTTER = 0;
|
||||||
public static final int ALBUM_SELECT = 1;
|
public static final int ALBUM_SELECT = 1;
|
||||||
private static int TYPE = BTN_SHUTTER;
|
private static int TYPE = TYPE_UNKNOWN;
|
||||||
|
|
||||||
private static final int REQUEST_PERMISSION_CODE_STORAGE = 101;
|
private static final int REQUEST_PERMISSION_CODE_STORAGE = 101;
|
||||||
private static final int INTENT_CODE_PICK_IMAGE = 100;
|
private static final int INTENT_CODE_PICK_IMAGE = 100;
|
||||||
@@ -215,11 +216,17 @@ public class DetectionMainActivity extends Activity implements View.OnClickListe
|
|||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
savedImagePath = Utils.getDCIMDirectory() + File.separator + "result.jpg";
|
savedImagePath = Utils.getDCIMDirectory() + File.separator + "result.jpg";
|
||||||
}
|
}
|
||||||
|
if (TYPE == BTN_SHUTTER) {
|
||||||
shutterBitmap = ARGB8888ImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
|
shutterBitmap = ARGB8888ImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
|
||||||
originShutterBitmap = ARGB8888ImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
|
originShutterBitmap = ARGB8888ImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
|
||||||
|
} else {
|
||||||
|
// Only reference in detecting loops.
|
||||||
|
shutterBitmap = ARGB8888ImageBitmap;
|
||||||
|
originShutterBitmap = ARGB8888ImageBitmap;
|
||||||
|
}
|
||||||
boolean modified = false;
|
boolean modified = false;
|
||||||
DetectionResult result = predictor.predict(
|
DetectionResult result = predictor.predict(
|
||||||
ARGB8888ImageBitmap, savedImagePath, DetectionSettingsActivity.scoreThreshold);
|
ARGB8888ImageBitmap, true, DetectionSettingsActivity.scoreThreshold);
|
||||||
modified = result.initialized();
|
modified = result.initialized();
|
||||||
if (!savedImagePath.isEmpty()) {
|
if (!savedImagePath.isEmpty()) {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
|
Reference in New Issue
Block a user