接下來讓我帶領大家一步一步的實現人臉識別,讓你的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,后來我又嘗試了下獲取頭像。
如果有哪些不足或者錯誤的地方,希望大家能幫忙指出大家一起交流進步