Я использую предварительно созданный OpenCV4NodeJS для своего проекта, чтобы использовать шаблон сопоставления.
Я создал два файла, один из которых Index.js, а другой — matchTemlate.js.
В Index.js я вызываю шаблон соответствия:
const { matchTemplate } = require("./matchTemplate");
...
let a = async function () {
let tm = performance.now();
try {
await Promise.all([
matchTemplate(baseImage, templateR),
matchTemplate(baseImage, templateL)
]).then(result => {
const c = result.map((ob) => (ob.C)) // confidence
top = c[0] > c[1] ? result[0].Y + 8 : result[1].Y + 11
})
} catch (error) {
console.log(error)
}
tm = performance.now() - tm;
console.log(tm)
}
и это matchTemplate.js
const cv = require('opencv4nodejs-prebuilt')
exports.matchTemplate = async function (inputFile, templateImage) {
// eslint-disable-next-line no-unused-expressions
const matS = await cv.imdecodeAsync(templateImage)
console.time('templateMatching')
const matched = inputFile.matchTemplate(matS, 3)
console.timeEnd('templateMatching')
const minMax = matched.minMaxLoc()
return ({ Y: minMax.maxLoc.y, C: minMax.maxVal })
}
Вывод журнала matchTemplate: templateMatching: 892.648ms templateMatching: 890.387ms
и вывод журнала index.js: TemplateMatching: 1824.8019220000133
Почему нет улучшения скорости? в то время как выполнение выполняется параллельно, почему оно по-прежнему занимает время, равное времени, затрачиваемому обоими?
Я попробовал метод Promise.all
для вызова ghostscript через пакет gs4fb npm и преобразования PDF в изображение, и время улучшилось.
Под улучшением времени я подразумеваю разницу общего времени, затрачиваемого методом Promise.all
и вызовом функций по очереди.
inputFile.matchTemplate
не выглядит асинхронным, так как вы этого неawait
делаете. - person Bergi   schedule 26.05.2021