接下来让我带领大家一步一步的实现人脸识别,让你的APP看起来的更加高大上。
1,首先我们需要在一登开发者平台注册一个账号(http://www.superid.me/developer/index.html)
2,点击官网右上角我的应用->创建应用,并选择Android
3,填写应用信息,填写完成后点击创建应用。
4,创建成功后会继续显示配置指南,这里我使用的是AndroidStudio所以接下来我会展示AS的配置。
5,添加Gradle依赖。
dependencies { compile 'com.isnc.facesdk:superid-sdk:1.6.9' }
如果无法正常集成请添加如下代码 :
allprojects { repositories { jcenter() } }
6,配置 Manifest
添加权限
<!-- 开启摄像头 --> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.camera.setParameters" android:required="false"/> <uses-permission android:name="android.permission.CAMERA" /> <!-- 阅读消息 --> <uses-permission android:name="android.permission.READ_SMS" /> <!-- 接收消息 --> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 读写⽂文件 --> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 网络状态 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
添加APPID及SECRET(在application节点内部)
<meta-data android:name="SUPERID_APPKEY" android:value="5d7ce12d10775d6f941be249" /> <meta-data android:name="SUPERID_SECRET" android:value="c09185283aff376b3b692edc" />
添加Activity,这些都是一登sdk提供的Activity。
<activity android:name="com.isnc.facesdk.aty.Aty_FaceDetect" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_NormalFaceDetect" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar" > </activity> <activity android:name="com.isnc.facesdk.aty.Aty_AgreeItem" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_Auth" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_EditUserinfo" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_ClipPicture" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_CountryPage" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> <activity android:name="com.isnc.facesdk.aty.Aty_SecureEmail" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity>
7,在onCreate方法里初始化 SDK
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化sdk SuperID.initFaceSDK(this); //开启Debug模式方便调试(可以不写) SuperID.setDebugMode(true); } }
8,在页面上添加按钮用于调用人脸识别
<Button android:layout_width="wrap_content" android:text="人脸识别" android:id="@+id/mbt" android:layout_centerInParent="true" android:layout_height="wrap_content"/>
9,给按钮添加点击事件,用来调用人脸识别功能。
//给按钮添加点击事件 findViewById(R.id.mbt).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用SuperID.faceLogin(this)执行刷脸登录, // 若用户未绑定授权一登账号,则此接口会跳转到绑定授权步骤。 SuperID.faceLogin(MainActivity.this); } });
10,重写onActivityResult方法并在内部对返回的数据进行操作,将用户名获取并显示。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (resultCode) { case SDKConfig.AUTH_SUCCESS: //openid 为开发者应用生成的openid,若调用faceLogin(Context context)进行注册授权,则系统将会自动生成一个openid mOpenid = Cache.getCached(this, SDKConfig.KEY_OPENID); // userInfo 为SuperID用户信息,格式为json mUserInfo = Cache.getCached(this, SDKConfig.KEY_APPINFO); Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); break; case SDKConfig.LOGINSUCCESS: //openid 为开发者应用的openid,若用户在调用faceLogin(Context context)进行注册授权,则系统将会自动生成一个openid,重新登录成功时返回此openid mOpenid = Cache.getCached(this, SDKConfig.KEY_OPENID); // userInfo 为SuperID用户信息,格式为json mUserInfo = Cache.getCached(this, SDKConfig.KEY_APPINFO); //在返回的json数据中取出用户名 //avatar 这是用户头像图片 //name 这是用户名 Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); try { JSONObject jsonObject=new JSONObject(mUserInfo); String name = jsonObject.getString("name"); //显示用户名 Toast.makeText(this, "欢迎用户:"+name, Toast.LENGTH_SHORT).show(); } catch (JSONException e) { e.printStackTrace(); } break; default: Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show(); break; } }
11,结果展示(没有账号的话需要在授权中进行账号创建)
12,后来我又尝试了下获取头像。
如果有哪些不足或者错误的地方,希望大家能帮忙指出大家一起交流进步