#pragma once #include #include #include "sqlite3\sqlite3.h" #include "sqlite3\sqlite-vec.h" class SQLiteVecManager { private: sqlite3* db; std::string dbName; bool useVecExtension; public: SQLiteVecManager(const std::string& databaseName); ~SQLiteVecManager(); bool initializeDatabase(int vectorDimension); bool addFeatureVector(const std::vector& features, const std::string& imagePath); std::vector> searchSimilarVectors(const std::vector& queryVector, int k = 5); void saveDatabase(); bool loadDatabase(); int getFeatureCount() const; bool isEmpty() const; private: std::string vectorToBlob(const std::vector& vec); std::vector blobToVector(const std::string& blob); float calculateCosineSimilarity(const std::vector& vec1, const std::vector& vec2); float distanceToSimilarity(float distance); };