批量创建图像
This commit is contained in:
@@ -30,9 +30,13 @@ type Image struct {
|
|||||||
NumInferenceSteps int `json:"num_inference_steps"` // Number of inference steps (minimum: 1; maximum: 500)
|
NumInferenceSteps int `json:"num_inference_steps"` // Number of inference steps (minimum: 1; maximum: 500)
|
||||||
GuidanceScale float32 `json:"guidance_scale"` // Scale for classifier-free guidance (minimum: 1; maximum: 20)
|
GuidanceScale float32 `json:"guidance_scale"` // Scale for classifier-free guidance (minimum: 1; maximum: 20)
|
||||||
Scheduler string `json:"scheduler"` // (DDIM|K_EULER|DPMSolverMultistep|K_EULER_ANCESTRAL|PNDM|KLMS)
|
Scheduler string `json:"scheduler"` // (DDIM|K_EULER|DPMSolverMultistep|K_EULER_ANCESTRAL|PNDM|KLMS)
|
||||||
Seed int `json:"seed"` // Random seed (minimum: 0; maximum: 2147483647)
|
Seed int `json:"seed"` // 随机种子(minimum: 0; maximum: 2147483647)
|
||||||
FromImage string `json:"from_image"` // Image to start from
|
FromImage int `json:"from_image"` // 来源图片(如果是从图片生成的, 则记录来源图片的ID)
|
||||||
UserID int `json:"user_id"`
|
Task string `json:"task"` // 任务编号(uuid)
|
||||||
|
Status string `json:"status"` // 任务状态(queued|running|finished|failed)
|
||||||
|
Progress int `json:"progress"` // 任务进度(0-100)
|
||||||
|
Public bool `json:"public"` // 是否公开
|
||||||
|
UserID int `json:"user_id"` // 用户ID
|
||||||
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
||||||
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -40,6 +41,61 @@ func ImagesGet(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func ImagesPost(w http.ResponseWriter, r *http.Request) {
|
func ImagesPost(w http.ResponseWriter, r *http.Request) {
|
||||||
models.AccountRead(w, r, func(account *models.Account) {
|
models.AccountRead(w, r, func(account *models.Account) {
|
||||||
|
|
||||||
|
// 通过模型推理生成图像, 为图像标记任务批次
|
||||||
|
if r.Header.Get("Content-Type") == "application/json" || r.Header.Get("Content-Type") == "application/json; charset=utf-8" {
|
||||||
|
|
||||||
|
// 接收模板参数
|
||||||
|
template := &struct {
|
||||||
|
FromImage int `json:"from_image"` // 来源图片(图生图时使用)
|
||||||
|
Prompt string `json:"prompt"` // 提示词
|
||||||
|
NegativePrompt string `json:"negative_prompt"` // 负面提示词
|
||||||
|
NumInferenceSteps int `json:"num_inference_steps"` // 推理步数
|
||||||
|
GuidanceScale float32 `json:"guidance_scale"` // 引导比例
|
||||||
|
Scheduler string `json:"scheduler"` // 调度器
|
||||||
|
Seed int `json:"seed"` // 随机种子(单张图生成时使用)
|
||||||
|
Number int `json:"number"` // 生成数量
|
||||||
|
}{}
|
||||||
|
body, err := ioutil.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Body.Close()
|
||||||
|
if err = json.Unmarshal(body, &template); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 直接创建一组图片
|
||||||
|
task := uuid.New().String()
|
||||||
|
var image_list []models.Image
|
||||||
|
for i := 0; i < template.Number; i++ {
|
||||||
|
var image models.Image
|
||||||
|
image.UserID = account.ID
|
||||||
|
image.Task = task
|
||||||
|
image.Status = "queued"
|
||||||
|
image.FromImage = template.FromImage
|
||||||
|
image.Prompt = template.Prompt
|
||||||
|
image.NegativePrompt = template.NegativePrompt
|
||||||
|
image.NumInferenceSteps = template.NumInferenceSteps
|
||||||
|
image.GuidanceScale = template.GuidanceScale
|
||||||
|
image.Scheduler = template.Scheduler
|
||||||
|
image.Seed = template.Seed
|
||||||
|
image_list = append(image_list, image)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 存储图片信息到数据库
|
||||||
|
if err := configs.ORMDB().Create(&image_list).Error; err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
json.NewEncoder(w).Encode(image_list)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 接收上傳的圖片文件, 僅限一張
|
// 接收上傳的圖片文件, 僅限一張
|
||||||
file, file_header, err := r.FormFile("file")
|
file, file_header, err := r.FormFile("file")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user