From f920064ce42eaaa74311446c089ceb52d2830491 Mon Sep 17 00:00:00 2001
From: chenyincheng <501753378@qq.com>
Date: 星期四, 13 四月 2023 14:35:33 +0800
Subject: [PATCH] 34

---
 src/views/login/index.vue |  139 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 139 insertions(+), 0 deletions(-)

diff --git a/src/views/login/index.vue b/src/views/login/index.vue
new file mode 100644
index 0000000..ff1f3c4
--- /dev/null
+++ b/src/views/login/index.vue
@@ -0,0 +1,139 @@
+<template>
+  <div class="wrapp">
+    <div class="inpu">
+      <el-input v-model="inputCode" ref="inputRef" id="inputCode" class="inputCode" @change="inputChabge"
+        placeholder="请输入患者卡号或扫描条码" />
+    </div>
+    <div
+        class="status"
+        :style="{ color: msg === '检测到人脸' ? 'green' : 'red' }">
+      {{ msg }}
+    </div>
+    <div class="rWrapp">
+      <video id="myVideo" preload="preload" autoplay loop muted />
+      <canvas ref="myCanvas" id="myCanvas" class="myCanvas" width="200" height="200" ></canvas>
+    </div>
+    <div v-if="imgSrc" class="img_bg_camera">
+      <p>效果预览</p>
+      <img :src="imgSrc"  class="tx_img" />
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { onMounted, ref } from "vue";
+import {faceShibie,base64toFile} from '@/samples/faceApi'
+import { sendPationCodeApi } from '../../samples/httpApi'
+import { confingInfoStore } from "@/stores/StoresConfing";
+
+const msg = ref<string>("没识别到人脸...");
+
+let trackerTask: any = null;
+const inputCode=ref('')
+const inputRef = ref()
+
+// 标识用的画布
+const myCanvas = ref<HTMLCanvasElement | null>(null);
+let imgSrc:'';
+// 实例人脸检查器
+const myTracker: any = new tracking.ObjectTracker("face");
+myTracker.setInitialScale(4);
+myTracker.setStepSize(2);
+myTracker.setEdgesDensity(0.1);
+
+// 监听人脸检查器
+myTracker.on("track", (event: tracking.TrackEvent) => {
+  const context = myCanvas.value?.getContext("2d") as CanvasRenderingContext2D;
+  if (myCanvas.value) {
+    context.clearRect(0, 0, myCanvas.value.width, myCanvas.value.height);
+  }
+  if (event.data.length === 0) {
+    msg.value = "没识别到人脸...";
+  } else if(event.data.length === 1) {
+    trackerTask.stop();
+    msg.value = "检测到人脸";
+    const myCanvas = document.getElementById("myCanvas");// 
+    const thisContext = myCanvas?.getContext("2d");
+    const myVideo = document.querySelector("#myVideo") as HTMLVideoElement;
+    thisContext.drawImage(myVideo, 0,0, 250, 200);
+    imgSrc = myCanvas?.toDataURL('image/png');
+    // 转文件
+    base64toFile(imgSrc)
+    setTimeout(() => {
+      console.log('监测到人脸后1s')
+      trackerTask.run();
+    }, 3000);
+    // @ts-ignore
+    if (typeof window.stream === "object") {
+      myVideo.srcObject = null;
+      // @ts-ignore
+      window.stream.getTracks().forEach((track) => track.stop());
+    }
+  }
+});
+const inputChabge = () => {
+  sendPationCodeApi(inputCode.value)
+  setTimeout(function () {
+    inputCode.value = ''
+  }, 1000)
+}
+onMounted(() => {
+  // 触发人脸检查器
+  console.log('人脸识别初始化')
+  const  isUseFaceRecogService = confingInfoStore().confingInfo.isUseFaceRecogService
+  console.log('人脸识别',isUseFaceRecogService)
+  setInterval(function () {
+    inputRef.value.focus();
+  }, 1000)
+  if (isUseFaceRecogService) {
+    console.log('开启人脸识别初始化')
+    setTimeout(()=>{
+      trackerTask = tracking.track("#myVideo", myTracker, { camera: true });
+    },2000)
+   
+  }else{
+    console.log('关闭人脸识别')
+    
+  }
+ 
+ 
+});
+</script>
+<style lang="less" scoped>
+.wrapp {
+  height: 100%;
+  background-size: 100% 100%;
+  padding-top: 10px;
+  .rWrapp {
+    width: 500px;
+    height: 500px;
+    margin: auto;
+    // margin-top: 30px;
+    position: relative;
+    .myCanvas {
+      position: absolute;
+      top: 0;
+      left: 0;
+      border-radius: 50%;
+      width: 100%;
+      height: 100%;
+    }
+    #myVideo {
+      width: 100%;
+      height: 100%;
+      border-radius: 50%;
+      object-fit: cover;
+    }
+  }
+  .status {
+    //margin-top: 100px;
+    text-align: center;
+  }
+  .img_bg_camera{
+    position: absolute;
+    top: -500px;
+    
+    z-index: -999;
+  }
+}
+</style>
+

--
Gitblit v1.8.0