package common import ( "context" "crypto/sha256" "encoding/hex" "path/filepath" "strconv" "github.com/gogf/gf/v2/frame/g" ) // 训练体系运行时数据布局(config.yml app.datasetDir,默认 ./workspace,挂载持久化、不提交 git): // // datasets// 数据集图片(平铺,文件名唯一,标注存 DB dataset_image.labels_json) // models// latest.tflite 当前生效副本(无存档,客户端固定下载) // trainings// 训练产物(best.tflite + artifact.zip) // // 训练机与 Go 服务器异机时,数据集经 training 通道同步(见 common/training_runner.go)。 // DatasetDir 训练体系运行时数据根目录:config.yml app.datasetDir(默认 ./workspace) func DatasetDir(ctx context.Context) string { return g.Cfg().MustGet(ctx, "app.datasetDir", "./workspace").String() } // DatasetImagesDir 某数据集图片目录 func DatasetImagesDir(ctx context.Context, datasetName string) string { return filepath.Join(DatasetDir(ctx), "datasets", datasetName) } // DatasetModelsDir 某数据集模型目录 func DatasetModelsDir(ctx context.Context, datasetName string) string { return filepath.Join(DatasetDir(ctx), "models", datasetName) } // TrainingArtifactsDir 某训练任务产物目录(拉回的 best.tflite + artifact.zip) func TrainingArtifactsDir(ctx context.Context, taskId int64) string { return filepath.Join(DatasetDir(ctx), "trainings", strconv.FormatInt(taskId, 10)) } // Sha256Hex 计算文件内容 SHA-256 十六进制(模型版本校验用) func Sha256Hex(data []byte) (string, error) { sum := sha256.Sum256(data) return hex.EncodeToString(sum[:]), nil }