合并代码
This commit is contained in:
parent
905ac5b9b1
commit
637b123fcc
@ -1,338 +0,0 @@
|
|||||||
import camera from '@ohos.multimedia.camera';
|
|
||||||
import { cameraService } from '../../common/service/cameraService';
|
|
||||||
import { voiceService } from '../../common/service/voiceService';
|
|
||||||
import { faceCompare } from '../../api/userInfo';
|
|
||||||
import prompt from '@ohos.prompt';
|
|
||||||
import grantPermission from '../../common/utils/PermissionUtils';
|
|
||||||
import CameraModel from '../../common/service/CameraModel';
|
|
||||||
|
|
||||||
let previewWidth;
|
|
||||||
let previewHeight;
|
|
||||||
|
|
||||||
const PERMISSIONS: Array<string> = [
|
|
||||||
'ohos.permission.CAMERA']
|
|
||||||
|
|
||||||
@Component
|
|
||||||
export default struct FaceCompare {
|
|
||||||
@State imageBase64: string = 'data:image/jpeg;base64,'
|
|
||||||
@Prop sfzh: string;
|
|
||||||
@Prop firstImage: string;
|
|
||||||
@Link showFaceCompare: boolean;
|
|
||||||
@Link faceCompareSucess: boolean;
|
|
||||||
@State imageThumbnail: string = '';
|
|
||||||
private mXComponentController: XComponentController = new XComponentController();
|
|
||||||
private cameraModel: CameraModel = new CameraModel();
|
|
||||||
private cameraObj = null;
|
|
||||||
private timer = null; //人脸比对执行任务定时器
|
|
||||||
private stopClose = false; // 阻止用户关闭此组件
|
|
||||||
private times = 1; //人脸比对失败次数, 超过3次将不会自动比对,需要点击重新打开重新触发
|
|
||||||
private vocObj = null;
|
|
||||||
private surfaceId: string = '';
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
Column() {
|
|
||||||
Column() {
|
|
||||||
Text('照片比对')
|
|
||||||
.lineHeight('16%')
|
|
||||||
.height('16%')
|
|
||||||
.fontWeight(FontWeight.Bold)
|
|
||||||
.fontSize(24)
|
|
||||||
|
|
||||||
Row() {
|
|
||||||
Row() {
|
|
||||||
XComponent({
|
|
||||||
id: 'componentId',
|
|
||||||
type: 'surface',
|
|
||||||
controller: this.mXComponentController
|
|
||||||
})
|
|
||||||
.onLoad(() => {
|
|
||||||
// this.mXComponentController.setXComponentSurfaceSize({surfaceWidth:640,surfaceHeight:480});
|
|
||||||
// let surfaceId = this.mXComponentController.getXComponentSurfaceId()
|
|
||||||
// console.log('jiangsong: xcomponentController this.surfaceId = ' + surfaceId)
|
|
||||||
this.mXComponentController.setXComponentSurfaceSize({ surfaceWidth: 640, surfaceHeight: 480 });
|
|
||||||
this.surfaceId = this.mXComponentController.getXComponentSurfaceId();
|
|
||||||
this.cameraModel.initCamera(this.surfaceId);
|
|
||||||
|
|
||||||
this.readyToTakePhoto(this.surfaceId)
|
|
||||||
|
|
||||||
})
|
|
||||||
.width('100%')
|
|
||||||
.height('100%')
|
|
||||||
.backgroundColor(Color.Black)
|
|
||||||
}
|
|
||||||
.width('48%')
|
|
||||||
.height('100%')
|
|
||||||
|
|
||||||
Row() {
|
|
||||||
Image(this.firstImage)
|
|
||||||
.width('100%')
|
|
||||||
.height('100%')
|
|
||||||
.backgroundColor(Color.Black)
|
|
||||||
}
|
|
||||||
.width('48%')
|
|
||||||
.height('100%')
|
|
||||||
}
|
|
||||||
.width('88.9%')
|
|
||||||
.height('53.2%')
|
|
||||||
.justifyContent(FlexAlign.SpaceBetween)
|
|
||||||
|
|
||||||
Text('正在等待拍照…')
|
|
||||||
.lineHeight('16%')
|
|
||||||
.height('16%')
|
|
||||||
.fontWeight(FontWeight.Bold)
|
|
||||||
.fontColor('#CC7E00')
|
|
||||||
|
|
||||||
Column() {
|
|
||||||
Row() {
|
|
||||||
Text('若验证无响应,点击此处')
|
|
||||||
.lineHeight('100%')
|
|
||||||
.height('100%')
|
|
||||||
.fontColor('#000000')
|
|
||||||
|
|
||||||
Column() {
|
|
||||||
Text('重新打开')
|
|
||||||
.lineHeight('100%')
|
|
||||||
.height('100%')
|
|
||||||
.fontColor(Color.White)
|
|
||||||
.fontSize(23)
|
|
||||||
}
|
|
||||||
.width('22.8%')
|
|
||||||
.height('89.9%')
|
|
||||||
.backgroundImage($r('app.media.nor'))
|
|
||||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
|
||||||
.onClick(async () => {
|
|
||||||
this.times = 1;
|
|
||||||
// this.takePhoto('face_check.mp3');
|
|
||||||
this.readyToTakePhoto(this.surfaceId);
|
|
||||||
// await this.cameraObj.releaseSource()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
.width('88.9%')
|
|
||||||
.height('100%')
|
|
||||||
.justifyContent(FlexAlign.SpaceBetween)
|
|
||||||
}
|
|
||||||
.width('100%')
|
|
||||||
.height('16%')
|
|
||||||
.position({ y: '84%' })
|
|
||||||
.borderRadius({ topLeft: 0, topRight: 0, bottomLeft: 15, bottomRight: 15 })
|
|
||||||
.backgroundColor('#CCC4B8')
|
|
||||||
}
|
|
||||||
.width('68.75%')
|
|
||||||
.height('73.2%')
|
|
||||||
.backgroundColor('#E5E3DF')
|
|
||||||
.borderRadius(15)
|
|
||||||
.margin({ top: '4%' })
|
|
||||||
|
|
||||||
Column() {
|
|
||||||
}
|
|
||||||
.width('8.5%')
|
|
||||||
.height('15.1%')
|
|
||||||
.backgroundImage($r('app.media.close'))
|
|
||||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
|
||||||
.onClick(() => {
|
|
||||||
// prompt.showToast({
|
|
||||||
// message: '人脸比对程序正在执行,请等待程序执行完毕。',
|
|
||||||
// duration: 3000
|
|
||||||
// });
|
|
||||||
this.showFaceCompare = false
|
|
||||||
this.faceCompareSucess = false
|
|
||||||
return
|
|
||||||
console.log('jiangsong close the faceCompare componet');
|
|
||||||
if (!this.stopClose) {
|
|
||||||
this.showFaceCompare = false
|
|
||||||
|
|
||||||
} else {
|
|
||||||
prompt.showToast({
|
|
||||||
message: '人脸比对程序正在执行,请等待程序执行完毕。',
|
|
||||||
duration: 3000
|
|
||||||
});
|
|
||||||
this.showFaceCompare = false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
.width('100%')
|
|
||||||
.height('100%')
|
|
||||||
.backgroundColor('rgba(0, 0, 0, 0.8)')
|
|
||||||
.position({ x: 0, y: 0 })
|
|
||||||
}
|
|
||||||
|
|
||||||
onPageShow() {
|
|
||||||
this.cameraModel.initCamera(this.surfaceId);
|
|
||||||
}
|
|
||||||
|
|
||||||
async aboutToAppear() {
|
|
||||||
// this.cameraModel.initCamera(this.surfaceId);
|
|
||||||
await grantPermission().then(res => {
|
|
||||||
if (this.surfaceId) {
|
|
||||||
this.cameraModel.initCamera(this.surfaceId);
|
|
||||||
}
|
|
||||||
}).catch(rej => {
|
|
||||||
})
|
|
||||||
|
|
||||||
this.surfaceId = this.mXComponentController.getXComponentSurfaceId();
|
|
||||||
// this.cameraModel.setTakePictureHandleCallback(this.takePictureHandle.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
// takePictureHandle = (thumbnail: string) => {
|
|
||||||
// this.imageThumbnail = thumbnail;
|
|
||||||
// };
|
|
||||||
|
|
||||||
async initCamera(surfaceId: string) {
|
|
||||||
//动态获取隐私权限
|
|
||||||
let context = getContext(this) as any
|
|
||||||
await context.requestPermissionsFromUser(PERMISSIONS)
|
|
||||||
console.log('grantPermission,requestPermissionsFromUser');
|
|
||||||
// 创建CameraManager对象
|
|
||||||
let cameraManager = await camera.getCameraManager(context)
|
|
||||||
if (!cameraManager) {
|
|
||||||
console.error('Failed to get the CameraManager instance');
|
|
||||||
}
|
|
||||||
// 获取相机列表
|
|
||||||
let cameraArray = await cameraManager.getSupportedCameras()
|
|
||||||
if (!cameraArray) {
|
|
||||||
console.error('Failed to get the cameras');
|
|
||||||
}
|
|
||||||
for (let index = 0; index < cameraArray.length; index++) {
|
|
||||||
console.log('cameraId : ' + cameraArray[index].cameraId) // 获取相机ID
|
|
||||||
console.log('cameraPosition : ' + cameraArray[index].cameraPosition) // 获取相机位置
|
|
||||||
console.log('cameraType : ' + cameraArray[index].cameraType) // 获取相机类型
|
|
||||||
console.log('connectionType : ' + cameraArray[index].connectionType) // 获取相机连接类型
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建相机输入流
|
|
||||||
let cameraInput = await cameraManager.createCameraInput(cameraArray[0])
|
|
||||||
|
|
||||||
// 打开相机
|
|
||||||
await cameraInput.open().then(() => {
|
|
||||||
console.log('opencamera succ.');
|
|
||||||
}).catch(function (err) {
|
|
||||||
console.log("opencamera failed with error:" + err);
|
|
||||||
});
|
|
||||||
|
|
||||||
// 获取相机设备支持的输出流能力
|
|
||||||
let cameraOutputCap = await cameraManager.getSupportedOutputCapability(cameraArray[0]);
|
|
||||||
if (!cameraOutputCap) {
|
|
||||||
console.error("outputCapability outputCapability == null || undefined")
|
|
||||||
} else {
|
|
||||||
console.log("outputCapability: " + JSON.stringify(cameraOutputCap));
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取相机支持的输出能力--支持的预览配置信息
|
|
||||||
let previewProfilesArray = cameraOutputCap.previewProfiles;
|
|
||||||
if (!previewProfilesArray) {
|
|
||||||
console.error("createOutput previewProfilesArray == null || undefined")
|
|
||||||
} else {
|
|
||||||
console.log("previewProfiles:" + JSON.stringify(previewProfilesArray[0]))
|
|
||||||
previewWidth = previewProfilesArray[0].size.width;
|
|
||||||
previewHeight = previewProfilesArray[0].size.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建预览输出流,其中参数 surfaceId 参考下面 XComponent 组件,预览流为XComponent组件提供的surface
|
|
||||||
let previewOutput = await cameraManager.createPreviewOutput(previewProfilesArray[0], surfaceId)
|
|
||||||
if (!previewOutput) {
|
|
||||||
console.error("Failed to create the PreviewOutput instance.")
|
|
||||||
} else {
|
|
||||||
console.log("create the PreviewOutput instance succ.")
|
|
||||||
}
|
|
||||||
|
|
||||||
//创建会话
|
|
||||||
let captureSession = await cameraManager.createCaptureSession()
|
|
||||||
if (!captureSession) {
|
|
||||||
console.error('Failed to create the CaptureSession instance.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log('Callback returned with the CaptureSession instance.' + captureSession);
|
|
||||||
|
|
||||||
// 开始配置会话
|
|
||||||
await captureSession.beginConfig()
|
|
||||||
|
|
||||||
// 向会话中添加相机输入流
|
|
||||||
await captureSession.addInput(cameraInput)
|
|
||||||
|
|
||||||
// 向会话中添加预览输入流
|
|
||||||
await captureSession.addOutput(previewOutput)
|
|
||||||
|
|
||||||
// 提交会话配置
|
|
||||||
await captureSession.commitConfig()
|
|
||||||
// 启动会话
|
|
||||||
await captureSession.start().then(() => {
|
|
||||||
console.log('captureSession start success.');
|
|
||||||
}).catch(function (err) {
|
|
||||||
console.log("captureSession start failed with error:" + err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async aboutToDisappear() {
|
|
||||||
clearTimeout(this.timer)
|
|
||||||
this.vocObj.releasePlayer()
|
|
||||||
this.cameraObj.releaseSource()
|
|
||||||
}
|
|
||||||
|
|
||||||
async readyToTakePhoto(surfaceId) {
|
|
||||||
this.surfaceId = surfaceId;
|
|
||||||
this.cameraObj = new cameraService(surfaceId);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
this.showFaceCompare = false
|
|
||||||
this.faceCompareSucess = true;
|
|
||||||
}, 3000)
|
|
||||||
return
|
|
||||||
await this.cameraObj.initCamera((img) => {
|
|
||||||
console.log('jiangsong getPhoto res.' + img.slice(0, 100))
|
|
||||||
this.imageBase64 = 'data:image/jpeg;base64,' + img;
|
|
||||||
const firstImage = this.firstImage.substr(22)
|
|
||||||
faceCompare({
|
|
||||||
sfzh: this.sfzh,
|
|
||||||
firstImage: firstImage,
|
|
||||||
// sfzh: '321281198605076819',
|
|
||||||
// firstImage: this.firstImage,
|
|
||||||
secondImage: img,
|
|
||||||
type: 2,
|
|
||||||
verifyType: 1
|
|
||||||
}).then(res => {
|
|
||||||
if (res) {
|
|
||||||
console.log('jiangsong face compare success' + JSON.stringify(res))
|
|
||||||
this.showFaceCompare = false
|
|
||||||
this.faceCompareSucess = true;
|
|
||||||
} else {
|
|
||||||
console.log('jiangsong face compare faild')
|
|
||||||
//3s后开始语音提示
|
|
||||||
this.timer = setTimeout(() => {
|
|
||||||
this.takePhoto('face_fail.mp3');
|
|
||||||
}, 3000)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
this.vocObj = new voiceService(async (status) => {
|
|
||||||
console.log('jiangsong voiceService callback. status == ' + status)
|
|
||||||
if (status == 'completed') {
|
|
||||||
this.cameraObj.takePhoto();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//3s后开始语音提示
|
|
||||||
this.timer = setTimeout(() => {
|
|
||||||
this.takePhoto('face_check.mp3');
|
|
||||||
}, 3000)
|
|
||||||
}
|
|
||||||
|
|
||||||
takePhoto(name) {
|
|
||||||
this.stopClose = true;
|
|
||||||
if (this.times > 3) {
|
|
||||||
this.stopClose = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.times++;
|
|
||||||
|
|
||||||
this.vocObj.playAudio({
|
|
||||||
type: 1,
|
|
||||||
name: name
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// export default FaceCompare
|
|
||||||
Loading…
x
Reference in New Issue
Block a user