使用Go SDK调用AI写真的算法服务接口进行模型训练和写真制作。通过SDK,您可以定制LoRA模型,并根据模板制作写真。本文为您介绍使用Go SDK调用接口之前的准备工作以及使用示例。
前提条件
已准备好Go环境。
已准备好5-20张训练图片和1张模板图片,用于模型训练和写真制作。图片格式支持
.jpg
、.jpeg
、.png
等。如果进行单人写真制作,模板图片中包含单张人脸即可。多张训练图片中的人脸属于同一个人。
如果进行多人写真制作,模板图片中需包含多张人脸,且人脸数量与模型训练的model_id数量一致。
请确保图片的尺寸大于512×512像素。
准备工作
环境依赖:Go 1.18版本以上。
Go本地安装SDK:
创建mod
go mod init 项目名
。运行
go get github.com/aliyun/aliyun-pai-aiservice-go-sdk
获取远程代码。在代码中使用
import "github.com/aliyun/aliyun-pai-aiservice-go-sdk"
引入SDK代码。
执行以下代码初始化Client。
使用以下Shell命令,将HOST,AppId和Token写入环境变量。在后续代码中会使用到这三个参数。
export HOST="http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com" export AppId=xxx export Token=xxxxxxxxx
参数
描述
HOST
服务端地址:
http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com
。AppId
开通AI写真后,您可以直接在AI写真页面查看AppId。
Token
开通AI写真后,您可以直接在AI写真页面查看Token。
运行以下代码初始化Client
host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token)
调用代码示例
AI写真是一个资源消耗量较大的服务,主要包括模型训练和写真制作两个环节。模型训练通常需要几分钟的响应时间,而写真制作则只需要数十秒即可完成。AI写真的接口调用流程图如下:
各个接口的请求、响应代码示例和端到端的请求代码示例如下:
核验请求(client.AIGCApi.AigcImageCheck)
请求代码示例如下:
package main import ( "fmt" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) // 检查图片列表 images := []string{"https://train/0.jpg","https://train/1.jpg","https://train/2.jpg","https://train/3.jpg"} response, err := client.AIGCApi.AigcImageCheck(images, "", nil) fmt.Println(response) if err != nil { log.Fatal(err) return } if response.Code != "OK" { log.Fatal("response error:%v", response) return } // 遍历图片检测结果 for _, result := range response.Data.CheckResults { fmt.Printf("code=%d\tfrontal=%v\turl=%s\n", result.Code, result.Frontal, result.Url) } }
参数说明如下:
参数名称
参数说明
类型
images
图片URL list,多个URL使用半角逗号(,)分隔。
[]string
响应结果解析如下
响应返回为一个AIGCImageCheckResponse对象,对象字段如下:
参数名称
参数说明
类型
RequestId
请求流水号。
string
Code
请求状态码,是否完成,OK或者error。
string
Message
请求状态详细信息,成功为success,其他视具体返回内容。
string
Data
返回数据详情。
AIGCImageCheckData
模型发起训练(client.AIGCApi.AigcImagesTrain)
训练sd15
package main import ( "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) images := []string{"https://train/0.jpg","https://train/1.jpg","https://train/2.jpg","https://train/3.jpg"} response, err := client.AIGCApi.AigcImagesTrain(images, "", nil) if err != nil { log.Fatal(err) } // 任务ID jobId := response.Data.JobId modelId := response.Data.ModelId fmt.Println(jobId) jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Message) if err != nil { log.Fatal(err) } for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Result) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } fmt.Println(modelId) }
参数名称
参数说明
类型
images
训练的图片URL列表。
[]string
训练SDXL
SDXL需要首先联系您的商务经理开通服务后,通过指定模型名称来进行使用。
SDXL同时支持人像训练与场景loRA训练。
二者的训练通过configure中的参数指定。
package main import ( "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) images := []string{"https://train/0.jpg","https://train/1.jpg","https://train/2.jpg","https://train/3.jpg"} modelName := "train_xl" configure := make(map[string]interface{}, 10) configure["train_scene_lora_bool"] = false configure["scene_lora_prompts"] = []string{"a photography of a woman with long blonde hair and a white dress", "a photography of a woman in a pink dress posing for a picture", "a photography of a woman in a black dress with a white background", "a photography of a woman with a frilly collar and suspenders", "a photography of a woman with a white dress and a white headpiece"} response, err := client.AIGCApi.AigcImagesTrain(images, modelName, configure) if err != nil { log.Fatal(err) } // 任务ID jobId := response.Data.JobId modelId := response.Data.ModelId fmt.Println(jobId) jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Message) if err != nil { log.Fatal(err) } for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Result) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } fmt.Println(modelId) }
参数名称
参数说明
类型
images
训练的图片URL列表。
[]string
modelName
模型名称,用SDXL需要设置为train_xl。
string
configure
参数配置,默认为nil。
map[string]interface{}
configure内部参数名称
参数说明
类型
是否必须
默认值
取值范围
train_scene_lora_bool
是否训练场景LoRA。
bool
否
False
True, False
scene_lora_prompts
场景LoRA的提示词;
训练场景LoRA必须输入,列表长度与images的URL一致。
[]string
否
[]
无
响应结果解析如下
服务返回的是一个AIGCImageTrainResponse对象。
参数名称
参数说明
类型
RequestId
请求流水号。
string
Code
请求状态码,是否完成,OK或者error。
string
Message
请求状态详细信息,成功为success,其他视具体返回内容。
string
Data
返回数据详情。
AIGCImageTrainData
训练结果查询(client.JobApi.GetAsyncJobWithId)
请求接口示例如下
package main import ( "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) // 任务ID var jobId int32 = xxxxxx for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } }
参数说明
参数名称
参数说明
类型
是否必须
jobId
请求服务时返回的job_id。
int32
是
响应结果解析如下
服务返回的是一个 AsyncJobResponse对象,对象字段如下:
参数名称
参数说明
类型
RequestId
请求流水号。
string
Code
请求状态码,是否完成,OK或者error。
string
Message
请求状态详细信息,成功为success,其他视具体返回内容。
string
Data
返回数据详情。
AsyncJobData
AsyncJobData.Job字段AsyncJobResult字段解析
参数名称
参数说明
类型
State
每张图片核验的结果。
int32
AppId
账户AppId。
string
Message
请求状态详细信息,成功为success,其他视具体返回内容。
string
Result
模型返回结果。
string
写真制作请求
单人写真制作请求接口(client.AIGCApi.AigcImagesCreate)
预测sd15
package main import ( "encoding/base64" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) modelID := "xxxxxxxxxxxxxxx" templateImage := "https://template_case.png" config := make(map[string]interface{}, 10) config["lora_weights"] = 0.9 config["first_denoising_strength"] = 1 config["second_denoising_strength"] = 1 config["more_like_me"] = 1 config["crop_face_preprocess"] = false config["apply_face_fusion_before"] = false config["apply_face_fusion_after"] = false config["color_shift_middle"] = false config["color_shift_last"] = false config["background_restore"] = true response, err := client.AIGCApi.AigcImagesCreate(modelID, image, "", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(response.Data.Image) f, err_2 := os.Create("test.jpg") f.Write(image_decode) if err_2 != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
modelID
LoRA模型名称,需要输入训练获得的model-id。
string
是
templateImage
模板图片的URL路径。
string
是
config
模型返回配置,默认输入nil
map[string]interface{}
是
预测SDXL
SDXL需要首先联系您的商务经理开通服务后,通过指定模型名称来进行使用。
package main import ( "encoding/base64" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) modelID := "xxxxxxxxxxxx" templateImage := "https://template_case.png" modelName := "create_xl" config := make(map[string]interface{}, 10) // config["lora_weights"] = 0.9 // config["first_denoising_strength"] = 1 // config["second_denoising_strength"] = 1 // config["more_like_me"] = 1 // config["crop_face_preprocess"] = false // config["apply_face_fusion_before"] = false // config["apply_face_fusion_after"] = false // config["color_shift_middle"] = false // config["color_shift_last"] = false // config["background_restore"] = true response, err := client.AIGCApi.AigcImagesCreate(modelID, image, modelName, config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(response.Data.Image) f, err_2 := os.Create("test.jpg") f.Write(image_decode) if err_2 != nil { log.Fatal(err) } }
参数名称
类型
参数说明
modelID
string
LoRA模型名称,需要输入训练获得的model_id。当使用ipa_control_only模式时设置为""。
templateImage
string
模板的URL路径。
当使用scene_lora或者prompt生成时设置为"t2i_generate"。
modelName
string
模型名称,使用SDXL则需要设置为create_xl。
config
map[string]interface{}
模型返回配置configure,默认输入None。
多人写真制作请求接口(client.AIGCApi.AigcImagesCreateByMultiModelIds)
package main import ( "encoding/base64" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { // 从环境变量中获得 HOST,AppId,Token 参数 host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) modelIDs := []string{"xxxxxx", "xxxxxx"} templateImage := "https://template_case.png" config := make(map[string]interface{}, 10) config["lora_weights"] = 0.9 config["first_denoising_strength"] = 1 config["second_denoising_strength"] = 1 config["more_like_me"] = 1 config["crop_face_preprocess"] = false config["apply_face_fusion_before"] = false config["apply_face_fusion_after"] = false config["color_shift_middle"] = false config["color_shift_last"] = false config["background_restore"] = true response, err := client.AIGCApi.AigcImagesCreateByMultiModelIds(modelIDs, image, "", config) image_decode, _ := base64.StdEncoding.DecodeString(response.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
modelIds
所有用于生成图片的LoRA模型训练时的model_id。
[]string
是
templateImage
模板的URL路径。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
响应结果解析:
服务返回的是一个 AIGCImageCreateResponse对象,对象字段如下:
参数名称
参数说明
类型
RequestId
请求流水号。
string
Code
请求状态码,是否完成,OK或者error。
string
Message
请求状态详细信息,成功为success,其他视具体返回内容。
string
Data
返回数据详情。
AIGCImageCreateData
data 类型 AIGCImageCreateData的字段说明:
参数名称
参数说明
类型
CostTime
生成花费时间。
Float
Image
图片base64。
String
相关错误码说明
请求服务错误码如下:
HTTP状态码
code
message
说明
400
PARAMETER_ERROR
not found appid
appId填写错误。
400
EXCEEDED_QUOTA_ERROR
exceeded quota
账户调用次数额度用完。
401
PARAMETER_ERROR
sign error
token填写错误。
404
PARAMETER_ERROR
model not found
对应模型服务未部署。
结果查询错误码如下:
HTTP状态码
code
message
说明
462
error
Invalid input data. Please check the input dict.
输入数据解析错误。
462
error
Image not provided. Please check the template_image.
并未提供写真制作的模板图片。
462
error
Prompts get error. Please check the model_id.
检查提供的model_id格式。
462
error
Roop image decord error. Pleace check the user's lora is trained or not.
Roop图像不存在,请检查是否模型是否训练。
462
error
Template image decord error. Please Give a new template.
模板图片解码错误,请给一张新的模板。
462
error
There is not face in template. Please Give a new template.
模板图像不存在人脸,请给一个新的模板。
462
error
Template image process error. Please Give a new template.
模板图片预处理错误,请给一张新的模板。
469
error
First Face Fusion Error, Can't get face in template image.
第一次人脸融合出错。
469
error
First Stable Diffusion Process error. Check the webui status.
第一次Stable Diffusion处理出错。
469
error
Second Face Fusion Error, Can't get face in template image.
第二次人脸融合出错。
469
error
Second Stable Diffusion Process error. Check the webui status.
第二次Stable Diffusion处理出错。
469
error
Please confirm if the number of faces in the template corresponds to the user ID.
请检查所给的user id数量与人脸数量是否相符。
469
error
Third Stable Diffusion Process error. Check the webui status.
背景处理出错,请更换模板。
500
error
Face id image decord error. Pleace check the user's lora is trained or not.
Face id图片解码异常,请检查是否模型是否训练。
端到端流程示例代码
常规链路(SD15)
package main import ( "encoding/base64" "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) images := []string{"https://train/0.jpg","https://train/1.jpg","https://train/2.jpg","https://train/3.jpg"} trainresponse, err := client.AIGCApi.AigcImagesTrain(images, "", nil) if err != nil { log.Fatal(err) } jobId := trainresponse.Data.JobId modelId := trainresponse.Data.ModelId fmt.Println(jobId) jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Message) if err != nil { log.Fatal(err) } for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Result) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } fmt.Println(modelId) templateimage := "https://template_case.png" config := make(map[string]interface{}, 10) config["lora_weights"] = 0.9 config["first_denoising_strength"] = 1 config["second_denoising_strength"] = 1 config["more_like_me"] = 1 config["crop_face_preprocess"] = false config["apply_face_fusion_before"] = false config["apply_face_fusion_after"] = false config["color_shift_middle"] = false config["color_shift_last"] = false config["background_restore"] = true createresponse, err := client.AIGCApi.AigcImagesCreate(modelId, templateimage, "", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(createresponse.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
images
训练的图片URL列表。
[]string
是
templateImage
模板的URL路径。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
常规链路(SDXL)
package main import ( "encoding/base64" "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) images := []string{"https://xxx/0.jpg", "https://xxx/1.jpg", "https://xxx/2.jpg") trainresponse, err := client.AIGCApi.AigcImagesTrain(images, "train_xl", nil) if err != nil { log.Fatal(err) } jobId := trainresponse.Data.JobId modelId := trainresponse.Data.ModelId fmt.Println(jobId) jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Message) if err != nil { log.Fatal(err) } for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Result) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } fmt.Println(modelId) template_image = "https://demo.jpg" config := make(map[string]interface{}, 10) createresponse, err := client.AIGCApi.AigcImagesCreate(modelId, templateimage, "create_xl", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(createresponse.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
images
训练的图片URL列表。
[]string
是
templateImage
模板的URL路径。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
无需训练,通过单参考图制作链路
package main import ( "encoding/base64" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) template_image = "https://demo.jpg" ref_image = "https://reference.jpg" config := make(map[string]interface{}, 10) config["ipa_control_only"] = true config["ipa_weight"] = 0.6 config["ipa_image_path"] = ref_image createresponse, err := client.AIGCApi.AigcImagesCreate("", templateimage, "", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(createresponse.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
template_image
模板的URL路径。
string
是
ref_image
参考图片的URL路径。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
无需模板,通过提示词生成模板制作链路
package main import ( "encoding/base64" "fmt" "log" "os" "time" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) images := []string{"https://xxx/0.jpg", "https://xxx/1.jpg", "https://xxx/2.jpg") trainresponse, err := client.AIGCApi.AigcImagesTrain(images, "", nil) if err != nil { log.Fatal(err) } jobId := trainresponse.Data.JobId modelId := trainresponse.Data.ModelId fmt.Println(jobId) jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Message) if err != nil { log.Fatal(err) } for { jobResponse, err := client.JobApi.GetAsyncJobWithId(jobId) fmt.Println(jobResponse.Data.Job.Result) if err != nil { log.Fatal("get job fail", err) } if jobResponse.Data.Job.State == sdk.JOB_STATE_WAIT { fmt.Println("job running") } else if jobResponse.Data.Job.State == sdk.JOB_STATE_SUCCESS { // job success fmt.Println(jobResponse) fmt.Println("job success") break } else if jobResponse.Data.Job.State == sdk.JOB_STATE_FAILED { log.Fatal("job fail", err) return } time.Sleep(30 * time.Second) } fmt.Println(modelId) template_image = "https://demo.jpg" t2i_prompt := "(portrait:1.5), 1girl, bokeh, bouquet, brown_hair, cloud, flower, hairband, hydrangea, lips, long_hair, outdoors, sunlight, white_flower, white_rose, green sweater, sweater, (cloth:1.0), (best quality), (realistic, photo-realistic:1.3), film photography, minor acne, (portrait:1.1), (indirect lighting), extremely detailed CG unity 8k wallpaper, huge filesize, best quality, realistic, photo-realistic, ultra high res, raw photo, put on makeup" config := make(map[string]interface{}, 10) config["t2i_prompt"] = t2i_prompt createresponse, err := client.AIGCApi.AigcImagesCreate(modelId, templateimage, "", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(createresponse.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
images
训练LoRA的图片列表。
[]string
是
template_image
模板的URL路径。
string
是
t2i_prompt
prompt 提示词。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
无需模板与训练,通过提示词与单参考图生成模板制作链路
package main import ( "encoding/base64" "log" "os" sdk "github.com/aliyun/aliyun-pai-aiservice-go-sdk" ) func main() { host := os.Getenv("Host") appId := os.Getenv("AppId") token := os.Getenv("Token") client := sdk.NewClient(host, appId, token) template_image = "https://demo.jpg" ref_image = "https://reference.jpg" t2i_prompt := "(portrait:1.5), 1girl, bokeh, bouquet, brown_hair, cloud, flower, hairband, hydrangea, lips, long_hair, outdoors, sunlight, white_flower, white_rose, green sweater, sweater, (cloth:1.0), (best quality), (realistic, photo-realistic:1.3), film photography, minor acne, (portrait:1.1), (indirect lighting), extremely detailed CG unity 8k wallpaper, huge filesize, best quality, realistic, photo-realistic, ultra high res, raw photo, put on makeup" config := make(map[string]interface{}, 10) config["ipa_control_only"] = true config["ipa_weight"] = 0.6 config["ipa_image_path"] = ref_image config["t2i_prompt"] = t2i_prompt createresponse, err := client.AIGCApi.AigcImagesCreate("", templateimage, "", config) if err != nil { log.Fatal(err) } image_decode, _ := base64.StdEncoding.DecodeString(createresponse.Data.Image) f, err := os.Create("test.jpg") f.Write(image_decode) if err != nil { log.Fatal(err) } }
参数名称
参数说明
类型
是否必须
ref_image
参考图片的URL路径。
string
是
template_image
模板的URL路径。
string
是
t2i_prompt
prompt 提示词。
string
是
config
模型返回配置,默认输入nil。
map[string]interface{}
是
相关文档
更多详细内容,请参见Go SDK github 开源代码库。