| | |
| | | // This file is auto-generated, don't edit it |
| | | import facebody20191230, * as $facebody20191230 from '@alicloud/facebody20191230'; |
| | | import {checkUploadFile} from '@/api/user' |
| | | // 依赖的模块可通过下载工程中的模块依赖文件或右上角的获取 SDK 依赖信息查看 |
| | | import * as $OpenApi from '@alicloud/openapi-client'; |
| | | import Util, * as $Util from '@alicloud/tea-util'; |
| | |
| | | import { confingInfoStore } from '@/stores/StoresConfing' |
| | | import {sendPationCodeApi} from './httpApi' |
| | | import { sockteStore } from '@/stores/sockteInfo'; |
| | | |
| | | |
| | | var AipFaceClient = require("baidu-aip-sdk").face; |
| | | |
| | | // 设置APPID/AK/SK |
| | | var APP_ID = "119524671"; |
| | | var API_KEY = "53x6fo60pAGACz078FyT2QpY"; |
| | | var SECRET_KEY = "r06aXtscuAk2SXHk1FsGM66aUCoGzncU"; |
| | | |
| | | // 新建一个对象,建议只保存一个对象调用服务接口 |
| | | var clientBaidu = new AipFaceClient(APP_ID, API_KEY, SECRET_KEY); |
| | | |
| | | |
| | | |
| | | // 要识别的人脸库 |
| | | const faceDatabase= confingInfoStore().confingInfo.face_database |
| | |
| | | }); |
| | | // 访问的域名 |
| | | config.endpoint = `facebody.cn-shanghai.aliyuncs.com`; |
| | | console.log('人脸识别客户端已启动') |
| | | return new facebody20191230(config); |
| | | } |
| | | // 将文件上传到oss |
| | |
| | | return ossUrl |
| | | } |
| | | /** |
| | | * |
| | | * 阿里云人脸识别 |
| | | * @param path 图片路径 |
| | | */ |
| | | const faceShibie= async(path:any)=>{ |
| | | console.log('文件路径',path) |
| | | const fileStream = fs.createReadStream(path); |
| | | let client=createClient() |
| | | // 通过本地文件 |
| | | const facedata= confingInfoStore().confingInfo.face_database |
| | | const faceScore=confingInfoStore().confingInfo.face_score |
| | | console.log(facedata,'人脸数据库') |
| | | let searchFaceAdvanceRequest = new $facebody20191230.SearchFaceAdvanceRequest(); |
| | | searchFaceAdvanceRequest.imageUrlObject = fileStream; |
| | | searchFaceAdvanceRequest.dbName = facedata |
| | | searchFaceAdvanceRequest.limit = 2; |
| | | let runtime = new $Util.RuntimeOptions({ }); |
| | | console.log('-----监测图片--') |
| | | client.searchFaceAdvance(searchFaceAdvanceRequest, runtime).then(re=>{ |
| | | // console.log('返回结果') |
| | | // console.log(re.statusCode) |
| | | if(re.statusCode===200){ |
| | | const matchList=re.body.data?.matchList |
| | | // console.log('得到的人脸库') |
| | | console.log(matchList) |
| | | if(matchList?.length>0){ |
| | | const faceItems =matchList[0].faceItems |
| | | if(faceItems?.length===0){ |
| | | console.log('没有找到患者对应的人脸') |
| | | return false |
| | | } |
| | | if(faceItems[0].score>=faceScore){ |
| | | const entityId=faceItems[0].entityId |
| | | console.log(entityId,'得到了人脸识别id,存患者code到vuex') |
| | |
| | | resultTime: '' |
| | | }) |
| | | }else{ |
| | | console.log('那些人脸都不是') |
| | | console.log('没有找到患者对应的人脸') |
| | | } |
| | | } |
| | | |
| | |
| | | delImg(path) |
| | | }) |
| | | } |
| | | // base64z转文件后验证 |
| | | /** |
| | | * 百度人脸识别 |
| | | * @param path base64 |
| | | */ |
| | | const faceSearchBaidu=async(path:any)=>{ |
| | | const faceScore=confingInfoStore().confingInfo.face_score |
| | | console.log('文件路径百度识别') |
| | | console.log(path) |
| | | try { |
| | | |
| | | var image = path; // 图片的 base64 数据,图片大小不超过 10M,支持 JPG、PNG、BMP、JPEG 格式 |
| | | |
| | | var imageType = "BASE64"; |
| | | |
| | | var groupIdList = "test_2018"; |
| | | |
| | | // 调用人脸搜索 |
| | | clientBaidu.search(image, imageType, groupIdList).then(function(result: any) { |
| | | console.log(result.error_msg==='SUCCESS','百度人脸识别成功'); |
| | | console.log(result.result.user_list); |
| | | if(result.error_msg==='SUCCESS'){ |
| | | if(result.result.user_list.length>0){ |
| | | const userList=result.result.user_list |
| | | const user=userList[0] |
| | | const entityId=user.user_id |
| | | const score=user.score |
| | | console.log(`entityId=`+entityId+','+'score='+score) |
| | | //设置识别的的两 要大于多少 |
| | | if(entityId!=='unknown'&&score>=faceScore){ |
| | | console.log(entityId,'得到了人脸识别id,存患者code到vuex') |
| | | sockteStore().setfaceSockte({ |
| | | deviceType: "人脸识别", |
| | | deviceName: "百度人脸识别", |
| | | result: entityId, |
| | | resultTime: new Date().toLocaleString(), |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | }).catch(function(err: any) { |
| | | // 如果发生网络错误 |
| | | console.log(err); |
| | | }); |
| | | } catch (err:any) { |
| | | console.error('发生错误:', err.message); |
| | | |
| | | } |
| | | |
| | | } |
| | | // 验证---逻辑 |
| | | const yanzhengimg=async(path:any)=>{ |
| | | console.log('文件路径--逻辑',path) |
| | | const fileStream = fs.createReadStream(path); |
| | | let client=createClient() |
| | | // 通过本地文件 |
| | | const facedata= confingInfoStore().confingInfo.face_database |
| | | const faceScore=confingInfoStore().confingInfo.face_score |
| | | let searchFaceAdvanceRequest = new $facebody20191230.SearchFaceAdvanceRequest(); |
| | | searchFaceAdvanceRequest.imageUrlObject = fileStream; |
| | | searchFaceAdvanceRequest.dbName = facedata |
| | | searchFaceAdvanceRequest.limit = 2; |
| | | let runtime = new $Util.RuntimeOptions({ }); |
| | | client.searchFaceAdvance(searchFaceAdvanceRequest, runtime).then(re=>{ |
| | | if(re.statusCode===200){ |
| | | const matchList=re.body.data?.matchList |
| | | // console.log('得到的人脸库') |
| | | console.log(matchList) |
| | | if(matchList?.length>0){ |
| | | const faceItems =matchList[0].faceItems |
| | | if(faceItems?.length===0){ |
| | | console.log('没有找到患者对应的人脸') |
| | | return false |
| | | } |
| | | if(faceItems[0].score>=faceScore){ |
| | | const entityId=faceItems[0].entityId |
| | | console.log(entityId,'得到了人脸识别id,存患者code到vuex') |
| | | sockteStore().setfaceSockte({ |
| | | deviceType: "人脸识别", |
| | | deviceName: "人脸识别", |
| | | result: entityId, |
| | | resultTime: '' |
| | | }) |
| | | }else{ |
| | | console.log('没有找到患者对应的人脸') |
| | | } |
| | | } |
| | | |
| | | } |
| | | }).finally(()=>{ |
| | | // console.log('---------------都要执行的') |
| | | // 删除图片 |
| | | delImg(path) |
| | | }) |
| | | } |
| | | /** |
| | | * 本地人脸识别 |
| | | * @param path |
| | | */ |
| | | const faceApiCheck=async(path:any)=>{ |
| | | const faceScore=confingInfoStore().confingInfo.face_score |
| | | fs.readFile(path, (err, data) => { |
| | | if (err) throw err; |
| | | let blobFile = new File([data], 'name.png', {type:"image/png"}) |
| | | console.log(blobFile) |
| | | const formData = new FormData() // 下面有备注 |
| | | formData.append('image', blobFile) |
| | | checkUploadFile(formData).then(re=>{ |
| | | console.log('-----',re) |
| | | if(re.code===200&&re?.data?.data.result.length>0&&re?.data?.data.result[0]){ |
| | | const result=re?.data?.data.result[0] |
| | | const entityId=result.user_id |
| | | const distance=result.score |
| | | console.log(`entityId=`+entityId+','+'distance='+distance) |
| | | //设置识别的的两 要大于多少 |
| | | if(entityId!=='unknown'&&distance>=faceScore){ |
| | | console.log(entityId,'得到了人脸识别id,存患者code到vuex') |
| | | console.log(entityId,'得到了人脸识别id,存患者code到vuex') |
| | | sockteStore().setfaceSockte({ |
| | | type: "人脸识别", |
| | | deviceName: "人脸识别", |
| | | result: entityId, |
| | | resultTime: '', |
| | | state:2, |
| | | }) |
| | | } |
| | | // |
| | | }else{ |
| | | console.log('本地没识别') |
| | | } |
| | | |
| | | }).finally(()=>{ |
| | | // 删除图片 |
| | | delImg(path) |
| | | }) |
| | | }) |
| | | |
| | | |
| | | |
| | | } |
| | | // base64z转文件后验证 |
| | | const base64toFile = (dataurl:any,filename='file') => { |
| | | if (!fs.existsSync('./imgs')) { |
| | | fs.mkdir('./imgs', (err) => { |
| | |
| | | // new Buffer 操作权限太大,v6.0后使用Buffer.from()创建构造函数 |
| | | const dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象, |
| | | // return dataBuffer |
| | | fs.writeFile(path, dataBuffer, function(err){//用fs写入文件 |
| | | if(err){ |
| | | console.log(err); |
| | | }else{ |
| | | console.log('写入成功!',path); |
| | | // getOssUrl(path) |
| | | // 验证图片 |
| | | faceShibie(path) |
| | | } |
| | | }) |
| | | fs.writeFile(path, dataBuffer, function (err) { |
| | | if (err) { |
| | | console.log(err); |
| | | } else { |
| | | // 是否本地识别 |
| | | const isLanFace= confingInfoStore().confingInfo.isLanFace |
| | | // 人脸识别类型 |
| | | const faceType= confingInfoStore().confingInfo.faceType |
| | | if(isLanFace===true){ |
| | | console.log('本地识别') |
| | | //本地识别 |
| | | faceApiCheck(path) |
| | | }else{ |
| | | //阿里验证外网 |
| | | console.log('阿里识别') |
| | | if(faceType==='阿里云'){ |
| | | faceShibie(path) |
| | | }else if(faceType==='百度'){ |
| | | console.log('百度识别') |
| | | faceSearchBaidu(base64) |
| | | //直接删除 |
| | | delImg(path) |
| | | } |
| | | } |
| | | } }); |
| | | } |
| | | //验证后删除文件图片 |
| | | const delImg=(path:string)=>{ |
| | |
| | | } |
| | | }) |
| | | } |
| | | |
| | | export { |
| | | yanzhengimg, |
| | | createClient, |
| | | faceShibie, |
| | | base64toFile |