uniapp安卓ios百度人臉識別、活體檢測、人臉採集APP原生插件

<font color=red>插件亮點</font>

<font color=red>1 支持安卓平板(橫豎屏都可),蘋果的iPad。2 顏色圖片都可更換。</font>html

特別提醒

此插件包含 android 端和 iOS 端,考慮到有些同窗只作其中一個端的 app,特地分爲 2 個插件,減少安裝包體積。android 端請點擊這裏iOS 端請點擊這裏android

<u>一、前言</u>

最近在使用 uniapp 開發項目,有刷臉實名認證的需求,最終使用百度人臉識別實現了需求。本身作了個 APP 原生插件,給你們介紹下用法。本插件主要功能是經過動做檢測活體,採集人臉返回。其餘功能須要自主實現,如刷臉登陸,實名認證等。ios

<u>二、包名及簽名證書準備</u>

包名安卓和 iOS 可填寫同樣的:com.longyoung.baidudemo(通常用反域名,如個人域名:www.longyong.com)。<font color=red>注意:uniapp 打包或者打基座要用這個包名。</font>申請百度受權文件,須要用到安卓簽名證書的 md5,若是大家公司有原生開發團隊,問他們要便可。沒有的話,本身生成一個簽名證書並獲取它的 md5,點擊查看方法。<font color=red>注意:uniapp 打包或者打基座要用這個簽名證書。</font>json

<u>三、百度官方資料準備</u>

百度人臉識別申請受權文件步驟要領,點擊查看方法api

<u>四、接入步驟</u>

4.1 在項目根目錄建立文件夾 nativeplugins,購買插件(建議測試版本點擊購買下方的試用,正式發佈的時候再購買)。緩存

4.2 將百度受權文件 License 放到安卓:nativeplugins/longyoung-BDFaceAuth/android/assets/idl-license.face-android;iOS:nativeplugins/longyoung-BDFaceAuth-iOS/ios/idl-license.face-ios。沒路徑的請自行建立,nativeplugins 文件夾在項目根目錄下。注意 iOS 沒有 assets 文件夾,直接放到 ios 文件夾下。服務器

uniapp1.png

4.3 manifest.json 文件,選中「App原生插件配置」,選中雲端插件,勾選插件 longyoung-BDFaceAuth 和 longyoung-BDFaceAuth-iOS。app

uniapp2.png

4.4 調用插件,須要傳入 licenseID(必傳,百度上的 License ID),動做控制參數 actionAry(選傳,不傳只採集臉,沒有動做),動做是否隨機參數 isLivenessRandom(選傳),是否有聲音參數 isSound(選傳,iOS 不支持),文字顏色 txtColor(選傳),背景顏色 bgColor(選傳,iOS 無效),圓的顏色 roundColor(選傳),代碼以下:dom

