0

0

使用.NET和AI进行图像识别:Ollama集成教程

霞舞

霞舞

发布时间:2025-12-22 09:41:02

|

898人浏览过

|

来源于php中文网

原创

在人工智能(AI)领域,图像识别技术日新月异,为各行各业带来了革命性的变革。作为一名.NET开发者,您是否想过如何利用现有的工具和库,构建一个能够识别图像内容的应用程序?本文将为您详细介绍如何使用.NET和Microsoft.Extensions.AI库,并结合Ollama模型,构建一个强大的图像识别应用。我们将深入探讨依赖注入、大型语言模型(LLM)的本地运行,以及如何使用.NET代码与之交互,从而实现高效且可定制的图像识别解决方案。 本文的目标读者是具备一定.NET开发经验,并且对人工智能和图像识别领域有浓厚兴趣的开发者。无论您是想为现有项目添加图像识别功能,还是希望探索AI在.NET平台上的应用,本文都将为您提供有价值的指导和实践经验。通过学习本文,您将能够掌握使用.NET构建AI应用的技能,并为未来的创新项目打下坚实的基础。本文将反复提及 .NET, AI, 图像识别, Microsoft.Extensions.AI库, Ollama, 依赖注入, 大型语言模型, 本地运行 等关键词,以提升SEO效果。

关键要点

利用.NET和Microsoft.Extensions.AI库构建图像识别应用程序。

集成Ollama模型,实现本地化的大型语言模型运行。

理解并应用依赖注入,提高代码的可维护性和可测试性。

掌握使用.NET代码与大型语言模型交互的方法。

探索图像识别在各种实际应用场景中的潜力。

了解如何优化模型性能和识别结果。

.NET AI图像识别技术详解

构建基础.NET控制台应用

首先,我们需要创建一个基础的.net控制台应用程序,作为我们图像识别项目的起点。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用.NET和AI进行图像识别:Ollama集成教程

这个应用将使用Microsoft.Extensions.Hosting库,以便我们可以配置服务和使用依赖注入容器。依赖注入容器允许我们在应用程序的不同部分之间轻松地共享和管理对象,这对于构建可维护和可测试的代码至关重要。

依赖注入的重要性

依赖注入是一种设计模式,它允许我们从组件中分离其依赖项。这有助于提高代码的灵活性、可测试性和可维护性。通过使用依赖注入,我们可以轻松地替换组件的依赖项,而无需修改组件本身的代码。

Microsoft.Extensions.Hosting库

Microsoft.Extensions.Hosting库提供了一种简单而强大的方法来构建和管理.NET应用程序。它提供了一个主机构建器,允许我们配置应用程序的服务、日志记录和配置。

以下是构建基础.NET控制台应用程序的步骤:

  1. 创建一个新的.NET控制台应用程序项目。
  2. 安装Microsoft.Extensions.Hosting NuGet包。
  3. Program.cs文件中,使用主机构建器配置应用程序的服务。
using Microsoft.Extensions.Hosting;

var builder = Host.CreateApplicationBuilder();
var app = builder.Build();

app.Run();

这段代码创建了一个新的主机构建器,并使用它来构建应用程序。然后,它调用app.Run()方法来启动应用程序。

引入Microsoft.Extensions.AI库

接下来,我们需要引入Microsoft.Extensions.AI库,该库提供了一系列用于构建AI应用程序的工具和组件。

使用.NET和AI进行图像识别:Ollama集成教程

请注意,Microsoft.Extensions.AI库目前仍处于预览阶段,因此您需要包含预发布版本才能使用它。此外,还需要安装 Microsoft.Extensions.AI.Ollama库,以便可以和Ollama模型进行交互。

安装Microsoft.Extensions.AI NuGet包

可以通过NuGet包管理器安装该库。在Visual Studio中,右键单击项目,选择“管理NuGet包”,然后搜索“Microsoft.Extensions.AI”并安装。

安装Microsoft.Extensions.AI.Ollama NuGet包

可以使用命令 Install-Package Microsoft.Extensions.AI.Ollama -Version 9.0.0-preview.2.25114.11进行安装

安装完成后,您就可以在应用程序中使用Microsoft.Extensions.AI库了。

集成Ollama大型语言模型

Ollama是一个轻量级的框架,允许我们在本地机器上运行大型语言模型(LLM)。

使用.NET和AI进行图像识别:Ollama集成教程

这对于开发和测试AI应用程序非常有用,因为它无需依赖云服务或远程API。Ollama支持多种LLM,包括Llama 3.3, DeepSeek-R1, Phi-4, Mistral, Gemma 2等。

Ollama的优势

  • 本地运行: 无需依赖云服务,降低延迟和数据隐私风险。
  • 轻量级: 易于安装和配置,资源占用低。
  • 多模型支持: 支持多种LLM,满足不同的应用需求。

Ollama模型选择

Ollama模型库提供了多种模型,包括文本生成、图像识别等。为了进行图像识别,我们需要选择支持视觉(Vision)的模型。在Ollama的模型页面上,您可以找到各种可用的视觉模型。其中,LLaVA是一个流行的选择,它结合了视觉编码器和语言模型,可以理解图像内容并生成描述。

在.NET应用中配置Ollama客户端

在.NET应用中配置Ollama客户端需要以下步骤:

  1. 使用依赖注入容器注册Ollama客户端。
  2. 指定Ollama服务的URI和模型名称。
builder.Services.AddChatClient(new OllamaChatClient(new Uri("http://localhost:11434"), "llava:7b"));

这段代码将Ollama客户端注册到依赖注入容器中,并指定Ollama服务运行在http://localhost:11434,使用的模型是llava:7b

利用 Microsoft.Extensions.AI库 和 Ollama 实现图像识别

通过集成Microsoft.Extensions.AI库和Ollama,我们现在可以开始编写代码,实现图像识别功能。

使用.NET和AI进行图像识别:Ollama集成教程

首先,我们需要创建一个ChatClient实例,然后创建一个包含图像数据和提示的ChatMesssage对象。

以下是实现图像识别的代码示例:

易标AI
易标AI

告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项

下载
var chatClient = app.Services.GetRequiredService();
var message = new ChatMessage(ChatRole.User, "What's in this image?");
message.Contents.Add(new DataContent(File.ReadAllBytes("images/traffic_cam_1.png"), "image/png"));

var response = await chatClient.GetResponseAsync(message);
Console.WriteLine(response.Message.Text);

这段代码首先从依赖注入容器中获取ChatClient实例。然后,它创建一个新的ChatMessage对象,并将提示设置为“What's in this image?”。接下来,它将图像数据添加到ChatMessage对象的内容中,并将媒体类型指定为“image/png”。最后,它调用chatClient.GetResponseAsync(message)方法将消息发送到Ollama模型,并将响应打印到控制台。

利用结构化的prompt获得结构化的LLM反馈

为了获得更有用的结果,我们可以使用结构化的提示来指导LLM的响应。

使用.NET和AI进行图像识别:Ollama集成教程

例如,我们可以要求LLM以JSON格式返回图像中检测到的对象列表。要获得结构化的LLM反馈,您需要定义一个响应的数据结构,并且在Prompt提示LLM按照响应的数据结构生成反馈信息。

为了获得图像的结构化信息,我们可以定义数据结构 TrafficCamResult

public record TrafficCamResult
{
    public string CameraName { get; set; }
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public TrafficStatus Status { get; set; }
    public int NumberOfCars { get; set; }
    public int NumberOfTrucks { get; set; }
    public int NumberOfPedestrians { get; set; }
}
public enum TrafficStatus
{
    Empty,
    Normal,
    Heavy,
    Blocked
}

定义 prompt,并提示LLM按照 TrafficCamResult 的结构返回,在.NET中可以将响应映射为 TrafficCamResult 对象

Extract information from this image from camera {name}.
The image from the camera may be blurry, so take that into account when extracting information.
Pay extra attention to columns of cars and try to accurately count the number of cars.
And pay extra-special attention to pedestrians, as we want to make sure that we spot them.

使用模型对所有图像进行分析

Directory.GetFiles("images", "*.png").ToList().ForEach(filePath =>
{
    var name = Path.GetFileNameWithoutExtension(filePath);
    var message2 = new ChatMessage(ChatRole.User, @"Extract information from this image from camera {name}.
The image from the camera may be blurry, so take that into account when extracting information.
Pay extra attention to columns of cars and try to accurately count the number of cars.
And pay extra-special attention to pedestrians, as we want to make sure that we spot them.");

    message2.Contents.Add(new DataContent(File.ReadAllBytes(filePath), "image/png"));

    TrafficCamResult trafficCamResult = await chatClient.GetResponseAsync(message2);
    Console.WriteLine(trafficCamResult.Result with { CameraName = name });
});

深入应用场景探讨

智能交通管理

利用本文介绍的图像识别技术,我们可以构建智能交通管理系统,从而实现交通流量监控、拥堵预警、事故检测等功能。通过分析摄像头拍摄的图像,系统可以实时获取道路上的车辆数量、类型和速度等信息,并根据这些数据进行交通流量预测和拥堵预警。

使用.NET和AI进行图像识别:Ollama集成教程

此外,系统还可以检测交通事故,并自动向相关部门发出警报,从而提高响应速度和救援效率。

智能交通管理系统可以应用于城市道路、高速公路、桥梁隧道等各种交通场景,为交通管理部门提供决策支持,优化交通资源配置,提高交通运输效率,减少交通事故,改善城市交通状况。

安全监控

图像识别技术在安全监控领域也有着广泛的应用前景。例如,我们可以构建智能监控系统,通过分析监控摄像头拍摄的图像,自动检测异常行为、入侵事件和安全隐患。系统可以识别人脸、物体和行为,并根据预设的规则进行判断和报警。

智能监控系统可以应用于社区、商场、银行、机场等各种安全场景,提高安全防范能力,减少犯罪事件的发生,保障人民群众的生命财产安全。

智慧零售

在零售行业,图像识别技术可以用于构建智慧零售系统,从而实现商品识别、客流分析、顾客行为分析等功能。通过分析摄像头拍摄的图像,系统可以自动识别商品,记录顾客的购买行为,并根据这些数据进行商品推荐和营销活动。

智慧零售系统可以应用于超市、商场、便利店等各种零售场景,提高运营效率,改善顾客体验,增加销售额。

部署和运行本地Ollama

Ollama网站

访问Ollama官方网站(https://ollama.com/)下载并安装适合您操作系统的Ollama版本。 Ollama支持 macOS、Linux 和 Windows,您可以根据您的开发环境选择合适的安装包。

运行 Ollama

安装完成后,打开终端或命令提示符,输入ollama run llava:7b命令来运行LLaVA模型。Ollama将自动下载模型文件并启动服务。

指定不同的LLaVA模型

请务必指定LLaVA 7b模型,因为后续的教程会直接使用,如果您想使用其他模型,请自行修改名称,Ollama网站(https://ollama.com/)也提供了多个不同量级的模型供选择

注意:模型文件较大,下载需要一定时间,请耐心等待。

模型启动成功后,您就可以在.NET应用程序中使用Ollama客户端与之交互了。

Microsoft.Extensions.AI 和 Ollama 的成本考量

Microsoft.Extensions.AI

Microsoft.Extensions.AI 库本身是免费的,因为它是一个开源库,由 Microsoft 提供。您可以免费使用它来构建您的 AI 应用程序,而无需支付任何许可费用。

Ollama

Ollama 也是免费的,因为它是一个开源框架,允许你在本地运行大型语言模型。然而,你需要考虑到运行 Ollama 模型所需的硬件资源。大型语言模型可能需要大量的内存和计算能力,这可能会增加你的硬件成本。

以下是运行 Ollama 模型的一些硬件建议:

  • 内存: 至少 16GB RAM,建议 32GB 或更多。
  • 处理器 具有多个核心的现代处理器。
  • GPU: 具有大量显存的 NVIDIA GPU 可以显著提高性能。

优势与劣势分析

? Pros

充分利用.NET生态系统的强大功能和丰富的库。

利用依赖注入提高代码的可维护性和可测试性。

通过Ollama在本地运行大型语言模型,降低延迟和数据隐私风险。

利用Microsoft.Extensions.AI库简化AI应用程序的开发过程。

? Cons

Microsoft.Extensions.AI库目前仍处于预览阶段,API可能会发生变化。

本地运行大型语言模型需要大量的硬件资源。

Ollama模型的图像识别能力可能不如云服务或远程API提供的模型。

Microsoft.Extensions.AI 和 Ollama 的核心功能

Microsoft.Extensions.AI

以下是Microsoft.Extensions.AI库的一些核心功能:

  • 依赖注入: 提供对依赖注入的支持,使您可以轻松地管理应用程序的依赖项。
  • 配置: 提供对配置的支持,使您可以轻松地配置应用程序的行为。
  • 日志记录: 提供对日志记录的支持,使您可以轻松地跟踪应用程序的执行情况。
  • AI组件: 提供了一系列用于构建AI应用程序的工具和组件,例如聊天客户端和图像识别器。

Ollama

以下是 Ollama 的一些核心功能:

  • 本地运行: 允许你在本地机器上运行大型语言模型,而无需依赖云服务。
  • 轻量级: 易于安装和配置,资源占用低。
  • 多模型支持: 支持多种大型语言模型,包括Llama 3.3, DeepSeek-R1, Phi-4, Mistral, Gemma 2等。
  • 易于使用: 提供简单的命令行界面,使您可以轻松地与大型语言模型进行交互。

Microsoft.Extensions.AI 和 Ollama 的使用案例

Microsoft.Extensions.AI

Microsoft.Extensions.AI库可以用于构建各种AI应用程序,包括:

  • 聊天机器人: 使用聊天客户端构建可以与用户进行自然语言对话的聊天机器人。
  • 图像识别应用程序: 使用图像识别器构建可以识别图像内容的应用程序。
  • 自然语言处理应用程序: 使用自然语言处理组件构建可以分析和理解自然语言文本的应用程序。
  • 情感分析应用程序: 使用情感分析组件构建可以分析文本情感的应用程序。

Ollama

Ollama可以用于各种需要大型语言模型的场景,包括:

  • 文本生成: 使用大型语言模型生成高质量的文本内容。
  • 代码生成: 使用大型语言模型生成代码。
  • 机器翻译: 使用大型语言模型将文本从一种语言翻译成另一种语言。
  • 问答系统: 使用大型语言模型回答用户提出的问题。

常见问题解答

Microsoft.Extensions.AI库是否免费?

是的,Microsoft.Extensions.AI库是免费的,因为它是一个开源库,由 Microsoft 提供。你可以免费使用它来构建你的 AI 应用程序,而无需支付任何许可费用。

Ollama是否免费?

是的,Ollama 也是免费的,因为它是一个开源框架,允许你在本地运行大型语言模型。然而,你需要考虑到运行 Ollama 模型所需的硬件资源。大型语言模型可能需要大量的内存和计算能力,这可能会增加你的硬件成本。

运行Ollama需要什么样的硬件?

运行 Ollama 模型需要以下硬件建议:内存:至少 16GB RAM,建议 32GB 或更多;处理器:具有多个核心的现代处理器;GPU:具有大量显存的 NVIDIA GPU 可以显著提高性能。

如何选择合适的Ollama模型?

在 Ollama 的模型页面上,你可以找到各种可用的模型。为了进行图像识别,你需要选择支持视觉(Vision)的模型。其中,LLaVA是一个流行的选择,它结合了视觉编码器和语言模型,可以理解图像内容并生成描述。

相关问题

如何在.NET中使用OpenAI进行图像识别?

除了Ollama,您还可以使用OpenAI的API进行图像识别。OpenAI提供了一系列强大的图像识别模型,可以实现更高级的功能,例如物体检测、场景理解等。要在.NET中使用OpenAI,您需要安装OpenAI的.NET客户端库,并获取API密钥。然后,您可以使用该库调用OpenAI的API,将图像数据发送到云端进行分析。 需要注意的是,使用OpenAI的API需要支付一定的费用,具体价格取决于您使用的模型和API调用量。此外,由于图像数据需要上传到云端,因此需要考虑到数据隐私和安全性。 // 这只是一个示例,实际代码可能需要进行修改 var openai = new OpenAIAPI("YOUR_API_KEY"); var result = await openai.ImageAnalysis.AnalyzeImageAsync(imageData); Console.WriteLine(result.Description);

如何在.NET中使用Azure认知服务进行图像识别?

Azure认知服务提供了一系列云端AI服务,包括计算机视觉、人脸识别、文本分析等。您可以使用Azure认知服务提供的API,将图像数据发送到云端进行分析。 Azure 认知服务能够更有效的识别图像质量较差的内容。 与 OpenAI 类似,使用 Azure 认知服务也需要支付一定的费用,并考虑到数据隐私和安全性。 // 这只是一个示例,实际代码可能需要进行修改 string endpoint = "YOUR_ENDPOINT"; string key = "YOUR_KEY"; var client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(key)) { Endpoint = endpoint }; using (var stream = File.OpenRead("image.jpg")) { var result = await client.AnalyzeImageInStreamAsync(stream, visualFeatures); Console.WriteLine(JsonConvert.SerializeObject(result)); }

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

534

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

14

2026.01.06

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号