Using Azure OpenAI Service to generate images with DALL-E in .NET
Tags: ai, dotnet, openai, csharp
Published: 2024-02-01 16:32:22

Hey, there! In this tutorial, we'll see how to call an Azure OpenAI Service DALL-E model to generate new images from C#.

### **Required data from Azure:**

**Key and endpoint** - We can find this information in the _Keys and endpoint_ section in our Azure OpenAI Service resource.

![Azure Resource - Key and endpoint](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69imthhsiryevbq7sjq7.jpg)

**Deployment name** - This would be the instance of the model to use. In this case, we can go to the Azure OpenAI Service studio, and in the _Deployments_ section specify a new one:

![Azure OpenAI Service - Deployments](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69zgsegd8see03zz5r5b.jpg)

### **Azure OpenAI client library for .NET**

Azure OpenAI client library for .NET is an adaptation of OpenAI's REST APIs that provides an idiomatic interface and rich integration with the rest of the Azure SDK ecosystem. 

This library will allow us to use the GPT model from C#.

NuGet package: [Azure.AI.OpenAI](https://www.nuget.org/packages/Azure.AI.OpenAI)

### **Code in C#**

With the NuGet package installed, this is a C# class that will allow us to generate new image using a specified prompt: 

```csharp
using Azure;
using Azure.AI.OpenAI;

namespace GenerativeAI;

public class AzureOpenAIDALLE
{
    const string key = "YOUR_KEY";
    const string endpoint = "https://YOUR_RESOURCE_NAME.openai.azure.com/";
    const string deploymentOrModelName = "YOUR_DEPLOYMENT";

    public async Task<string> GetContent(string prompt)
    {
        var client = new OpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));

        var imageGenerationOptions = new ImageGenerationOptions
        {
            Prompt = prompt,
            DeploymentName = deploymentOrModelName,
            Size = new ImageSize("1024x1024"),
            ImageCount = 1
        };

        var response = await client.GetImageGenerationsAsync(imageGenerationOptions);
        return response.Value.Data[0].Url.AbsoluteUri;
    }
}
```
Example:

```csharp
var dalle = new AzureOpenAIDALLE();

var dallePrompt = "Generate a featured image about Thanksgiving dishes";
Console.WriteLine($"{await dalle.GetContent(dallePrompt)}");
```

![Image generated result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7n086n8dbhb4pq60e4ik.jpg)

## **Thanks for reading!**

If you have any questions or ideas in mind, it'll be a pleasure to be able to be in communication with you, and together exchange knowledge with each other.

**Additional Resources:**

- [Generative AI with Azure OpenAI (DALL-E Overview)](https://dev.to/esdanielgomez/generative-ai-with-azure-openai-dall-e-overview-2pji)
- [Azure OpenAI client library for .NET](https://learn.microsoft.com/en-us/dotnet/api/overview/azure/ai.openai-readme?view=azure-dotnet-preview&WT.mc_id=DT-MVP-5004317)
- [Microsoft Azure AI Fundamentals: Generative AI](https://learn.microsoft.com/en-us/training/paths/introduction-generative-ai/?WT.mc_id=DT-MVP-5004317). 

Contact: 
[X](https://twitter.com/esDanielGomez) / [LinkedIn](https://www.linkedin.com/in/esdanielgomez) - [esdanielgomez.com](https://esdanielgomez.com/)