Semantic Kernel:图片向量化

news/2025/3/4 6:34:47/文章来源:https://www.cnblogs.com/axzxs2001/p/18746101

  虽然本节与SK无关,但都是基于AI,所以暂且放在这个系统中

  Azure AI 视觉的多模式嵌入 API 可以将图像和文本转换为向量,也就是一种数字化的表示方式。这种技术可以让我们实现基于向量的图片搜索功能。通过结合这个 API 和 pgvector(PostgreSQL 中的向量库),我们可以让图片变得可搜索,甚至支持用文字来找图片。

使用PostgreSQL作为向量化库

桂素伟,公众号:桂迹Semantic Kernel:使用PostgreSQL作为向量化库

  多模式嵌入是指把图像转换成可以捕捉其特征和内容的向量。这个向量表示能和文本搜索使用的向量兼容,意味着你可以用图像和文本在同一个“空间”里做搜索匹配。

  传统的图像搜索通常依赖于从图像中提取的特征,比如标签、标记或图像描述符,再通过这些特征来比较图片相似度。但向量相似性搜索相比传统的关键字搜索有很大优势。它能更好地理解图片和文字的相似性,成为现代内容搜索的关键技术。

下面是用C#实现的实体类和Text和Image向量化方法:

public class VectorResult
{public double[] Vector { get; set; }public string ModelVersion { get; set; }
}

text和iamge向量化方法

async Task<VectorResult> VectorizeText(string text)
{using (var client = new HttpClient()){client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);var requestUrl = endpoint + "computervision/retrieval:vectorizeText?api-version=2024-02-01&model-version=2023-04-15";var content = new StringContent("{\"text\":\"" + text + "\"}");content.Headers.ContentType = new MediaTypeHeaderValue("application/json");var response = await client.PostAsync(requestUrl, content);var result = await response.Content.ReadAsStringAsync();return JsonSerializer.Deserialize<VectorResult>(result, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });}
}
async Task<VectorResult> VectorizeImageAsync(string imageUrl)
{  using (var client = new HttpClient()){        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);var requestUrl = endpoint + "computervision/retrieval:vectorizeImage?api-version=2024-02-01&model-version=2023-04-15";var content = new StringContent("{\"url\":\"" + imageUrl + "\"}");content.Headers.ContentType = new MediaTypeHeaderValue("application/json");var response = await client.PostAsync(requestUrl, content);var result = await response.Content.ReadAsStringAsync();return JsonSerializer.Deserialize<VectorResult>(result, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });}
}

下面用向量化数据保存和查询对应向量数据:

数据库实体类:

class DataVector
{public int Id { get; set; }public string Name { get; set; } public double[] Embedding { get; set; }
}

向数据写入的方法:

void InsertImageVector(DataVector imageVector)
{using (IDbConnection db = new NpgsqlConnection(File.ReadAllText("C://GPT/just-agi-db.txt"))){string sqlQuery = @"INSERT INTO public.imagevector (name, embedding) VALUES (@Name, @Embedding) RETURNING id;"var parameters = new{Name = imageVector.Name,Embedding = imageVector.Embedding };var id = db.ExecuteScalar<int>(sqlQuery, parameters); imageVector.Id = id; }
}

C#向量余弦相似度查

double GetCosineSimilarity(double[] vector1, double[] vector2)
{double dotProduct = 0;int length = Math.Min(vector1.Length, vector2.Length);for (int i = 0; i < length; i++){dotProduct += vector1[i] * vector2[i];}var magnitude1 = Math.Sqrt(vector1.Select(x => x * x).Sum());var magnitude2 = Math.Sqrt(vector2.Select(x => x * x).Sum());return dotProduct / (magnitude1 * magnitude2);
}

用SQL实现向量余弦相似度查

IEnumerable<QueryVectorResult> QueryImageVector(double[] imageVector)
{using (IDbConnection db = new NpgsqlConnection(File.ReadAllText("C://GPT/just-agi-db.txt"))){string sqlQuery = "select id,name,1-(cast(@embedding as vector) <=> embedding) as result from public.imagevector ";return db.Query<QueryVectorResult>(sqlQuery, new { embedding = imageVector });}
}

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892207.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

miniconda创建虚拟环境后vscode使用conda时提示无法将“conda”项识别——附使用conda运行python项目简单教程

前提:miniconda已经加入到环境变量 vscode找到setting输入shell: windows改成cmd,重启vscode就好了 跑python项目需要对应的python版本和依赖包,使用anaconda管理python环境是个很好的选择,但是不需要跑深度学习大数据这种比较大的项目或者模型使用miniconda是个不错的选…

Semantic Kernel:SK中的Function

Semantic Kernel中的Functions被设计为可被动态调用的“插件”,用于处理某些特定的操作。例如,一个Function可以是用于获取天气信息的API请求,或者是用于计算复杂数学表达式的函数。在SK中,Functions通常分为以下两种类型:本地函数和语义函数。 Native Functions(本地函数…

寻觅Notepad2e

起因 这天,正当我兴致勃勃地编写新的博客时,想要打开windows的notepad,结果居然发现有个奇怪的东西,还占在最优匹配上,还好我看了一眼名字没有回车直接打开 我倒要看看是哪个国产流氓软件(注:刻板印象)给我偷偷装上的新notepad。哦,原来是TortoiseGit啊,误会国产软件…

【Flutter】 Getx动态路由管理方案

根组件配置应用入口配置:使用 GetMaterialApp 作为应用的根组件,它是 MaterialApp 的增强版本,提供了路由管理等额外功能。初始路由设置:通过 initialRoute 参数指定了应用启动时加载的初始页面为 Routes.homePage,这通常是一个字符串常量,定义在 routes.dart 文件中。路…

《数据结构(C语言版)(第3版)》勘误

第142页,如图,“i+1(1≤i≤p)为所指结点的度”,这句话看不懂。p是个指针,i是个序号,怎么它们还有数量大小关系呢? 我认为这里有误,实际上应该是:对于InsertChild:i必须满足1≤i≤p所指结点的度+1。 对于DeleteChild:i必须满足1≤i≤p所指结点的度。即“p所指结点的度…

2019-PTA模拟赛-L1-1 帅到没朋友

L1-1输入样例1: 3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 8 55555 44444 10000 88888 22222 11111 23333 88888输出样例1: 10000 88888 23333输入样例2: 3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 4 55555 44444 22222 11111输…

.NET9让指标更纯正

Metrics为程序健康运行提供了保驾护航,但过多的指标又会为问题调查,大屏展示,以及基础日志存储带来更多的负担,特别对一些几乎没有意义的指示,比如健康检查的请求指标。.NET 9 引入了一个新功能,允许在某些端点和请求上选择不采集HTTP 指标记录。你可以通过以下方法排除某…

Semantic Kernel:文转图

SK也对应了文生图的功能,本文中分别使用的是GPT的DALLE 2和DALLE 3来生成图版,虽然不如专业的文生图那么专业,但提示词到位,在一些场景中还是可用的。项目引用的是当前最新的SK包,1.18.0-rc:<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><…

Semantic Kernel:图识文

多模态是每个LLM具有的能力,图片又是最常见的信息载体,GPT对图片的识别也很早就有了,随着GPT版本的迭代,效果越来越好。SK也是在很多就适配了图识文,只不过最近版本才支持本地图片的上传。(有点晚) 图片场景识别:using Microsoft.SemanticKernel.ChatCompletion; using…

002.Gitlab基础使用

gitlab基础使用 设置语言 gitlab社区版同样支持直接配置为简体中文,可能适配率暂不支持100% 。 点击头像,Preferences——>Preferences——>Localization 。 Language设置为简体中文,save changes。 使用介绍 gitlab的基础应用主要包括项目创建、组管理、issue等功能。…

【PHP安全】无参数命令执行学习

免责声明: 由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!文章作者:先知社区(Atkx) 文章来源:https://xz.aliyun.com/ne…

分享4款.NET开源、免费、实用的商城系统

前言 今天大姚给大家分享4款.NET开源、免费、实用的商城系统,希望可以帮助到有商城系统开发需求的同学。 nopCommerce nopCommerce是一个.NET开源功能丰富、免费、灵活且可定制的开源电子商务解决方案(大家假如有商城需求可以直接使用该项目进行二次开发,省时省力) ,具备商城…