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 setupSELECT pic_embed('/path/to/image.jpg') AS embedding;
-- Quick "are these the same?" checkSELECT pic_match('/path/to/a.jpg', '/path/to/b.jpg');
-- Spot-the-difference: per-patch similaritySELECT 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_heatmapzur 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_productpic_normalize/pic_dimpic_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 ASSELECT filename, pic_embed(filename) AS vecFROM glob('/data/images/*.jpg');
SELECT a.filename, b.filename, pic_similarity(a.vec, b.vec) AS simFROM imgs a, imgs b WHERE a.filename < b.filenameORDER 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 imgsORDER BY array_cosine_distance(vec, pic_embed('/query.jpg')::FLOAT[192])LIMIT 10;Beispiel: Unterschiede finden
-- Save annotated copies highlighting the differencesSELECT 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.