目录
Flag功能
基本使用
自定义标记目录
标记选项
图像示例
标记模式
总结
上一篇
Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库,它是 Gradio 的 .NET 移植版本,允许你为机器学习模型、API 或任何 C# 函数快速构建演示或 Web 应用程序,无需任何 JavaScript、CSS 或 Web 开发经验!
Flag功能
你可能已经注意到,在Gradio.Net界面中默认会显示一个"Flag"(标记)按钮。当使用你的演示的用户看到有趣的输出,例如错误或意外的模型行为时,他们可以标记这个输入供你查看。在通过flaggingDir参数指定的目录中,会生成一个CSV文件来记录标记的输入。如果界面涉及文件数据,例如Image和Audio组件,还会创建文件夹来存储这些标记的数据。
基本使用
让我们来看一个简单的计算器示例,展示标记功能的基本使用:
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", title: "简易计算器", description: "这是一个示例计算器,展示标记功能。", flaggingMode: "manual" // 设置为手动标记模式 ); await demo.Launch();运行这个示例后,当你在界面上点击"Flag"按钮时,Gradio.Net会在当前目录下创建一个flagged文件夹,并在其中生成一个logs.csv文件,记录标记的输入和输出。
自定义标记目录
你可以通过flaggingDir参数自定义标记数据的存储目录:
var demo = gr.Interface( fn: Calculator, inputs: new object[] { "number", gr.Radio(choices: new[] { "加", "减", "乘", "除" }), "number" }, outputs: "number", title: "简易计算器", description: "这是一个示例计算器,展示标记功能。", flaggingMode: "manual", flaggingDir: "my_flagged_data" // 自定义标记目录 );这样,标记的数据会存储在my_flagged_data文件夹中,而不是默认的flagged文件夹。
标记选项
如果你希望用户在标记时提供原因,你可以通过flaggingOptions参数传递一个字符串列表。用户在标记时必须选择其中一个字符串,这将作为额外的列保存到CSV文件中。
var demo = gr.Interface( fn: Calculator, inputs: new object[] { "number", gr.Radio(choices: new[] { "加", "减", "乘", "除" }), "number" }, outputs: "number", title: "简易计算器", description: "这是一个示例计算器,展示标记功能。", flaggingMode: "manual", flaggingOptions: new List<string> { "结果错误", "输入异常", "其他原因" } // 标记选项 );图像示例
对于涉及图像等文件类型的界面,Gradio.Net会自动创建文件夹来存储标记的图像文件。让我们来看一个图像示例:
using Gradio.Net; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; string Sepia(string inputImg) { // 加载图像 using var image = SixLabors.ImageSharp.Image.Load<Rgb24>(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", title: "Sepia 滤镜演示", description: "上传图像应用 Sepia 滤镜,并可标记结果。", flaggingMode: "manual" ); await demo.Launch();在这个示例中,当用户标记一个结果时,Gradio.Net会:
在
flagged目录下创建一个logs.csv文件创建
inputImg文件夹存储输入图像创建
output文件夹存储输出图像在CSV文件中记录图像路径
标记模式
Gradio.Net支持三种标记模式,通过flaggingMode参数设置:
"manual":手动标记模式,用户需要点击"Flag"按钮来标记输入
"auto":自动标记模式,每次提交都会自动标记
"never":禁用标记功能,不显示"Flag"按钮
总结
标记功能是Gradio.Net中一个非常有用的特性,它允许你收集和分析用户反馈,以便改进你的模型或应用。你可以自定义标记目录、添加标记选项,并根据需要选择不同的标记模式。
引入地址