search

Semantic image search using FastEmbed and sqlite-vec

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
import onnxruntime as ort
import pillow_avif
from fastembed import ImageEmbedding, TextEmbedding

print("Loading model")


class CustomInferenceSession(ort.InferenceSession):
    def __init__(
        self,
        path_or_bytes,
        sess_options=None,
        providers=None,
        provider_options=None,
        **kwargs,
    ):
        if provider_options is None:
            provider_options = [{"device_type": "GPU"}]
        super().__init__(
            path_or_bytes,
            sess_options=sess_options,
            providers=providers,
            provider_options=provider_options,
            **kwargs,
        )


if "OpenVINOExecutionProvider" in ort.get_available_providers():
    # Use Intel GPU
    ort.InferenceSession = CustomInferenceSession
    text_model = TextEmbedding(
        model_name="jinaai/jina-clip-v1", providers=["OpenVINOExecutionProvider"]
    )
    image_model = ImageEmbedding(
        model_name="jinaai/jina-clip-v1", providers=["OpenVINOExecutionProvider"]
    )
else:
    text_model = TextEmbedding(model_name="jinaai/jina-clip-v1")
    image_model = ImageEmbedding(model_name="jinaai/jina-clip-v1")


def embed_text(text):
    return next(text_model.embed(text))


def embed_image(image_path):
    return next(image_model.embed(image_path))