Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Поиск изображения в базе данных  [new]
qi_ip
Member

Откуда:
Сообщений: 484
Приветствую!
Подскажите, какую базу и поле какого формата удобнее использовать, чтобы осуществлять поиск по содержимому изображения.

Есть приложение, на вход которого будет подаваться изображение небольшого размера. Нужно будет конвертировать изображение, например, в Base64 (это предположительно) и искать в базе данных есть ли такое изображение: если нет, сохранить в базу данных, если есть - выдать сообщение о существовании.

Спасибо!
3 янв 18, 15:11    [21080178]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Blazkowicz
Member

Откуда:
Сообщений: 24347
Уточните. Если сравнивать по байтам, то задача сводится к сравнению и индексированию двочиных файлов и изображения тут не при чем. Но вы делаете акцент на изображении. Хотите ли вы сравнивать именно то что изображено, а не то что находится в файле?
3 янв 18, 15:17    [21080185]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
qi_ip
Member

Откуда:
Сообщений: 484
Изначальная задача стоит сравнение именно изображений. Но в будущем, может задача видоизменится, все может быть. Если не сложно, можете подсказать для обоих случаев?
Спасибо!
3 янв 18, 17:00    [21080308]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1410
Вообще если речь идёт о поиске части изображения в большем изображении,то задача не тривиальная и базируется на высшей математике (в частности детерминант(определитель) матрицы).
3 янв 18, 17:18    [21080328]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
qi_ip
Member

Откуда:
Сообщений: 484
irbis_al
Вообще если речь идёт о поиске части изображения в большем изображении,то задача не тривиальная и базируется на высшей математике (в частности детерминант(определитель) матрицы).

Нет, сохранятся будет все изображение и нужен поиск в БД по существующим
3 янв 18, 17:33    [21080344]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
azsx
Member

Откуда:
Сообщений: 595
По условию изображение вы кодируете base64, из него вычисляйте хеш, например, sha1 -- этот хеш и храните в БД в виде строки. По этому хешу и ищите. Профит.
3 янв 18, 18:56    [21080468]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Usman
Member

Откуда: من ألماتي
Сообщений: 5599
azsx
sha1
https://ru.wikipedia.org/wiki/SHA-1#Реальный_взлом:_SHAttered_(нахождение_коллизий)
3 янв 18, 19:21    [21080502]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1410
qi_ip
irbis_al
Вообще если речь идёт о поиске части изображения в большем изображении,то задача не тривиальная и базируется на высшей математике (в частности детерминант(определитель) матрицы).

Нет, сохранятся будет все изображение и нужен поиск в БД по существующим

Тогда...согласен с предыдущими ораторами :-) Высчитываем некий хеш и по нему ищем.
(А способы получения этого хэша ...тут на любителя)
Я бы просто высчитал контрольную сумму(сложение всех байт) Количество байт контрольной суммы сами определите.(Так чтоб соблюсти уникальность)..и там посмотрел...нужен ли мне алгоритм хеша посложнее.
3 янв 18, 19:22    [21080504]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
andreykaT
Member

Откуда:
Сообщений: 1112
qi_ip
Изначальная задача стоит сравнение именно изображений. Но в будущем, может задача видоизменится, все может быть. Если не сложно, можете подсказать для обоих случаев?
Спасибо!

если речь идет о изображении как о наборе байтов, то можно сохранять в базе хэши этих байтараев и по хэшам искать как по простому тексту. база любая. хоть скл хоть носкл. т.к. тут по-сути банальный селект по полному содержимому поля.

если же по куску изображения и мы там дальше говорим (не вдаваясь в работу анализаторов) как о наборе байтов, типа содержится ли в таком-то байтаррае вот такой то байтаррай поменьше - то там кмк что-нить из носкл было бы побыстрее. но здесь уже речь о том как вообще оформлен документ изображения, жпег там тиф или че еще. может в жпеге мужик с носом будет один бинарный байтарай, а нос от мужика - другой, который своей частью вообще никак не будет совпадать с полной картинкой мужика с носом )) думаю, на эту тему уже есть скорее всего что-то готовое.
3 янв 18, 19:41    [21080548]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12969
Usman
azsx
sha1
https://ru.wikipedia.org/wiki/SHA-1#Реальный_взлом:_SHAttered_(нахождение_коллизий)


автор
23 февраля 2017 года специалисты из Google и CWI объявили о практическом взломе алгоритма, опубликовав 2 PDF-файла с одинаковой контрольной суммой SHA-1. Это потребовало перебора 9*1018 вариантов, что заняло бы 110 лет на 1 GPU[7]
3 янв 18, 19:55    [21080573]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
mayton
Member

Откуда: loopback
Сообщений: 36634
Вот хорошая статья на хабре была https://habrahabr.ru/post/120562/

Может автору пригодится.
3 янв 18, 23:48    [21080936]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
azsx
Member

Откуда:
Сообщений: 595
Usman, Hett -- каюсь. Я не занимаюсь "ерундой". Для меня коллизия в sha1 -- это по сути нулевая вероятность. Но, если это для ТС критично, можно поступить как google взять sha 256 или ваще 512, чтобы быть круче гугла.
Кстати два вопроса:
1. читали ли вы в вики
автор
Хотя теоретически SHA-1 считается взломанным (количество вычислительных операций сокращено в 280-63 = 131 072 раза), на практике подобный взлом неосуществим, так как займёт пять миллиардов лет.

2. 2^35 = 34_359_738_368. Как бы вы предложили хранить 34 млрд записей с селектом на идентичность и добавлением новых, если ничего не найдено?
4 янв 18, 05:55    [21081164]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
mayton
Member

