|
@@ -68,12 +68,45 @@ function tensorFlowWebPackStatus() {
|
|
|
let routeId = null;
|
|
|
let __inputSize = 128;
|
|
|
let __isDoingFaceLiveness = false;
|
|
|
+let disableFaceTracking = false;
|
|
|
|
|
|
async function detectTest() {
|
|
|
const inputSizeList = [128, 160, 224, 320, 416, 512, 608];
|
|
|
const succRate = [0, 0, 0, 0, 0, 0, 0];
|
|
|
const detectTimes = 6;
|
|
|
|
|
|
+ try {
|
|
|
+ const detectStartTime = performance.now();
|
|
|
+ const videoEl = document.getElementById("video");
|
|
|
+ const options = new faceapi.TinyFaceDetectorOptions({
|
|
|
+ inputSize: 128,
|
|
|
+ scoreThreshold: 0.5,
|
|
|
+ });
|
|
|
+ const result = await Promise.race([
|
|
|
+ faceapi.detectAllFaces(videoEl, options),
|
|
|
+ new Promise(resolve => setTimeout(resolve, 10 * 1000)),
|
|
|
+ ]);
|
|
|
+ const detectEndTime = performance.now();
|
|
|
+ if (
|
|
|
+ !result ||
|
|
|
+ !result.length ||
|
|
|
+ detectStartTime - detectEndTime > 2 * 1000
|
|
|
+ ) {
|
|
|
+ disableFaceTracking = true;
|
|
|
+ window._hmt.push([
|
|
|
+ "_trackEvent",
|
|
|
+ "正在考试页面",
|
|
|
+ "启动检测耗时过长:停止实时",
|
|
|
+ ]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.log(error);
|
|
|
+ disableFaceTracking = true;
|
|
|
+ window._hmt.push(["_trackEvent", "正在考试页面", "启动检测错误:停止实时"]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
for (let idx = 0; idx < inputSizeList.length; idx++) {
|
|
|
for (let n = 0; n < detectTimes; n++) {
|
|
|
await new Promise(resolve => setTimeout(resolve, 3 * 1000));
|
|
@@ -84,6 +117,7 @@ async function detectTest() {
|
|
|
const inputSize = inputSizeList[idx];
|
|
|
const videoEl = document.getElementById("video");
|
|
|
try {
|
|
|
+ const detectStartTime = performance.now();
|
|
|
const options = new faceapi.TinyFaceDetectorOptions({
|
|
|
inputSize: inputSize,
|
|
|
scoreThreshold: 0.5,
|
|
@@ -97,6 +131,16 @@ async function detectTest() {
|
|
|
faceapi.detectAllFaces(videoEl, options),
|
|
|
new Promise(resolve => setTimeout(resolve, 10 * 1000)),
|
|
|
]);
|
|
|
+ const detectEndTime = performance.now();
|
|
|
+ if (detectStartTime - detectEndTime > 0.2 * 1000) {
|
|
|
+ disableFaceTracking = true;
|
|
|
+ window._hmt.push([
|
|
|
+ "_trackEvent",
|
|
|
+ "正在考试页面",
|
|
|
+ "单次检测耗时过长:停止实时",
|
|
|
+ ]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
if (result && result.length >= 1) {
|
|
|
console.log(`inputSize: ${inputSize} ${result.length}`);
|
|
@@ -204,6 +248,7 @@ export default {
|
|
|
this.singleTimeUsage = this.singleTimeUsage || 0;
|
|
|
this.multipleTimeUsage = this.multipleTimeUsage || 0;
|
|
|
if (
|
|
|
+ disableFaceTracking ||
|
|
|
this.singleTimeUsage > 10 * 1000 ||
|
|
|
this.multipleTimeUsage > 0.5 * 1000
|
|
|
) {
|