创建图像存储目录
This commit is contained in:
		
							
								
								
									
										213
									
								
								models/Model.go
									
									
									
									
									
								
							
							
						
						
									
										213
									
								
								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