**基于Android移动开发集成face++人脸识别的实现**
## 1.项目简介
“人工智能”是今年比较火的一个名词,甚至大多数人认为“人工智能”是继“IT互联网”之后一个新的浪潮,将会是本世纪最高科技的水准。个人觉得,目前国内语音识别做的比较好的是科大讯飞,图像识别(或人脸识别)做的比较好的是face++(旷视)。
那么,如何在Android项目里集成face++人脸识别的实现呢?
首先在face++的开发平台网址:https://www.faceplusplus.com.cn/ ,然后在平台注册成为开发者后在点击“应用管理”——创建“API Key”号,如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/21/3e0ec5efeed889e5cc873d8416d50448.writebug)
> 接着再绑定Bundle ID号,如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/21/d5df8aa85f7d1881b1d16f9c4841739a.writebug)
## 2.页面布局
layout/activity_main.xml界面布局代码如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ImageView
android:id="@+id/id_photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignTop="@+id/id_detect"
android:src="@drawable/face" />
<TextView
android:id="@+id/id_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignTop="@+id/id_detect"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/id_detect"
android:gravity="center"
android:text="tip" />
<Button
android:id="@+id/id_detect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginRight="10dip"
android:layout_toLeftOf="@+id/id_getImg"
android:text="检测人脸" />
<Button
android:id="@+id/id_getImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:text="选择图片" />
<FrameLayout
android:id="@+id/id_waiting"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:visibility="gone">
<ProgressBar
android:id="@+id/id_progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<TextView
android:id="@+id/id_age_and_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/hint"
android:drawableLeft="@drawable/male"
android:gravity="center"
android:text="123"
android:textColor="#ffff00ff"
android:textSize="22sp"
android:visibility="invisible" />
</FrameLayout>
</RelativeLayout>
```
## 3.主要代码
MainActivity.java逻辑代码如下:
```java
package com.fukaimei.facerecognition;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.facepp.error.FaceppParseException;
import com.fukaimei.facerecognition.utils.FaceppDetect;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements OnClickListener {
private ImageView mPhoto;
private Button mDetect, mGetImg;
private TextView mTip;
private View mWaiting;
private Canvas canvas;
private Paint mPaint;
private String mCurrentPhotoStr;
private Bitmap mBitmapPhoto;
private static final int PICK_CODE = 0x110;
private static final int MSG_SUCCESS = 0x111;
private static final int MSG_ERROR = 0x112;
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MSG_SUCCESS:
mWaiting.setVisibility(View.GONE);
JSONObject rs = (JSONObject) msg.obj;
prepareResultBitmap(rs);
mPhoto.setImageBitmap(mBitmapPhoto);
break;
case MSG_ERROR:
mWaiting.setVisibility(View.GONE);
String errorMsg = (String) msg.obj;
if (TextUtils.isEmpty(errorMsg)) {
mTip.setText("Error.");
} else {
mTip.setText(errorMsg);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 申请访问SD卡的动态权限
sdPermissions();
mPhoto = (ImageView) findViewById(R.id.id_photo);
mDetect = (Button) findViewById(R.id.id_detect);
mGetImg = (Button) findViewById(R.id.id_getImg);
mTip = (TextView) findViewById(R.id.id_tip);
mWaiting = findViewById(R.id.id_waiting);
mDetect.setOnClickListener(this);
mGetImg.setOnClickListener(this);
mPaint = new Paint();
}
// 定义访问SD卡的动态权限
private void sdPermissions() {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{
android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
/**
* 重写onRequestPermissionsResult方法
* 获取动态权限请求的结果,再访问SD卡
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "用户拒绝了权限", Toast.LENGTH_SHORT).show();
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private void prepareResultBitmap(JSONObject rs) {
// TODO Auto-generated method stub
Bitmap bitmap = Bitmap.createBitmap(mBitmapPhoto.getWidth(), mBitmapPhoto.getHeight(),
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
“人工智能”是今年比较火的一个名词,甚至大多数人认为“人工智能”是继“IT互联网”之后一个新的浪潮,将会是本世纪最高科技的水准。个人觉得,目前国内语音识别做的比较好的是科大讯飞,图像识别(或人脸识别)做的比较好的是face++(旷视)。
资源推荐
资源详情
资源评论
收起资源包目录
基于Android移动开发集成face++人脸识别的实现.zip (48个子文件)
facerecognition-master
gradle.properties 730B
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 231B
app
src
androidTest
java
com
fukaimei
facerecognition
ExampleInstrumentedTest.java 757B
test
java
com
fukaimei
facerecognition
ExampleUnitTest.java 406B
main
java
com
fukaimei
facerecognition
utils
FaceppDetect.java 1KB
BitmapByteUtil.java 745B
Constant.java 218B
MainActivity.java 8KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
drawable-xxhdpi
male.png 1KB
female.png 1KB
hint.9.png 908B
face.jpg 105KB
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
dimens.xml 213B
colors.xml 208B
strings.xml 81B
styles.xml 383B
layout
activity_main.xml 3KB
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 869B
proguard-rules.pro 751B
libs
faceppsdk.jar 448KB
build.gradle 980B
.gitignore 7B
LICENSE 1KB
gradlew.bat 2KB
build.gradle 546B
.idea
runConfigurations.xml 564B
misc.xml 2KB
modules.xml 367B
gradle.xml 626B
settings.gradle 15B
gradlew 5KB
.gitignore 118B
README.md 14KB
共 48 条
- 1
资源评论
神仙别闹
- 粉丝: 2674
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- Highlight Plus v20.0.1
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功