微软AI系列 C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度

在C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度。你可以使用.NET中的深度学习库如TensorFlow.NET来加载预训练模型,提取特征,并进行相似度计算。

以下是一个使用TensorFlow.NET的示例:

using System;
using TensorFlow;
using TensorFlow.Image;class Program
{static void Main(string[] args){// 载入模型var model = new ResNet50();// 加载图像var image1 = ImageUtil.LoadTensorFromImageFile("image1.jpg");var image2 = ImageUtil.LoadTensorFromImageFile("image2.jpg");// 提取特征var feature1 = ExtractFeatures(image1, model);var feature2 = ExtractFeatures(image2, model);// 计算相似度var similarityScore = CalculateSimilarity(feature1, feature2);Console.WriteLine("图片相似度: " + similarityScore);}static TFTensor ExtractFeatures(TFTensor image, ResNet50 model){// 预处理图像var processedImage = ImageUtil.ResizeAndCropCenter(image, model.InputHeight, model.InputWidth);processedImage = ImageUtil.Normalize(image, mean: model.Mean, std: model.Std);// 转换图像形状以匹配模型输入var reshapedImage = processedImage.Reshape(new long[] { 1, model.InputHeight, model.InputWidth, 3 });// 获取特征var features = model.Predict(reshapedImage);return features;}static double CalculateSimilarity(TFTensor feature1, TFTensor feature2){// 使用余弦相似度计算特征之间的相似度var similarity = CosineSimilarity(feature1.ToArray<float>(), feature2.ToArray<float>());return similarity;}static double CosineSimilarity(float[] vector1, float[] vector2){double dotProduct = 0.0;double magnitude1 = 0.0;double magnitude2 = 0.0;for (int i = 0; i < vector1.Length; i++){dotProduct += vector1[i] * vector2[i];magnitude1 += Math.Pow(vector1[i], 2);magnitude2 += Math.Pow(vector2[i], 2);}magnitude1 = Math.Sqrt(magnitude1);magnitude2 = Math.Sqrt(magnitude2);return dotProduct / (magnitude1 * magnitude2);}
}

在这个示例中,我们使用了TensorFlow.NET库中的ResNet50模型来提取图像的特征表示。我们首先载入模型,然后加载图片并对其进行预处理,接着提取特征,并最后使用余弦相似度计算图片的相似度。

请确保在项目中包含了TensorFlow.NET的引用,并根据实际情况修改图片的路径以及模型的输入参数。

使用Python实现了同样的逻辑,可以对比 参考

import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input
from sklearn.metrics.pairwise import cosine_similarity# 加载预训练的ResNet50模型
model = ResNet50(weights='imagenet', include_top=False, pooling='avg')# 加载并预处理图像
def preprocess_image(img_path):img = image.load_img(img_path, target_size=(224, 224))x = image.img_to_array(img)x = np.expand_dims(x, axis=0)x = preprocess_input(x)return x# 提取图像的特征向量
def extract_features(img_path, model):img = preprocess_image(img_path)features = model.predict(img)return features.flatten()# 图像路径
image1_path = '/Users/AI/pythonsamples-main/ML/CNN(卷积神经网络)/ImageVector/houge.jpg'
image2_path = '/Users/AI/pythonsamples-main/ML/CNN(卷积神经网络)/ImageVector/zhipiao.jpg'# 提取特征向量
features1 = extract_features(image1_path, model)
features2 = extract_features(image2_path, model)# 计算余弦相似度
similarity = cosine_similarity([features1], [features2])[0][0]
print("相似度:", similarity)

结果:

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

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

相关文章

【源码&教程】基于GAN的动漫头像生成系统

1.研究背景 我们都喜欢动漫角色&#xff0c;并试图创造我们的定制角色。然而&#xff0c;要掌握绘画技巧需要巨大的努力&#xff0c;之后我们首先有能力设计自己的角色。为了弥补这一差距&#xff0c;动画角色的自动生成提供了一个机会&#xff0c;在没有专业技能的情况下引入定…

【测试开发学习流程】MySQL函数运算(中)(下)

前言&#xff1a; 这些天还要搞毕业论文&#xff0c;东西少了点&#xff0c;大家将就看看QWQ 目录 1 MySQL的数据处理函数 1.1 文本处理函数 1.2 日期与时间函数 1.3 数值处理函数 1.4 系统函数 2 聚集运算 2.1 聚集函数 2.2 流程函数 1 MySQL的数据处理函数 MySQL支…

WanAndroid(鸿蒙版)开发的第六篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

HarmonyOS应用开发者高级认证答案

** HarmonyOS应用开发者高级认证 ** 以下是高级认证答案&#xff0c;存在个别选项随机顺序答案&#xff0c;自行辨别 判断题 云函数打包完成后&#xff0c;需要到 AppGallery Connect 创建对应函数的触发器才可以在端侧中调用 错 在 column 和 Row 容器组件中&#xff0c;a…

Nexpose v6.6.242 for Linux Windows - 漏洞扫描

Nexpose v6.6.242 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release Mar 13, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

极客SaaS框架开源包

可以自备 听说后边要出saas去水印小程序 saas短视频去重小程序

数据结构和算法模块——队列(多例子+图文)

一文帮你看懂队列 什么是线性表为什么要学习线性表&#xff0c;它有什么用处和好处&#xff1f;基本概念分类存储结构结构特点 队列为什么要学习队列&#xff1f;基本概念数据结构基本操作 待填坑 什么是线性表 为什么要学习线性表&#xff0c;它有什么用处和好处&#xff1f;…

docker入门(三)—— 安装docker

docker 安装 环境要求 本次使用的是云服务器&#xff0c;版本是 centos&#xff0c;要求版本在3.10以上 [rootiZbp15293q8kgzhur7n6kvZ /]# uname -r 3.10.0-1160.108.1.el7.x86_64 [rootiZbp15293q8kgzhur7n6kvZ /]# cat /etc/os-release NAME"CentOS Linux" VE…

操作系统核心知识点大梳理

计算机结构 现代计算机模型是基于-冯诺依曼计算机模型 计算机在运行时&#xff0c;先从内存中取出第一条指令&#xff0c;通过控制器的译码&#xff0c;按指令的要求&#xff0c;从存储器中取出数据进行指定的运算和逻辑操作等加工&#xff0c;然后再按地址把结果送到内存中去…

Linux环境变量【终】

&#x1f30e;环境变量 文章目录&#xff1a; 环境变量 环境变量的组织方式 创建自己的环境变量       main函数参数       C语言提供的变量与接口 环境变量与本地变量 了解本地变量       取消本地变量和环境变量 环境变量的出处 总结 前言&#xff1a; 上…

Visual Studio 2013 - 高亮设置括号匹配 (方括号)

Visual Studio 2013 - 高亮设置括号匹配 [方括号] 1. 高亮设置 括号匹配 (方括号)References 1. 高亮设置 括号匹配 (方括号) 工具 -> 选项… -> 环境 -> 字体和颜色 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Spring学习记录之依赖注入

问题1&#xff1a; 往一个类中传递数据的方式有哪些呢&#xff0c;其实&#xff0c;只有一种方式&#xff0c;即通过方法&#xff0c;但方法却有多种&#xff0c;一种是我们先前学到的通过set方法&#xff08;普通方法&#xff09;&#xff0c;另一种则是通过构造方法的方式。…

Python爬虫-数据采集和处理

文章目录 数据数据类型 数据分析过程数据采集数据采集源数据采集方法 数据清洗清洗数据数据集成数据转换数据脱敏 数据 《春秋左传集解》云&#xff1a;“事大大其绳&#xff0c;事小小其绳。”体现了早期人类将事情的“大小”这一性质抽象到“绳结大小”这一符号上从而产生数…

【单点知识】基于实例讲解PyTorch中的Transforms类

文章目录 0. 前言1. 基本用法1.1 转换为Tensor1.2 图像大小调整1.3 随机裁剪1.4 中心裁剪1.5 随机翻转1.6 随机旋转1.7 填充1.8 组合变换 2. 进阶用法2.1 归一化2.2 色彩空间转换2.3 颜色抖动2.4 随机仿射2.5 透视变换2.6 自定义变换 0. 前言 按照国际惯例&#xff0c;首先声明…

Day51-Nginx多实例知识与大厂企业级实战

Day51-Nginx多实例知识与大厂企业级实战 1. 什么是nginx多实例&#xff1f;2. 为什么要用多实例&#xff1f;3. 大厂数百个业务项目&#xff0c;如何来管理&#xff1f;4. 大厂上百项目web分用户解决方案4.1 编译nginx环境实践&#xff1a;4.2 zuma实例(利用普通用户权限将不同…

前端项目,个人笔记(二)【Vue-cli - 引入阿里矢量库图标 + 吸顶交互 + setup语法糖】

目录 1、项目中引入阿里矢量库图标 2、实现吸顶交互 3、语法糖--<script setup> 3.1、无需return 3.2、子组件接收父组件的值-props的使用 3.3、注册组件 1、项目中引入阿里矢量库图标 步骤一&#xff1a;进入阿里矢量库官网中&#xff1a;iconfont-阿里巴巴矢量…

教务管理系统(java+mysql+jdbc+Druid+三层架构)

1、项目要求 1.1数据库表描述 设计一个教务管理系统&#xff0c;要求如下&#xff1a; 系统涉及的表有 account表&#xff08;账号表&#xff09; teacher表&#xff08;教师表&#xff09; student表&#xff08;学生表&#xff09; course表 (课程表) score表&#xff08;成…

Python内置对象

Python是一种强大的、动态类型的高级编程语言&#xff0c;其内置对象是构成程序的基础元素。Python的内置对象包括数字、字符串、列表、元组、字典、集合、布尔值和None等&#xff0c;每种对象都有特定的类型和用途。 01 什么是内置对象 这些对象是编程语言的基础构建块&…

STP环路避免实验(思科)

华为设备参考&#xff1a;STP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 Spanning Tree Protocol&#xff08;STP&#xff09;&#xff0c;即生成树协议&#xff0c;是一种数据链路层协议。主要作用是防止二层环路&#xff0c;并自适应网络变化和故障…

Unity2D实现鼠标拖动物体移动(简单好抄)

1.新建脚本&#xff0c;并将脚本拖到你想要拖动的物体上即可 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;public class text : MonoBehaviour {private Vector3 offset;public int x 1;void OnMouseDown(…