代码初始化
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
package audio
|
||||
|
||||
import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
// TranscribeReq 语音转文字请求(JSON body / URL 方式)
|
||||
type TranscribeReq struct {
|
||||
VideoURLs []string `json:"video_urls" v:"required#视频URL列表不能为空" dc:"视频URL列表"`
|
||||
Model string `json:"model" dc:"whisper模型(tiny/base/small/medium)" d:"medium"`
|
||||
Language string `json:"language" dc:"语言(zh/en/ja)" d:"zh"`
|
||||
Threshold float64 `json:"threshold" dc:"场景检测阈值(0.1-0.5)" d:"0.3"`
|
||||
g.Meta `path:"/transcribe" method:"post" tags:"音频转写" summary:"语音转文字(异步)" dc:"创建异步语音转文字任务,返回taskId"`
|
||||
VideoURLs []string `json:"video_urls" v:"required#视频URL列表不能为空" dc:"视频URL列表"`
|
||||
Model string `json:"model" dc:"whisper模型(tiny/base/small/medium)" d:"medium"`
|
||||
Language string `json:"language" dc:"语言(zh/en/ja)" d:"zh"`
|
||||
Threshold float64 `json:"threshold" dc:"场景检测阈值(0.1-0.5)" d:"0.3"`
|
||||
CallbackURL string `json:"callback_url" dc:"任务完成后的回调地址(可选),成功后POST结果到此URL"`
|
||||
}
|
||||
|
||||
// TranscribeRes 语音转文字响应
|
||||
|
||||
130
model/dto/audio/task_dto.go
Normal file
130
model/dto/audio/task_dto.go
Normal file
@@ -0,0 +1,130 @@
|
||||
package audio
|
||||
|
||||
import (
|
||||
"gitea.com/red-future/common/beans"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// CreateTaskRes 创建任务响应
|
||||
type CreateTaskRes struct {
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
}
|
||||
|
||||
// ---------- 获取任务详情 ----------
|
||||
|
||||
// GetTaskReq 获取任务详情请求
|
||||
type GetTaskReq struct {
|
||||
g.Meta `path:"/{taskId}" method:"get" tags:"音频转写" summary:"查询任务详情" dc:"根据taskId查询任务详情和明细"`
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
}
|
||||
|
||||
// GetTaskRes 获取任务详情响应
|
||||
type GetTaskRes struct {
|
||||
TaskInfo TranscribeTaskItem `json:"taskInfo" dc:"任务信息"`
|
||||
DetailList []TranscribeTaskDetailItem `json:"detailList" dc:"明细列表(每视频一条)"`
|
||||
}
|
||||
|
||||
// TranscribeTaskItem 任务批次项
|
||||
type TranscribeTaskItem struct {
|
||||
ID int64 `json:"id,string" dc:"数据库ID"`
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
Status string `json:"status" dc:"任务状态"`
|
||||
Progress int `json:"progress" dc:"进度0-100"`
|
||||
TotalFiles int `json:"totalFiles" dc:"文件总数"`
|
||||
SuccessFiles int `json:"successFiles" dc:"成功文件数"`
|
||||
FailFiles int `json:"failFiles" dc:"失败文件数"`
|
||||
Model string `json:"model" dc:"whisper模型"`
|
||||
Language string `json:"language" dc:"语言"`
|
||||
Threshold float64 `json:"threshold" dc:"场景检测阈值"`
|
||||
InputType string `json:"inputType" dc:"输入类型"`
|
||||
InputData string `json:"inputData" dc:"输入数据"`
|
||||
FileNames string `json:"fileNames" dc:"文件名列表"`
|
||||
CallbackURL string `json:"callbackUrl" dc:"回调地址"`
|
||||
Result string `json:"result,omitempty" dc:"完整的处理结果JSON(成功后返回)"`
|
||||
ErrorMessage string `json:"errorMessage" dc:"错误信息(失败后返回)"`
|
||||
CreatedAt int64 `json:"createdAt" dc:"创建时间戳"`
|
||||
UpdatedAt int64 `json:"updatedAt" dc:"更新时间戳"`
|
||||
}
|
||||
|
||||
// TranscribeTaskDetailItem 任务明细项(每视频)
|
||||
type TranscribeTaskDetailItem struct {
|
||||
ID int64 `json:"id,string" dc:"明细ID"`
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
FileIndex int `json:"fileIndex" dc:"文件序号"`
|
||||
FileName string `json:"fileName" dc:"文件名"`
|
||||
TranscribedText string `json:"transcribedText" dc:"语音识别文字"`
|
||||
Scenes string `json:"scenes" dc:"分镜分析JSON"`
|
||||
AudioSize int64 `json:"audioSize" dc:"音频文件大小"`
|
||||
AudioDuration string `json:"audioDuration" dc:"音频时长"`
|
||||
Model string `json:"model" dc:"whisper模型"`
|
||||
Language string `json:"language" dc:"语言代码"`
|
||||
ErrorMessage string `json:"errorMessage" dc:"错误信息"`
|
||||
}
|
||||
|
||||
// ---------- 获取任务进度 ----------
|
||||
|
||||
// GetProgressReq 获取任务进度请求
|
||||
type GetProgressReq struct {
|
||||
g.Meta `path:"/{taskId}/progress" method:"get" tags:"音频转写" summary:"查询任务进度" dc:"查询任务的当前处理进度"`
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
}
|
||||
|
||||
// GetProgressRes 获取任务进度响应
|
||||
type GetProgressRes struct {
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
Status string `json:"status" dc:"任务状态"`
|
||||
Progress int `json:"progress" dc:"进度0-100"`
|
||||
}
|
||||
|
||||
// ---------- 任务列表 ----------
|
||||
|
||||
// ListTaskReq 获取任务列表请求
|
||||
type ListTaskReq struct {
|
||||
g.Meta `path:"/tasks" method:"get" tags:"音频转写" summary:"查询任务列表" dc:"分页查询任务列表,可按状态筛选"`
|
||||
*beans.Page
|
||||
Status string `json:"status" dc:"按状态筛选"`
|
||||
}
|
||||
|
||||
// ListTaskRes 获取任务列表响应
|
||||
type ListTaskRes struct {
|
||||
List []TranscribeTaskItem `json:"list" dc:"任务列表"`
|
||||
Total int `json:"total" dc:"总数"`
|
||||
}
|
||||
|
||||
// ---------- 回调通知结构 ----------
|
||||
|
||||
// CallbackPayload 回调通知内容
|
||||
type CallbackPayload struct {
|
||||
TaskID string `json:"taskId" dc:"任务ID"`
|
||||
Status string `json:"status" dc:"任务状态"`
|
||||
TotalFiles int `json:"totalFiles" dc:"文件总数"`
|
||||
SuccessFiles int `json:"successFiles" dc:"成功文件数"`
|
||||
FailFiles int `json:"failFiles" dc:"失败文件数"`
|
||||
Result string `json:"result,omitempty" dc:"完整的处理结果JSON"`
|
||||
ErrorMessage string `json:"errorMessage,omitempty" dc:"错误信息"`
|
||||
DetailList []TranscribeTaskDetailItem `json:"detailList" dc:"明细列表"`
|
||||
}
|
||||
|
||||
// ---------- 任务处理结果结构(用于result JSONB) ----------
|
||||
|
||||
// TaskResult 单任务处理结果
|
||||
type TaskResult struct {
|
||||
Results []TaskResultItem `json:"results" dc:"处理结果列表"`
|
||||
}
|
||||
|
||||
// TaskResultItem 单视频处理结果
|
||||
type TaskResultItem struct {
|
||||
FileName string `json:"fileName" dc:"文件名"`
|
||||
Result *TaskResultDTO `json:"result,omitempty" dc:"识别结果"`
|
||||
Error string `json:"error,omitempty" dc:"错误信息"`
|
||||
}
|
||||
|
||||
// TaskResultDTO 识别结果详情(对外输出,隐藏内部路径)
|
||||
type TaskResultDTO struct {
|
||||
Text string `json:"text" dc:"识别文本"`
|
||||
Model string `json:"model" dc:"使用的模型"`
|
||||
Language string `json:"language" dc:"语言"`
|
||||
AudioSize int64 `json:"audioSize" dc:"音频文件大小(字节)"`
|
||||
AudioDuration string `json:"audioDuration" dc:"音频时长"`
|
||||
Scenes *SceneSummaryDTO `json:"scenes,omitempty" dc:"分镜分析"`
|
||||
}
|
||||
@@ -1,9 +1,20 @@
|
||||
package video
|
||||
|
||||
import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
// ConcatReq 视频拼接请求(JSON body / URL 方式)
|
||||
type ConcatReq struct {
|
||||
g.Meta `path:"/concat" method:"post" tags:"视频拼接" summary:"视频拼接(URL模式)" dc:"从视频URL下载并拼接"`
|
||||
VideoURLs []string `json:"video_urls" v:"required#视频URL列表不能为空" dc:"视频URL列表(按此顺序拼接)"`
|
||||
Method string `json:"method" dc:"拼接方式(auto/fast/reencode)" d:"auto"`
|
||||
Upload bool `json:"upload" dc:"是否上传到MinIO" d:"false"`
|
||||
}
|
||||
|
||||
// ConcatUploadReq 视频拼接请求(文件上传模式)
|
||||
type ConcatUploadReq struct {
|
||||
g.Meta `path:"/concat/upload" method:"post" tags:"视频拼接" summary:"视频拼接(文件上传)" dc:"上传视频文件并拼接(至少2个视频)"`
|
||||
Method string `json:"method" dc:"拼接方式(auto/fast/reencode)" d:"auto"`
|
||||
Upload bool `json:"upload" dc:"是否上传到MinIO" d:"false"`
|
||||
}
|
||||
|
||||
// ConcatRes 视频拼接响应
|
||||
@@ -14,4 +25,21 @@ type ConcatRes struct {
|
||||
DurationStr string `json:"durationStr" dc:"可读时长"`
|
||||
MethodUsed string `json:"methodUsed" dc:"实际使用的拼接方式"`
|
||||
InputFiles int `json:"inputFiles" dc:"输入文件数"`
|
||||
FileURL string `json:"fileURL" dc:"MinIO访问地址(上传后返回)"`
|
||||
}
|
||||
|
||||
// UploadFileBytesReq 上传文件请求(字节流)
|
||||
type UploadFileBytesReq struct {
|
||||
FileName string `json:"fileName" dc:"文件名"`
|
||||
FileBytes []byte `json:"fileBytes" dc:"文件字节流"`
|
||||
FileStoreURL string `json:"fileStoreURL" dc:"文件存储路径"`
|
||||
}
|
||||
|
||||
// UploadFileBytesRes 上传文件响应
|
||||
type UploadFileBytesRes struct {
|
||||
FileURL string `json:"fileURL" dc:"上传地址"`
|
||||
FileSize int `json:"fileSize" dc:"文件大小"`
|
||||
FileName string `json:"fileName" dc:"文件名称"`
|
||||
FileFormat string `json:"fileFormat" dc:"文件格式"`
|
||||
FileAddressPrefix string `json:"fileAddressPrefix"`
|
||||
}
|
||||
|
||||
63
model/entity/audio/transcribe_task.go
Normal file
63
model/entity/audio/transcribe_task.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package audio
|
||||
|
||||
import "gitea.com/red-future/common/beans"
|
||||
|
||||
// TranscribeTask 语音转文字任务批次头实体
|
||||
type TranscribeTask struct {
|
||||
beans.SQLBaseDO `orm:",inherit"`
|
||||
TaskID string `orm:"task_id" json:"taskId" description:"任务批次唯一标识"`
|
||||
Status string `orm:"status" json:"status" description:"任务状态:pending/running/success/failed"`
|
||||
Progress int `orm:"progress" json:"progress" description:"进度0-100"`
|
||||
TotalFiles int `orm:"total_files" json:"totalFiles" description:"文件总数"`
|
||||
SuccessFiles int `orm:"success_files" json:"successFiles" description:"成功文件数"`
|
||||
FailFiles int `orm:"fail_files" json:"failFiles" description:"失败文件数"`
|
||||
Model string `orm:"model" json:"model" description:"whisper模型"`
|
||||
Language string `orm:"language" json:"language" description:"语言"`
|
||||
Threshold float64 `orm:"threshold" json:"threshold" description:"场景检测阈值"`
|
||||
InputType string `orm:"input_type" json:"inputType" description:"输入类型:upload/url"`
|
||||
InputData string `orm:"input_data" json:"inputData" description:"输入数据(文件路径/URL列表JSON)"`
|
||||
FileNames string `orm:"file_names" json:"fileNames" description:"文件名列表JSON"`
|
||||
CallbackURL string `orm:"callback_url" json:"callbackUrl" description:"任务完成后的回调地址"`
|
||||
Result string `orm:"result" json:"result" description:"完整的处理结果JSON"`
|
||||
ErrorMessage string `orm:"error_message" json:"errorMessage" description:"错误信息"`
|
||||
}
|
||||
|
||||
// TranscribeTaskCol 字段定义
|
||||
type TranscribeTaskCol struct {
|
||||
beans.SQLBaseCol
|
||||
TaskID string
|
||||
Status string
|
||||
Progress string
|
||||
TotalFiles string
|
||||
SuccessFiles string
|
||||
FailFiles string
|
||||
Model string
|
||||
Language string
|
||||
Threshold string
|
||||
InputType string
|
||||
InputData string
|
||||
FileNames string
|
||||
CallbackURL string
|
||||
Result string
|
||||
ErrorMessage string
|
||||
}
|
||||
|
||||
// TranscribeTaskCols 字段常量
|
||||
var TranscribeTaskCols = TranscribeTaskCol{
|
||||
SQLBaseCol: beans.DefSQLBaseCol,
|
||||
TaskID: "task_id",
|
||||
Status: "status",
|
||||
Progress: "progress",
|
||||
TotalFiles: "total_files",
|
||||
SuccessFiles: "success_files",
|
||||
FailFiles: "fail_files",
|
||||
Model: "model",
|
||||
Language: "language",
|
||||
Threshold: "threshold",
|
||||
InputType: "input_type",
|
||||
InputData: "input_data",
|
||||
FileNames: "file_names",
|
||||
CallbackURL: "callback_url",
|
||||
Result: "result",
|
||||
ErrorMessage: "error_message",
|
||||
}
|
||||
48
model/entity/audio/transcribe_task_detail.go
Normal file
48
model/entity/audio/transcribe_task_detail.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package audio
|
||||
|
||||
import "gitea.com/red-future/common/beans"
|
||||
|
||||
// TranscribeTaskDetail 语音转文字任务明细实体(每视频一条)
|
||||
type TranscribeTaskDetail struct {
|
||||
beans.SQLBaseDO `orm:",inherit"`
|
||||
TaskID string `orm:"task_id" json:"taskId" description:"所属任务批次ID"`
|
||||
FileIndex int `orm:"file_index" json:"fileIndex" description:"文件序号(从0开始)"`
|
||||
FileName string `orm:"file_name" json:"fileName" description:"文件名"`
|
||||
TranscribedText string `orm:"transcribed_text" json:"transcribedText" description:"语音识别文字"`
|
||||
Scenes string `orm:"scenes" json:"scenes" description:"分镜分析JSON"`
|
||||
AudioSize int64 `orm:"audio_size" json:"audioSize" description:"音频文件大小(字节)"`
|
||||
AudioDuration string `orm:"audio_duration" json:"audioDuration" description:"音频时长"`
|
||||
Model string `orm:"model" json:"model" description:"whisper模型"`
|
||||
Language string `orm:"language" json:"language" description:"语言代码"`
|
||||
ErrorMessage string `orm:"error_message" json:"errorMessage" description:"错误信息"`
|
||||
}
|
||||
|
||||
// TranscribeTaskDetailCol 字段定义
|
||||
type TranscribeTaskDetailCol struct {
|
||||
beans.SQLBaseCol
|
||||
TaskID string
|
||||
FileIndex string
|
||||
FileName string
|
||||
TranscribedText string
|
||||
Scenes string
|
||||
AudioSize string
|
||||
AudioDuration string
|
||||
Model string
|
||||
Language string
|
||||
ErrorMessage string
|
||||
}
|
||||
|
||||
// TranscribeTaskDetailCols 字段常量
|
||||
var TranscribeTaskDetailCols = TranscribeTaskDetailCol{
|
||||
SQLBaseCol: beans.DefSQLBaseCol,
|
||||
TaskID: "task_id",
|
||||
FileIndex: "file_index",
|
||||
FileName: "file_name",
|
||||
TranscribedText: "transcribed_text",
|
||||
Scenes: "scenes",
|
||||
AudioSize: "audio_size",
|
||||
AudioDuration: "audio_duration",
|
||||
Model: "model",
|
||||
Language: "language",
|
||||
ErrorMessage: "error_message",
|
||||
}
|
||||
Reference in New Issue
Block a user