Определить похожие изображения в папке на основе изображения со сканера
У меня есть вопрос, который я не могу понять, я не знаю, с чего начать. Я использую следующие технологии: React Native (мобильное приложение), а бэкэнд-приложение построено с помощью Node Js.
Что я пытаюсь сделать, так это то, что пользователь фотографирует продукт, с помощью этого мобильного приложения подпись сохраняется в каталоге на сервере, скажем, [image_phone], мне удалось сделать эту часть , на На сервере у меня также есть каталог [app_images] , где у меня есть изображения продуктов с определенным именем.
Что я хочу сделать, так это создать функцию, которая будет возвращать из папки [app_images] все изображения, похожие на то, которое пользователь загрузил в папку [image_phone].
Что я пытался с этим сделать:
- Следуя учебнику в Интернете, я попытался решить эту проблему, используя следующие модули. [джимп, пиксельматч, pngjs]
Код:
const Jimp = require('jimp');
const PNG = require('pngjs').PNG;
const pixelmatch = require('pixelmatch');
exports.compareImage = catchAsync(async(req,res,next)=>{
const originalFile = imageRoot+'/imagine3.png';
const compareFile = compareRoot+'/Screenshot_72.png';
const createBufferImage = async (url) => {
return new Promise(async (resolve, reject) => {
await Jimp.read(url, async (err, image) => {
if (err) {
console.log(`eroare la citirea imagini Jimp: ${err}`);
reject(err);
}
image.resize(400, 400);
return image.getBuffer(jimp.MIME_PNG, (err, buffer) => {
if (err) {
console.log(`eroare convertire url in buffer: ${err}`);
reject(err);
}
resolve(buffer);
});
});
});
};
const compareImageApp = async (
capture,
app_image
) => {
try {
console.log('> Start compare');
const img1Buffer = await createBufferImage(capture);
const img2Buffer = await createBufferImage(app_image);
const img1 = PNG.sync.read(img1Buffer);
const img2 = PNG.sync.read(img2Buffer);
const { width, height } = img1;
const diff = new PNG({ width, height });
const difference = pixelmatch(
img1.data,
img2.data,
diff.data,
width,
height,
{
threshold: 0,
}
);
const compatibility = 100 - (difference * 100) / (width * height);
console.log(`${difference} diferenta pixel`);
console.log(`Compatibilitate: ${compatibility}%`);
console.log('< Misiune completa');
return compatibility;
} catch (error) {
console.log(`Eroare la compararea imaginilor: ${error}`);
throw error;
}
};
compareImageApp(originalFile,
compareFile
)
res.status(200).json({
status:'succes'
})
})
Результат:
Но точности толком нет, есть изображения, которые совсем не похожи друг на друга, но мне это дает точность более 50%.
2) Я пытался решить эту проблему с помощью другого модуля https://www.npmjs.com/package/rembrandt , но такой же проблемы с точностью не существует.
Сейчас я пытаюсь решить эту проблему с помощью tensorFlow js, чтобы сделать своего рода приложение для распознавания изображений, что-то вроде распознавания лиц.
Есть ли у вас идеи, как решить эту проблему, если вы сталкивались с ней раньше.