以前に、カメラをカスタマイズして写真を撮り、ポートレートと ID カードを検出する WeChat アプレットを開発しました。私はいつもそれを記録するために記事を書きたいと思っていましたが、今はそれを要約する時間があります。
需要点:
1.ポートレートをカスタマイズする機能
2. IDカードの正面写真を自動的に撮影できます
3. IDカードを識別し、顔写真と比較して本人かどうかを確認します(この機能は、会社の業務ロジックにより一時的に閉鎖されています)
事前準備:
1. Baidu AI 顔検出機能を使用するため、Baidu オープン プラットフォームにアプリケーションを登録する必要があります (顔検出を選択)。
2. カメラ関数 uni.createCameraContext() および takePhoto()
3. 画像圧縮 uni.compressImage
4. システム ファイル uni.getFileSystemManager().readFile を取得します。
特記事項:
トークンを取得するための Baidu の顔検出
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-app プラグインとしてパッケージ化されており、プラグインのアドレスは次のとおりです。
メリットの波を手配します。