Определить похожие изображения в папке на основе изображения со сканера

У меня есть вопрос, который я не могу понять, я не знаю, с чего начать. Я использую следующие технологии: React Native (мобильное приложение), а бэкэнд-приложение построено с помощью Node Js.

Что я пытаюсь сделать, так это то, что пользователь фотографирует продукт, с помощью этого мобильного приложения подпись сохраняется в каталоге на сервере, скажем, [image_phone], мне удалось сделать эту часть , на На сервере у меня также есть каталог [app_images] , где у меня есть изображения продуктов с определенным именем.

Что я хочу сделать, так это создать функцию, которая будет возвращать из папки [app_images] все изображения, похожие на то, которое пользователь загрузил в папку [image_phone].

Что я пытался с этим сделать:

  1. Следуя учебнику в Интернете, я попытался решить эту проблему, используя следующие модули. [джимп, пиксельматч, 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, чтобы сделать своего рода приложение для распознавания изображений, что-то вроде распознавания лиц.

Есть ли у вас идеи, как решить эту проблему, если вы сталкивались с ней раньше.

0 ответов

Другие вопросы по тегам