Android---教你如何用三十分钟在安卓上开发一个微笑抓拍神器 ...

王海鱼  金牌会员 | 2025-2-12 12:19:51 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 999|帖子 999|积分 2997

repositories {
maven { url ‘http://developer.huawei.com/repo/’}
}}
1.2 在应用级的build.gradle里面加上SDK依靠

把人脸识别的SDK和基础SDK引入:
dependencies{
// 引入基础SDK
implementation ‘com.huawei.hms:ml-computer-vision:1.0.2.300’
// 引入人脸检测能力包
implementation ‘com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300’
}
1.3 在AndroidManifest.xml文件里面增量添加模型自动下载

这个主要是用来模型更新的,后面算法有了优化,可以自动下载到手机里面更新
<manifest
<application


1.4 在AndroidManifest.xml文件里面申请相机和存储权限

   2、代码开发

2.1 创建人脸分析器,检测到微笑后进行照相

检测后照相:

  • 进行分析器参数设置
  • 把分析器参数设置传给分析器
  • 在analyzer.setTransacto内通过重写transactResult处理人脸识别后的内容,人脸识别后会返回一个微笑的置信度(简单可以理解为是微笑的概率),只要设置大于一定置信度进行照相就可以了。
private MLFaceAnalyzer analyzer;private void createFaceAnalyzer() {
MLFaceAnalyzerSetting setting =
new MLFaceAnalyzerSetting.Factory()
.setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
.setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
.setMinFaceProportion(0.1f)
.setTracingAllowed(true)
.create();
this.analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting);
this.analyzer.setTransactor(new MLAnalyzer.MLTransactor() {
@Override public void destroy() {
}
@Override public void transactResult(MLAnalyzer.Result result) {
SparseArray faceSparseArray = result.getAnalyseList();
int flag = 0;
for (int i = 0; i < faceSparseArray.size(); i++) {
MLFaceEmotion emotion = faceSparseArray.valueAt(i).getEmotions();
if (emotion.getSmilingProbability() > smilingPossibility) {
flag++;
}
}
if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {
safeToTakePicture = false;
mHandler.sendEmptyMessage(TAKE_PHOTO);
}
}
});}
照相存储部门:
private void takePhoto() {
this.mLensEngine.photograph(null,
new LensEngine.PhotographListener() {
@Override public void takenPhotograph(byte[] bytes) {
mHandler.sendEmptyMessage(STOP_PREVIEW);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
saveBitmapToDisk(bitmap);
}
});}
2.2 创建视觉引擎,捕捉相机动态视频流后传给分析器

private void createLensEngine() {
Context context = this.getApplicationContext();
// Create LensEngine
this.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType)
.applyDisplayDimension(640, 480)
.applyFps(25.0f)
.enableAutomaticFocus(true)
.create();}
2.3 动态权限申请,挂接分析器和视觉引擎创建代码

@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_live_face_analyse);
if (savedInstanceState != null) {
this.lensType = savedInstanceState.getInt(“lensType”);
}
this.mPreview = this.findViewById(R.id.preview);
this.createFaceAnalyzer();
this.findViewById(R.id.facingSwitch).setOnClickListener(this);
// Checking Camera Permissions
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
} else {
this.requestCameraPermission();
}}
private void requestCameraPermission() {
final String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(this, permissions, LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE);
return;
}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode != LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
return;
}
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
return;
}}

结束语

怎么样,开发过程是不是特别简单,30分钟就可以开发一个新特性出来!让我们一起体验下这个多人脸微笑抓包的效果。
单人笑脸抓拍:

多人笑脸抓拍:

基于人脸检测能力,还可以做哪些功能出来,请开放你的脑洞!这里不妨再给一些提示,比如:

  • 通过识别耳朵、眼睛、鼻子、嘴巴、眉毛等脸部特征的位置,添加一些风趣的装饰特效。
  • 通过识别面部的轮廓,做一些夸张的变形、拉伸,天生一些风趣好玩的人像图片,大概针对轮廓区域开发美颜功能。
  • 通过年龄识别,对儿童着迷于电子类产品的痛点,开发一些家长管控类功能。
  • 通过检测眼睛盯着屏幕的时长,开发护眼提示的特性。
  • 通过随机指令(摇头、眨眼、张嘴等)实现用户动作配合式活体检测功能。
  • 通过综合运用用户的年龄、性别等的检测结果,给用户做相关商品推荐;


  • 通过年龄识别,对儿童着迷于电子类产品的痛点,开发一些家长管控类功能。
  • 通过检测眼睛盯着屏幕的时长,开发护眼提示的特性。
  • 通过随机指令(摇头、眨眼、张嘴等)实现用户动作配合式活体检测功能。
  • 通过综合运用用户的年龄、性别等的检测结果,给用户做相关商品推荐;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表