同步操作将从 PaddlePaddle/FastDeploy 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在 Android 上实现实时的人脸检测功能,此 Demo 有很好的的易用性和开放性,如在 Demo 中跑自己训练好的模型等。
手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式
fastdeploy/examples/vision/facedet/scrfd/android
目录
注意:
如果您在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开
File > Project Structure > SDK Location
,修改Andriod SDK location
为您本机配置的 SDK 所在路径。
APP 图标 | APP 效果 | APP设置项 |
---|---|---|
![]() |
![]() |
![]() |
// 构造函数: 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);
// 直接预测:不保存图片以及不渲染结果到Bitmap上
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap);
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, float confThreshold, float nmsIouThreshold); // 设置置信度阈值和NMS阈值
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, String savedImagePath, float confThreshold, float nmsIouThreshold);
public FaceDetectionResult predict(Bitmap ARGB8888Bitmap, boolean rendering, float confThreshold, float nmsIouThreshold); // 只渲染 不保存图片
public boolean release(); // 释放native资源
public boolean initialized(); // 检查是否初始化成功
public void enableLiteFp16(); // 开启fp16精度推理
public void disableLiteFP16(); // 关闭fp16精度推理
public void setCpuThreadNum(int threadNum); // 设置线程数
public void setLitePowerMode(LitePowerMode mode); // 设置能耗模式
public void setLitePowerMode(String modeStr); // 通过字符串形式设置能耗模式
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
import java.nio.ByteBuffer;
import android.graphics.Bitmap;
import android.opengl.GLES20;
import com.baidu.paddle.fastdeploy.vision.FaceDetectionResult;
import com.baidu.paddle.fastdeploy.vision.facedet.SCRFD;
// 初始化模型
SCRFD model = new SCRFD(
"scrfd_500m_bnkps_shape320x320_pd/model.pdmodel",
"scrfd_500m_bnkps_shape320x320_pd/model.pdiparams");
// 读取图片: 以下仅为读取Bitmap的伪代码
ByteBuffer pixelBuffer = ByteBuffer.allocate(width * height * 4);
GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, pixelBuffer);
Bitmap ARGB8888ImageBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
ARGB8888ImageBitmap.copyPixelsFromBuffer(pixelBuffer);
// 直接预测返回 FaceDetectionResult
FaceDetectionResult result = model.predict(ARGB8888ImageBitmap);
// 释放模型资源
model.release();
// import 同上 ...
import com.baidu.paddle.fastdeploy.RuntimeOption;
import com.baidu.paddle.fastdeploy.LitePowerMode;
import com.baidu.paddle.fastdeploy.vision.FaceDetectionResult;
import com.baidu.paddle.fastdeploy.vision.facedet.SCRFD;
// 新建空模型
SCRFD model = new SCRFD();
// 模型路径
String modelFile = "scrfd_500m_bnkps_shape320x320_pd/model.pdmodel";
String paramFile = "scrfd_500m_bnkps_shape320x320_pd/model.pdiparams";
// 指定RuntimeOption
RuntimeOption option = new RuntimeOption();
option.setCpuThreadNum(2);
option.setLitePowerMode(LitePowerMode.LITE_POWER_HIGH);
option.enableLiteFp16();
// 使用init函数初始化
model.init(modelFile, paramFile, option);
// Bitmap读取、模型预测、资源释放 同上 ...
更详细的用法请参考 FaceDetMainActivity 中的用法
替换FastDeploy预测库和模型的步骤非常简单。预测库所在的位置为 app/libs/fastdeploy-android-sdk-xxx.aar
,其中 xxx
表示当前您使用的预测库版本号。模型所在的位置为,app/src/main/assets/models/scrfd_500m_bnkps_shape320x320_pd
。
替换FastDeploy Android SDK: 下载或编译最新的FastDeploy Android SDK,解压缩后放在 app/libs
目录下;详细配置文档可参考:
替换SCRFD模型的步骤:
<!-- 将这个路径指修改成您的模型,如 models/scrfd_500m_bnkps_shape320x320_pd -->
<string name="FACEDET_MODEL_DIR_DEFAULT">models/scrfd_500m_bnkps_shape320x320_pd</string>
如果您想知道更多的FastDeploy Java API文档以及如何通过JNI来接入FastDeploy C++ API感兴趣,可以参考以下内容:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。