реклама
разместить

Как найти дубликаты изображений с использованием Computer Vision?

В данной статье мы расскажем, как можно выявить FRAUD сотрудников, проведя анализ полученных изображений документов, приложенных к авансовым отчетам, с помощью Computer Vision.

В нашем случае FRAUDом является прикрепление одного и того же проездного билета к разным авансовым отчетам и, соответственно, необоснованное получение повторной оплаты компенсации за проезд. Задача состоит в том, чтобы найти идентичные изображения среди 6,6 тыс. файлов.

Для начала импортируем необходимые модули.

import cv2 import pdf2image import os from tqdm import tqdm import pandas as pd

Для сравнения изображений используем хэширование с помощью нижеприведенной функции вычисления хэша. Так как в обрабатываемом массиве встречаются файлы в формате pdf, мы использовали конвертацию в формат png с помощью библиотеки poppler

#Функция вычисления хэша class ImageHash(): PATH_TO_POPPLER = 'prog\\poppler-0.68.0\\bin' @classmethod def make_hash(self, threshold_image, img_size): #Рассчитаем хэш _hash="" for x in range(img_size): for y in range(img_size): val=threshold_image[x,y] if val==255: _hash=_hash+"1" else: _hash=_hash+"0" return _hash @classmethod def calc_image_hash(self, FileName, img_size=800): if FileName[-3:].lower() == 'pdf': #Обработчик для pdf файлов image_pdf = pdf2image.convert_from_path(FileName, poppler_path=self.PATH_TO_POPPLER, fmt='png', dpi=200, output_folder='temp', output_file='temp')[0] image = cv2.imread(image_pdf.filename) #Прочитаем картинку image_pdf.close() else: image = cv2.imread(FileName) #Прочитаем картинку resized = cv2.resize(image, (img_size, img_size), interpolation = cv2.INTER_AREA) #Изменяем размер gray_image = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) #Переведем в черно-белый формат avg=gray_image.mean() #Среднее значение пикселя ret, threshold_image = cv2.threshold(gray_image, avg, 255, 0) #Бинаризация по порогу return self.make_hash(threshold_image=threshold_image, img_size=img_size)

Далее используем функцию для определения точности совпадения изображений, насколько они похожи.

@classmethod def compare_hash(self, hash1, hash2): l=len(hash1) i=0 count=0 while i<l: if hash1[i]!=hash2[i]: count=count+1 i=i+1 return count

Рассмотрим работу кода на примере. Возьмем 4 файла с изображениями билетов.

Рис.1 Файл Bilet 1 в формате pdf
Рис.1 Файл Bilet 1 в формате pdf
Рис.2 Файл Bilet 2 в формате pdf.
Рис.2 Файл Bilet 2 в формате pdf.
Рис.3 Файл Bilet 3 в формате png.
Рис.3 Файл Bilet 3 в формате png.
Рис.4 Файл Bilet 4 в формате jpg
Рис.4 Файл Bilet 4 в формате jpg

Считываем файлы и рассчитываем хэш для каждого изображения, а также задаем единый размер 800х800 пикселей.

%%time if __name__ == '__main__': file_hash = dict() for file in tqdm(Read_Files.read_files('img2019')): if file not in list(file_hash.keys()): try: file_hash[file] = ImageHash.calc_image_hash(FileName="img2019/" + file, img_size=800) except: file_hash[file] = 'error'

Сравниваем полученный хэш каждого изображения и рассчитываем процент совпадения с первым изображением.

hash1 = df['hash'][0] df['compare_hash'] = '' for ix in tqdm(df.index): hash2 = df['hash'][ix] df['compare_hash'][ix] = 100-100*ImageHash.compare_hash(hash1,hash2)/(800*800)

В данном случае объем обрабатываемых изображений небольшой, поэтому для наглядности нам достаточно сравнить все рассчитанные хэши с хэшем первого изображения («hash1»). Таким образом, мы получаем следующий результат:

Как найти дубликаты изображений с использованием Computer Vision?

Из полученных данных видно, что хэши файлов «Bilet 1» и «Bilet 2» абсолютно одинаковы – совпадение 100%. Хэш файла «Bilet 3» не совпадает всего на 0,32%, что говорит о том, что изображение совсем немного отличается, что и мы видим визуально на картинке. Хэш файла «Bilet 4» отличается на 30,5%, то есть разница существенна, поэтому мы можем сделать вывод, что изображения не идентичны. Таким образом, с помощью рассчитанных hash можно распознать идентичные изображения.

Применение Machine Learning и Computer Vision позволяет сократить обработку большого количества электронных документов в сжатые сроки. В результате выполнения данного кода были получены номера авансовых отчетов, к которым в качестве подтверждающих документов сотрудники приложили идентичные сканы документов.

22
реклама
разместить
Начать дискуссию
«Тим К. — сердцевина яблочка»: глава Apple снялся в рекламе «Разделения» — сериал выходит на Apple TV+

Топ-менеджер «разделился» в проморолике ко второму сезону одного из хитов стриминга.

33
22
реклама
разместить
Meta* инвестирует $60-65 млрд в 2025 году в ИИ и центры обработки данных

Компания присоединилась к другим разработчикам, объявившим о крупных инвестициях в ИИ, отмечает Reuters.

1111
22
LG получила контроль в стартапе Bear Robotics — производителе роботов-официантов с ИИ

Он войдёт в подразделение робототехники LG.

2222
66
22
11
Разошлёт письма, закажет билеты и развернёт приложение: какие задачи пользователи дают новому ИИ-агенту от OpenAI

Собрали первые примеры и наблюдения.

2020
77
22
11
Молодцы... Сами же открыли ящик Пандоры. Все же понимают. к чему это приведёт. Интернет можно хоронить. Профили в соц. сетях, отзывы на картах, покупки и отзывы на маркетплейсах, сами товары и их описание, фото, комментарии, обсуждения, вопросы, музыка, фильмы, видео, фото, новости, статьи — всё это будет генерировать нейросеть. А люди всё это будут жрать. И никто не разберётся, нейросеть это сгенерировала или человек. Да и у вас просто не будет возможности разобраться: с учётом скорости генерации 99.9999% контента будет сгенерировано нейросетью. Весь интернет превратится с одну большую свалку. Всё это закончится либо уничтожением интернета в привычном формате, либо уже вход в интернет по паспорту или биометрии. Чтобы сразу было понятно, что вошёл настоящий человек. Нифига мне такое будущее не нравится.
Таиланд вернёт миграционную карту для иностранных туристов

С 1 мая 2025 года для въезда нужно будет заполнять онлайн-форму TM6.

Somchai Poomlard 
2424
44
11
FutureToday: «Яндекс» снова во главе рейтинга лучших работодателей по версии российских студентов, в десятку попали две иностранные фирмы

Но за год позиции почти не изменились.

FutureToday: «Яндекс» снова во главе рейтинга лучших работодателей по версии российских студентов, в десятку попали две иностранные фирмы
1111
77
66
66
33
11
Этот опрос я надеюсь был не в браузере Яндекса?
Виталик Бутерин: «Политизированные токены — это инструмент для неограниченного подкупа власти»

Такое мнение сооснователь Ethereum высказал в ответ на рассуждения о недобросовестных схемах в криптоотрасли.

Бутерин. Источник фото: Bloomberg
2020
1212
11
видок у него еще тот
Никогда не сдавайте автомобили посуточно курьерам! Мой печальный опыт.
***
1212
55
22
[]