|
как в SQL сделать поиск "по похожести"? | ☑ | ||
---|---|---|---|---|
0
vde69
03.01.20
✎
14:49
|
есть некая фотка нужно найти старые записи в базе данных по ней (даже если она редактировалась),
из файла я могу получить несколько вариантов ключей для поиска в базе, условно можно разделить их по их длине и качеству, например самый грубый ключ будет всего 4х байтный (грубо говоря экран разделили на 4 зоны и усреднили цвет), но картинку можно повернуть несколько раз, или зеркалировать. что-то не соображу как на таком примере мне организовать таблицу в базе для того, что-бы потом запросом искать (делать много колонок для этого короткого ключа не хочется, так как будут ключи 9, 16, 25, 36, 49, 56, 81, 100 байтные, может что-то поменяю, но пока планируется такой вариант) |
|||
1
Волшебник
модератор
03.01.20
✎
14:51
|
SQL умеет только LIKE, больше он ничего не умеет.
Значит нужно иметь столько колонок, сколько потребуется. Для каждой длины ключа своя колонка. |
|||
2
zladenuw
03.01.20
✎
14:53
|
а если 2 колонки. Ключ и ДлинаКлюча ? не ?
|
|||
3
Волшебник
модератор
03.01.20
✎
14:54
|
(2) Тогда это будет отдельная таблица - поисковый индекс
|
|||
4
Garykom
гуру
03.01.20
✎
14:55
|
(0) Только различные варианты хеширования
|
|||
5
tty12
03.01.20
✎
14:57
|
А чем хеширование то не катит?
|
|||
6
vde69
03.01.20
✎
14:57
|
(2) в прицепе это подходит, только будет
ID, key, weight чем длинее ключ тем больше значение веса |
|||
7
vde69
03.01.20
✎
14:59
|
(5) простой хеш обломается после первой перезаписи файла,
я сначала думал в сторону построения дерева индекса, но вариант (2) наверно подойдет |
|||
8
Garykom
гуру
03.01.20
✎
14:59
|
(4)+ simhash лучше всего
https://habr.com/ru/company/superjob/blog/325014/ Все сведется к бинарным строкам, надо будет банально посчитать бинстроку текущего изображения и поискать в sql с минимальным числом битов отличия |
|||
9
zladenuw
03.01.20
✎
15:00
|
(7) а почему обломается ? разве после изменения. он не будет другой ?
|
|||
10
tty12
03.01.20
✎
15:01
|
(7) Эм... CRC? Так помоему называется.
|
|||
11
rphosts
03.01.20
✎
15:02
|
(0) дял частого поиска длинной строки среди множества строки придумали хэш-функцию, возвращающую короткий код. Поиск производится в 4 этапа:
1.Подготовительный: для каждой строки в базе рассчитывается хэш-код и строится по ним индекс. 2.Для строки поиска рассчитывается хэш-код. 3.Ищется строки с таким-же хэш-кодом. 4.Среди найденого на шаге 3 производится точное сравнение |
|||
12
tty12
03.01.20
✎
15:02
|
(7) Рабочий вариант на мой взгляд.
|
|||
13
vde69
03.01.20
✎
15:03
|
(9) читаем (0)
>>>>есть некая фотка нужно найти старые записи в базе данных по ней (даже если она редактировалась) то есть хеш разный, фотку не нашли |
|||
14
rphosts
03.01.20
✎
15:04
|
(13) >даже если она редактировалась
тут 100% найти без потерь и ложных срабатываний не поможет и ИИ |
|||
15
zladenuw
03.01.20
✎
15:04
|
(13) Я думал ты хранишь все версии в бд. а раз только некоторые экземпляры. то не взлетит.
|
|||
16
Волшебник
модератор
03.01.20
✎
15:04
|
(13) Все отсканированные документы будут похожи друг на друга.
|
|||
17
Garykom
гуру
03.01.20
✎
15:09
|
(13) Дык любой https://ru.wikipedia.org/wiki/Locality-sensitive_hashing юзаем и ищем очень похожие фотки.
Понятное дело если редактировалась сильно то там уже нихрена не найти |
|||
18
vde69
03.01.20
✎
15:23
|
я склоняюсь что-то в таком духе https://habr.com/ru/post/55926/
|
|||
19
vde69
03.01.20
✎
15:26
|
и кстати я придумал как побороться с поворотами, надо изначально повернуть изображение под определенное правило (например левый нижний угол самый темный из всех углов) а потом вычислять хеш
|
|||
20
Волшебник
модератор
03.01.20
✎
15:28
|
(18) Прелестно
|
|||
21
rphosts
03.01.20
✎
15:33
|
(19) 2 картинки, вторая - первая чуть повёрнутая... есть вполне хорошие шансы не попасть.
|
|||
22
RomanYS
03.01.20
✎
15:34
|
(18) основное "домашнее" редактирование это кадрирование - и тут не прокатит
|
|||
23
Garykom
гуру
03.01.20
✎
15:40
|
(22) Если для хэша брать только центральный квадратик? Но как позиционировать сдвижку если кадрируют неровно
|
|||
24
vde69
03.01.20
✎
15:42
|
(22) основное домашнее редактирование
поворот, красные глаза, контрастность, цветность кадрирование редко делают |
|||
25
Волшебник
модератор
03.01.20
✎
15:42
|
(24) кадрирование делают в первую очередь
|
|||
26
Garykom
гуру
03.01.20
✎
15:52
|
(24) Знаешь тонкость про метки девайса в каждом снимке?
Возможно там не только id устройства зашивается но и дата время и название файла, надо бы поразбираться с этим. Тогда останется только выделить их и использовать в качестве хэша-идентификатора. |
|||
27
vde69
03.01.20
✎
15:55
|
(26) не надежно... например на сканах старого альбома какие метки будут?
|
|||
28
Garykom
гуру
03.01.20
✎
15:55
|
(27) Думаешь сканер метки не добавляет? Хаха.
|
|||
29
vde69
03.01.20
✎
23:44
|
сделал пилотный вариант (на основе 18, но доработал под поворот и последующий md5 хеш), по первым тестам примерно 30...50% задвоено, что где-то наверно близко, по сколько обычно делается несколько фото подряд.
правда медлено работает... примерно 200 файлов за 5 минут... |
|||
30
Маргарин
04.01.20
✎
01:42
|
(0) Что-то не очень хороший вариант. Изменят яркость или экспозицию картинки хотя бы на 1% в любую сторону, и твой ключ перестанет работать.
|
|||
31
Маргарин
04.01.20
✎
01:47
|
Лучше сделай как в гугл-фото. Там определяется что изображено на фотографии, и ищется по этим наборам признаков. Например если на искомом фото человек сидит на скамейке и сзади проезжает автобус, то через поиск будут найдены все похожие фотографии где тоже сидит человек на скамейке и есть автобус.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |