uni开发微信小程序自定义相机自动检测(人像+身份证)

之前开发过微信小程序自定义相机拍照检测人像和身份证检测。一直期望写篇文章记录一下,趁现在有点时间,总结一下。

需求点:

1、能够自定拍摄人像

2、能够自动拍摄身份证正面照

3、识别身份证并且和人脸照比对是否是本人(该功能因公司业务逻辑,暂不开放)

前置准备:

1、使用百度ai人脸检测功能,所以需要在百度开放平台注册一个应用(选择人脸检测)

2、相机功能 uni.createCameraContext()和 takePhoto()

3、图片压缩 uni.compressImage

4、获取系统文件uni.getFileSystemManager().readFile

特别说明:

百度人脸检测获取token

getAccessToken(){
				console.log(323232)
				let that = this;
				// 每次更新access_token
				let baiduApiData = that.baiduApiData;
				uni.request({
					url: "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+baiduApiData.apikey+"&client_secret="+baiduApiData.SecretKey,
					method: 'POST',
					dataType: "json",
					header: {
						'content-type': 'application/json'
					},
					success: function(res) {
						console.log(res,"-----")
						that.access_token = res.data.access_token;
						//获取到token后开始检测人像
						setTimeout(()=>{
							that.initBaiDuApiFunction()
						},1000)
					},fail(err) {
						console.log(err)
					}
				})
			},

检测人脸数据

uni.request({
										url: "https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=" + that.access_token,
										data: {//具体参数请自动查看api
											image: rr.data,
											image_type: "BASE64",
											max_face_num: 1,
											face_field: 'quality',
										},
										method: 'POST',
										dataType: "json",
										header: {
											'content-type': 'application/json'
										},
										success: function(res) {
											console.log(5555)
											console.log(res)
											if (res.data.error_code === 0) { //检测到人脸就开启拍照
												let faceList = res.data.result.face_list[0];
												let face_probability = faceList.face_probability > 0.6; //人脸置信度
												let quality = faceList.quality; //人脸质量
												let blur = quality.blur < 0.5; //人脸模糊度 0-1 0清晰 1模糊
												// let illumination = quality.illumination > 100; //脸部光照度 暂时不用
												// left_eye : 0.6, #左眼被遮挡的阈值
												// right_eye : 0.6, #右眼被遮挡的阈值
												// nose : 0.7, #鼻子被遮挡的阈值
												// mouth : 0.7, #嘴巴被遮挡的阈值
												// left_cheek : 0.8, #左脸颊被遮挡的阈值
												// right_cheek : 0.8, #右脸颊被遮挡的阈值
												// chin_contour : 0.6, #下巴被遮挡阈值
												let  occlusion =quality.occlusion;//遮挡情况
												let location = faceList.location;//头像位置信息
												let top = location.top;
												let left = location.left;
												
												let completeness = quality.completeness == 1; //人脸完整度
											
												if (face_probability && blur && completeness) {//获取人脸较为清晰可以开始身份检测
													that.baseImage = 'data:image/png;base64,'+rr.data//获取到的图片base64
													uni.showToast({
														title:"获取照片成功"
													})
													that.$emit('changeDataReturn',{
														baseImage:rr.data,//需要的base64图片
														allImage:that.baseImage ,//完整链路的base64图片
													})
												}else{//否则重新开始拍照
													setTimeout(()=>{
														that.initBaiDuApiFunction()
													},1000)
												}
												
											} else {//没有检测到人脸也重新开始拍照
												setTimeout(()=>{
													that.initBaiDuApiFunction()
												},1000)
											}
										},
										fail:()=>{
											//调用失败,开启手动重新获取
											that.reloadByHand = true;
										}
									})

效果图:

uni开发微信小程序自定义相机自动检测(人像+身份证)_第1张图片uni开发微信小程序自定义相机自动检测(人像+身份证)_第2张图片

uni开发微信小程序自定义相机自动检测(人像+身份证)_第3张图片 uni开发微信小程序自定义相机自动检测(人像+身份证)_第4张图片

 具体代码封装为uni-app插件,插件地址为:

微信小程序自定义orc检测人像(ww-orc-idcard) - DCloud 插件市场自动检测人像或者证件照https://ext.dcloud.net.cn/plugin?id=8070

安排一波福利:

uni开发微信小程序自定义相机自动检测(人像+身份证)_第5张图片

 

你可能感兴趣的:(uni-app,微信小程序,小程序)