{"version":3,"file":"index.cjs","sources":["../src/lib/load_opencv.js","../src/lib/download.js","../src/lib/model_cache.js","../src/lib/model_loader.js","../src/lib/fr_detect.js","../src/lib/fr_pose.js","../src/lib/fr_expression.js","../src/lib/fr_eye.js","../src/lib/fr_landmark.js","../src/lib/fr_liveness.js","../src/lib/fr_age.js","../src/lib/fr_gender.js","../src/lib/fr_feature.js"],"sourcesContent":["var cv = null;\r\n\r\n// Internal singleton promise to avoid loading multiple times\r\nlet opencvReadyPromise = null;\r\n\r\nasync function load_opencv(options = {}) {\r\n  const basePath = options.basePath || '..';\r\n\r\n  if (cv && typeof cv !== 'undefined') return; // already ready\r\n  if (opencvReadyPromise) return opencvReadyPromise; // loading in progress\r\n\r\n  if (!window.WebAssembly) {\r\n    console.log(\"Your web browser doesn't support WebAssembly.\");\r\n    return Promise.reject(new Error('WebAssembly not supported'));\r\n  }\r\n\r\n  // If window.cv already exists (preloaded), just resolve\r\n  if (window.cv) {\r\n    cv = window.cv;\r\n    return;\r\n  }\r\n\r\n  console.log(\"loading OpenCv.js\");\r\n  opencvReadyPromise = new Promise((resolve, reject) => {\r\n    // Configure Module before loading script\r\n    window.Module = {\r\n      wasmBinaryFile: `${basePath}/js/opencv_js.wasm`,\r\n      preRun: () => {\r\n        // noop\r\n      },\r\n      _main: () => {\r\n        // Called when OpenCV main is ready\r\n        cv = window.cv;\r\n        if (cv) {\r\n          console.log('OpenCV.js is ready.');\r\n          resolve();\r\n        } else {\r\n          reject(new Error('OpenCV loaded but cv is undefined'));\r\n        }\r\n      }\r\n    };\r\n\r\n    const script = document.createElement('script');\r\n    script.type = 'text/javascript';\r\n    script.async = true;\r\n    script.src = `${basePath}/js/opencv.js`;\r\n    script.onload = () => {\r\n      console.log('OpenCV.js script loaded.');\r\n      // _main will resolve when cv is ready\r\n    };\r\n    script.onerror = (e) => {\r\n      reject(new Error('Failed to load OpenCV.js script'));\r\n    };\r\n    document.body.appendChild(script);\r\n  });\r\n\r\n  return opencvReadyPromise;\r\n}\r\n\r\nexport {load_opencv, cv}","export const download = (url, logger = null) => {\r\n  return new Promise((resolve, reject) => {\r\n    const request = new XMLHttpRequest();\r\n    request.open(\"GET\", url, true);\r\n    request.responseType = \"arraybuffer\";\r\n    if (logger) {\r\n      const [log, setState] = logger;\r\n      request.onprogress = (e) => {\r\n        const progress = (e.loaded / e.total) * 100;\r\n        setState({ text: log, progress: progress.toFixed(2) });\r\n      };\r\n    }\r\n    request.onload = function () {\r\n      if (this.status >= 200 && this.status < 300) {\r\n        resolve(request.response);\r\n      } else {\r\n        reject({\r\n          status: this.status,\r\n          statusText: request.statusText,\r\n        });\r\n      }\r\n      resolve(request.response);\r\n    };\r\n    request.onerror = function () {\r\n      reject({\r\n        status: this.status,\r\n        statusText: request.statusText,\r\n      });\r\n    };\r\n    request.send();\r\n  });\r\n};\r\n","/**\n * Simple model cache using IndexedDB with concurrent-safe downloading\n * Falls back gracefully when IndexedDB is unavailable\n */\n\nconst memoryCache = new Map();\nconst downloadPromises = new Map();\nconst DB_NAME = 'onnx-models';\nconst STORE_NAME = 'models';\n\nlet dbPromise = null;\n\nfunction openDB() {\n  if (!('indexedDB' in window)) return Promise.resolve(null);\n  \n  if (!dbPromise) {\n    dbPromise = new Promise((resolve, reject) => {\n      const request = indexedDB.open(DB_NAME, 1);\n      \n      request.onupgradeneeded = () => {\n        request.result.createObjectStore(STORE_NAME);\n      };\n      \n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => resolve(null); // Graceful fallback\n    });\n  }\n  \n  return dbPromise;\n}\n\nasync function getFromIndexedDB(key) {\n  try {\n    const db = await openDB();\n    if (!db) return null;\n    \n    return new Promise((resolve) => {\n      const transaction = db.transaction([STORE_NAME], 'readonly');\n      const request = transaction.objectStore(STORE_NAME).get(key);\n      \n      request.onsuccess = () => resolve(request.result || null);\n      request.onerror = () => resolve(null);\n    });\n  } catch {\n    return null;\n  }\n}\n\nasync function putToIndexedDB(key, value) {\n  try {\n    const db = await openDB();\n    if (!db) return;\n    \n    const transaction = db.transaction([STORE_NAME], 'readwrite');\n    const request = transaction.objectStore(STORE_NAME).put(value, key);\n    \n    // Ignore storage quota errors - graceful degradation\n    request.onerror = () => {};\n  } catch {\n    // Silent fail - cache is optional\n  }\n}\n\nasync function downloadModel(urls) {\n  // Use Promise.any for concurrent downloads with fallback for older browsers\n  const downloadAttempts = urls.map(url => \n    fetch(url).then(response => {\n      if (!response.ok) throw new Error(`HTTP ${response.status}: ${url}`);\n      return response.arrayBuffer();\n    })\n  );\n\n  if (typeof Promise.any === 'function') {\n    return await Promise.any(downloadAttempts);\n  }\n\n  // Manual Promise.any implementation\n  return new Promise((resolve, reject) => {\n    let remainingAttempts = downloadAttempts.length;\n    let lastError;\n\n    downloadAttempts.forEach(promise => {\n      promise\n        .then(resolve)\n        .catch(error => {\n          lastError = error;\n          remainingAttempts--;\n          if (remainingAttempts === 0) reject(lastError);\n        });\n    });\n  });\n}\n\n/**\n * Get model bytes with caching - returns Uint8Array for onnxruntime-web\n * @param {string[]} urls - Fallback URLs to try\n * @param {string} cacheKey - Unique cache key (should include version)\n * @returns {Promise<Uint8Array>} Model bytes ready for InferenceSession.create\n */\nexport async function getModelBytes(urls, cacheKey) {\n  // 1. Check memory cache first (fastest)\n  if (memoryCache.has(cacheKey)) {\n    return memoryCache.get(cacheKey);\n  }\n\n  // 2. Ensure single download per model (concurrent safety)\n  if (downloadPromises.has(cacheKey)) {\n    return downloadPromises.get(cacheKey);\n  }\n\n  const downloadPromise = (async () => {\n    // 3. Try IndexedDB cache\n    const cached = await getFromIndexedDB(cacheKey);\n    if (cached instanceof ArrayBuffer) {\n      const bytes = new Uint8Array(cached);\n      memoryCache.set(cacheKey, bytes);\n      return bytes;\n    }\n\n    // 4. Download with concurrent fallbacks\n    const arrayBuffer = await downloadModel(urls);\n    const bytes = new Uint8Array(arrayBuffer);\n\n    // 5. Cache for next time\n    putToIndexedDB(cacheKey, arrayBuffer); // Fire and forget\n    memoryCache.set(cacheKey, bytes);\n\n    return bytes;\n  })();\n\n  downloadPromises.set(cacheKey, downloadPromise);\n\n  try {\n    return await downloadPromise;\n  } finally {\n    downloadPromises.delete(cacheKey);\n  }\n}\n","import { InferenceSession } from \"onnxruntime-web\";\nimport { getModelBytes } from \"./model_cache.js\";\n\n// These will be replaced by rollup build process\nconst pkgName = '__PACKAGE_NAME__';\nconst pkgVersion = '__PACKAGE_VERSION__';\n\n// Register service worker for offline caching (browser only)\nif (typeof navigator !== 'undefined' && 'serviceWorker' in navigator && typeof window !== 'undefined') {\n  navigator.serviceWorker.register('/sw.js').catch(() => {\n    // Silent fail - service worker is optional enhancement\n  });\n}\n\nasync function createSessionWithFallback(modelPath, options = {}) {\n  // Input validation\n  if (!modelPath || typeof modelPath !== 'string') {\n    throw new Error('modelPath must be a non-empty string');\n  }\n\n  // Extract filename from path (handle both forward and backward slashes)\n  const fileName = modelPath.replace(/\\\\/g, '/').split('/').pop();\n  \n  const urls = [\n    modelPath,\n    `https://unpkg.com/${pkgName}@${pkgVersion}/dist/model/${fileName}`,\n    // `https://content-deliver.oss-cn-shanghai.aliyuncs.com/${pkgName}/${pkgVersion}/dist/model/${fileName}`,\n    `https://cdn-1320106354.cos.ap-shanghai.myqcloud.com/kyc-offline-ai-web-offline-face-sdk/1.0.6/dist/model/${fileName}`,\n    `https://cdn.jsdelivr.net/npm/${pkgName}@${pkgVersion}/dist/model/${fileName}`,\n  ];\n\n  try {\n    // Try cached approach first (IndexedDB + concurrent download)\n    const cacheKey = `${pkgName}:${pkgVersion}:${fileName}`;\n    const modelBytes = await getModelBytes(urls, cacheKey);\n    return await InferenceSession.create(modelBytes, options);\n  } catch (error) {\n    // Fallback to original URL-based approach if caching fails\n    if (typeof Promise.any === 'function') {\n      try {\n        return await Promise.any(urls.map(url => InferenceSession.create(url, options)));\n      } catch (aggregateError) {\n        const firstError = aggregateError.errors?.[0] || aggregateError;\n        throw new Error(`Failed to load model: ${firstError.message}`, { cause: firstError });\n      }\n    }\n\n    // Manual implementation for older browsers\n    return new Promise((resolve, reject) => {\n      let completedAttempts = 0;\n      let resolved = false;\n      const errors = [];\n      \n      urls.forEach((url, index) => {\n        InferenceSession.create(url, options)\n          .then(session => {\n            if (!resolved) {\n              resolved = true;\n              resolve(session);\n            }\n          })\n          .catch(err => {\n            errors[index] = err;\n            completedAttempts++;\n            \n            if (completedAttempts === urls.length && !resolved) {\n              const firstError = errors.find(e => e) || new Error('Unknown error');\n              reject(new Error(`Failed to load model: ${firstError.message}`, { cause: firstError }));\n            }\n          });\n      });\n    });\n  }\n}\n\nexport { createSessionWithFallback };\n","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {cv} from \"./load_opencv\";\r\nimport {download} from \"./download\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadDetectionModel() {\r\n  var detect_session = null;\r\n  await createSessionWithFallback(\"../model/fr_detect.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        detect_session = session;\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(320 * 240 * 3), [1, 3, 240, 320]);\r\n        for (let i = 0; i < 320 * 240 * 3; i++) {\r\n          input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = detect_session.run(feeds)\r\n        console.log(\"initialize the detection session.\")\r\n      })\r\n  return detect_session\r\n}\r\n\r\nasync function loadDetectionModelPath(model_path) {\r\n  const arr_buf = await download(model_path);\r\n  const detection_session = await InferenceSession.create(arr_buf);\r\n  return detection_session\r\n}\r\n\r\nfunction preprocessDetection(image) {\r\n  var rows = image.rows,\r\n      cols = image.cols;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * 3), [rows, cols, 3]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = image.ucharPtr(y, x);\r\n      for (var c = 0; c < 3; c++) {\r\n        var pixel_value = 0\r\n        if (c === 0) // R\r\n          pixel_value = (pixel[c] - 127) / 128.0;\r\n        if (c === 1) // G\r\n          pixel_value = (pixel[c] - 127) / 128.0;\r\n        if (c === 2) // B\r\n          pixel_value = (pixel[c] - 127) / 128.0;\r\n\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(3 * rows * cols), [1, 3, rows, cols])\r\n\r\n  // Transpose\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nasync function detectFaceImage(session, img) {\r\n  const onnx_config = {\r\n        min_sizes: [[10, 16, 24], [32, 48], [64, 96], [128, 192, 256]],\r\n        steps: [8, 16, 32, 64],\r\n        variance: [0.1, 0.2],\r\n        clip: false,\r\n        confidence_threshold: 0.65,\r\n        top_k: 750,\r\n        nms_threshold: 0.4,\r\n      };\r\n\r\n  var dsize = new cv.Size(320, 240);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(img, resize_image, dsize);\r\n  cv.cvtColor(resize_image, resize_image, cv.COLOR_BGR2RGB);\r\n\r\n  const image = preprocessDetection(resize_image);\r\n\r\n  var resize_param = {cols: img.cols / 320, rows: img.rows / 240};\r\n\r\n  const input_tensor = new Tensor(\"float32\", new Float32Array(320 * 240 * 3), [1, 3, 240, 320]);\r\n  input_tensor.data.set(image.data);\r\n\r\n  const feeds = {\"input\": input_tensor};\r\n  const output_tensor = await session.run(feeds);\r\n\r\n  const loc = output_tensor['boxes'];\r\n  const conf = output_tensor['scores'];\r\n\r\n  // const landmarks = output_tensor['585']\r\n  const total_result = conf.size / 2;\r\n\r\n  const scale = [320, 240, 320, 240];\r\n  const scale1 = [800, 800, 800, 800, 800, 800, 800, 800, 800, 800];\r\n\r\n  const priors = definePriorBox([320, 240], onnx_config);\r\n\r\n  const boxes_arr = decodeBBox(loc, priors, onnx_config);\r\n\r\n  const scores_arr = ndarray(conf.data, [total_result, 2]).pick(null, 1);\r\n  var landms_arr = null;//decode_landmark(landmarks, priors, onnx_config.variance);\r\n\r\n  var box = ndarray(loc.data, [4420, 4]);\r\n  var boxes_before = scaleMultiplyBBox(box, scale);\r\n  var landms_before = null;//scale_multiply_landms(landms_arr, scale1);\r\n\r\n  var [bbox_screen, scores_screen, landms_screen] = screenScore(boxes_before, scores_arr, landms_before, onnx_config.confidence_threshold);\r\n\r\n  var [bbox_sorted, scores_sorted, landms_sorted] = sortScore(bbox_screen, scores_screen, landms_screen, onnx_config.top_k);\r\n\r\n  var [bbox_small, score_result, landms_small, result_size] = cpuNMS(bbox_sorted, scores_sorted, landms_sorted, onnx_config.nms_threshold);\r\n  var [bbox_result, landms_result] = scaleResult(bbox_small, landms_small, resize_param, img.cols, img.rows);\r\n\r\n  var output = {\r\n    bbox: bbox_result,\r\n    landmark: landms_result,\r\n    conf: score_result,\r\n    size: result_size\r\n  }\r\n\r\n  resize_image.delete();\r\n  img.delete();\r\n  return output\r\n}\r\n\r\nasync function detectFace(session, canvas_id) {\r\n\r\n  var img = cv.imread(canvas_id);\r\n  var output = await detectFaceImage(session, img);\r\n\r\n  return output\r\n}\r\n\r\nasync function detectFaceBase64(session, base64Image) {\r\n  let image = new Image()\r\n  image.src = base64Image\r\n  await new Promise(r => {\r\n    image.onload = r\r\n  })\r\n\r\n  var img = cv.imread(image);\r\n  var output = await detectFaceImage(session, img);\r\n\r\n  return output\r\n}\r\n\r\nfunction product(x, y) {\r\n  var size_x = x.length,\r\n      size_y = y.length;\r\n  var result = [];\r\n\r\n  for (var i = 0; i < size_x; i++)\r\n    for (var j = 0; j < size_y; j++)\r\n      result.push([x[i], y[j]]);\r\n\r\n  return result;\r\n}\r\n\r\nfunction range(num) {\r\n  var result = [];\r\n  for (var i = 0; i < num; i++)\r\n    result.push(i);\r\n\r\n  return result;\r\n}\r\n\r\nfunction definePriorBox(image_size, onnx_config) {\r\n  var min_sizes = onnx_config.min_sizes,\r\n      steps = onnx_config.steps,\r\n      clip = onnx_config.clip,\r\n      name = \"s\",\r\n      feature_maps = steps.map((step) => [Math.ceil(image_size[0] / step), Math.ceil(image_size[1] / step)]);\r\n\r\n  var anchors = [];\r\n\r\n  feature_maps.forEach((f, k) => {\r\n    var min_size = min_sizes[k];\r\n    product(range(f[0]), range(f[1])).forEach(([i, j]) => {\r\n      min_size.forEach((m_size) => {\r\n        var s_kx = m_size / image_size[0],\r\n            s_ky = m_size / image_size[1];\r\n        var dense_cx = [j + 0.5].map((x) => x * steps[k] / image_size[0]),\r\n            dense_cy = [i + 0.5].map((y) => y * steps[k] / image_size[1]);\r\n        product(dense_cy, dense_cx).forEach(([cy, cx]) => {\r\n          anchors.push(cx);\r\n          anchors.push(cy);\r\n          anchors.push(s_kx);\r\n          anchors.push(s_ky);\r\n        })\r\n      });\r\n    });\r\n  });\r\n\r\n  var output = ndarray(new Float32Array(anchors), [anchors.length / 4, 4]);\r\n\r\n  if (clip)\r\n    output = ndarray.ops.min(1, ops.max(output, 0));\r\n\r\n  return output;\r\n}\r\n\r\nfunction decodeBBox(bbox, priors, onnx_config) {\r\n  var variances = onnx_config.variance\r\n  var loc = ndarray(bbox.data, [4420, 4]);\r\n  // console.log(bbox, priors);\r\n  var before_prior = priors.hi(null, 2),\r\n      after_prior = priors.lo(null, 2);\r\n\r\n  var before_loc = loc.hi(null, 2),\r\n      after_loc = loc.lo(null, 2);\r\n\r\n  var before_result = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var before_temp = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var before_temp2 = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n\r\n  var after_result = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var after_temp = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var after_temp2 = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var after_temp3 = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n  var after_temp4 = ndarray(new Float32Array(before_loc.shape[0] * before_loc.shape[1]), [before_loc.shape[0], 2]);\r\n\r\n  var boxes = ndarray(new Float32Array(before_loc.shape[0] * 4), [before_loc.shape[0], 4]);\r\n\r\n  // Before\r\n  ops.mul(before_temp, before_loc, after_prior);\r\n  ops.muls(before_temp2, before_temp, variances[0]);\r\n  ops.add(before_result, before_temp2, before_prior);\r\n\r\n  // After\r\n  ops.muls(after_temp, after_loc, variances[1]);\r\n  ops.exp(after_temp2, after_temp);\r\n  ops.mul(after_temp3, after_temp2, after_prior);\r\n\r\n  for (var index = 0; index < 4; index++)\r\n    ops.assign(after_result.pick(null, index), after_temp3.pick(null, index));\r\n\r\n  ops.divs(after_temp4, after_temp3, -2);\r\n  ops.addeq(before_result, after_temp4);\r\n\r\n  ops.addeq(after_result, before_result);\r\n\r\n  ops.assign(boxes.pick(null, 0), before_result.pick(null, 0));\r\n  ops.assign(boxes.pick(null, 1), before_result.pick(null, 1));\r\n  ops.assign(boxes.pick(null, 2), after_result.pick(null, 0));\r\n  ops.assign(boxes.pick(null, 3), after_result.pick(null, 1));\r\n\r\n  return boxes;\r\n}\r\n\r\nfunction scaleMultiplyBBox(boxes_arr, scale) {\r\n  var total_result = boxes_arr.shape[0];\r\n  var boxes_before = ndarray(new Float32Array(total_result * 4), [total_result, 4]);\r\n\r\n  for (var index = 0; index < scale.length; index++) {\r\n    let temp = boxes_arr.pick(null, index),\r\n        before_result = ndarray(new Float32Array(total_result), [total_result]);\r\n    ops.muls(before_result, temp, scale[index]);\r\n    ops.assign(boxes_before.pick(null, index), before_result);\r\n  }\r\n\r\n  return boxes_before;\r\n}\r\n\r\nfunction scaleMultiplyLandmarks(landms_arr, scale1) {\r\n  var total_result = landms_arr.shape[0];\r\n  var landms_before = ndarray(new Float32Array(total_result * 10), [total_result, 10]);\r\n\r\n  for (var index = 0; index < scale1.length; index++) {\r\n    let temp = landms_arr.pick(null, index),\r\n        before_landms_result = ndarray(new Float32Array(total_result), [total_result]);\r\n    ops.muls(before_landms_result, temp, scale1[index]);\r\n    ops.assign(landms_before.pick(null, index), before_landms_result);\r\n  }\r\n\r\n  return landms_before;\r\n}\r\n\r\nfunction screenScore(bbox, scores, landms, threshold) {\r\n  var total_size = scores.shape[0];\r\n  var index_arr = [];\r\n\r\n  for (var index = 0; index < total_size; index++) {\r\n    var score_temp = scores.get(index);\r\n\r\n    if (score_temp >= threshold) {\r\n      index_arr.push(index);\r\n    }\r\n  }\r\n\r\n  var result_bbox = ndarray(new Float32Array(index_arr.length * 4), [index_arr.length, 4]);\r\n  var result_scores = ndarray(new Float32Array(index_arr.length), [index_arr.length]);\r\n  var result_landms = null;//ndarray(new Float32Array(index_arr.length * 10), [index_arr.length, 10]);\r\n\r\n  index_arr.forEach((index, i) => {\r\n    ops.assign(result_bbox.pick(i, null), bbox.pick(index, null));\r\n    //ops.assign(result_landms.pick(i, null), landms.pick(index, null));\r\n    ops.assign(result_scores.pick(i), scores.pick(index));\r\n  });\r\n\r\n  return [result_bbox, result_scores, result_landms];\r\n}\r\n\r\nfunction sortScore(bbox, scores, landms, top_k) {\r\n  var total_size = scores.shape[0];\r\n  var index_sort = new Array(total_size * 2);\r\n\r\n  for (var index = 0; index < total_size; index++) {\r\n    var temp = scores.get(index);\r\n    index_sort[index] = [index, temp];\r\n  }\r\n\r\n  index_sort.sort((a, b) => {\r\n    if (a[1] < b[1]) return 1;\r\n    if (a[1] > b[1]) return -1;\r\n\r\n    return 0;\r\n  });\r\n\r\n  var max_size = (total_size > top_k) ? top_k : total_size;\r\n\r\n  var result_bbox = ndarray(new Float32Array(max_size * 4), [max_size, 4]);\r\n  var result_scores = ndarray(new Float32Array(max_size), [max_size]);\r\n  var result_landms = null;//ndarray(new Float32Array(max_size * 10), [max_size, 10]);\r\n\r\n  for (var idx = 0; idx < max_size; idx++) {\r\n    result_scores.set(idx, index_sort[idx][1]);\r\n    ops.assign(result_bbox.pick(idx, null), bbox.pick(index_sort[idx][0], null));\r\n    //ops.assign(result_landms.pick(idx, null), landms.pick(index_sort[idx][0], null));\r\n  }\r\n\r\n  return [result_bbox, result_scores, result_landms];\r\n}\r\n\r\nfunction cpuNMS(bbox, scores, landms, thresh) {\r\n  var {max, min} = Math;\r\n  var size = bbox.shape[0];\r\n  var foundLocations = [];\r\n  var pick = [];\r\n\r\n  for (var i = 0; i < size; i++) {\r\n    var x1 = bbox.get(i, 0),\r\n        y1 = bbox.get(i, 1),\r\n        x2 = bbox.get(i, 2),\r\n        y2 = bbox.get(i, 3);\r\n\r\n    var width = x2 - x1,\r\n        height = y2 - y1;\r\n\r\n    if (width > 0 && height > 0) {\r\n      var area = width * height;\r\n      foundLocations.push({x1, y1, x2, y2, width, height, area, index: i});\r\n    }\r\n  }\r\n\r\n  foundLocations.sort((b1, b2) => {\r\n    return b1.y2 - b2.y2;\r\n  });\r\n\r\n  while (foundLocations.length > 0) {\r\n    var last = foundLocations[0] //[foundLocations.length - 1];\r\n    var suppress = [last];\r\n    pick.push(last.index) //foundLocations.length - 1);\r\n\r\n    for (let i = 1; i < foundLocations.length; i++) {\r\n      const box = foundLocations[i];\r\n      const xx1 = max(box.x1, last.x1);\r\n      const yy1 = max(box.y1, last.y1);\r\n      const xx2 = min(box.x2, last.x2);\r\n      const yy2 = min(box.y2, last.y2);\r\n      const w = max(0, xx2 - xx1 + 1);\r\n      const h = max(0, yy2 - yy1 + 1);\r\n      const overlap = (w * h) / box.area;\r\n\r\n      if (overlap >= thresh)\r\n        suppress.push(foundLocations[i]);\r\n    }\r\n\r\n    foundLocations = foundLocations.filter((box) => {\r\n      return !suppress.find((supp) => {\r\n        return supp === box;\r\n      })\r\n    });\r\n  }\r\n\r\n  var result_bbox = ndarray(new Float32Array(pick.length * 4), [pick.length, 4]);\r\n  var result_scores = ndarray(new Float32Array(pick.length), [pick.length]);\r\n  var result_landms = null;//ndarray(new Float32Array(pick.length * 10), [pick.length, 10]);\r\n\r\n  // console.log(\"Pick index: \", pick);\r\n\r\n  pick.forEach((pick_index, i) => {\r\n    ops.assign(result_bbox.pick(i, null), bbox.pick(pick_index, null));\r\n    ops.assign(result_scores.pick(i), scores.pick(pick_index));\r\n    //ops.assign(result_landms.pick(i, null), landms.pick(pick_index, null));\r\n  });\r\n\r\n  return [result_bbox, result_scores, result_landms, pick.length];\r\n}\r\n\r\nfunction scaleResult(bbox, landmark, resize_param, width, height) {\r\n  var size = bbox.shape[0];\r\n  var result_bbox = ndarray(new Float32Array(size * 4), [size, 4]);\r\n  var result_landms = null;//ndarray(new Float32Array(size * 10), [size, 10]);\r\n\r\n  for (let i = 0; i < size; i++) {\r\n    let x1 = bbox.get(i, 0) * resize_param.cols,\r\n        y1 = bbox.get(i, 1) * resize_param.rows,\r\n        x2 = bbox.get(i, 2) * resize_param.cols,\r\n        y2 = bbox.get(i, 3) * resize_param.rows;\r\n\r\n    const f_size = (y2 - y1);\r\n    const ct_x = (x1 + x2) / 2,\r\n          ct_y = (y1 + y2) / 2;\r\n\r\n    x1 = (ct_x - f_size / 2) < 0 ? 0 : (ct_x - f_size / 2);\r\n    y1 = (ct_y - f_size / 2) < 0 ? 0 : (ct_y - f_size / 2);\r\n    x2 = (ct_x + f_size / 2) > width - 1 ? width - 1 : (ct_x + f_size / 2);\r\n    y2 = (ct_y + f_size / 2) > height - 1 ? height - 1 : (ct_y + f_size / 2);\r\n\r\n    result_bbox.set(i, 0, x1);\r\n    result_bbox.set(i, 1, y1);\r\n    result_bbox.set(i, 2, x2);\r\n    result_bbox.set(i, 3, y2);\r\n  }\r\n\r\n  /*\r\n  for (var j = 0; j < 5; j++) {\r\n    let x = landmark.pick(null, j * 2),\r\n        y = landmark.pick(null, j * 2 + 1);\r\n\r\n    ops.divseq(x, resize_param.cols);     // X\r\n    ops.divseq(y, resize_param.rows);    // Y\r\n\r\n    ops.assign(result_landms.pick(null, j * 2), x);\r\n    ops.assign(result_landms.pick(null, j * 2 + 1), y);\r\n  }\r\n  */\r\n  return [result_bbox, result_landms];\r\n}\r\n\r\nfunction getBestFace(bbox) {\r\n  var face_count = bbox.shape[0],\r\n      bbox_size = bbox.shape[1];\r\n\r\n  var idx = -1, max_size = 0;\r\n  for (let i = 0; i < face_count; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n    if (width * height > max_size)\r\n      idx = i;\r\n  }\r\n  return idx\r\n}\r\n\r\nexport {loadDetectionModel, loadDetectionModelPath, detectFace, detectFaceBase64}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadPoseModel() {\r\n  var pose_session = null\r\n  await createSessionWithFallback(\"../model/fr_pose.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        pose_session = session\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(224 * 224 * 3), [1, 3, 224, 224]);\r\n        for (let i = 0; i < 224 * 224 * 3; i++) {\r\n          input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = pose_session.run(feeds)\r\n        console.log(\"initialize the pose session.\")\r\n      })\r\n  return pose_session\r\n}\r\n\r\nfunction preprocessPose(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 3;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      // if(x == 0 && y == 0)\r\n      //     console.log(pixel);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = 0\r\n        if (c === 0) // R\r\n          pixel_value = (pixel[c] / 255.0 - 0.485) / 0.229\r\n        if (c === 1) // G\r\n          pixel_value = (pixel[c] / 255.0 - 0.456) / 0.224\r\n        if (c === 2) // B\r\n          pixel_value = (pixel[c] / 255.0 - 0.406) / 0.225\r\n\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(3 * 224 * 224), [1, 3, 224, 224])\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nfunction softmax(arr) {\r\n  return arr.map(function(value, index) {\r\n    return Math.exp(value) / arr.map( function(y /*value*/){ return Math.exp(y) } ).reduce( function(a,b){ return a+b })\r\n  })\r\n}\r\n\r\nasync function predictPose(session, canvas_id, bbox) {\r\n  var face_count = bbox.shape[0],\r\n      bbox_size = bbox.shape[1];\r\n\r\n  var img = cv.imread(canvas_id);\r\n  const result = [];\r\n\r\n  for (let i = 0; i < face_count; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var x11 = parseInt(x1 - width/4),\r\n        y11 = parseInt(y1 - height/4),\r\n        x22 = parseInt(x2 + width/4),\r\n        y22 = parseInt(y2 + height/4);\r\n\r\n    var rect = new cv.Rect(Math.max(x11, 0), Math.max(y11, 0), Math.min(x22 - x11, img.cols), Math.min(y22 - y11, img.rows));\r\n    var face_image = new cv.Mat();\r\n\r\n    face_image = img.roi(rect);\r\n\r\n    var dsize = new cv.Size(224, 224);\r\n    var resize_image = new cv.Mat();\r\n    cv.resize(face_image, resize_image, dsize);\r\n    cv.cvtColor(resize_image, resize_image, cv.COLOR_BGR2RGB);\r\n\r\n    // cv.imshow(\"live-temp\", resize_image)\r\n\r\n    var input_image = preprocessPose(resize_image);\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(224 * 224 * 3), [1, 3, 224, 224]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n\r\n    var arr = Array.apply(null, Array(66));\r\n    const index_arr = arr.map(function (x, i) { return i })\r\n\r\n    const yaw_arr = softmax(output_tensor['output'].data);\r\n    const pitch_arr = softmax(output_tensor['617'].data);\r\n    const roll_arr = softmax(output_tensor['618'].data);\r\n\r\n    const yaw = yaw_arr.reduce(function (r, a, i){return r + a * index_arr[i]}, 0) * 3 - 99;\r\n    const pitch = pitch_arr.reduce(function (r, a, i){return r + a * index_arr[i]}, 0) * 3 - 99;\r\n    const roll = roll_arr.reduce(function (r, a, i){return r + a * index_arr[i]}, 0) * 3 - 99;\r\n    //console.log(\"Pose results: \", yaw, pitch, roll)\r\n    result.push([x1, y1, x2, y2, yaw.toFixed(2), pitch.toFixed(2), roll.toFixed(2)]);\r\n\r\n    resize_image.delete();\r\n    face_image.delete();\r\n  }\r\n  img.delete();\r\n  return result;\r\n}\r\n\r\nexport {loadPoseModel, softmax, predictPose}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {softmax} from \"./fr_pose\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadExpressionModel() {\r\n  var expression_session = null\r\n  await createSessionWithFallback(\"../model/fr_expression.onnx\", {executionProviders: ['wasm']})\r\n    .then((session) => {\r\n      expression_session = session\r\n      const input_tensor = new Tensor(\"float32\", new Float32Array(224 * 224 * 3), [1, 3, 224, 224]);\r\n      for (let i = 0; i < 224 * 224 * 3; i++) {\r\n        input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n      }\r\n      const feeds = {\"input\": input_tensor};\r\n      const output_tensor = expression_session.run(feeds)\r\n      console.log(\"initialize the expression session.\")\r\n    })\r\n  return expression_session\r\n}\r\n\r\nfunction alignExpressionImage(image, bbox) {\r\n  var src_h = image.rows,\r\n    src_w = image.cols;\r\n\r\n  var x = bbox[0]\r\n  var y = bbox[1]\r\n  var box_w = bbox[2]\r\n  var box_h = bbox[3]\r\n\r\n  var rect = new cv.Rect(x, y, Math.min(parseInt(box_w * 1.2), src_w - 1), Math.min(parseInt(box_h * 1.2), src_h - 1))\r\n\r\n  var face_image = new cv.Mat()\r\n  face_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(224, 224);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(face_image, resize_image, dsize);\r\n\r\n  face_image.delete()\r\n  return resize_image\r\n}\r\n\r\nfunction preprocessExpression(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 3;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = pixel[c] / 255.0;\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(channels * cols * rows), [1, channels, rows, cols])\r\n\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nasync function predictExpression(session, canvas_id, bbox) {\r\n  var img = cv.imread(canvas_id)\r\n\r\n  var face_count = bbox.shape[0],\r\n    bbox_size = bbox.shape[1];\r\n\r\n  const result = [];\r\n  for (let i = 0; i < face_count; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n      y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n      x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n      y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n      width = Math.abs(x2 - x1),\r\n      height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignExpressionImage(img, [x1, y1, width, height]);\r\n    //cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessExpression(face_img);\r\n    face_img.delete();\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(224 * 224 * 3), [1, 3, 224, 224]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n    const expression_arr = softmax(output_tensor['output'].data);\r\n\r\n    var max_idx = null, max_val = 0;\r\n    for (let i = 0; i < expression_arr.length; i++)\r\n      if (max_val < expression_arr[i]) {\r\n        max_idx = i;\r\n        max_val = expression_arr[i];\r\n      }\r\n    result.push([x1, y1, x2, y2, max_idx]);\r\n  }\r\n  img.delete();\r\n  return result;\r\n}\r\n\r\nexport {loadExpressionModel, predictExpression}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {softmax} from \"./fr_pose\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadEyeModel() {\r\n  var eye_session = null\r\n  await createSessionWithFallback(\"../model/fr_eye.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        eye_session = session\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(24 * 24 * 1), [1, 1, 24, 24]);\r\n        for (let i = 0; i < 24 * 24; i++) {\r\n          input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = eye_session.run(feeds)\r\n        console.log(\"initialize the eye session.\")\r\n      })\r\n  return eye_session\r\n}\r\n\r\nfunction getEyeBBox(landmark, size) {\r\n  var height = size[0], width = size[1];\r\n  const padding_rate = 1.6;\r\n  var left_eye_center_x = parseInt((landmark[74] + landmark[76] + landmark[80] + landmark[82]) / 4);\r\n  var left_eye_center_y = parseInt((landmark[75] + landmark[77] + landmark[81] + landmark[83]) / 4);\r\n  var left_eye_size = parseInt((landmark[78] - landmark[72]) * padding_rate);\r\n  var left_corner_x = parseInt(left_eye_center_x - left_eye_size / 2);\r\n  if (left_corner_x < 0)\r\n    left_corner_x = 0;\r\n\r\n  var left_corner_y = parseInt(left_eye_center_y - left_eye_size / 2);\r\n  if (left_corner_y < 0)\r\n    left_corner_y = 0;\r\n\r\n  if (left_corner_x + left_eye_size >= width)\r\n    left_eye_size = width - left_corner_x - 1\r\n\r\n  if (left_corner_y + left_eye_size >= height)\r\n    left_eye_size = height - left_corner_y - 1\r\n\r\n  var right_eye_center_x = parseInt((landmark[86] + landmark[88] + landmark[92] + landmark[94]) / 4);\r\n  var right_eye_center_y = parseInt((landmark[87] + landmark[89] + landmark[93] + landmark[95]) / 4);\r\n  var right_eye_size = parseInt((landmark[90] - landmark[84]) * padding_rate);\r\n  var right_corner_x = parseInt(right_eye_center_x - right_eye_size / 2);\r\n  if (right_corner_x < 0)\r\n      right_corner_x = 0\r\n  var right_corner_y = parseInt(right_eye_center_y - right_eye_size / 2);\r\n  if (right_corner_y < 0)\r\n    right_corner_y = 0\r\n  if (right_corner_x + right_eye_size >= width)\r\n      right_eye_size = width - right_corner_x - 1\r\n  if (right_corner_y + right_eye_size >= height)\r\n      right_eye_size = height - right_corner_y - 1\r\n\r\n  return [left_corner_x, left_corner_y, left_eye_size, left_eye_size,\r\n    right_corner_x, right_corner_y, right_eye_size, right_eye_size]\r\n}\r\n\r\nfunction alignEyeImage(image, landmark) {\r\n  var src_h = image.rows,\r\n      src_w = image.cols;\r\n\r\n  var eye_bbox = getEyeBBox(landmark, [src_h, src_w])\r\n  var rect = new cv.Rect(eye_bbox[0], eye_bbox[1], eye_bbox[2], eye_bbox[3])\r\n\r\n  var eye_image = new cv.Mat()\r\n  eye_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(24, 24);\r\n  var left_eye = new cv.Mat();\r\n  cv.resize(eye_image, left_eye, dsize);\r\n  cv.cvtColor(left_eye, left_eye, cv.COLOR_BGR2GRAY)\r\n\r\n  // right eye\r\n  rect = new cv.Rect(eye_bbox[4], eye_bbox[5], eye_bbox[6], eye_bbox[7])\r\n  eye_image = image.roi(rect)\r\n  var right_eye = new cv.Mat();\r\n  cv.resize(eye_image, right_eye, dsize);\r\n  cv.cvtColor(right_eye, right_eye, cv.COLOR_BGR2GRAY)\r\n\r\n  eye_image.delete()\r\n  return [left_eye, right_eye]\r\n}\r\n\r\nfunction preprocessEye(imgs) {\r\n  var cols = imgs[0].cols;\r\n  var rows = imgs[0].rows;\r\n  var channels = 1;\r\n\r\n  var img_data1 = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n  var img_data2 = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel1 = imgs[0].ucharPtr(y, x);\r\n      let pixel2 = imgs[1].ucharPtr(y, x);\r\n\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value1 = pixel1[c] / 255.0;\r\n        var pixel_value2 = pixel2[c] / 255.0;\r\n\r\n        img_data1.set(y, x, c, pixel_value1)\r\n        img_data2.set(y, x, c, pixel_value2)\r\n      }\r\n    }\r\n\r\n  var preprocesed1 = ndarray(new Float32Array(channels * cols * rows), [1, channels, rows, cols])\r\n  ops.assign(preprocesed1.pick(0, 0, null, null), img_data1.pick(null, null, 0));\r\n  var preprocesed2 = ndarray(new Float32Array(channels * cols * rows), [1, channels, rows, cols])\r\n  ops.assign(preprocesed2.pick(0, 0, null, null), img_data2.pick(null, null, 0));\r\n\r\n  return [preprocesed1, preprocesed2]\r\n}\r\n\r\nasync function predictEye(session, canvas_id, landmarks) {\r\n  var img = cv.imread(canvas_id)\r\n\r\n  const result = [];\r\n  for (let i = 0; i < landmarks.length; i++) {\r\n    var face_imgs = alignEyeImage(img, landmarks[i]);\r\n    // cv.imshow(\"live-temp\", face_imgs[1]);\r\n    var input_images = preprocessEye(face_imgs);\r\n    face_imgs[0].delete();\r\n    face_imgs[1].delete();\r\n\r\n    const input_tensor1 = new Tensor(\"float32\", new Float32Array(24 * 24), [1, 1, 24, 24]);\r\n    input_tensor1.data.set(input_images[0].data);\r\n    const feeds1 = {\"input\": input_tensor1};\r\n\r\n    const output_tensor1 = await session.run(feeds1);\r\n    const left_res = softmax(output_tensor1['output'].data);\r\n\r\n    const input_tensor2 = new Tensor(\"float32\", new Float32Array(24 * 24), [1, 1, 24, 24]);\r\n    input_tensor2.data.set(input_images[1].data);\r\n    const feeds2 = {\"input\": input_tensor2};\r\n\r\n    const output_tensor2 = await session.run(feeds2);\r\n    const right_res = softmax(output_tensor2['output'].data);\r\n    result.push([left_res[0] > left_res[1], right_res[0] > right_res[1]]);\r\n  }\r\n  img.delete();\r\n  return result;\r\n}\r\n\r\nexport {loadEyeModel, predictEye}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadLandmarkModel() {\r\n  var landmark_session = null\r\n  await createSessionWithFallback(\"../model/fr_landmark.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        landmark_session = session\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64), [1, 1, 64, 64]);\r\n        for (let i = 0; i < 64 * 64; i++) {\r\n          input_tensor.data[i] = Math.random();\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = landmark_session.run(feeds)\r\n        console.log(\"initialize the landmark session.\")\r\n      })\r\n  return landmark_session\r\n}\r\n\r\nfunction decodeLandmark(landmark, priors, variances) {\r\n\r\n  var landms = ndarray(landmark.data, [26250, 10]);\r\n  var before_prior = priors.hi(null, 2),\r\n      after_prior = priors.lo(null, 2);\r\n  var result = ndarray(new Float32Array(landms.shape[0] * landms.shape[1]), landms.shape);\r\n  var priortemp = ndarray(new Float32Array(after_prior.shape[0] * 2), [after_prior.shape[0], 2]);\r\n  var half_size = parseInt(Math.floor(landms.shape[1] / 2));\r\n\r\n  ops.muls(priortemp, after_prior, variances[0]);\r\n\r\n  for (var index = 0; index < half_size; index++) {\r\n    let temp = ndarray(new Float32Array(landms.shape[0] * 2), [landms.shape[0], 2]);\r\n    let temp2 = ndarray(new Float32Array(landms.shape[0] * 2), [landms.shape[0], 2]);\r\n    let preslice = landms.hi(null, (index + 1) * 2).lo(null, index * 2);\r\n    ops.mul(temp, preslice, priortemp);\r\n    ops.add(temp2, temp, before_prior);\r\n    ops.assign(result.pick(null, index * 2), temp2.pick(null, 0));\r\n    ops.assign(result.pick(null, index * 2 + 1), temp2.pick(null, 1));\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nfunction alignLandmarkImage(image, bbox, scale_value) {\r\n  var src_h = image.rows,\r\n      src_w = image.cols;\r\n\r\n  var x = bbox[0]\r\n  var y = bbox[1]\r\n  var box_w = bbox[2]\r\n  var box_h = bbox[3]\r\n\r\n  var scale = Math.min((src_h-1)/box_h, Math.min((src_w-1)/box_w, scale_value))\r\n\r\n  var new_width = box_w * scale\r\n  var new_height = box_h * scale\r\n  var center_x = box_w/2+x,\r\n      center_y = box_h/2+y\r\n\r\n  var left_top_x = center_x-new_width/2\r\n  var left_top_y = center_y-new_height/2\r\n  var right_bottom_x = center_x+new_width/2\r\n  var right_bottom_y = center_y+new_height/2\r\n\r\n  if (left_top_x < 0) {\r\n    right_bottom_x -= left_top_x\r\n    left_top_x = 0\r\n  }\r\n\r\n  if (left_top_y < 0) {\r\n    right_bottom_y -= left_top_y\r\n    left_top_y = 0\r\n  }\r\n\r\n  if (right_bottom_x > src_w-1) {\r\n    left_top_x -= right_bottom_x-src_w+1\r\n    right_bottom_x = src_w-1\r\n  }\r\n\r\n  if (right_bottom_y > src_h-1) {\r\n    left_top_y -= right_bottom_y-src_h+1\r\n    right_bottom_y = src_h-1\r\n  }\r\n  var rect = new cv.Rect(Math.max(parseInt(left_top_x), 0), Math.max(parseInt(left_top_y), 0),\r\n      Math.min(parseInt(right_bottom_x - left_top_x), src_w-1), Math.min(parseInt(right_bottom_y - left_top_y), src_h-1))\r\n\r\n  var face_image = new cv.Mat()\r\n  face_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(64, 64);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(face_image, resize_image, dsize);\r\n  cv.cvtColor(resize_image, resize_image, cv.COLOR_BGR2GRAY)\r\n\r\n  face_image.delete()\r\n  return resize_image\r\n}\r\n\r\nfunction preprocessLandmark(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 1;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = pixel[c] / 256.0;\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(channels * cols * rows), [1, channels, rows, cols])\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n\r\n  return preprocesed;\r\n}\r\n\r\nasync function predictLandmarkImage(session, img, bbox) {\r\n  var face_size = bbox.shape[0];\r\n  var bbox_size = bbox.shape[1];\r\n\r\n  const landmarks = [];\r\n\r\n  for (let i = 0; i < face_size; i++) {\r\n     var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignLandmarkImage(img, [x1, y1, width, height], 1.0);\r\n    // cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessLandmark(face_img);\r\n    face_img.delete();\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64), [1, 1, 64, 64]);\r\n\r\n    input_tensor.data.set(input_image.data);\r\n\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n    var landmark_arr = output_tensor['output'].data;\r\n\r\n    for (let i = 0; i < landmark_arr.length; i++) {\r\n      if (i % 2 === 0)\r\n        landmark_arr[i] = parseInt(landmark_arr[i] * width + x1);\r\n      else\r\n        landmark_arr[i] = parseInt(landmark_arr[i] * height + y1);\r\n    }\r\n    landmarks.push(landmark_arr);\r\n    // console.log(\"Landmark result: \", landmark_arr[0], landmark_arr[1], landmark_arr[74], landmark_arr[75], landmark_arr[76], landmark_arr[77]);\r\n  }\r\n  img.delete();\r\n  return landmarks\r\n}\r\n\r\nasync function predictLandmark(session, canvas_id, bbox) {\r\n\r\n  var img = cv.imread(canvas_id);\r\n  var landmarks = await predictLandmarkImage(session, img, bbox);\r\n\r\n  return landmarks;\r\n}\r\n\r\nasync function predictLandmarkBase64(session, base64Image, bbox) {\r\n  let image = new Image()\r\n  image.src = base64Image\r\n  await new Promise(r => {\r\n    image.onload = r\r\n  })\r\n\r\n  var img = cv.imread(image);\r\n  var landmarks = await predictLandmarkImage(session, img, bbox);\r\n\r\n  return landmarks;\r\n}\r\n\r\nexport {loadLandmarkModel, predictLandmark, predictLandmarkBase64}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {softmax} from \"./fr_pose\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadLivenessModel() {\r\n  var live_session = null\r\n  await createSessionWithFallback(\"../model/fr_liveness.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        live_session = session\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(128 * 128 * 3), [1, 3, 128, 128]);\r\n        for (let i = 0; i < 128 * 128 * 3; i++) {\r\n          input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = live_session.run(feeds)\r\n        console.log(\"initialize the live session.\")\r\n      })\r\n  return live_session;\r\n}\r\n\r\nfunction alignLivenessImage(image, bbox, scale_value) {\r\n  var src_h = image.rows,\r\n      src_w = image.cols;\r\n\r\n  var x = bbox[0]\r\n  var y = bbox[1]\r\n  var box_w = bbox[2]\r\n  var box_h = bbox[3]\r\n\r\n  var scale = Math.min((src_h-1)/box_h, Math.min((src_w-1)/box_w, scale_value))\r\n\r\n  var new_width = box_w * scale\r\n  var new_height = box_h * scale\r\n  var center_x = box_w/2+x,\r\n      center_y = box_h/2+y\r\n\r\n  var left_top_x = center_x-new_width/2\r\n  var left_top_y = center_y-new_height/2\r\n  var right_bottom_x = center_x+new_width/2\r\n  var right_bottom_y = center_y+new_height/2\r\n\r\n  if (left_top_x < 0) {\r\n    right_bottom_x -= left_top_x\r\n    left_top_x = 0\r\n  }\r\n\r\n  if (left_top_y < 0) {\r\n    right_bottom_y -= left_top_y\r\n    left_top_y = 0\r\n  }\r\n\r\n  if (right_bottom_x > src_w-1) {\r\n    left_top_x -= right_bottom_x-src_w+1\r\n    right_bottom_x = src_w-1\r\n  }\r\n\r\n  if (right_bottom_y > src_h-1) {\r\n    left_top_y -= right_bottom_y-src_h+1\r\n    right_bottom_y = src_h-1\r\n  }\r\n  var rect = new cv.Rect(Math.max(parseInt(left_top_x), 0), Math.max(parseInt(left_top_y), 0),\r\n      Math.min(parseInt(right_bottom_x - left_top_x), src_w-1), Math.min(parseInt(right_bottom_y - left_top_y), src_h-1))\r\n\r\n  var face_image = new cv.Mat()\r\n  face_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(128, 128);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(face_image, resize_image, dsize);\r\n\r\n  face_image.delete()\r\n  return resize_image\r\n}\r\n\r\nfunction preprocessLiveness(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 3;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = 0\r\n        if (c === 0) // R\r\n          pixel_value = pixel[c];\r\n        if (c === 1) // G\r\n          pixel_value = pixel[c];\r\n        if (c === 2) // B\r\n          pixel_value = pixel[c];\r\n\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(channels * cols * rows), [1, channels, rows, cols])\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nasync function predictLiveness(session, canvas_id, bbox) {\r\n  var img = cv.imread(canvas_id)\r\n\r\n  var face_size = bbox.shape[0];\r\n  var bbox_size = bbox.shape[1];\r\n\r\n  const result = [];\r\n  for (let i = 0; i < face_size; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignLivenessImage(img, [x1, y1, width, height], 2.7);\r\n    //cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessLiveness(face_img);\r\n    face_img.delete();\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(128 * 128 * 3), [1, 3, 128, 128]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n    const score_arr = softmax(output_tensor['output'].data);\r\n    console.log(\"Liveness result: \", score_arr);\r\n\r\n    result.push([x1, y1, x2, y2, score_arr[0]]);\r\n  }\r\n  img.delete();\r\n  return result;\r\n\r\n}\r\n\r\nasync function predictLivenessBase64(session, base64Image, bbox) {\r\n  let image = new Image()\r\n  image.src = base64Image\r\n  await new Promise(r => {\r\n    image.onload = r\r\n  })\r\n\r\n  var img = cv.imread(image)\r\n\r\n  var face_size = bbox.shape[0];\r\n  var bbox_size = bbox.shape[1];\r\n\r\n  const result = [];\r\n  for (let i = 0; i < face_size; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignLivenessImage(img, [x1, y1, width, height], 2.7);\r\n    //cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessLiveness(face_img);\r\n    face_img.delete();\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(128 * 128 * 3), [1, 3, 128, 128]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n    const score_arr = softmax(output_tensor['output'].data);\r\n    console.log(\"Liveness result: \", score_arr);\r\n\r\n    result.push([x1, y1, x2, y2, score_arr[0]]);\r\n  }\r\n  img.delete();\r\n  return result;\r\n\r\n}\r\n\r\nexport {loadLivenessModel, predictLiveness, predictLivenessBase64}\r\n","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadAgeModel() {\r\n  var feature_session = null;\r\n  await createSessionWithFallback(\"../model/fr_age.onnx\", {executionProviders: ['wasm']})\r\n    .then((session) => {\r\n      feature_session = session\r\n      const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64 * 3), [1, 3, 64, 64]);\r\n      for (let i = 0; i < 64 * 64 * 3; i++) {\r\n        input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n      }\r\n      const feeds = {\"input\": input_tensor};\r\n      const output_tensor = feature_session.run(feeds)\r\n      console.log(\"initialize the age session.\")\r\n    })\r\n  return feature_session;\r\n}\r\n\r\nfunction alignAgeImage(image, bbox, scale_value) {\r\n  var src_h = image.rows,\r\n    src_w = image.cols;\r\n\r\n  var x = bbox[0]\r\n  var y = bbox[1]\r\n  var box_w = bbox[2]\r\n  var box_h = bbox[3]\r\n\r\n  var scale = Math.min((src_h - 1) / box_h, Math.min((src_w - 1) / box_w, scale_value))\r\n\r\n  var new_width = box_w * scale\r\n  var new_height = box_h * scale\r\n  var center_x = box_w / 2 + x,\r\n    center_y = box_h / 2 + y\r\n\r\n  var left_top_x = center_x - new_width / 2\r\n  var left_top_y = center_y - new_height / 2\r\n  var right_bottom_x = center_x + new_width / 2\r\n  var right_bottom_y = center_y + new_height / 2\r\n\r\n  if (left_top_x < 0) {\r\n    right_bottom_x -= left_top_x\r\n    left_top_x = 0\r\n  }\r\n\r\n  if (left_top_y < 0) {\r\n    right_bottom_y -= left_top_y\r\n    left_top_y = 0\r\n  }\r\n\r\n  if (right_bottom_x > src_w - 1) {\r\n    left_top_x -= right_bottom_x - src_w + 1\r\n    right_bottom_x = src_w - 1\r\n  }\r\n\r\n  if (right_bottom_y > src_h - 1) {\r\n    left_top_y -= right_bottom_y - src_h + 1\r\n    right_bottom_y = src_h - 1\r\n  }\r\n  var rect = new cv.Rect(Math.max(parseInt(left_top_x), 0), Math.max(parseInt(left_top_y), 0),\r\n    Math.min(parseInt(right_bottom_x - left_top_x), src_w - 1), Math.min(parseInt(right_bottom_y - left_top_y), src_h - 1))\r\n\r\n  var face_image = new cv.Mat()\r\n  face_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(64, 64);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(face_image, resize_image, dsize);\r\n\r\n  face_image.delete()\r\n  return resize_image\r\n}\r\n\r\nfunction mergeAge(x, s1, s2, s3, lambda_local, lambda_d) {\r\n  let a = 0;\r\n  let b = 0;\r\n  let c = 0;\r\n\r\n  const V = 101;\r\n\r\n  for (let i = 0; i < s1; i++)\r\n    a = a + (i + lambda_local * x[12 + i]) * x[i];\r\n  // console.log(\"a = \", a)\r\n\r\n  a = a / (s1 * (1 + lambda_d * x[9]));\r\n\r\n  for (let i = 0; i < s2; i++)\r\n    b = b + (i + lambda_local * x[15 + i]) * x[3 + i];\r\n  //console.log(\"b = \", b)\r\n\r\n  b = b / (s1 * (1 + lambda_d * x[9])) / (s2 * (1 + lambda_d * x[10]));\r\n\r\n  for (let i = 0; i < s3; i++)\r\n    c = c + (i + lambda_local * x[18 + i]) * x[6 + i];\r\n  //console.log(\"c = \", c)\r\n\r\n  c = c / (s1 * (1 + lambda_d * x[9])) / (s2 * (1 + lambda_d * x[10])) / (s3 * (1 + lambda_d * x[11]));\r\n  return (a + b + c) * V;\r\n}\r\n\r\nfunction preprocessAge(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 3;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      // if(x == 0 && y == 0)\r\n      //     console.log(pixel);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = 0\r\n        if (c === 0) // R\r\n          pixel_value = (pixel[c] / 255.0 - 0.485) / 0.229\r\n        if (c === 1) // G\r\n          pixel_value = (pixel[c] / 255.0 - 0.456) / 0.224\r\n        if (c === 2) // B\r\n          pixel_value = (pixel[c] / 255.0 - 0.406) / 0.225\r\n\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(3 * 64 * 64), [1, 3, 64, 64])\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nasync function predictAge(session, canvas_id, bbox) {\r\n  var img = cv.imread(canvas_id);\r\n\r\n  var face_size = bbox.shape[0];\r\n  var bbox_size = bbox.shape[1];\r\n\r\n  const result = [];\r\n  for (let i = 0; i < face_size; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignAgeImage(img, [x1, y1, width, height], 1.4);\r\n    //cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessAge(face_img);\r\n    face_img.delete();\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64 * 3), [1, 3, 64, 64]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n    const outputLayers = [\"prob_stage_1\", \"prob_stage_2\", \"prob_stage_3\", \"stage1_delta_k\", \"stage2_delta_k\", \"stage3_delta_k\",\r\n                             \"index_offset_stage1\", \"index_offset_stage2\", \"index_offset_stage3\"];\r\n\r\n    const outputFeat = [];\r\n    for (let i = 0; i < outputLayers.length; i++) {\r\n      const result = output_tensor[outputLayers[i]];\r\n      // console.log(outputLayers[i], \": \", result.size);\r\n      for (let j = 0; j < result.size; j++)\r\n        outputFeat.push(result.data[j]);\r\n    }\r\n\r\n    let age = mergeAge(outputFeat, 3, 3, 3, 1, 1);\r\n    console.log(\"output age: \", age);\r\n    result.push([x1, y1, x2, y2, age]);\r\n  }\r\n\r\n  img.delete();\r\n  return result;\r\n}\r\n\r\nexport {loadAgeModel, predictAge}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nasync function loadGenderModel() {\r\n  var feature_session = null;\r\n  await createSessionWithFallback(\"../model/fr_gender.onnx\", {executionProviders: ['wasm']})\r\n    .then((session) => {\r\n      feature_session = session\r\n      const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64 * 3), [1, 3, 64, 64]);\r\n      for (let i = 0; i < 64 * 64 * 3; i++) {\r\n        input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n      }\r\n      const feeds = {\"input\": input_tensor};\r\n      const output_tensor = feature_session.run(feeds)\r\n      console.log(\"initialize the gender session.\")\r\n    })\r\n  return feature_session;\r\n}\r\n\r\nfunction alignGenderImage(image, bbox, scale_value) {\r\n  var src_h = image.rows,\r\n    src_w = image.cols;\r\n\r\n  var x = bbox[0]\r\n  var y = bbox[1]\r\n  var box_w = bbox[2]\r\n  var box_h = bbox[3]\r\n\r\n  var scale = Math.min((src_h - 1) / box_h, Math.min((src_w - 1) / box_w, scale_value))\r\n\r\n  var new_width = box_w * scale\r\n  var new_height = box_h * scale\r\n  var center_x = box_w / 2 + x,\r\n    center_y = box_h / 2 + y\r\n\r\n  var left_top_x = center_x - new_width / 2\r\n  var left_top_y = center_y - new_height / 2\r\n  var right_bottom_x = center_x + new_width / 2\r\n  var right_bottom_y = center_y + new_height / 2\r\n\r\n  if (left_top_x < 0) {\r\n    right_bottom_x -= left_top_x\r\n    left_top_x = 0\r\n  }\r\n\r\n  if (left_top_y < 0) {\r\n    right_bottom_y -= left_top_y\r\n    left_top_y = 0\r\n  }\r\n\r\n  if (right_bottom_x > src_w - 1) {\r\n    left_top_x -= right_bottom_x - src_w + 1\r\n    right_bottom_x = src_w - 1\r\n  }\r\n\r\n  if (right_bottom_y > src_h - 1) {\r\n    left_top_y -= right_bottom_y - src_h + 1\r\n    right_bottom_y = src_h - 1\r\n  }\r\n  var rect = new cv.Rect(Math.max(parseInt(left_top_x), 0), Math.max(parseInt(left_top_y), 0),\r\n    Math.min(parseInt(right_bottom_x - left_top_x), src_w - 1), Math.min(parseInt(right_bottom_y - left_top_y), src_h - 1))\r\n\r\n  var face_image = new cv.Mat()\r\n  face_image = image.roi(rect)\r\n\r\n  var dsize = new cv.Size(64, 64);\r\n  var resize_image = new cv.Mat();\r\n  cv.resize(face_image, resize_image, dsize);\r\n\r\n  face_image.delete()\r\n  return resize_image\r\n}\r\n\r\nfunction mergeGender(x, s1, s2, s3, lambda_local, lambda_d) {\r\n  let a = 0;\r\n  let b = 0;\r\n  let c = 0;\r\n\r\n  const V = 1;\r\n\r\n  for (let i = 0; i < s1; i++)\r\n    a = a + (i + lambda_local * x[12 + i]) * x[i];\r\n  // console.log(\"a = \", a)\r\n\r\n  a = a / (s1 * (1 + lambda_d * x[9]));\r\n\r\n  for (let i = 0; i < s2; i++)\r\n    b = b + (i + lambda_local * x[15 + i]) * x[3 + i];\r\n  //console.log(\"b = \", b)\r\n\r\n  b = b / (s1 * (1 + lambda_d * x[9])) / (s2 * (1 + lambda_d * x[10]));\r\n\r\n  for (let i = 0; i < s3; i++)\r\n    c = c + (i + lambda_local * x[18 + i]) * x[6 + i];\r\n  //console.log(\"c = \", c)\r\n\r\n  c = c / (s1 * (1 + lambda_d * x[9])) / (s2 * (1 + lambda_d * x[10])) / (s3 * (1 + lambda_d * x[11]));\r\n  return (a + b + c) * V;\r\n}\r\n\r\nfunction preprocessGender(img) {\r\n  var cols = img.cols;\r\n  var rows = img.rows;\r\n  var channels = 3;\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * channels), [rows, cols, channels]);\r\n\r\n  for (var y = 0; y < rows; y++)\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = img.ucharPtr(y, x);\r\n      // if(x == 0 && y == 0)\r\n      //     console.log(pixel);\r\n      for (var c = 0; c < channels; c++) {\r\n        var pixel_value = 0\r\n        if (c === 0) // R\r\n          pixel_value = (pixel[c] / 255.0 - 0.485) / 0.229\r\n        if (c === 1) // G\r\n          pixel_value = (pixel[c] / 255.0 - 0.456) / 0.224\r\n        if (c === 2) // B\r\n          pixel_value = (pixel[c] / 255.0 - 0.406) / 0.225\r\n\r\n        img_data.set(y, x, c, pixel_value)\r\n      }\r\n    }\r\n\r\n  var preprocesed = ndarray(new Float32Array(3 * 64 * 64), [1, 3, 64, 64])\r\n  ops.assign(preprocesed.pick(0, 0, null, null), img_data.pick(null, null, 0));\r\n  ops.assign(preprocesed.pick(0, 1, null, null), img_data.pick(null, null, 1));\r\n  ops.assign(preprocesed.pick(0, 2, null, null), img_data.pick(null, null, 2));\r\n\r\n  return preprocesed\r\n}\r\n\r\nasync function predictGender(session, canvas_id, bbox) {\r\n  var img = cv.imread(canvas_id);\r\n\r\n  var face_size = bbox.shape[0];\r\n  var bbox_size = bbox.shape[1];\r\n\r\n  const result = [];\r\n  for (let i = 0; i < face_size; i++) {\r\n    var x1 = parseInt(bbox.data[i * bbox_size]),\r\n        y1 = parseInt(bbox.data[i * bbox_size + 1]),\r\n        x2 = parseInt(bbox.data[i * bbox_size + 2]),\r\n        y2 = parseInt(bbox.data[i * bbox_size + 3]),\r\n        width = Math.abs(x2 - x1),\r\n        height = Math.abs(y2 - y1);\r\n\r\n    var face_img = alignGenderImage(img, [x1, y1, width, height], 1.4);\r\n    //cv.imshow(\"live-temp\", face_img);\r\n    var input_image = preprocessGender(face_img);\r\n    face_img.delete();\r\n\r\n    const input_tensor = new Tensor(\"float32\", new Float32Array(64 * 64 * 3), [1, 3, 64, 64]);\r\n    input_tensor.data.set(input_image.data);\r\n    const feeds = {\"input\": input_tensor};\r\n\r\n    const output_tensor = await session.run(feeds);\r\n\r\n    const outputLayers = [\"prob_stage_1\", \"prob_stage_2\", \"prob_stage_3\", \"stage1_delta_k\", \"stage2_delta_k\", \"stage3_delta_k\",\r\n                             \"index_offset_stage1\", \"index_offset_stage2\", \"index_offset_stage3\"];\r\n\r\n    const outputFeat = [];\r\n    for (let i = 0; i < outputLayers.length; i++) {\r\n      const result = output_tensor[outputLayers[i]];\r\n      // console.log(outputLayers[i], \": \", result.size);\r\n      for (let j = 0; j < result.size; j++)\r\n        outputFeat.push(result.data[j]);\r\n    }\r\n\r\n    // console.log(\"final result: \", outputFeat);\r\n    let gender = mergeGender(outputFeat, 3, 3, 3, 1, 1);\r\n    console.log(\"output gender: \", gender);\r\n    result.push([x1, y1, x2, y2, gender]);\r\n  }\r\n  img.delete();\r\n  return result;\r\n}\r\n\r\nexport {loadGenderModel, predictGender}","import {InferenceSession, Tensor} from \"onnxruntime-web\";\r\nimport ndarray from \"ndarray\";\r\nimport ops from \"ndarray-ops\";\r\nimport {cv} from \"./load_opencv\";\r\nimport {createSessionWithFallback} from \"./model_loader\";\r\n\r\nconst REFERENCE_FACIAL_POINTS = [\r\n    [38.29459953, 51.69630051],\r\n    [73.53179932, 51.50139999],\r\n    [56.02519989, 71.73660278],\r\n    [41.54930115, 92.3655014],\r\n    [70.72990036, 92.20410156]\r\n]\r\n\r\nasync function loadFeatureModel() {\r\n  var feature_session = null;\r\n  await createSessionWithFallback(\"../model/fr_feature.onnx\", {executionProviders: ['wasm']})\r\n      .then((session) => {\r\n        feature_session = session\r\n        const input_tensor = new Tensor(\"float32\", new Float32Array(112 * 112 * 3), [1, 3, 112, 112]);\r\n        for (let i = 0; i < 112 * 112 * 3; i++) {\r\n          input_tensor.data[i] = Math.random() * 2.0 - 1.0;\r\n        }\r\n        const feeds = {\"input\": input_tensor};\r\n        const output_tensor = feature_session.run(feeds)\r\n        console.log(\"initialize the feature session.\")\r\n      })\r\n  return feature_session;\r\n}\r\n\r\nfunction convert68pts5pts(landmark) {\r\n    // 输入验证：68个关键点应该有136个数值 (x,y坐标对)\r\n    if (!landmark || landmark.length < 136) {\r\n        throw new Error(`Invalid landmark data: expected at least 136 values, got ${landmark ? landmark.length : 0}`);\r\n    }\r\n\r\n    // 68点人脸关键点到5点的标准映射 (基于dlib 68-point model)\r\n    // 左眼中心: 平均左眼内外眼角和上下眼睑的关键点\r\n    var left_eye_x = (landmark[36*2] + landmark[37*2] + landmark[38*2] + landmark[39*2] + \r\n                     landmark[40*2] + landmark[41*2]) / 6,\r\n        left_eye_y = (landmark[36*2+1] + landmark[37*2+1] + landmark[38*2+1] + landmark[39*2+1] + \r\n                     landmark[40*2+1] + landmark[41*2+1]) / 6,\r\n\r\n        // 右眼中心: 平均右眼内外眼角和上下眼睑的关键点  \r\n        right_eye_x = (landmark[42*2] + landmark[43*2] + landmark[44*2] + landmark[45*2] + \r\n                      landmark[46*2] + landmark[47*2]) / 6,\r\n        right_eye_y = (landmark[42*2+1] + landmark[43*2+1] + landmark[44*2+1] + landmark[45*2+1] + \r\n                      landmark[46*2+1] + landmark[47*2+1]) / 6,\r\n\r\n        // 鼻尖: 鼻尖点\r\n        nose_x = landmark[30*2], \r\n        nose_y = landmark[30*2+1],\r\n\r\n        // 左嘴角: 左嘴角点\r\n        left_mouth_x = landmark[48*2],\r\n        left_mouth_y = landmark[48*2+1],\r\n\r\n        // 右嘴角: 右嘴角点  \r\n        right_mouth_x = landmark[54*2],\r\n        right_mouth_y = landmark[54*2+1];\r\n\r\n    const result = [\r\n        [left_eye_x, left_eye_y], \r\n        [right_eye_x, right_eye_y], \r\n        [nose_x, nose_y], \r\n        [left_mouth_x, left_mouth_y],\r\n        [right_mouth_x, right_mouth_y]\r\n    ];\r\n\r\n    // 验证转换后的点是否合理\r\n    for (let i = 0; i < result.length; i++) {\r\n        if (isNaN(result[i][0]) || isNaN(result[i][1])) {\r\n            throw new Error(`Invalid converted point at index ${i}: [${result[i][0]}, ${result[i][1]}]`);\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction getReferenceFacialPoints() {\r\n  let ref5pts = REFERENCE_FACIAL_POINTS;\r\n\r\n  return ref5pts;\r\n}\r\n\r\nfunction warpAndCropFace(src,\r\n                       face_pts,\r\n                       ref_pts=null,\r\n                       crop_size=[112, 112]) {\r\n  \r\n  // 参数验证\r\n  if (!face_pts || face_pts.length < 5) {\r\n    throw new Error('Invalid face_pts: expected at least 5 points');\r\n  }\r\n  if (!ref_pts || ref_pts.length < 5) {\r\n    throw new Error('Invalid ref_pts: expected at least 5 points');\r\n  }\r\n\r\n  let srcPoints, dstPoints, tfm;\r\n  try {\r\n    // 使用完整的5点进行相似度变换，提高对齐精度\r\n    // 将5个点展开为一维数组 [x1,y1,x2,y2,x3,y3,x4,y4,x5,y5]\r\n    const srcArray = [];\r\n    const dstArray = [];\r\n    for (let i = 0; i < 5; i++) {\r\n      srcArray.push(face_pts[i][0], face_pts[i][1]);\r\n      dstArray.push(ref_pts[i][0], ref_pts[i][1]);\r\n    }\r\n    \r\n    srcPoints = cv.matFromArray(5, 1, cv.CV_32FC2, srcArray);\r\n    dstPoints = cv.matFromArray(5, 1, cv.CV_32FC2, dstArray);\r\n    \r\n    // 首选：OpenCV 提供的相似度变换接口（有的构建里不存在）\r\n    if (cv.estimateAffinePartial2D && typeof cv.estimateAffinePartial2D === 'function') {\r\n      try {\r\n        tfm = cv.estimateAffinePartial2D(srcPoints, dstPoints);\r\n        if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT) {\r\n          console.log('✅ 使用 OpenCV 原生 estimateAffinePartial2D');\r\n        }\r\n      } catch (e) {\r\n        console.log('⚠️ estimateAffinePartial2D 调用失败，使用手动实现');\r\n        tfm = computeSimilarityTransform(srcArray, dstArray);\r\n      }\r\n    } else {\r\n      // 手动实现 5 点相似度变换（scale+rotation+translation）\r\n      if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT) {\r\n        console.log('ℹ️ OpenCV 不支持 estimateAffinePartial2D，使用手动相似度变换');\r\n      }\r\n      tfm = computeSimilarityTransform(srcArray, dstArray);\r\n    }\r\n\r\n    const dsize = new cv.Size(crop_size[0], crop_size[1]);\r\n    const dst = new cv.Mat();\r\n    cv.warpAffine(src, dst, tfm, dsize);\r\n\r\n    return dst;\r\n  } finally {\r\n    // 确保内存释放\r\n    [srcPoints, dstPoints, tfm].forEach(mat => {\r\n      if (mat && typeof mat.delete === 'function') {\r\n        mat.delete();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nfunction alignFeatureImage(image, landmark) {\r\n  let facePoints = convert68pts5pts(landmark);\r\n  let refPoints = getReferenceFacialPoints();\r\n  let alignImg = warpAndCropFace(image, facePoints, refPoints);\r\n  return alignImg;\r\n}\r\n\r\n// 调试和验证函数：可视化人脸对齐质量\r\nfunction debugAlignment(originalImg, alignedImg, landmarks, canvasId = 'debug-canvas') {\r\n  try {\r\n    // 创建调试canvas\r\n    let debugCanvas = document.getElementById(canvasId);\r\n    if (!debugCanvas) {\r\n      debugCanvas = document.createElement('canvas');\r\n      debugCanvas.id = canvasId;\r\n      debugCanvas.width = 336; // 原图112 + 对齐图112 + 信息区112\r\n      debugCanvas.height = 140; // 增加高度容纳更多信息\r\n      debugCanvas.style.border = '2px solid #ff6b6b';\r\n      debugCanvas.style.position = 'fixed';\r\n      debugCanvas.style.top = '10px';\r\n      debugCanvas.style.right = '10px';\r\n      debugCanvas.style.zIndex = '10000';\r\n      debugCanvas.style.backgroundColor = 'white';\r\n      debugCanvas.style.boxShadow = '0 4px 12px rgba(0,0,0,0.3)';\r\n      debugCanvas.style.borderRadius = '8px';\r\n      debugCanvas.title = '人脸对齐调试：左侧原图+关键点，中间对齐结果+参考点，右侧质量评估';\r\n      document.body.appendChild(debugCanvas);\r\n      \r\n      // 添加关闭按钮\r\n      const closeBtn = document.createElement('button');\r\n      closeBtn.textContent = '×';\r\n      closeBtn.style.position = 'absolute';\r\n      closeBtn.style.top = '5px';\r\n      closeBtn.style.right = '5px';\r\n      closeBtn.style.zIndex = '10001';\r\n      closeBtn.style.background = '#ff6b6b';\r\n      closeBtn.style.color = 'white';\r\n      closeBtn.style.border = 'none';\r\n      closeBtn.style.borderRadius = '50%';\r\n      closeBtn.style.width = '20px';\r\n      closeBtn.style.height = '20px';\r\n      closeBtn.style.cursor = 'pointer';\r\n      closeBtn.onclick = () => {\r\n        debugCanvas.remove();\r\n        closeBtn.remove();\r\n        if (typeof window !== 'undefined') {\r\n          window.DEBUG_FACE_ALIGNMENT = false;\r\n        }\r\n      };\r\n      document.body.appendChild(closeBtn);\r\n    }\r\n    \r\n    const ctx = debugCanvas.getContext('2d');\r\n    ctx.clearRect(0, 0, 336, 140);\r\n    \r\n  // 显示原图 (缩放到112x112) - 使用临时 canvas 避免无效 ID 错误\r\n  const tempOrig = document.createElement('canvas');\r\n  tempOrig.width = originalImg.cols; tempOrig.height = originalImg.rows; tempOrig.style.display='none';\r\n  document.body.appendChild(tempOrig);\r\n  cv.imshow(tempOrig, originalImg);\r\n  ctx.drawImage(tempOrig, 0, 0, 112, 112);\r\n  tempOrig.remove();\r\n    \r\n  // 显示对齐后的图像\r\n  const tempAligned = document.createElement('canvas');\r\n  tempAligned.width = alignedImg.cols; tempAligned.height = alignedImg.rows; tempAligned.style.display='none';\r\n  document.body.appendChild(tempAligned);\r\n  cv.imshow(tempAligned, alignedImg);\r\n  ctx.drawImage(tempAligned, 112, 0, 112, 112);\r\n  tempAligned.remove();\r\n    \r\n    // 在原图上标记5个关键点\r\n    const facePoints = convert68pts5pts(landmarks);\r\n    const refPoints = getReferenceFacialPoints();\r\n    \r\n    // 绘制关键点 - 原图\r\n    ctx.fillStyle = '#ff4757';\r\n    ctx.font = '10px Arial';\r\n    const pointLabels = ['左眼', '右眼', '鼻尖', '左嘴角', '右嘴角'];\r\n    facePoints.forEach((point, index) => {\r\n      const x = (point[0] / originalImg.cols) * 112;\r\n      const y = (point[1] / originalImg.rows) * 112;\r\n      ctx.beginPath();\r\n      ctx.arc(x, y, 3, 0, 2 * Math.PI);\r\n      ctx.fill();\r\n      ctx.fillText(pointLabels[index], x + 4, y - 4);\r\n    });\r\n    \r\n    // 绘制参考点 - 对齐图\r\n    ctx.fillStyle = '#3742fa';\r\n    refPoints.forEach((point, index) => {\r\n      const x = 112 + point[0];\r\n      const y = point[1];\r\n      ctx.beginPath();\r\n      ctx.arc(x, y, 3, 0, 2 * Math.PI);\r\n      ctx.fill();\r\n      ctx.fillText(pointLabels[index], x + 4, y - 4);\r\n    });\r\n    \r\n    // 计算对齐质量指标\r\n    const quality = calculateAlignmentQuality(facePoints, refPoints);\r\n    \r\n    // 绘制信息面板\r\n    ctx.fillStyle = '#f8f9fa';\r\n    ctx.fillRect(224, 0, 112, 112);\r\n    ctx.strokeStyle = '#dee2e6';\r\n    ctx.strokeRect(224, 0, 112, 112);\r\n    \r\n    // 显示质量指标\r\n    ctx.fillStyle = '#212529';\r\n    ctx.font = '11px monospace';\r\n    ctx.fillText('对齐质量评估', 228, 15);\r\n    ctx.font = '9px monospace';\r\n    \r\n    ctx.fillStyle = quality.eyeDistance > 0.9 ? '#28a745' : '#dc3545';\r\n    ctx.fillText(`眼距比: ${quality.eyeDistance.toFixed(3)}`, 228, 30);\r\n    \r\n    ctx.fillStyle = quality.faceSymmetry > 0.9 ? '#28a745' : '#dc3545';  \r\n    ctx.fillText(`对称性: ${quality.faceSymmetry.toFixed(3)}`, 228, 45);\r\n    \r\n    ctx.fillStyle = quality.poseStability > 0.8 ? '#28a745' : '#dc3545';\r\n    ctx.fillText(`姿态: ${quality.poseStability.toFixed(3)}`, 228, 60);\r\n    \r\n    ctx.fillStyle = quality.overall >= 0.8 ? '#28a745' : quality.overall >= 0.6 ? '#ffc107' : '#dc3545';\r\n    ctx.fillText(`总分: ${quality.overall.toFixed(3)}`, 228, 75);\r\n    \r\n    // 显示建议\r\n    ctx.fillStyle = '#6c757d';\r\n    ctx.font = '8px Arial';\r\n    if (quality.overall < 0.6) {\r\n      ctx.fillText('建议调整关键点', 228, 90);\r\n      ctx.fillText('检测算法', 228, 100);\r\n    } else if (quality.overall < 0.8) {\r\n      ctx.fillText('对齐质量一般', 228, 90);\r\n    } else {\r\n      ctx.fillText('对齐质量良好', 228, 90);\r\n    }\r\n    \r\n    // 添加标签\r\n    ctx.fillStyle = '#343a40';\r\n    ctx.font = 'bold 10px Arial';\r\n    ctx.fillText('原图+关键点', 5, 125);\r\n    ctx.fillText('对齐+参考点', 117, 125);\r\n    ctx.fillText('质量分析', 229, 125);\r\n    \r\n  } catch (error) {\r\n    console.warn('Debug alignment visualization failed:', error);\r\n  }\r\n}\r\n\r\n// 计算对齐质量指标\r\nfunction calculateAlignmentQuality(facePoints, refPoints) {\r\n  try {\r\n    // 1. 眼距比例检查\r\n    const faceEyeDist = Math.sqrt(\r\n      Math.pow(facePoints[1][0] - facePoints[0][0], 2) + \r\n      Math.pow(facePoints[1][1] - facePoints[0][1], 2)\r\n    );\r\n    const refEyeDist = Math.sqrt(\r\n      Math.pow(refPoints[1][0] - refPoints[0][0], 2) + \r\n      Math.pow(refPoints[1][1] - refPoints[0][1], 2)\r\n    );\r\n    const eyeDistanceRatio = Math.min(faceEyeDist, refEyeDist) / Math.max(faceEyeDist, refEyeDist);\r\n    \r\n    // 2. 面部对称性检查 (左右眼到鼻尖距离)\r\n    const leftEyeToNose = Math.sqrt(\r\n      Math.pow(facePoints[0][0] - facePoints[2][0], 2) + \r\n      Math.pow(facePoints[0][1] - facePoints[2][1], 2)\r\n    );\r\n    const rightEyeToNose = Math.sqrt(\r\n      Math.pow(facePoints[1][0] - facePoints[2][0], 2) + \r\n      Math.pow(facePoints[1][1] - facePoints[2][1], 2)\r\n    );\r\n    const symmetry = Math.min(leftEyeToNose, rightEyeToNose) / Math.max(leftEyeToNose, rightEyeToNose);\r\n    \r\n    // 3. 姿态稳定性 (眼睛水平程度)\r\n    const eyeAngle = Math.abs(Math.atan2(\r\n      facePoints[1][1] - facePoints[0][1], \r\n      facePoints[1][0] - facePoints[0][0]\r\n    ));\r\n    const poseStability = Math.max(0, 1 - eyeAngle / (Math.PI / 6)); // 30度内为满分\r\n    \r\n    // 综合评分\r\n    const overall = (eyeDistanceRatio * 0.4 + symmetry * 0.3 + poseStability * 0.3);\r\n    \r\n    return {\r\n      eyeDistance: eyeDistanceRatio,\r\n      faceSymmetry: symmetry,\r\n      poseStability: poseStability,\r\n      overall: overall\r\n    };\r\n  } catch (error) {\r\n    return {\r\n      eyeDistance: 0,\r\n      faceSymmetry: 0, \r\n      poseStability: 0,\r\n      overall: 0\r\n    };\r\n  }\r\n}\r\n\r\n// 手动 5 点相似度变换（基于最小二乘法）：输入展开数组 [x1,y1,...,x5,y5]\r\nfunction computeSimilarityTransform(srcArray, dstArray) {\r\n  try {\r\n    const n = 5;\r\n    const srcPts = []; const dstPts = [];\r\n    for (let i=0;i<n;i++) {\r\n      srcPts.push([srcArray[2*i], srcArray[2*i+1]]);\r\n      dstPts.push([dstArray[2*i], dstArray[2*i+1]]);\r\n    }\r\n    \r\n    // 使用最小二乘法求解相似度变换参数\r\n    // 相似度变换矩阵: [a, -b, tx; b, a, ty] \r\n    // 即 x' = a*x - b*y + tx, y' = b*x + a*y + ty\r\n    \r\n    let sum_x = 0, sum_y = 0, sum_u = 0, sum_v = 0;\r\n    let sum_xx = 0, sum_yy = 0, sum_xy = 0;\r\n    let sum_ux = 0, sum_uy = 0, sum_vx = 0, sum_vy = 0;\r\n    \r\n    for (let i = 0; i < n; i++) {\r\n      const x = srcPts[i][0];\r\n      const y = srcPts[i][1];\r\n      const u = dstPts[i][0];\r\n      const v = dstPts[i][1];\r\n      \r\n      sum_x += x; sum_y += y; sum_u += u; sum_v += v;\r\n      sum_xx += x*x; sum_yy += y*y; sum_xy += x*y;\r\n      sum_ux += u*x; sum_uy += u*y; sum_vx += v*x; sum_vy += v*y;\r\n    }\r\n    \r\n    // 构建并求解线性方程组\r\n    const SX = sum_xx + sum_yy;\r\n    const SY = sum_x*sum_x + sum_y*sum_y;\r\n    const A1 = sum_ux + sum_vy;\r\n    const A2 = sum_vx - sum_uy;\r\n    const B1 = sum_u;\r\n    const B2 = sum_v;\r\n    \r\n    const denom = SX*n - SY;\r\n    if (Math.abs(denom) < 1e-10) {\r\n      // 退化情况：使用仿射变换\r\n      console.warn('退化到前3点仿射变换');\r\n      const srcTri = cv.matFromArray(3, 1, cv.CV_32FC2, srcArray.slice(0, 6));\r\n      const dstTri = cv.matFromArray(3, 1, cv.CV_32FC2, dstArray.slice(0, 6));\r\n      const tfm = cv.getAffineTransform(srcTri, dstTri);\r\n      srcTri.delete();\r\n      dstTri.delete();\r\n      return tfm;\r\n    }\r\n    \r\n    // 求解相似度变换参数\r\n    const a = (A1*n - B1*sum_x - B2*sum_y) / denom;\r\n    const b = (A2*n - B2*sum_x + B1*sum_y) / denom;\r\n    const tx = (B1 - a*sum_x + b*sum_y) / n;\r\n    const ty = (B2 - b*sum_x - a*sum_y) / n;\r\n    \r\n    // 验证参数合理性\r\n    const scale = Math.sqrt(a*a + b*b);\r\n    if (scale < 0.1 || scale > 10) {\r\n      console.warn('相似度变换scale异常:', scale, '，回退到仿射变换');\r\n      const srcTri = cv.matFromArray(3, 1, cv.CV_32FC2, srcArray.slice(0, 6));\r\n      const dstTri = cv.matFromArray(3, 1, cv.CV_32FC2, dstArray.slice(0, 6));\r\n      const tfm = cv.getAffineTransform(srcTri, dstTri);\r\n      srcTri.delete();\r\n      dstTri.delete();\r\n      return tfm;\r\n    }\r\n    \r\n    // 构建仿射变换矩阵 [2x3]\r\n    const transform = cv.matFromArray(2, 3, cv.CV_32FC1, [a, -b, tx, b, a, ty]);\r\n    \r\n    // 调试输出\r\n    if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT) {\r\n      const scale = Math.sqrt(a*a + b*b);\r\n      const angle = Math.atan2(b, a) * 180 / Math.PI;\r\n      console.log('🔧 相似度变换参数:', {\r\n        缩放: scale.toFixed(3),\r\n        旋转角度: angle.toFixed(1) + '°',\r\n        平移: `(${tx.toFixed(1)}, ${ty.toFixed(1)})`\r\n      });\r\n    }\r\n    \r\n    return transform;\r\n    \r\n  } catch (e) {\r\n    console.warn('相似度变换计算失败:', e, '使用单位变换');\r\n    return cv.matFromArray(2, 3, cv.CV_32FC1, [1,0,0,0,1,0]);\r\n  }\r\n}\r\n\r\nfunction preprocessFeature(image) {\r\n  var rows = image.rows,\r\n      cols = image.cols;\r\n\r\n  // 参数验证\r\n  if (rows !== 112 || cols !== 112) {\r\n    console.warn(`Expected 112x112 image, got ${rows}x${cols}. This may affect model performance.`);\r\n  }\r\n\r\n  var img_data = ndarray(new Float32Array(rows * cols * 3), [rows, cols, 3]);\r\n\r\n  // 优化：减少函数调用，提高性能\r\n  for (var y = 0; y < rows; y++) {\r\n    for (var x = 0; x < cols; x++) {\r\n      let pixel = image.ucharPtr(y, x);\r\n      \r\n      // OpenCV.js使用BGR格式，需要转换为RGB\r\n      // 模型训练时通常使用RGB格式和[-1,1]归一化范围\r\n      var pixel_value_b = (pixel[0] - 127.5) / 127.5; // B -> R (in RGB)\r\n      var pixel_value_g = (pixel[1] - 127.5) / 127.5; // G -> G  \r\n      var pixel_value_r = (pixel[2] - 127.5) / 127.5; // R -> B (in RGB)\r\n\r\n      // 按RGB顺序存储 (注意BGR到RGB的转换)\r\n      img_data.set(y, x, 0, pixel_value_r); // R channel\r\n      img_data.set(y, x, 1, pixel_value_g); // G channel  \r\n      img_data.set(y, x, 2, pixel_value_b); // B channel\r\n    }\r\n  }\r\n\r\n  // 转换为NCHW格式 [1, 3, 112, 112]\r\n  var preprocessed = ndarray(new Float32Array(3 * rows * cols), [1, 3, rows, cols]);\r\n\r\n  ops.assign(preprocessed.pick(0, 0, null, null), img_data.pick(null, null, 0)); // R\r\n  ops.assign(preprocessed.pick(0, 1, null, null), img_data.pick(null, null, 1)); // G\r\n  ops.assign(preprocessed.pick(0, 2, null, null), img_data.pick(null, null, 2)); // B\r\n\r\n  return preprocessed;\r\n}\r\n\r\nasync function extractFeatureImage(session, img, landmarks) {\r\n  const result = [];\r\n  const input_tensor = new Tensor(\"float32\", new Float32Array(112 * 112 * 3), [1, 3, 112, 112]);\r\n  \r\n  try {\r\n    for (let i = 0; i < landmarks.length; i++) {\r\n      let face_img = null;\r\n      try {\r\n        face_img = alignFeatureImage(img, landmarks[i]);\r\n        \r\n        // 可选：启用调试可视化\r\n        if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT) {\r\n          debugAlignment(img, face_img, landmarks[i]);\r\n          \r\n          // 增强的控制台日志\r\n          const facePoints = convert68pts5pts(landmarks[i]);\r\n          const quality = calculateAlignmentQuality(facePoints, getReferenceFacialPoints());\r\n          console.log(`🎯 人脸 #${i+1} 对齐质量:`, {\r\n            总分: quality.overall.toFixed(3),\r\n            眼距比: quality.eyeDistance.toFixed(3), \r\n            对称性: quality.faceSymmetry.toFixed(3),\r\n            姿态: quality.poseStability.toFixed(3),\r\n            评级: quality.overall >= 0.8 ? '优秀✨' : quality.overall >= 0.6 ? '良好👍' : '需改进⚠️'\r\n          });\r\n        }\r\n        \r\n        const input_image = preprocessFeature(face_img);\r\n        \r\n        // 复用tensor，提高性能\r\n        input_tensor.data.set(input_image.data);\r\n        const feeds = {\"input\": input_tensor};\r\n\r\n        const output_map = await session.run(feeds);\r\n        // 兼容不同模型输出Key：优先使用 'output'，否则取首个key\r\n        let tensorData = null;\r\n        if (output_map) {\r\n          if (output_map.output && output_map.output.data) {\r\n            tensorData = output_map.output.data;\r\n          } else {\r\n            const keys = Object.keys(output_map);\r\n            if (keys.length > 0 && output_map[keys[0]] && output_map[keys[0]].data) {\r\n              tensorData = output_map[keys[0]].data;\r\n            }\r\n          }\r\n        }\r\n        if (!tensorData) {\r\n            console.warn('未找到特征向量输出，输出map keys=', output_map ? Object.keys(output_map) : 'null');\r\n        } else {\r\n            // 复制为独立的 Float32Array，避免后续复用覆盖\r\n            const featureVector = new Float32Array(tensorData.length);\r\n            featureVector.set(tensorData);\r\n            result.push(featureVector);\r\n        }\r\n        \r\n      } catch (error) {\r\n        console.error(`❌ 处理第${i}个人脸时出错:`, error);\r\n        // 继续处理其他人脸\r\n      } finally {\r\n        // 确保释放face_img内存\r\n        if (face_img && typeof face_img.delete === 'function') {\r\n          face_img.delete();\r\n        }\r\n      }\r\n    }\r\n    \r\n    // 批处理完成日志\r\n    if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT && result.length > 0) {\r\n      console.log(`✅ 特征提取完成: ${result.length}个人脸，特征维度: ${result[0].length}`);\r\n    }\r\n    \r\n  } finally {\r\n    // 注意：img由调用方负责释放，这里不删除\r\n    // img.delete(); // 移除这行，避免重复释放\r\n  }\r\n  \r\n  return result;\r\n}\r\n\r\nasync function extractFeature(session, canvas_id, landmarks) {\r\n  let img = null;\r\n  try {\r\n    img = cv.imread(canvas_id);\r\n    const result = await extractFeatureImage(session, img, landmarks);\r\n    return result;\r\n  } finally {\r\n    if (img && typeof img.delete === 'function') {\r\n      img.delete();\r\n    }\r\n  }\r\n}\r\n\r\nasync function extractFeatureBase64(session, base64Image, landmarks) {\r\n  let image = new Image();\r\n  let img = null;\r\n  \r\n  try {\r\n    image.src = base64Image;\r\n    await new Promise((resolve, reject) => {\r\n      image.onload = resolve;\r\n      image.onerror = reject;\r\n    });\r\n\r\n    img = cv.imread(image);\r\n    const result = await extractFeatureImage(session, img, landmarks);\r\n    return result;\r\n  } finally {\r\n    if (img && typeof img.delete === 'function') {\r\n      img.delete();\r\n    }\r\n  }\r\n}\r\n\r\nfunction matchFeature(feature1, feature2) {\r\n  if (!feature1 || !feature2 || feature1.length !== feature2.length) {\r\n    console.warn('特征向量格式不匹配:', {\r\n      feature1Length: feature1?.length || 0,\r\n      feature2Length: feature2?.length || 0\r\n    });\r\n    return 0;\r\n  }\r\n\r\n  const vectorSize = feature1.length;\r\n  \r\n  // 创建副本，避免修改原数组\r\n  const f1 = new Float32Array(feature1);\r\n  const f2 = new Float32Array(feature2);\r\n\r\n  // 计算均值并中心化\r\n  let f1Sum = 0, f2Sum = 0;\r\n  for (let i = 0; i < vectorSize; i++) {\r\n    const meanVal = (f1[i] + f2[i]) / 2;\r\n    f1[i] -= meanVal;\r\n    f2[i] -= meanVal;\r\n    \r\n    f1Sum += f1[i] * f1[i];\r\n    f2Sum += f2[i] * f2[i];\r\n  }\r\n\r\n  // 检查数值稳定性\r\n  if (f1Sum < 1e-12 || f2Sum < 1e-12) {\r\n    console.warn('特征向量方差过小，可能为零向量');\r\n    return 0;\r\n  }\r\n\r\n  // 归一化并计算余弦相似度\r\n  const norm1 = Math.sqrt(f1Sum);\r\n  const norm2 = Math.sqrt(f2Sum);\r\n  \r\n  let dotProduct = 0;\r\n  for (let i = 0; i < vectorSize; i++) {\r\n    f1[i] = f1[i] / norm1;\r\n    f2[i] = f2[i] / norm2;\r\n    dotProduct += f1[i] * f2[i];\r\n  }\r\n\r\n  // 限制在[-1,1]范围内，避免数值误差\r\n  return Math.max(-1, Math.min(1, dotProduct));\r\n}\r\n\r\n\r\n\r\n// 公开版本：人脸对齐质量验证函数（供外部调用）\r\nfunction validateAlignmentQuality(originalImg, alignedImg, landmarks, canvasId = 'quality-canvas') {\r\n  try {\r\n    // 创建调试canvas\r\n    let debugCanvas = document.getElementById(canvasId);\r\n    if (!debugCanvas) {\r\n      debugCanvas = document.createElement('canvas');\r\n      debugCanvas.id = canvasId;\r\n      debugCanvas.width = 336; // 原图112 + 对齐图112 + 信息区112\r\n      debugCanvas.height = 140; // 增加高度容纳更多信息\r\n      debugCanvas.style.border = '2px solid #ff6b6b';\r\n      debugCanvas.style.position = 'fixed';\r\n      debugCanvas.style.top = '10px';\r\n      debugCanvas.style.right = '10px';\r\n      debugCanvas.style.zIndex = '10000';\r\n      debugCanvas.style.backgroundColor = 'white';\r\n      debugCanvas.style.boxShadow = '0 4px 12px rgba(0,0,0,0.3)';\r\n      debugCanvas.style.borderRadius = '8px';\r\n      debugCanvas.title = '人脸对齐调试：左侧原图+关键点，中间对齐结果+参考点，右侧质量评估';\r\n      document.body.appendChild(debugCanvas);\r\n      \r\n      // 添加关闭按钮\r\n      const closeBtn = document.createElement('button');\r\n      closeBtn.textContent = '×';\r\n      closeBtn.style.position = 'absolute';\r\n      closeBtn.style.top = '5px';\r\n      closeBtn.style.right = '5px';\r\n      closeBtn.style.zIndex = '10001';\r\n      closeBtn.style.background = '#ff6b6b';\r\n      closeBtn.style.color = 'white';\r\n      closeBtn.style.border = 'none';\r\n      closeBtn.style.borderRadius = '50%';\r\n      closeBtn.style.width = '20px';\r\n      closeBtn.style.height = '20px';\r\n      closeBtn.style.cursor = 'pointer';\r\n      closeBtn.onclick = () => {\r\n        debugCanvas.remove();\r\n        closeBtn.remove();\r\n        if (typeof window !== 'undefined') {\r\n          window.DEBUG_FACE_ALIGNMENT = false;\r\n        }\r\n      };\r\n      document.body.appendChild(closeBtn);\r\n    }\r\n    \r\n    const ctx = debugCanvas.getContext('2d');\r\n    ctx.clearRect(0, 0, 336, 140);\r\n    \r\n  // 显示原图 (缩放到112x112) - 使用临时 canvas 避免无效 ID 错误\r\n  const tempOrig = document.createElement('canvas');\r\n  tempOrig.width = originalImg.cols; tempOrig.height = originalImg.rows; tempOrig.style.display='none';\r\n  document.body.appendChild(tempOrig);\r\n  cv.imshow(tempOrig, originalImg);\r\n  ctx.drawImage(tempOrig, 0, 0, 112, 112);\r\n  tempOrig.remove();\r\n    \r\n  // 显示对齐后的图像\r\n  const tempAligned = document.createElement('canvas');\r\n  tempAligned.width = alignedImg.cols; tempAligned.height = alignedImg.rows; tempAligned.style.display='none';\r\n  document.body.appendChild(tempAligned);\r\n  cv.imshow(tempAligned, alignedImg);\r\n  ctx.drawImage(tempAligned, 112, 0, 112, 112);\r\n  tempAligned.remove();\r\n    \r\n    // 在原图上标记5个关键点\r\n    const facePoints = convert68pts5pts(landmarks);\r\n    const refPoints = getReferenceFacialPoints();\r\n    \r\n    // 绘制关键点 - 原图\r\n    ctx.fillStyle = '#ff4757';\r\n    ctx.font = '10px Arial';\r\n    const pointLabels = ['左眼', '右眼', '鼻尖', '左嘴角', '右嘴角'];\r\n    facePoints.forEach((point, index) => {\r\n      const x = (point[0] / originalImg.cols) * 112;\r\n      const y = (point[1] / originalImg.rows) * 112;\r\n      ctx.beginPath();\r\n      ctx.arc(x, y, 3, 0, 2 * Math.PI);\r\n      ctx.fill();\r\n      ctx.fillText(pointLabels[index], x + 4, y - 4);\r\n    });\r\n    \r\n    // 绘制参考点 - 对齐图\r\n    ctx.fillStyle = '#3742fa';\r\n    refPoints.forEach((point, index) => {\r\n      const x = 112 + point[0];\r\n      const y = point[1];\r\n      ctx.beginPath();\r\n      ctx.arc(x, y, 3, 0, 2 * Math.PI);\r\n      ctx.fill();\r\n      ctx.fillText(pointLabels[index], x + 4, y - 4);\r\n    });\r\n    \r\n    // 计算对齐质量指标\r\n    const quality = calculateAlignmentQuality(facePoints, refPoints);\r\n    \r\n    // 绘制信息面板\r\n    ctx.fillStyle = '#f8f9fa';\r\n    ctx.fillRect(224, 0, 112, 112);\r\n    ctx.strokeStyle = '#dee2e6';\r\n    ctx.strokeRect(224, 0, 112, 112);\r\n    \r\n    // 显示质量指标\r\n    ctx.fillStyle = '#212529';\r\n    ctx.font = '11px monospace';\r\n    ctx.fillText('对齐质量评估', 228, 15);\r\n    ctx.font = '9px monospace';\r\n    \r\n    ctx.fillStyle = quality.eyeDistance > 0.9 ? '#28a745' : '#dc3545';\r\n    ctx.fillText(`眼距比: ${quality.eyeDistance.toFixed(3)}`, 228, 30);\r\n    \r\n    ctx.fillStyle = quality.faceSymmetry > 0.9 ? '#28a745' : '#dc3545';  \r\n    ctx.fillText(`对称性: ${quality.faceSymmetry.toFixed(3)}`, 228, 45);\r\n    \r\n    ctx.fillStyle = quality.poseStability > 0.8 ? '#28a745' : '#dc3545';\r\n    ctx.fillText(`姿态: ${quality.poseStability.toFixed(3)}`, 228, 60);\r\n    \r\n    ctx.fillStyle = quality.overall >= 0.8 ? '#28a745' : quality.overall >= 0.6 ? '#ffc107' : '#dc3545';\r\n    ctx.fillText(`总分: ${quality.overall.toFixed(3)}`, 228, 75);\r\n    \r\n    // 显示建议\r\n    ctx.fillStyle = '#6c757d';\r\n    ctx.font = '8px Arial';\r\n    if (quality.overall < 0.6) {\r\n      ctx.fillText('建议调整关键点', 228, 90);\r\n      ctx.fillText('检测算法', 228, 100);\r\n    } else if (quality.overall < 0.8) {\r\n      ctx.fillText('对齐质量一般', 228, 90);\r\n    } else {\r\n      ctx.fillText('对齐质量良好', 228, 90);\r\n    }\r\n    \r\n    // 添加标签\r\n    ctx.fillStyle = '#343a40';\r\n    ctx.font = 'bold 10px Arial';\r\n    ctx.fillText('原图+关键点', 5, 125);\r\n    ctx.fillText('对齐+参考点', 117, 125);\r\n    ctx.fillText('质量分析', 229, 125);\r\n    \r\n  } catch (error) {\r\n    console.warn('Debug alignment visualization failed:', error);\r\n  }\r\n}\r\n\r\n// 公开版本：特征一致性验证函数（供外部调用）\r\nasync function validateFeatureConsistency(session, canvasId, landmarks, iterations = 10) {\r\n  console.log(`🧪 开始特征一致性测试 (${iterations}次迭代)...`);\r\n  const features = [];\r\n  \r\n  try {\r\n    for (let i = 0; i < iterations; i++) {\r\n      const result = await extractFeature(session, canvasId, landmarks);\r\n      if (result && result.length > 0) {\r\n        const vec = result[0];\r\n        if (vec && vec.length > 0) {\r\n          // 确保是独立的数组副本\r\n          features.push(Array.from(vec));\r\n        }\r\n      }\r\n      \r\n      // 小延迟避免过快调用\r\n      if (i < iterations - 1) {\r\n        await new Promise(resolve => setTimeout(resolve, 10));\r\n      }\r\n    }\r\n    \r\n    if (features.length < 2) {\r\n      console.warn('❌ 特征提取失败，无法进行一致性测试');\r\n      return null;\r\n    }\r\n    \r\n    // 计算特征向量间的相似度统计\r\n    const similarities = [];\r\n    const firstFeature = features[0];\r\n    \r\n    console.log(`📊 计算 ${features.length} 个特征向量间的相似度...`);\r\n    for (let i = 1; i < features.length; i++) {\r\n      const similarity = matchFeature(firstFeature, features[i]);\r\n      similarities.push(similarity);\r\n      \r\n      if (typeof window !== 'undefined' && window.DEBUG_FACE_ALIGNMENT) {\r\n        console.log(`   特征1 vs 特征${i+1}: ${similarity.toFixed(4)}`);\r\n      }\r\n    }\r\n    \r\n    // 计算统计指标\r\n    const avgSimilarity = similarities.reduce((a, b) => a + b, 0) / similarities.length;\r\n    const minSimilarity = Math.min(...similarities);\r\n    const maxSimilarity = Math.max(...similarities);\r\n    const variance = similarities.reduce((acc, val) => acc + Math.pow(val - avgSimilarity, 2), 0) / similarities.length;\r\n    const stdDev = Math.sqrt(variance);\r\n    \r\n    // 评估标准：高质量系统的特征应该高度一致\r\n    const isHighlyConsistent = stdDev < 0.005 && avgSimilarity > 0.99;\r\n    const isConsistent = stdDev < 0.02 && avgSimilarity > 0.95;\r\n    \r\n    const report = {\r\n      iterations,\r\n      featuresExtracted: features.length,\r\n      featureDimension: firstFeature.length,\r\n      avgSimilarity: parseFloat(avgSimilarity.toFixed(6)),\r\n      minSimilarity: parseFloat(minSimilarity.toFixed(6)),\r\n      maxSimilarity: parseFloat(maxSimilarity.toFixed(6)),\r\n      standardDeviation: parseFloat(stdDev.toFixed(6)),\r\n      isHighlyConsistent,\r\n      isConsistent,\r\n      qualityLevel: isHighlyConsistent ? '优秀' : isConsistent ? '良好' : '需改进'\r\n    };\r\n    \r\n    console.log('📋 特征一致性测试报告:', {\r\n      '质量等级': report.qualityLevel + (isHighlyConsistent ? ' 🌟' : isConsistent ? ' ✅' : ' ⚠️'),\r\n      '平均相似度': report.avgSimilarity,\r\n      '标准差': report.standardDeviation,\r\n      '相似度范围': `[${report.minSimilarity}, ${report.maxSimilarity}]`,\r\n      '特征维度': report.featureDimension\r\n    });\r\n    \r\n    if (!report.isConsistent) {\r\n      console.warn('⚠️ 特征提取一致性较差，可能原因:');\r\n      console.warn('   1. 人脸对齐算法不稳定 (检查对齐质量评分)');\r\n      console.warn('   2. 关键点检测存在抖动 (观察关键点是否稳定)');\r\n      console.warn('   3. 图像预处理数值精度问题');\r\n      console.warn('   4. ONNX模型推理存在随机性');\r\n    } else if (report.isHighlyConsistent) {\r\n      console.log('✨ 特征提取质量优秀，系统稳定性很高！');\r\n    } else {\r\n      console.log('👍 特征提取一致性良好');\r\n    }\r\n    \r\n    return report;\r\n    \r\n  } catch (error) {\r\n    console.error('❌ 特征一致性测试失败:', error);\r\n    return null;\r\n  }\r\n}\r\n\r\nexport {loadFeatureModel, extractFeature, extractFeatureBase64, matchFeature, debugAlignment, validateAlignmentQuality, validateFeatureConsistency}"],"names":["cv","InferenceSession","Tensor"],"mappings":"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"}