创建图像存储目录
This commit is contained in:
209
models/Model.go
209
models/Model.go
@@ -49,6 +49,13 @@ type Model struct {
|
|||||||
func init() {
|
func init() {
|
||||||
configs.ORMDB().AutoMigrate(&Model{})
|
configs.ORMDB().AutoMigrate(&Model{})
|
||||||
|
|
||||||
|
// 检查 images 目录是否存在, 不存在则创建
|
||||||
|
if _, err := os.Stat("data/images"); err != nil {
|
||||||
|
if err := os.MkdirAll("data/images", 0777); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 处理推理任务
|
// 处理推理任务
|
||||||
//go func() {
|
//go func() {
|
||||||
// for {
|
// for {
|
||||||
@@ -63,120 +70,120 @@ func (model *Model) Inference(image_list []Image, callback func()) {
|
|||||||
log.Println(image_list)
|
log.Println(image_list)
|
||||||
|
|
||||||
// 模型未部署到推理機
|
// 模型未部署到推理機
|
||||||
if model.ServerID != "" {
|
if model.ServerID == "" {
|
||||||
//log.Println("模型未部署到推理機, 开始部署模型")
|
//log.Println("模型未部署到推理機, 开始部署模型")
|
||||||
log.Println("模型已部署到推理機, 开始推理模型")
|
log.Println("模型已部署到推理機, 开始推理模型")
|
||||||
|
|
||||||
var server Server
|
var server Server
|
||||||
if err := configs.ORMDB().Where("models LIKE ?", "%"+model.Name+"%").Take(&server).Error; err != nil {
|
server.IP = "106.15.192.42"
|
||||||
log.Println(err)
|
server.Port = 7860
|
||||||
// 如果没有则寻找空闲服务器
|
//if err := configs.ORMDB().Where("models LIKE ?", "%"+model.Name+"%").Take(&server).Error; err != nil {
|
||||||
// 如果没有空闲则创建新服务器
|
// log.Println(err)
|
||||||
// 取一台空闲的推理机上传并切换到此模型
|
// // 如果没有则寻找空闲服务器
|
||||||
// 新建一台推理机上传并切换到此模型
|
// // 如果没有空闲则创建新服务器
|
||||||
}
|
// // 取一台空闲的推理机上传并切换到此模型
|
||||||
|
// // 新建一台推理机上传并切换到此模型
|
||||||
|
//}
|
||||||
|
|
||||||
// 执行生成任务
|
// 执行生成任务
|
||||||
if model.Image == "" {
|
if model.Image == "" {
|
||||||
var data = struct {
|
var data = struct {
|
||||||
EnableHr bool `json:"enable_hr"`
|
//EnableHr bool `json:"enable_hr"`
|
||||||
DenoisingStrength int `json:"denoising_strength"`
|
//DenoisingStrength int `json:"denoising_strength"`
|
||||||
FirstphaseWidth int `json:"firstphase_width"`
|
//FirstphaseWidth int `json:"firstphase_width"`
|
||||||
FirstphaseHeight int `json:"firstphase_height"`
|
//FirstphaseHeight int `json:"firstphase_height"`
|
||||||
HrScale int `json:"hr_scale"`
|
//HrScale int `json:"hr_scale"`
|
||||||
HrUpscaler string `json:"hr_upscaler"`
|
//HrUpscaler string `json:"hr_upscaler"`
|
||||||
HrSecondPassSteps int `json:"hr_second_pass_steps"`
|
//HrSecondPassSteps int `json:"hr_second_pass_steps"`
|
||||||
HrResizeX int `json:"hr_resize_x"`
|
//HrResizeX int `json:"hr_resize_x"`
|
||||||
HrResizeY int `json:"hr_resize_y"`
|
//HrResizeY int `json:"hr_resize_y"`
|
||||||
HrSamplerName string `json:"hr_sampler_name"`
|
//HrSamplerName string `json:"hr_sampler_name"`
|
||||||
HrPrompt string `json:"hr_prompt"`
|
//HrPrompt string `json:"hr_prompt"`
|
||||||
HrNegativePrompt string `json:"hr_negative_prompt"`
|
//HrNegativePrompt string `json:"hr_negative_prompt"`
|
||||||
Prompt string `json:"prompt"`
|
Prompt string `json:"prompt"`
|
||||||
Styles []string `json:"styles"`
|
//Styles []string `json:"styles"`
|
||||||
Seed int `json:"seed"`
|
//Seed int `json:"seed"`
|
||||||
Subseed int `json:"subseed"`
|
//Subseed int `json:"subseed"`
|
||||||
SubseedStrength int `json:"subseed_strength"`
|
//SubseedStrength int `json:"subseed_strength"`
|
||||||
SeedResizeFromH int `json:"seed_resize_from_h"`
|
//SeedResizeFromH int `json:"seed_resize_from_h"`
|
||||||
SeedResizeFromW int `json:"seed_resize_from_w"`
|
//SeedResizeFromW int `json:"seed_resize_from_w"`
|
||||||
SamplerName string `json:"sampler_name"`
|
//SamplerName string `json:"sampler_name"`
|
||||||
BatchSize int `json:"batch_size"`
|
//BatchSize int `json:"batch_size"`
|
||||||
NIter int `json:"n_iter"`
|
//NIter int `json:"n_iter"`
|
||||||
Steps int `json:"steps"`
|
//Steps int `json:"steps"`
|
||||||
CfgScale int `json:"cfg_scale"`
|
//CfgScale int `json:"cfg_scale"`
|
||||||
Width int `json:"width"`
|
//Width int `json:"width"`
|
||||||
Height int `json:"height"`
|
//Height int `json:"height"`
|
||||||
RestoreFaces bool `json:"restore_faces"`
|
//RestoreFaces bool `json:"restore_faces"`
|
||||||
Tiling bool `json:"tiling"`
|
//Tiling bool `json:"tiling"`
|
||||||
DoNotSaveSamples bool `json:"do_not_save_samples"`
|
//DoNotSaveSamples bool `json:"do_not_save_samples"`
|
||||||
DoNotSaveGrid bool `json:"do_not_save_grid"`
|
//DoNotSaveGrid bool `json:"do_not_save_grid"`
|
||||||
NegativePrompt string `json:"negative_prompt"`
|
//NegativePrompt string `json:"negative_prompt"`
|
||||||
Eta int `json:"eta"`
|
//Eta int `json:"eta"`
|
||||||
SMinUncond int `json:"s_min_uncond"`
|
//SMinUncond int `json:"s_min_uncond"`
|
||||||
SChurn int `json:"s_churn"`
|
//SChurn int `json:"s_churn"`
|
||||||
STmax int `json:"s_tmax"`
|
//STmax int `json:"s_tmax"`
|
||||||
STmin int `json:"s_tmin"`
|
//STmin int `json:"s_tmin"`
|
||||||
SNoise int `json:"s_noise"`
|
//SNoise int `json:"s_noise"`
|
||||||
OverrideSettings map[string]string `json:"override_settings"`
|
//OverrideSettings map[string]string `json:"override_settings"`
|
||||||
OverrideSettingsRestoreAfterwards bool `json:"override_settings_restore_afterwards"`
|
//OverrideSettingsRestoreAfterwards bool `json:"override_settings_restore_afterwards"`
|
||||||
ScriptArgs []interface{} `json:"script_args"`
|
//ScriptArgs []interface{} `json:"script_args"`
|
||||||
SamplerIndex string `json:"sampler_index"`
|
//SamplerIndex string `json:"sampler_index"`
|
||||||
ScriptName string `json:"script_name"`
|
//ScriptName string `json:"script_name"`
|
||||||
SendImages bool `json:"send_images"`
|
//SendImages bool `json:"send_images"`
|
||||||
SaveImages bool `json:"save_images"`
|
//SaveImages bool `json:"save_images"`
|
||||||
AlwaysonScripts map[string]string `json:"alwayson_scripts"`
|
//AlwaysonScripts map[string]string `json:"alwayson_scripts"`
|
||||||
}{
|
}{
|
||||||
EnableHr: false,
|
//EnableHr: false,
|
||||||
DenoisingStrength: 0,
|
//DenoisingStrength: 0,
|
||||||
FirstphaseWidth: 0,
|
//FirstphaseWidth: 0,
|
||||||
FirstphaseHeight: 0,
|
//FirstphaseHeight: 0,
|
||||||
HrScale: 2,
|
//HrScale: 2,
|
||||||
HrUpscaler: "nearest",
|
//HrUpscaler: "nearest",
|
||||||
HrSecondPassSteps: 0,
|
//HrSecondPassSteps: 0,
|
||||||
HrResizeX: 0,
|
//HrResizeX: 0,
|
||||||
HrResizeY: 0,
|
//HrResizeY: 0,
|
||||||
HrSamplerName: "",
|
//HrSamplerName: "",
|
||||||
HrPrompt: "",
|
//HrPrompt: "",
|
||||||
HrNegativePrompt: "",
|
//HrNegativePrompt: "",
|
||||||
Prompt: "miao~",
|
Prompt: "miao~",
|
||||||
Styles: []string{},
|
//Styles: []string{},
|
||||||
Seed: -1,
|
//Seed: -1,
|
||||||
Subseed: -1,
|
//Subseed: -1,
|
||||||
SubseedStrength: 0,
|
//SubseedStrength: 0,
|
||||||
SeedResizeFromH: -1,
|
//SeedResizeFromH: -1,
|
||||||
SeedResizeFromW: -1,
|
//SeedResizeFromW: -1,
|
||||||
SamplerName: "beamsearch",
|
//SamplerName: "beamsearch",
|
||||||
BatchSize: 1,
|
//BatchSize: 1,
|
||||||
NIter: 1,
|
//NIter: 1,
|
||||||
Steps: 50,
|
//Steps: 50,
|
||||||
CfgScale: 7,
|
//CfgScale: 7,
|
||||||
Width: 512,
|
//Width: 512,
|
||||||
Height: 512,
|
//Height: 512,
|
||||||
RestoreFaces: false,
|
//RestoreFaces: false,
|
||||||
Tiling: false,
|
//Tiling: false,
|
||||||
DoNotSaveSamples: false,
|
//DoNotSaveSamples: false,
|
||||||
DoNotSaveGrid: false,
|
//DoNotSaveGrid: false,
|
||||||
NegativePrompt: "",
|
//NegativePrompt: "",
|
||||||
Eta: 0,
|
//Eta: 0,
|
||||||
SMinUncond: 0,
|
//SMinUncond: 0,
|
||||||
SChurn: 0,
|
//SChurn: 0,
|
||||||
STmax: 0,
|
//STmax: 0,
|
||||||
STmin: 0,
|
//STmin: 0,
|
||||||
SNoise: 1,
|
//SNoise: 1,
|
||||||
OverrideSettings: map[string]string{},
|
//OverrideSettings: map[string]string{},
|
||||||
OverrideSettingsRestoreAfterwards: false,
|
//OverrideSettingsRestoreAfterwards: false,
|
||||||
ScriptArgs: []interface{}{},
|
//ScriptArgs: []interface{}{},
|
||||||
SamplerIndex: "Euler",
|
//SamplerIndex: "Euler",
|
||||||
ScriptName: "generate",
|
//ScriptName: "generate",
|
||||||
SendImages: true,
|
//SendImages: true,
|
||||||
SaveImages: false,
|
//SaveImages: false,
|
||||||
AlwaysonScripts: map[string]string{},
|
//AlwaysonScripts: map[string]string{},
|
||||||
}
|
}
|
||||||
// 接收到的图片列表
|
// 接收到的图片列表
|
||||||
var rest = struct {
|
var rest = struct {
|
||||||
Images []string `json:"images"`
|
Images []string `json:"images"`
|
||||||
}{
|
}{}
|
||||||
Images: []string{},
|
|
||||||
}
|
|
||||||
var url = fmt.Sprintf("http://%s:%d/sdapi/v1/txt2img", server.IP, server.Port)
|
var url = fmt.Sprintf("http://%s:%d/sdapi/v1/txt2img", server.IP, server.Port)
|
||||||
if err := goreq.Post(url).SetJsonBody(data).Do().BindJSON(&rest); err != nil {
|
if err := goreq.Post(url).SetJsonBody(data).Do().BindJSON(&rest); err != nil {
|
||||||
log.Println("API 查询失败:", err)
|
log.Println("API 查询失败:", err)
|
||||||
@@ -185,12 +192,14 @@ func (model *Model) Inference(image_list []Image, callback func()) {
|
|||||||
for _, img := range rest.Images {
|
for _, img := range rest.Images {
|
||||||
log.Println("保存图片:", img)
|
log.Println("保存图片:", img)
|
||||||
// 将base64编码的图片保存到本地webp
|
// 将base64编码的图片保存到本地webp
|
||||||
if err := SaveBase64Image(img, "data/images/"+img+".webp"); err != nil {
|
var filename = fmt.Sprintf("%x", md5.Sum([]byte(img)))
|
||||||
|
if err := SaveBase64Image(img, "data/images/"+filename+".webp"); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback()
|
callback()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
log.Println("模型未部署到推理機, 取消推理模型")
|
log.Println("模型未部署到推理機, 取消推理模型")
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user