Откуда: loopback
Сообщений: 36634
"Взлом" SHA-1 это очень громкая фраза. Что за этим стоит? С точки зрения гугла.

Искусственная генерация двух pdf-документов специально нацеленная на
совпадения хешей? Что это доказывает?

Какова информационная ценность этих синтетических документов?

Грозит-ли такая ситуация автору?
4 янв 18, 09:25    [21081220]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 8570
mayton
Грозит-ли такая ситуация автору?
Какая разница - грозит или нет?
SHA1 - устаревший алгоритм хэширования, который надо выводить из эксплуатации и разработки.
Эрго: если SHA1 не является критичным (на другом хэше просто не работает) - не использовать. Dixi.
4 янв 18, 12:31    [21081446]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12969
да что докопались до этого sha1, azsx изначально написал "например, sha1", все остальное зависит от пожеланий автора, может ему и crc32 сойдет, может это курсовой проект.
4 янв 18, 12:55    [21081489]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 8570
Написал бы "например - sha256" - претензий бы не было.
4 янв 18, 13:45    [21081578]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45107
Да без разницы. В любом случае любые хэши используются только для того, чтобы отсечь заведомо несовпадающие данные для уменьшения последующего объёма сравнений.
4 янв 18, 14:37    [21081681]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
azsx
Member

Откуда:
Сообщений: 595
автор
SHA1 - устаревший алгоритм хэширования, который надо выводить из эксплуатации и разработки.

Апогей хайп мышления.
Нет, моё мнение, для задачи вычисления хеша изображений в размерах более чем 32*32*256 -- алгоритма используемого в sha1 достаточно. Риск получить коллизию практически равен нулю. Напомню, что торрент построен на md5 и коллизии встречаются крайне редко (практически никогда).
автор
Написал бы "например - sha256" - претензий бы не было.

Отвечу длинно.
1. К счастью для многих, с таким мышлением как у Вас бывают начальники. Золотые люди, работнику достаточно читать по пол часа вечером хабр и гиктаймс и говорить с начальником о прочитанном. И повышается рейтинг специалиста в глазах руководителя.
2. Как известно в усечённом варианте sha2 коллизии были найдены ещё в 2008 году. Таким образом странно ваше желание продвигать именно этот алгоритм, логичнее продвигать sha3.
3. Например, мне доверили писать софт для марсохода, я использую хеши и меня предупредили, если в наборе хешов будут выявлены коллизии, марсоход сломается, а меня лишат зарплаты на три месяца вперёд, чтоб я понял. Если на чаше весов будет моя зарплата, то я для "надёжности" использую два разных алгоритма хеширования одновременно, например, md5 и sha1. Вкратце, я хочу писать софт для марсохода или потусоваться рядом с кнопкой запускающей ядерную ракету. Ну просто...
4. Последнее. Я весьма слаб в понимании хешей. Ну знаю я, что sha -- это общее название сертифицированных в сша алгоритмов, могу найти их описание, почитать. Но если Вы хотите со мной поговорить об этом, ну его нафиг, я ничо не понимаю в этих математиках.
5 янв 18, 04:54    [21082664]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 8570
Dimitry Sibiryakov
В любом случае любые хэши используются только для того, чтобы отсечь заведомо несовпадающие данные для уменьшения последующего объёма сравнений.
Если бы - "прям здесь" порываются использовать "два разных хэша".
5 янв 18, 05:40    [21082670]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
mayton
Member

Откуда: loopback
Сообщений: 36634
Если хотят использовать алгоритмы быстрого поиска (по сути - кластеризации) то используют хеши.
Если хотят гарантии уникальности ключа - то безут из базы sequence.nextval.

А вообще мне кажется что мы все куда-то не туда зашли и обсуждаем вопросы не релевантные
по отношению к тому что спрашивал автор. Это что? Что болит - о том и говорим?
5 янв 18, 08:42    [21082749]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 33104
Почему бы автору не искать в базе похожие куски музыкальных файлов?
Или ноты в файлах?
Задача странная.
5 янв 18, 10:09    [21082824]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
mayton
Member

Откуда: loopback
Сообщений: 36634
Почему? Задача очень востребованная. Особенно если ввести условие что
С изображением работали. Корректировали цветовые кривые. Делали crop e.t.c
5 янв 18, 10:47    [21082851]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 33104
mayton,
Да)).
Она просто другого порядка. А какого, ТС и сам пока не знает.
5 янв 18, 11:02    [21082863]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Partisan M
Member

Откуда:
Сообщений: 1215
Не понял, что имеется ввиду под поиском изображения.

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

Но возможно, имелся ввиду поиск изображений по сходству. Например, распознавание глупых рож или автомобильных номеров, то это задача решённая, но воспользоваться решением непросто: это тема "машинное обучение". Есть библиотеки и обширная литература, так что программировать надо мало, но трудно понять, как этим пользоваться. В общем, с непривычки отвести решению задачи до полугода. Большая часть времени уйдёт на изучение темы. Непосредственно к базам это не относится, разве что для базы Oracle 12c есть модуль Machine Learning and Advanced Analytics, реализующий популярные алгоритмы машинного обучения, с возможность доступа из PL/SQL. Но пользоваться именно этой библиотекой необязательно.
5 янв 18, 13:20    [21083078]     Ответить | Цитировать Сообщить модератору
 Re: Поиск изображения в базе данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 33104
Partisan M
Не понял, что имеется ввиду под поиском изображения.

Да. Повторюсь, что диапазон ТЗ огромен.
От ID до ИИ.
Поэтому вопрос ТС преждевременный и новогодний))
5 янв 18, 14:29    [21083207]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить