Gradio.Net 开发指南 -- Interface 类
目录Interface 类Gradio.Net 组件组件属性多个输入和输出组件图像示例示例输入描述性内容Accordion 中的附加输入总结Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库它是 Gradio 的 .NET 移植版本允许你为机器学习模型、API 或任何 C# 函数快速构建演示或 Web 应用程序无需任何 JavaScript、CSS 或 Web 开发经验Interface 类如快速入门中提到的gr.Interface类是 Gradio.Net 中的一个高级抽象让你可以通过简单地指定输入类型和输出类型快速为任何 C# 函数创建演示。让我们重新看一下我们的第一个演示using Gradio.Net; string Greet(string name, double intensity) { return 你好 name ! new string(!, (int)intensity - 1); } var demo gr.Interface( fn: Greet, inputs: new object[] { text, slider }, outputs: new[] { text } ); await demo.Launch();我们看到Interface类使用三个必需参数进行初始化‎fn要包装用户界面 (UI) 的函数‎inputs要使用哪个 Gradio.Net 组件作为输入。组件的数量应与函数中的参数数量匹配‎outputs要使用哪个 Gradio.Net 组件作为输出。组件的数量应与函数的返回值数量匹配在本指南中我们将深入了解gr.Interface以及它可以自定义的各种方式。但在此之前让我们更好地了解一下 Gradio.Net 组件。Gradio.Net 组件Gradio.Net 包含超过 30 个预构建组件可用作演示中的输入或输出。这些组件对应于机器学习和数据科学中的常见数据类型例如gr.Image组件用于处理输入或输出图像gr.Label组件显示分类标签和概率gr.LinePlot组件显示折线图等等。组件属性我们使用了gr.Textbox和gr.Slider的默认版本但如果你想改变 UI 组件的外观或行为怎么办假设你想自定义滑块使其值范围从 1 到 10默认值为 2。并且你想自定义输出文本框 - 你希望它更大并且有一个标签。如果你使用gr.Textbox和gr.Slider的实际类而不是字符串快捷方式你可以通过组件属性访问更多的自定义功能。using Gradio.Net; string Greet(string name, double intensity) { return 你好 name ! new string(!, (int)intensity); } var demo gr.Interface( fn: Greet, inputs: new object[] { text, gr.Slider(value: 2, minimum: 1, maximum: 10, step: 1) }, outputs: new[] { gr.Textbox(label: 问候语, lines: 3) } ); await demo.Launch();多个输入和输出组件假设你有一个更复杂的函数具有多个输入和输出。在下面的示例中我们定义一个函数它接受一个字符串、一个布尔值和一个数字并返回一个字符串和一个数字。using Gradio.Net; (string, decimal) Greet(string name, bool isMorning, decimal temperature) { string salutation isMorning ? 早上好 : 晚上好; string greeting ${salutation} {name}。今天的温度是 {temperature} 华氏度; decimal celsius Math.Round((temperature - 32) * 5 / 9, 2); return (greeting, celsius); } var demo gr.Interface( fn: Greet, inputs: new object[] { text, checkbox, gr.Slider(minimum: 0, maximum: 100) }, outputs: new object[] { text, number } ); await demo.Launch();正如inputs列表中的每个组件按顺序对应函数的一个参数一样outputs列表中的每个组件也按顺序对应函数返回的一个值。图像示例Gradio.Net 支持多种类型的组件例如Image、DataFrame、Video或Label。让我们尝试一个图像到图像的函数来感受一下这些using Gradio.Net; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; string Sepia(string inputImg) { // 加载图像 using var image SixLabors.ImageSharp.Image.LoadRgb24(inputImg); // 应用 sepia 滤镜 for (int y 0; y image.Height; y) { for (int x 0; x image.Width; x) { var pixel image[x, y]; // Sepia 滤镜矩阵 int tr (int)(0.393 * pixel.R 0.769 * pixel.G 0.189 * pixel.B); int tg (int)(0.349 * pixel.R 0.686 * pixel.G 0.168 * pixel.B); int tb (int)(0.272 * pixel.R 0.534 * pixel.G 0.131 * pixel.B); // 确保值在有效范围内 pixel.R (byte)Math.Min(255, tr); pixel.G (byte)Math.Min(255, tg); pixel.B (byte)Math.Min(255, tb); image[x, y] pixel; } } // 保存处理后的图像 string outputPath Path.Combine(Path.GetTempPath(), $sepia_{Guid.NewGuid()}.png); image.Save(outputPath); return outputPath; } var demo gr.Interface( fn: Sepia, inputs: gr.Image(), outputs: image ); await demo.Launch();当使用Image组件作为输入时你的函数将接收图像文件的路径。在上面的例子中我们使用 ImageSharp 库来处理图像。我们返回处理后图像的文件路径。示例输入你可以提供示例数据用户可以轻松加载到Interface中。这有助于演示模型期望的输入类型并提供一种与模型一起探索数据集的方法。要加载示例数据你可以为 Interface 构造函数的examples参数提供一个嵌套列表。外部列表中的每个子列表代表一个数据样本子列表中的每个元素代表每个输入组件的一个输入。using Gradio.Net; decimal Calculator(decimal num1, string operation, decimal num2) { if (operation 加) { return num1 num2; } else if (operation 减) { return num1 - num2; } else if (operation 乘) { return num1 * num2; } else if (operation 除) { if (num2 0) { throw new Exception(不能除以零); } return num1 / num2; } return 0; } var demo gr.Interface( fn: Calculator, inputs: new object[] { number, gr.Radio(choices: new[] { 加, 减, 乘, 除 }), number }, outputs: number, examples: new object[] { new object[] { 45, 加, 3 }, new object[] { 3.14, 除, 2 }, new object[] { 144, 乘, 2.5 }, new object[] { 0, 减, 1.2 } }, title: 简易计算器, description: 这是一个示例计算器。 ); await demo.Launch();你可以将大型数据集加载到示例中以通过 Gradio.Net 浏览数据集并与之交互。描述性内容在前面的示例中你可能注意到Interface构造函数中的title和description参数它们帮助用户理解你的应用程序。Interface构造函数中有三个参数用于指定此内容应放置在何处‎title接受文本可以显示在界面的最顶部也会成为页面标题‎description接受文本、Markdown 或 HTML并将其放置在标题下方‎article也接受文本、Markdown 或 HTML并将其放置在界面下方另一个有用的参数是label它存在于每个Component中。这会修改每个Component顶部的标签文本。你还可以在表单元素如Textbox或Radio中添加info参数以提供有关其使用的更多信息。gr.Number(label: 年龄, info: 以年为单位必须大于 0)Accordion 中的附加输入如果你的预测函数接受许多输入你可能希望将其中一些隐藏在折叠的 accordion 中以避免使 UI 混乱。Interface类接受一个additionalInputs参数它类似于inputs但此处包含的任何输入组件默认情况下都不可见。用户必须点击 accordion 才能显示这些组件。附加输入按顺序传递到预测函数中在标准输入之后。你可以使用可选的additionalInputsAccordion参数自定义 accordion 的外观该参数接受一个字符串在这种情况下它成为 accordion 的标签或一个gr.Accordion()类的实例例如这可以让你控制 accordion 默认是打开还是关闭。这里是一个例子using Gradio.Net; (string, string) GenerateFakeImage(string prompt, int seed, string initialImage null) { return ($使用种子{seed}, https://dummyimage.com/300/09f.png); } var demo gr.Interface( fn: GenerateFakeImage, inputs: new object[] { textbox }, outputs: new object[] { textbox, image }, additionalInputs: new object[] { gr.Slider(minimum: 0, maximum: 1000), image } ); await demo.Launch();总结Interface类为任何 C# 函数快速创建演示提供了一种简单而强大的方法。通过正确的组件组合和配置你可以创建适合你的机器学习模型或数据处理函数的精美 Web 界面。下一篇引入地址

相关新闻

Gradio.Net 开发指南 -- Flag功能

Gradio.Net 开发指南 -- Flag功能

目录 Flag功能 基本使用 自定义标记目录 标记选项 图像示例 标记模式 总结 上一篇 Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库,它是 Gradio 的 .NET 移植版本,允许你为机器学习模型、API 或任何 C# 函数快速构…

2026/8/19 6:26:57 阅读更多 →
AI量化中医诊断:从多模态数据到可解释模型

AI量化中医诊断:从多模态数据到可解释模型

1. 项目背景与核心思路三年前我在北京同仁堂跟诊时,发现老中医把脉问诊的每个动作都暗含量化标准。比如"脉弦数"对应着每分钟90次以上的脉搏,"舌苔厚腻"意味着舌面覆盖物超过0.5mm。这个发现让我萌生了用AI建模中医诊断过程的想法。…

2026/8/18 4:24:11 阅读更多 →
视觉Transformer寄存器机制解析与工程实践

视觉Transformer寄存器机制解析与工程实践

1. 视觉Transformer中的寄存器现象解析在2023年9月发布的ICLR论文《Vision Transformers Need Registers》中,Meta AI研究团队揭示了一个被长期忽视的视觉Transformer(ViT)特性:模型会自发地将某些背景区域的token转化为"寄存…

2026/8/18 7:17:51 阅读更多 →

最新新闻

实测英文降ai的有效方法!轻松降低文章ai率(附多款工具对比)

实测英文降ai的有效方法!轻松降低文章ai率(附多款工具对比)

不少人自己辛辛苦苦写的文章,送到Turnitin一看,居然大片大片飘蓝,ddl一旦逼近就特别焦虑。 很多人病急乱投医,到处搜怎么查 ai 率免费英文、ai 率查看英文免费、英文降低 ai 率免费,可试过不少平台后才发现&#xff0…

2026/8/19 7:23:08 阅读更多 →
基于KV260的裸金属4K流媒体开发实战:2025.2环境搭建与视频捕获

基于KV260的裸金属4K流媒体开发实战:2025.2环境搭建与视频捕获

1. 项目缘起:为什么要在KV260上折腾裸金属4K流?如果你手头有一块赛灵思的KV260视觉AI入门套件,并且已经用它跑过一些基于PetaLinux或Vitis AI的官方参考设计,那你大概率已经体验过它作为“智能摄像头”或“边缘推理盒子”的便捷性…

2026/8/19 7:23:08 阅读更多 →
嵌入式开发中JSON的应用:从核心价值到cJSON实战解析

嵌入式开发中JSON的应用:从核心价值到cJSON实战解析

1. 从零开始:嵌入式开发者为何绕不开JSON如果你是一名嵌入式开发者,最近在捣鼓一个智能家居的传感器节点,或者一个工业数据采集器,当你需要把设备采集到的温度、湿度、状态码发送到云端服务器时,你第一个想到的数据格式…

2026/8/19 7:23:08 阅读更多 →
自制SWD调试适配器:从协议原理到PCB设计的硬件实战

自制SWD调试适配器:从协议原理到PCB设计的硬件实战

1. 项目缘起:为什么我们需要一个自制的SWD适配器?如果你玩过几块STM32的开发板,手头大概率会有一个ST-Link或者DAP-Link这样的调试器。它们通过一根USB线连接电脑,另一头通过几根杜邦线连接到开发板的SWD接口上,看起来…

2026/8/19 7:23:08 阅读更多 →
RT-Thread事件集在iCore3双核平台的移植与应用实践

RT-Thread事件集在iCore3双核平台的移植与应用实践

1. 项目背景与核心价值最近在搞一个基于iCore3双核心板的项目,这板子挺有意思,ARM和FPGA集成在一块,资源挺足。项目里有个需求,ARM(STM32F4)这边需要和FPGA那边进行一些异步的状态同步和条件等待&#xff0…

2026/8/19 7:22:07 阅读更多 →
基于CC1352与TinyML的TI-RSLK机器人离线语音控制实践

基于CC1352与TinyML的TI-RSLK机器人离线语音控制实践

1. 项目缘起:当机器人学会“听”话几年前,当我第一次接触TI的Robotics System Learning Kit(RSLK)时,就被它模块化的设计和丰富的传感器套件所吸引。它确实是一个绝佳的机器人学习平台,但当时我就在想&…

2026/8/19 7:22:07 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →