使用Go和OpenAI進行AI圖像生成
目錄
- 簡介
- OpenAI的API如何運作
- 使用指令列了解圖片API
- 使用Go程式碼生成AI圖像
- 選擇圖片生成的設定
- 呼叫OpenAI的圖像端點
- 實例:生成一個像素藝術的Boss Monster
- 遊玩圖像API的其他選項
- 使用Go語言寫程式碼生成圖像
- 總結
使用OpenAI的圖像API生成AI圖像
🔸 簡介
你可能已經聽說過DALL-E,這是一個基於文本輸入生成圖像的AI。嗨,我是Hoani Bryson。今天我們將寫一個使用OpenAI的圖像API生成AI圖像的Go程式。首先,我們將快速了解一下OpenAI的API如何運作,然後從命令列了解圖像API,最後我們將撰寫一個使用AI圖像生成的Go程式。
🔸 OpenAI的API如何運作
OpenAI的API是基於無狀態的HTTP請求。你只需要發送一個請求,然後獲得一個JSON格式的回應。要使用這些API,你需要提供身份驗證令牌。在openAI.com上創建帳戶並生成令牌。請注意,這些API並非免費,但在註冊時,你會獲得一些試用信用額。
🔸 使用指令列了解圖片API
首先,我們將使用CURL呼叫OpenAI的圖像端點。首先在這裡設定一個環境變數,名為"OPENAI_KEY",並將其設置為之前所生成的金鑰。然後,我們呼叫"https://api.openai.com/v1/images/generations"進行端點呼叫。但是,我們需要提供一些其他的信息,例如一個標頭"Content-Type: application/json"以及一個包含我們的API金鑰的標頭"Authorization: Bearer 'OPENAI_KEY'"。接下來,我們將添加一些JSON,指定我們要生成的圖像類型。這裡我們使用了一個提示"Prompt": "a boss monster in Pixel Art",然後我們還可以選擇圖像大小。預設大小為1024x1024,但我們將選擇256x256像素。至此,這就是我們目前需要指定的內容。最後,我們將使用python json.tool將輸出進行格式化。
🔸 實例:生成一個像素藝術的Boss Monster
唔,我使用了錯誤的端點,應該是"images"而不是"image"。經過一番调試後,我們得到了一個生成圖像的URL。我們可以點擊它並打開它,然後就可以看到我們生成的像素藝術Boss Monster圖像。需要注意的一點是,我要求的是256x256的圖像,實際上只有三個可選的尺寸:256、512和1024。通常,當你試圖生成你喜歡的提示時,最好使用較小的尺寸,因為這樣可以節省你的信用額度。這是一個更大的Boss Monster。你可以看到,它更大,但像素藝術的質量並沒有變好。另一個酷的是,你可以設置n為2,它將生成兩張不同的圖像。- 在這個圖像中,有一個很酷的長杖,看起來有點像《塞爾達傳說》中的 Ganon。這是我們的另一個選擇,似乎是某種惡魔。在API中有幾個不同的選項,你可以自由嘗試它們。
🔸 使用Go程式碼生成AI圖像
現在,我們要寫一些Go程式碼,讓使用者輸入並生成圖像。我們首先使用"go mod init"創建一個新的項目,然後我們要建立一個main.go文件,指定Package為"main",然後創建一個main函數。我們首先定義一個client,這是一個openai.NewClient,需要一個身份驗證金鑰作為參數。我們將使用環境變數"OPENAIKEY"。接下來,我們將獲取一些用戶輸入。我們使用bufio.NewScanner來創建一個scanner,並將標準輸入作為參數傳入。然後,我們使用格式化來打印控制台,要求用戶添加一個提示。接下來,我們使用s.Scan來檢查掃描是否成功,如果失敗,則會引發錯誤。如果掃描成功,我們現在有了一些用戶輸入,我們可以繼續進行請求。我們使用openai.ImageRequest創建了一個請求,其中包含一些選項,其中prompt是其中之一,我們將使用s.Text。然後,我們將選擇512x512的大小,你也可以選擇響應格式。這是我之前在cURL中沒有做的。在cURL中,我們使用URL響應格式,所以你會得到一個URL,你可以點擊該URL並獲取圖像。但在這種情況下,我實際上希望獲得圖像的字節。我不想再發起另一個HTTP請求,只為了單獨下載圖像。因此,我們將使用openai.B64JSON。基本上,所有的字節都將以Base64編碼。但在繼續之前,我們需要實際上進行API呼叫。我們可以使用我們在上面定義的client來創建一個圖像。response error等於client.CreateImage(context.Background(), req)。context.Background()表示我們不需要取消這個請求,然後我們需要傳入我們剛剛創建的請求。我會說,如果error不等於nil,那麼我們應該引發錯誤。在我們的回應中,我們將有一些需要解碼的Base64數據。我們使用base64.StdEncoding.DecodeString對字串解碼。然後,如果error不等於nil,我們應該再次引發錯誤。否則,我們現在有了圖像的字節。最後一步是將其寫入文件。我們使用os.Create來創建一個名為"image.png"的文件,如果error不等於nil,則再次引發錯誤。否則,我們可以使用defer f.Close確保在打開文件後及時關閉它。現在,我們有了一個可以將這些字節寫入的東西。最後一步是說,, error = f.Write並將這些字節作為參數傳入。如果error不等於nil,則我們將引發錯誤。現在,我們可以保存並跳轉到終端機中,然後運行它,生成一個圖像。我將運行"go run"並輸入"a fox in a temple",然後等待幾秒,即可獲得結果。如果我們查看生成的圖像,它會是一隻在寺廟裡的狐狸。非常酷。你可以嘗試其他提示,比如說"an owl on a roof",這就是在一個屋頂上的貓頭鷹。OpenAI有許多很酷的AI工具,我們可以將其集成到我們的程式中。我是Hoani Bryson,祝大家生成愉快的圖像,回頭見。(歡樂的背景音樂)
🔸 重點摘要
- DALL-E是一個AI,可以基於文本輸入生成圖像。
- OpenAI的API是基於無狀態的HTTP請求。
- 想要使用API,需要提供身份驗證令牌。
- 可以使用CURL或Go程式碼來呼叫OpenAI的圖像API。
- 在呼叫API時,需要提供一些額外的信息,例如API金鑰、輸入的JSON和圖像大小。
- 生成的圖像可以在瀏覽器中打開和查看。
- 要使用Go程式碼生成圖像,需要在程式中調用OpenAI的圖像API並處理回應。
🔸 常見問題與解答
Q: OpenAI的API是免費的嗎?
A: 不是,OpenAI的API並不是免費的,但你在註冊時會獲得一些試用信用額。
Q: 我該使用哪個圖像大小?
A: OpenAI的圖像API提供三種選擇:256x256、512x512和1024x1024。通常情況下,較小的分辨率會更節省信用額度。
Q: 我如何從生成的URL中下載圖像?
A: OpenAI的圖像API生成的URL可以點擊並在瀏覽器中打開。在打開的URL中,你可以右鍵並保存圖像。
Q: 我可以生成多個不同的圖像嗎?
A: 是的,你可以在API的JSON請求中設置n的值來生成多個不同的圖像。
資源: