动手学Avalonia:基于硅基流动构建一个文生图应用(一)

文生图

文生图,全称“文字生成图像”(Text-to-Image),是一种AI技术,能够根据给定的文本描述生成相应的图像。这种技术利用深度学习模型,如生成对抗网络(GANs)或变换器(Transformers),来理解和解析文本中的语义信息,并将其转化为视觉表现。文生图可以用于创意设计、图像编辑、虚拟现实、游戏开发等多个领域,为用户提供了从文字到图像的创造性转换工具。例如,用户可以输入“一只蓝色的猫坐在月球上”,AI将尝试生成符合描述的图像。

img

Stable Diffusion

Stable Diffusion 是一种潜在的文本到图像扩散模型。得益于 Stability AI 慷慨的计算资源捐赠以及 LAION 的支持,我们得以使用 LAION-5B 数据库的一个子集中的 512x512 图像来训练一个潜在扩散模型。与 Google 的 Imagen 类似,此模型使用一个冻结的 CLIP ViT-L/14 文本编码器来根据文本提示对模型进行条件设定。该模型拥有 8.6 亿参数的 UNet 和 1.23 亿参数的文本编码器,相对轻量,只需要至少 10GB VRAM 的 GPU 即可运行。详情请参阅以下部分和模型卡片。

简而言之,Stable Diffusion 是一个由 Stability AI 和 LAION 支持的项目,使用 LAION-5B 数据库中的图像训练而成。它借鉴了 Google Imagen 的设计理念,使用 CLIP ViT-L/14 文本编码器处理文本提示,具有相对较小的模型大小,使得它在普通 GPU 上即可运行。

Stable Diffusion 3 Medium 是目前 Stable Diffusion 3 系列中最新、最先进的文本到图像 AI 模型,包含 20 亿个参数。它擅长照片级真实感,处理复杂的提示并生成清晰的文本。

stable-diffusion-3-medium模型开源地址:https://huggingface.co/stabilityai/stable-diffusion-3-medium

image-20240710190246175

硅基流动

由于我目前硬件资源不行无法本地运行stable-diffusion-3-medium,但又想试试文生图模型,因此现阶段可以采用调用api的方式来使用。硅基流动平台目前提供了stable-diffusion-3的调用接口,并且限时免费,因为选择调用硅基流动提供的api。

image-20240710190603718

Avalonia

基于Avalonia可以使用C#+Xaml构建跨平台应用。

本项目或许不具备太大的实用价值,权且当做学习Avalonia的一个练手项目。

项目架构:

image-20240710193030861

在使用Avalonia的模板创建项目之后,更改项目为.net8,并升级一下包,这样可能会避免一些报错。

由于发现不支持中文提示词,因此还是使用SemanticKerenl基于LLM将中文提示词翻译为英文提示词,然后根据英文提示词绘图。

观察一下桌面端的依赖项,桌面端引用了核心项目,使用的包是Avalonia.Desktop。

image-20240710193917453

桌面端实现效果如下所示:

image-20240710191656219

观察一下Android端的依赖项,Android端也引用了核心项目,使用的包是Avalonnia.Android与Xamarin.AndroidX.Core.SplashScreen。

image-20240710194047415

Android端调试可以选择模拟器与物理机。

image-20240710193601252

避坑

选择物理机调试时要打开开发者模式,打开USB调试,最重要的是要允许通过USB安装,我之前没有设置这个,就会遇到一个被用户取消的错误提示。

Android端不知道为什么SenmanticKernel对提示模板不起作用如下所示:

现在只能自己写英文提示词绘图。

Android端的实现效果如下:

以上就是动手学Avalonia:基于硅基流动构建一个文生图应用(一)的内容,希望对使用C#构建跨平台应用感兴趣的小伙伴有所帮助。

原创作者: mingupupu 转载于: https://www.cnblogs.com/mingupupu/p/18294916
Avalonia是一个跨平台的XAML框架,用于构建桌面应用程序。在Avalonia中创建一个按钮并为其添加时间功能,通常涉及以下步骤: 1. 首先,你需要在Avalonia项目中定义一个按钮。这可以在XAML文件中完成,通过添加一个Button元素,并为其设置相应的属性。 2. 接下来,你需要为按钮编写事件处理代码。通常,这涉及到为按钮的Click事件编写一个事件处理器。在这个处理器中,你可以执行需要在按钮点击时完成的任务,比如显示当前时间。 3. 如果你想要在按钮上显示时间,你可以使用一个绑定到按钮内容的Label,并在按钮点击事件处理器中更新这个Label显示的时间。 下面是一个简单的示例代码,展示了如何在Avalonia应用中实现一个点击后显示当前时间的按钮: ```xml <!-- 这是XAML代码 --> <Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaApp.MainWindow" Title="时间按钮示例"> <StackPanel> <Button x:Name="timeButton" Content="显示时间" Click="TimeButton_OnClick"/> <TextBlock x:Name="timeTextBlock"/> </StackPanel> </Window> ``` ```csharp // 这是C#代码 using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using System; namespace AvaloniaApp { public class MainWindow : Window { public MainWindow() { InitializeComponent(); #if DEBUG this.AttachDevTools(); #endif } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } private void TimeButton_OnClick(object sender, Avalonia.Interactivity.RoutedEventArgs e) { timeTextBlock.Text = DateTime.Now.ToString(); } } } ``` 在这个例子中,当按钮被点击时,`TimeButton_OnClick`方法会被调用,然后将当前时间格式化后赋值给`timeTextBlock`的`Text`属性,这样就可以在界面上显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值