searching similar images in postgresql · pgcon 2013: searching similar images in postgresql,...

14
PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 1 Searching similar images in PostgreSQL Alexander Korotkov NRNU MEPhI

Upload: others

Post on 21-Feb-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 1

Searching similar images in PostgreSQL

Alexander KorotkovNRNU MEPhI

Page 2: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 2

It works!

Page 3: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 3

It works!

Page 4: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 4

It works!

Page 5: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 5

It works!

Page 6: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 6

It works!

Page 7: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 7

It works!

Page 8: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 8

It works!

Page 9: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 9

Sometimes not so perfect...

Page 10: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10

How it works?

CREATE TABLE pat AS (SELECT

id,shuffle_pattern(pattern) AS pattern, pattern2signature(pattern) AS signature

FROM (SELECT

id, jpeg2pattern(data) AS pattern

FROM image

) x );CREATE INDEX pat_signature_idx ON pat USING gist (signature);CREATE INDEX pat_id_idx ON pat(id);

Process images and create an index.

Page 11: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 11

How it works?

SELECTid,smlr

FROM(

SELECTid,pattern <-> (SELECT pattern FROM pat WHERE id = :id) AS smlr

FROM patWHERE id <> :idORDER BY

signature <-> (SELECT signature FROM pat WHERE id = :id)LIMIT 100

) xORDER BY x.smlr ASC LIMIT 10

Search similar images

Page 12: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 12

Query plan

Limit (cost=35.56..35.58 rows=10 width=8) (actual time=23.421..23.423 rows=10 loops=1) -> Sort (cost=35.56..35.81 rows=100 width=8) (actual time=23.420..23.422 rows=10 loops=1) Sort Key: x.smlr Sort Method: top-N heapsort Memory: 25kB -> Subquery Scan on x (cost=16.54..33.40 rows=100 width=8) (actual time=13.649..23.376 rows=100 loops=1) -> Limit (cost=16.54..32.40 rows=100 width=100) (actual time=13.648..23.346 rows=100 loops=1) InitPlan 1 (returns $0) -> Index Scan using pat_id_idx on pat (cost=0.00..8.27 rows=1 width=32) (actual time=0.015..0.016 rows=1 loops=1) Index Cond: (id = 1) InitPlan 2 (returns $1) -> Index Scan using pat_id_idx on pat (cost=0.00..8.27 rows=1 width=64) (actual time=0.039..0.040 rows=1 loops=1) Index Cond: (id = 1) -> Index Scan using pat_signature_idx on pat (cost=0.00..6354.33 rows=40081 width=100) (actual time=13.647..23.329 rows=100 loops=1) Order By: (signature <-> $1) Filter: (id <> 1) Rows Removed by Filter: 1 Total runtime: 23.465 ms (40082 images)

Page 13: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 13

Internals(bycicle invention)

B&W and resizeHaar wavelet pa

tter n2sig

natu

r eshuffle_patternjpeg2pattern

Page 14: Searching similar images in PostgreSQL · PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 10 How it works? CREATE TABLE pat AS (SELECT id, shuffle_pattern(pattern)

PGCon 2013: Searching similar images in PostgreSQL, Alexander Korotkov 14

Thank you for attention!