2022-12-31 13:04:53 +03:00
|
|
|
import os,shutil
|
2022-12-31 12:56:23 +03:00
|
|
|
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from fastapi import HTTPException, FastAPI, UploadFile, File, Form
|
|
|
|
|
|
|
|
from mods.FileUploader import upload_file, concat_file_chunks
|
|
|
|
from voice_changer.VoiceChangerManager import VoiceChangerManager
|
|
|
|
|
|
|
|
UPLOAD_DIR = "upload_dir"
|
|
|
|
os.makedirs(UPLOAD_DIR, exist_ok=True)
|
|
|
|
MODEL_DIR = "MMVC_Trainer/logs"
|
|
|
|
os.makedirs(MODEL_DIR, exist_ok=True)
|
|
|
|
|
|
|
|
class MMVC_Rest_Fileuploader:
|
|
|
|
def __init__(self, voiceChangerManager:VoiceChangerManager):
|
|
|
|
self.voiceChangerManager = voiceChangerManager
|
|
|
|
self.router = APIRouter()
|
|
|
|
self.router.add_api_route("/upload_file", self.post_upload_file, methods=["POST"])
|
|
|
|
self.router.add_api_route("/load_model", self.post_load_model, methods=["POST"])
|
2022-12-31 13:04:53 +03:00
|
|
|
self.router.add_api_route("/load_model_for_train", self.post_load_model_for_train, methods=["POST"])
|
|
|
|
self.router.add_api_route("/extract_voices", self.post_load_model, methods=["POST"])
|
2022-12-31 12:56:23 +03:00
|
|
|
|
|
|
|
def post_upload_file(self, file: UploadFile = File(...), filename: str = Form(...)):
|
|
|
|
return upload_file(UPLOAD_DIR, file, filename)
|
|
|
|
|
|
|
|
def post_load_model(
|
|
|
|
self,
|
|
|
|
modelFilename: str = Form(...),
|
|
|
|
modelFilenameChunkNum: int = Form(...),
|
|
|
|
configFilename: str = Form(...)
|
|
|
|
):
|
|
|
|
modelFilePath = concat_file_chunks(
|
|
|
|
UPLOAD_DIR, modelFilename, modelFilenameChunkNum, UPLOAD_DIR)
|
|
|
|
configFilePath = os.path.join(UPLOAD_DIR, configFilename)
|
|
|
|
|
|
|
|
self.voiceChangerManager.loadModel(configFilePath, modelFilePath)
|
|
|
|
return {"load": f"{modelFilePath}, {configFilePath}"}
|
|
|
|
|
|
|
|
|
2022-12-31 13:04:53 +03:00
|
|
|
def post_load_model_for_train(
|
|
|
|
self,
|
|
|
|
modelGFilename: str = Form(...),
|
|
|
|
modelGFilenameChunkNum: int = Form(...),
|
|
|
|
modelDFilename: str = Form(...),
|
|
|
|
modelDFilenameChunkNum: int = Form(...),
|
|
|
|
):
|
|
|
|
modelGFilePath = concat_file_chunks(
|
|
|
|
UPLOAD_DIR, modelGFilename, modelGFilenameChunkNum, MODEL_DIR)
|
|
|
|
modelDFilePath = concat_file_chunks(
|
|
|
|
UPLOAD_DIR, modelDFilename, modelDFilenameChunkNum, MODEL_DIR)
|
|
|
|
return {"File saved": f"{modelGFilePath}, {modelDFilePath}"}
|
2022-12-31 12:56:23 +03:00
|
|
|
|
2022-12-31 13:04:53 +03:00
|
|
|
def post_load_model(
|
|
|
|
self,
|
|
|
|
zipFilename: str = Form(...),
|
|
|
|
zipFileChunkNum: int = Form(...),
|
|
|
|
):
|
|
|
|
zipFilePath = concat_file_chunks(
|
|
|
|
UPLOAD_DIR, zipFilename, zipFileChunkNum, UPLOAD_DIR)
|
|
|
|
shutil.unpack_archive(zipFilePath, "MMVC_Trainer/dataset/textful/")
|
|
|
|
return {"Zip file unpacked": f"{zipFilePath}"}
|