From aec98248047327dd29d9ac6f5f307d5a86b939a1 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期三, 06 八月 2025 13:57:32 +0800
Subject: [PATCH] 更新

---
 src/samples/faceApi.ts |  202 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 190 insertions(+), 12 deletions(-)

diff --git a/src/samples/faceApi.ts b/src/samples/faceApi.ts
index a4c5d9c..4a0a1aa 100644
--- a/src/samples/faceApi.ts
+++ b/src/samples/faceApi.ts
@@ -1,5 +1,6 @@
 // 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';
@@ -8,6 +9,19 @@
 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
@@ -37,10 +51,11 @@
   return ossUrl
 }
 /**
- * 
+ * 阿里云人脸识别
  * @param path 图片路径
  */
 const  faceShibie= async(path:any)=>{
+  console.log('文件路径',path)
   const fileStream = fs.createReadStream(path);
   let client=createClient()
   // 通过本地文件
@@ -58,6 +73,10 @@
       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')
@@ -79,7 +98,146 @@
     delImg(path)
   })
 }
-// base64z转文件后验证
+/**
+ * 百度人脸识别
+ * @param path base64 
+ */
+const faceSearchBaidu=async(path:any)=>{
+  const faceScore=confingInfoStore().confingInfo.face_score
+  console.log('文件路径百度识别')
+  try {
+
+    var image = path; // 图片的 base64 数据,图片大小不超过 10M,支持 JPG、PNG、BMP、JPEG 格式
+
+    var imageType = "BASE64";
+    
+    var groupIdList = confingInfoStore().confingInfo.clientCode; // 人脸库ID列表,多个用逗号分隔,最多支持20个
+    
+    // 调用人脸搜索
+    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) => {
@@ -92,16 +250,34 @@
   // 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{
+        //阿里验证外网
+        if(faceType==='阿里云'){
+          console.log('阿里识别')
+          faceShibie(path)
+        }else if(faceType==='百度'){
+          console.log('百度识别')
+          faceSearchBaidu(base64)
+          //直接删除
+          delImg(path)
+       }else{
+          console.log('阿里识别')
+          faceShibie(path)
+       }
+     }
+   } });
 }
 //验证后删除文件图片
 const delImg=(path:string)=>{
@@ -113,7 +289,9 @@
     }
   })
 }
+
 export {
+  yanzhengimg,
   createClient,
   faceShibie,
   base64toFile

--
Gitblit v1.8.0