pic2vec

Picture-to-vector — Bild-Embeddings aus SQL über tract-onnx (Rust). Bündelt Metas EUPE ViT-T/16; funktioniert mit jedem ONNX-Vision-Modell.

Maintainer: nkwork9999

Installation und Laden

INSTALL pic2vec FROM community;
LOAD pic2vec;

Beispiel

-- Bundled EUPE ViT-T auto-loads on first call - zero setup
SELECT pic_embed('/path/to/image.jpg') AS embedding;
-- Quick "are these the same?" check
SELECT pic_match('/path/to/a.jpg', '/path/to/b.jpg');
-- Spot-the-difference: per-patch similarity
SELECT row, col, sim FROM (
SELECT unnest(pic_diff_patches('/path/to/a.jpg', '/path/to/b.jpg'),
recursive := true)
) WHERE sim < 0.95 ORDER BY sim ASC;

Über pic2vec

pic2vec ist eine Vision-Embedding-Erweiterung für DuckDB auf Basis von Rust+tract-onnx. Das gebündelte EUPE ViT-T/16 (6M Parameter) wird beim ersten Einsatz automatisch geladen, sodass der einfachste Arbeitsablauf keine Einrichtung braucht. Jedes ONNX-Vision-Modell mit NCHW- Eingabe [N, 3, H, W] und einer einzelnen Embedding-Ausgabe funktioniert ebenfalls.

Highlights:

  • Zero-Setup-Embedding: gebündeltes EUPE ViT-T im Erweiterungsbinary
  • Unterschiede finden: pic_diff_patches, pic_diff_ascii, pic_diff_save, pic_diff_heatmap zur räumlichen Änderungskennung
  • Schnelle Duplikaterkennung: 64-Bit-perceptual Hash (pic_phash) mit Hamming-Distanz — 1000× schneller als volles Embedding für Near-Duplicates
  • Kombinierbar mit vss: nach FLOAT[N] casten für HNSW-Indexierung
  • Einzeldatei, statisch gelinkt (keine ONNX-Runtime-dylib nötig)

EUPE-Modellgrößen:

Model Parameters Embed Dim
ViT-T/16 (bundled) 6M 192
ViT-S/16 21M 384
ViT-B/16 86M 768

SQL-Funktionen: Embedding und Inferenz:

  • pic_embed(path[, model]) / pic_embed_blob(blob) / pic_embed_batch(paths)

Vektoroperationen:

  • pic_similarity / pic_distance / pic_inner_product
  • pic_normalize / pic_dim
  • pic_match(a, b[, threshold]) — bool, akzeptiert Pfade oder Vektoren

Unterschiede finden:

  • pic_diff_patches(a, b) → LIST(STRUCT(row, col, sim))
  • pic_diff_ascii(a, b[, threshold]) → VARCHAR (CLI-Gitter)
  • pic_diff_save(a, b, out_a, out_b[, threshold]) → INTEGER (rote Boxen)
  • pic_diff_heatmap(a, b, out_a, out_b) → BOOLEAN (Gradient-Overlay)

Perceptual Hash (schnelle Near-Duplicate-Erkennung):

  • pic_phash(path) → BIGINT (64-Bit-dHash)
  • pic_hamming(a, b) → INTEGER (Hamming-Distanz)
  • pic_dedupe(a, b[, threshold]) → BOOLEAN

Bildmetadaten: pic_image_info(path) → STRUCT(width, height, channels, format)

Modellverwaltung: pic_load_model, pic_load_bundled, pic_download_model, pic_unload_model, pic_list_models, pic_bundled_info, pic_version.

Beispiel: Ähnlichkeitssuche für Bilder

CREATE TABLE imgs AS
SELECT filename, pic_embed(filename) AS vec
FROM glob('/data/images/*.jpg');
SELECT a.filename, b.filename, pic_similarity(a.vec, b.vec) AS sim
FROM imgs a, imgs b WHERE a.filename < b.filename
ORDER BY sim DESC LIMIT 10;

Beispiel: HNSW-Suche über vss (große Datensätze)

INSTALL vss; LOAD vss;
CREATE TABLE imgs (filename VARCHAR, vec FLOAT[192]);
INSERT INTO imgs SELECT filename, pic_embed(filename)::FLOAT[192]
FROM glob('/data/images/*.jpg');
CREATE INDEX vec_idx ON imgs USING HNSW (vec) WITH (metric = 'cosine');
SELECT filename FROM imgs
ORDER BY array_cosine_distance(vec, pic_embed('/query.jpg')::FLOAT[192])
LIMIT 10;

Beispiel: Unterschiede finden

-- Save annotated copies highlighting the differences
SELECT pic_diff_save('/a.jpg', '/b.jpg', '/a_diff.jpg', '/b_diff.jpg', 0.99);
SELECT pic_diff_heatmap('/a.jpg', '/b.jpg', '/a_heat.jpg', '/b_heat.jpg');

Hinzugefügte Funktionen

function_name function_type description comment examples
pic_bundled_info scalar NULL NULL
pic_dedupe scalar NULL NULL
pic_diff_ascii scalar NULL NULL
pic_diff_heatmap scalar NULL NULL
pic_diff_patches scalar NULL NULL
pic_diff_save scalar NULL NULL
pic_dim scalar NULL NULL
pic_distance scalar NULL NULL
pic_download_model scalar NULL NULL
pic_embed scalar NULL NULL
pic_embed_batch scalar NULL NULL
pic_embed_blob scalar NULL NULL
pic_hamming scalar NULL NULL
pic_image_info scalar NULL NULL
pic_inner_product scalar NULL NULL
pic_list_models scalar NULL NULL
pic_load_bundled scalar NULL NULL
pic_load_model scalar NULL NULL
pic_match scalar NULL NULL
pic_normalize scalar NULL NULL
pic_phash scalar NULL NULL
pic_similarity scalar NULL NULL
pic_unload_model scalar NULL NULL
pic_version scalar NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.