This commit is contained in:
wataru 2022-10-30 19:28:27 +09:00
parent b282f677a0
commit 717fbca538
3 changed files with 34 additions and 14 deletions

View File

@ -8,6 +8,7 @@ from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
from fastapi import FastAPI, HTTPException from fastapi import FastAPI, HTTPException
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel from pydantic import BaseModel
from scipy.io.wavfile import write, read from scipy.io.wavfile import write, read
@ -101,21 +102,32 @@ def printMessage(message, level=0):
print(f"\033[47m {message}\033[0m") print(f"\033[47m {message}\033[0m")
global app_socketio global app_socketio
global app_fastapi
parser = setupArgParser()
args = parser.parse_args()
printMessage(f"Phase name:{__name__}", level=2) printMessage(f"Phase name:{__name__}", level=2)
thisFilename = os.path.basename(__file__)[:-3] thisFilename = os.path.basename(__file__)[:-3]
if __name__ == thisFilename: if __name__ == thisFilename or args.colab == True:
printMessage(f"PHASE3:{__name__}", level=2) printMessage(f"PHASE3:{__name__}", level=2)
parser = setupArgParser()
args = parser.parse_args()
PORT = args.p PORT = args.p
CONFIG = args.c CONFIG = args.c
MODEL = args.m MODEL = args.m
app_fastapi = FastAPI() app_fastapi = FastAPI()
app_fastapi.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app_fastapi.mount("/front", StaticFiles(directory="../frontend/dist", html=True), name="static")
sio = socketio.AsyncServer( sio = socketio.AsyncServer(
async_mode='asgi', async_mode='asgi',
cors_allowed_origins='*' cors_allowed_origins='*'
@ -223,8 +235,6 @@ if __name__ == '__mp_main__':
if __name__ == '__main__': if __name__ == '__main__':
printMessage(f"PHASE1:{__name__}", level=2) printMessage(f"PHASE1:{__name__}", level=2)
parser = setupArgParser()
args = parser.parse_args()
PORT = args.p PORT = args.p
CONFIG = args.c CONFIG = args.c
MODEL = args.m MODEL = args.m
@ -298,10 +308,20 @@ if __name__ == '__main__':
) )
else: else:
# HTTP サーバ起動 # HTTP サーバ起動
uvicorn.run( if args.colab == True:
f"{os.path.basename(__file__)[:-3]}:app_socketio", uvicorn.run(
host="0.0.0.0", f"{os.path.basename(__file__)[:-3]}:app_fastapi",
port=int(PORT), host="0.0.0.0",
reload=True, port=int(PORT),
log_level="critical" log_level="critical"
) )
else:
uvicorn.run(
f"{os.path.basename(__file__)[:-3]}:app_socketio",
host="0.0.0.0",
port=int(PORT),
reload=True,
log_level="critical"
)

View File

@ -3913,7 +3913,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"fetchTextResource\": () => (/* binding */ fetchTextResource),\n/* harmony export */ \"postVoice\": () => (/* binding */ postVoice),\n/* harmony export */ \"uploadModelProps\": () => (/* binding */ uploadModelProps),\n/* harmony export */ \"uploadModelPropsResumable\": () => (/* binding */ uploadModelPropsResumable)\n/* harmony export */ });\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\")[\"Buffer\"];\n// import Resumable from 'resumablejs'\n// import { file } from \"jszip\";\nconst fetchTextResource = async (url) => {\n const res = await fetch(url, {\n method: \"GET\"\n });\n const text = res.text();\n return text;\n};\nconst postVoice = async (url, gpu, srcId, dstId, timestamp, buffer) => {\n const obj = {\n gpu, srcId, dstId, timestamp, buffer: Buffer.from(buffer).toString('base64')\n };\n const body = JSON.stringify(obj);\n const res = await fetch(`${url}`, {\n method: \"POST\",\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: body\n });\n const receivedJson = await res.json();\n const changedVoiceBase64 = receivedJson[\"changedVoiceBase64\"];\n const buf = Buffer.from(changedVoiceBase64, \"base64\");\n const ab = new ArrayBuffer(buf.length);\n // console.log(\"RECIV\", buf.length)\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n};\nconst uploadModelProps = (modelFile, configFile, onprogress) => {\n const req = new XMLHttpRequest();\n const formData = new FormData();\n formData.append(\"modelFile\", modelFile);\n formData.append(\"configFile\", configFile);\n req.upload.onprogress = (ev) => {\n const progress = Math.ceil(ev.loaded / ev.total * 10000 / 100);\n console.log(\"Progress:\", ev.loaded, ev.total, progress);\n onprogress(progress, ev.loaded == ev.total);\n };\n req.upload.onloadend = (ev) => {\n console.log(\"Progress[END!]:\", ev.loaded, ev.total, Math.ceil(ev.loaded / ev.total * 10000 / 100));\n onprogress(100, true);\n };\n req.open(\"POST\", '/upload_model_file');\n req.send(formData);\n};\nconst uploadModelPropsResumable = async (modelFile, _configFile, _onprogress) => {\n const size = 128 * 1024;\n const fileChunks = [];\n let index = 0; // index値\n for (let cur = 0; cur < modelFile.size; cur += size) {\n fileChunks.push({\n hash: index++,\n chunk: modelFile.slice(cur, cur + size),\n });\n }\n console.log(\"FILE_CHUNKS:\", fileChunks);\n for (const x of fileChunks) {\n const p = new Promise((resolve, _reject) => {\n const req = new XMLHttpRequest();\n const formData = new FormData();\n formData.append(\"file\", x.chunk);\n formData.append(\"filename\", \"file_\" + x.hash);\n req.upload.onprogress = (ev) => {\n const progress = Math.ceil(ev.loaded / ev.total * 10000 / 100);\n console.log(\"Progress:\", ev.loaded, ev.total, progress);\n // onprogress(progress, ev.loaded == ev.total)\n };\n req.upload.onloadend = (ev) => {\n console.log(\"Progress[END!]:\", ev.loaded, ev.total, Math.ceil(ev.loaded / ev.total * 10000 / 100));\n resolve();\n // onprogress(100, true)\n };\n req.open(\"POST\", '/resumable');\n req.send(formData);\n });\n await p;\n }\n // const res = new Resumable({\n // target: '/resumable',\n // // chunkSize: 100 * 1024,\n // simultaneousUploads: 1,\n // })\n // res.on(\"progress\", () => {\n // console.log(\"PROGRESS:\", res.progress)\n // })\n // res.on(\"uploadStart\", () => {\n // console.log(\"uploadStart:\")\n // })\n // res.on(\"fileSuccess\", (file: Resumable.ResumableFile) => {\n // console.log(\"fileSuccess:\", file)\n // })\n // res.on(\"fileAdded\", () => {\n // console.log(\"fileAdded:\")\n // })\n // res.on(\"fileError\", () => {\n // console.log(\"fileError:\")\n // })\n // res.addFile(modelFile)\n // res.addFile(_configFile)\n // console.log(\"send\", res.files, res.getSize())\n // res.upload()\n};\n\n\n//# sourceURL=webpack://voice-changer-internal/./frontend/src/001_clients_and_managers/002_ResourceLoader.ts?"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"fetchTextResource\": () => (/* binding */ fetchTextResource),\n/* harmony export */ \"postVoice\": () => (/* binding */ postVoice),\n/* harmony export */ \"uploadModelProps\": () => (/* binding */ uploadModelProps),\n/* harmony export */ \"uploadModelPropsResumable\": () => (/* binding */ uploadModelPropsResumable)\n/* harmony export */ });\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\")[\"Buffer\"];\n// import Resumable from 'resumablejs'\n// import { file } from \"jszip\";\nconst fetchTextResource = async (url) => {\n const res = await fetch(url, {\n method: \"GET\"\n });\n const text = res.text();\n return text;\n};\nconst postVoice = async (url, gpu, srcId, dstId, timestamp, buffer) => {\n const obj = {\n gpu, srcId, dstId, timestamp, buffer: Buffer.from(buffer).toString('base64')\n };\n const body = JSON.stringify(obj);\n const res = await fetch(`${url}`, {\n method: \"POST\",\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: body\n });\n const receivedJson = await res.json();\n const changedVoiceBase64 = receivedJson[\"changedVoiceBase64\"];\n const buf = Buffer.from(changedVoiceBase64, \"base64\");\n const ab = new ArrayBuffer(buf.length);\n // console.log(\"RECIV\", buf.length)\n const view = new Uint8Array(ab);\n for (let i = 0; i < buf.length; ++i) {\n view[i] = buf[i];\n }\n return ab;\n};\nconst uploadModelProps = (modelFile, configFile, onprogress) => {\n const req = new XMLHttpRequest();\n const formData = new FormData();\n formData.append(\"modelFile\", modelFile);\n formData.append(\"configFile\", configFile);\n req.upload.onprogress = (ev) => {\n const progress = Math.ceil(ev.loaded / ev.total * 10000 / 100);\n console.log(\"Progress:\", ev.loaded, ev.total, progress);\n onprogress(progress, ev.loaded == ev.total);\n };\n req.upload.onloadend = (ev) => {\n console.log(\"Progress[END!]:\", ev.loaded, ev.total, Math.ceil(ev.loaded / ev.total * 10000 / 100));\n onprogress(100, true);\n };\n req.open(\"POST\", '/upload_model_file');\n req.send(formData);\n};\nconst uploadModelPropsResumable = async (modelFile, _configFile, _onprogress) => {\n const size = 128 * 1024;\n const fileChunks = [];\n let index = 0; // index値\n for (let cur = 0; cur < modelFile.size; cur += size) {\n fileChunks.push({\n hash: index++,\n chunk: modelFile.slice(cur, cur + size),\n });\n }\n console.log(\"FILE_CHUNKS:\", fileChunks);\n for (const x of fileChunks) {\n console.log(\"SEND CHUNK:\", x.hash);\n const p = new Promise((resolve, _reject) => {\n const req = new XMLHttpRequest();\n const formData = new FormData();\n formData.append(\"file\", x.chunk);\n formData.append(\"filename\", \"file_\" + x.hash);\n req.upload.onprogress = (ev) => {\n const progress = Math.ceil(ev.loaded / ev.total * 10000 / 100);\n console.log(\"Progress:\", ev.loaded, ev.total, progress);\n // onprogress(progress, ev.loaded == ev.total)\n };\n req.upload.onloadend = (ev) => {\n console.log(\"Progress[END!]:\", ev.loaded, ev.total, Math.ceil(ev.loaded / ev.total * 10000 / 100));\n resolve();\n // onprogress(100, true)\n };\n req.open(\"POST\", '/resumable');\n req.send(formData);\n });\n console.log(\"SEND CHUNK wait:\", x.hash);\n await p;\n console.log(\"SEND CHUNK done:\", x.hash);\n }\n // const res = new Resumable({\n // target: '/resumable',\n // // chunkSize: 100 * 1024,\n // simultaneousUploads: 1,\n // })\n // res.on(\"progress\", () => {\n // console.log(\"PROGRESS:\", res.progress)\n // })\n // res.on(\"uploadStart\", () => {\n // console.log(\"uploadStart:\")\n // })\n // res.on(\"fileSuccess\", (file: Resumable.ResumableFile) => {\n // console.log(\"fileSuccess:\", file)\n // })\n // res.on(\"fileAdded\", () => {\n // console.log(\"fileAdded:\")\n // })\n // res.on(\"fileError\", () => {\n // console.log(\"fileError:\")\n // })\n // res.addFile(modelFile)\n // res.addFile(_configFile)\n // console.log(\"send\", res.files, res.getSize())\n // res.upload()\n};\n\n\n//# sourceURL=webpack://voice-changer-internal/./frontend/src/001_clients_and_managers/002_ResourceLoader.ts?");
/***/ }), /***/ }),

View File

@ -1,4 +1,4 @@
FROM dannadori/voice-changer-internal:20221030_185857 as front FROM dannadori/voice-changer-internal:20221030_192652 as front
FROM debian:bullseye-slim as base FROM debian:bullseye-slim as base
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive