"use strict"
* OpenCV.js 加载器
* opencv.js文件放在 `/public/opencv.js` 路径下
* opencv.js不支持模块化导入,所以需要动态加载
* OpenCV.js会默认加载进window.cv全局对象
*/
import { withBase } from "vitepress"
let opencvPromise = null
* 加载OpenCV的Promise方法
* @returns { Promise<CV> }
* @note 本质上是将OpenCV.js加载进window.cv,并将window.cv作为返回值
* @note 而window.cv是个Promise对象,因此返回值需用then()方法异步等待
*/
export function loadOpenCV() {
if (opencvPromise) { return opencvPromise }
opencvPromise = new Promise((resolve) => {
if (window.cv && (typeof window.cv !== "undefined")) {
resolve(window.cv)
} else {
const script = document.createElement("script")
script.defer = true
script.type = "text/javascript"
script.id = "opencv-loader"
script.src = withBase("/assets/opencv-251112a.js")
script.onload = (event) => {
resolve(window.cv)
}
document.head.appendChild(script)
}
})
return opencvPromise
}