<script>
	var lyBDFaceAuth;
	var lyBDFaceAuthIOS;
	export default {
		data() {
			return {
				title: ''
			}
		},
		onLoad() {
			// #ifdef APP-PLUS
			if (uni.getSystemInfoSync().platform == "ios") {
				//引用插件
				lyBDFaceAuthIOS = uni.requireNativePlugin('longyoung-BDFaceAuth-iOS'); //ios
			} else if (uni.getSystemInfoSync().platform == "android") {
				//引用插件
				lyBDFaceAuth = uni.requireNativePlugin('longyoung-BDFaceAuth'); //android
			}
			// #endif
		},
		methods: {
			onScanFace() {
				console.error("tagg.onScanFace");
				
				if (uni.getSystemInfoSync().platform == "android") {//安卓
					lyBDFaceAuth.scanFace({
						licenseID:"longyoung-face-android",//必須與百度受權資料一致
						actionAry:["Eye", "Mouth", "HeadLeft", "HeadRight", "HeadLeftOrRight", "HeadUp", "HeadDown"],//不傳無動做
						isLivenessRandom:0,//不傳默認有序,0有序,1隨機
						isSound:0,//不傳默認有聲音,0無聲,1有聲,iOS無效
						txtColor:"#3987FD",//文字顏色
						bgColor:"#3987FD", //背景顏色,iOS設置無效,須要換圖片facecover_new.png,路徑 nativeplugins\longyoung-BDFaceAuth-iOS\ios\com.baidu.idl.face.faceSDK.bundle,具體看示例。
						roundColor:"#3987FD"//圓的顏色
					}, result => {
						console.log('file://' + result.imgPath);
						
						//圖片上傳服務器
						uni.uploadFile({
							url:'http://api.longyoung.com/api/open/common/uploadImgTemp',//圖片上傳地址
							filePath: 'file://' + result.imgPath,//圖片本地路徑,上傳服務器須要加這個頭'file://'
							method: 'post',
							name: 'imgFile',//上傳圖片參數名
							success: (res) => {
								var data = res.data;
							}
						});
						
						//***有些同窗反饋,後臺強烈要求傳base64,下面是圖片轉base64的方法,沒此需求的能夠無視。
						var bitmapT = new plus.nativeObj.Bitmap("test"); //test標識誰便取
						// 從本地加載Bitmap圖片
						bitmapT.load(result.imgPath, function() {
							console.log('加載圖片成功');
							var base4 = bitmapT.toBase64Data();
							console.log('lygg.base64=' + base4);
						}, function(e) {
							console.log('加載圖片失敗:' + JSON.stringify(e));
						});
						//***有些同窗反饋,後臺強烈要求傳base64,下面是圖片轉base64的方法,沒此需求的能夠無視。
						
					});
				}
				else if (uni.getSystemInfoSync().platform == "ios") {//蘋果
					lyBDFaceAuthIOS.scanFace({
						licenseID: "longyoung-face-ios",//必須與百度受權資料一致
						actionAry:["Eye", "Mouth", "HeadLeft", "HeadRight", "HeadLeftOrRight", "HeadUp", "HeadDown"],//不傳無動做
						isLivenessRandom:0,//不傳默認有序,0有序,1隨機
						isSound:0,//不傳默認有聲音,0無聲,1有聲,iOS無效
						txtColor:"#3987FD",//文字顏色
						bgColor:"#3987FD", //背景顏色,iOS設置無效,須要換圖片facecover_new.png,路徑 nativeplugins\longyoung-BDFaceAuth-iOS\ios\com.baidu.idl.face.faceSDK.bundle,具體看示例。
						roundColor:"#3987FD"//圓的顏色
					}, result => {
						console.log('result=' + result);//圖片存在 result.bestImgBase64,顯示圖片須要加頭"data:image/png;base64," + result.bestImgBase64.replace(/[\r\n]/g, "")
						
						//***不傳base64的,看這裏,使用 uni.uploadFile()上傳服務器,沒此需求的能夠無視。
						var bitmapT = new plus.nativeObj.Bitmap('test');
						//加載base64圖片
						bitmapT.loadBase64Data(result.bestImgBase64, function(res){
							//保存base64圖片
							bitmapT.save("_faceImg/face.png", {}, function(res){
								bitmapT.clear();//銷燬bitmap對象
								
								//圖片上傳服務器
								//使用 uni.uploadFile()上傳服務器,filePath=res.target
								uni.uploadFile({
									url: 'http://api.longyoung.com/api/open/common/uploadImgTemp', //圖片上傳地址
									filePath: res.target,
									method: 'post',
									name: 'imgFile', //上傳圖片參數名
									success: (res) => {
										var data = res.data;
									}
								});
								
							}, function(res){
								console.log("longyoung.save.fail=", res);
							});
							
						}, function(res){
							console.log("longyoung.fail=", res);
						});
						//***不傳base64的,看這裏,使用 uni.uploadFile()上傳服務器,沒此需求的能夠無視。

					});
				}
				
				
			},
		}
	}
</script>

4.5 圖片更換post

在對應目錄放相應圖片(如:close_new.png,success_new.png,warning_new.png),不放使用默認圖片,詳情可看示例代碼。

4.6 打自定義基座(以安卓爲例,iOS 相似)

須要打自定義基座才能夠進行測試,運行->運行到手機或模擬器->製做自定義基座。注意事項看圖片,請使用本身的證書(就是簽名文件.jks),申請百度受權文件的時候填寫這個證書的 md5。每次打自定義基座的時候,最好先把舊的基座刪除(若是存在),路徑在根目錄下的 unpackage 文件夾裏面(LyBDFaceAuthDemo\unpackage\debug\android_debug.apk)。

uni7.png

4.7 勾選自定義基座後運行

運行->運行到手機或模擬器->運行基座選擇,勾選自定義調試基座,以後運行到設備,以下圖。

uni8.png

<u>五、注意事項</u>

5.1 安卓圖片存到本地緩存目錄,/storage/emulated/0/Android/data/com.longyoung.facedemo/cache/faceImg/face1573781316334.png,上傳服務器須要加這個頭'file://'。如須要傳base64格式,請看上面示例代碼。

5.2 iOS 返回的圖片爲base64格式,請看上面示例代碼。

5.3 公衆號「longyoung」後臺回覆「百度人臉識別」獲取。

<u>六、版權聲明</u>

版權歸開發者全部,未經受權贊成,不得分享源碼。

原文出處:https://www.cnblogs.com/longyoung/p/12121568.html

相關文章
相關標籤/搜索