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


插件亮點

1 支持安卓平板(橫豎屏均可),蘋果的iPad。2 顏色圖片均可更換。

特別提醒

此插件包含 android 端和 iOS 端,考慮到有些同學只做其中一個端的 app,特意分為 2 個插件,減小安裝包體積。android 端請點擊這里iOS 端請點擊這里

1、前言

最近在使用 uniapp 開發項目,有刷臉實名認證的需求,最終使用百度人臉識別實現了需求。自己做了個 APP 原生插件,給大家介紹下用法。本插件主要功能是通過動作檢測活體,采集人臉返回。其他功能需要自主實現,如刷臉登錄,實名認證等。

2、包名及簽名證書准備

包名安卓和 iOS 可填寫一樣的:com.longyoung.baidudemo(一般用反域名,如我的域名:www.longyong.com)。注意:uniapp 打包或者打基座要用這個包名。申請百度授權文件,需要用到安卓簽名證書的 md5,如果你們公司有原生開發團隊,問他們要即可。沒有的話,自己生成一個簽名證書並獲取它的 md5,點擊查看方法注意:uniapp 打包或者打基座要用這個簽名證書。

3、百度官方資料准備

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

4、接入步驟

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。

uniapp2.png

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

<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 圖片更換

在對應目錄放相應圖片(如: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

5、注意事項

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

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

5.3 公眾號「longyoung」后台回復「百度人臉識別」獲取。

6、版權聲明

版權歸開發者所有,未經授權同意,不得分享源碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM