目录
一,错误信息
在尝试Retrieval-based-Voice-Conversion-WebUI声音项目时,在本地(Win10)可以正常运行,在服务器上(Ubuntu20.04)时,出现一下问题。
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 428, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/applications.py", line 276, in __call__
await super().__call__(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/cors.py", line 84, in __call__
await self.app(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
raise exc
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
await self.app(scope, receive, send)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/routing.py", line 66, in app
response = await func(request)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/routing.py", line 237, in app
raw_response = await run_endpoint_function(
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/routing.py", line 165, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/anyio/to_thread.py", line 31, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
return await future
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 867, in run
result = context.run(func, *args)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/gradio/routes.py", line 237, in main
return templates.TemplateResponse(
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/templating.py", line 113, in TemplateResponse
return _TemplateResponse(
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/templating.py", line 39, in __init__
content = template.render(context)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/jinja2/environment.py", line 1301, in render
self.environment.handle_exception()
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/gradio/templates/frontend/index.html", line 41, in top-level template code
<script>window.gradio_config = {{ config | toorjson }};</script>
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/gradio/routes.py", line 82, in toorjson
ORJSONResponse._render_str(value)
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/gradio/routes.py", line 77, in _render_str
return ORJSONResponse._render(content).decode("utf-8")
File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/gradio/routes.py", line 66, in _render
return orjson.dumps(
TypeError: str is not valid UTF-8: surrogates not allowed
分析上述原因就是TypeError: str is not valid UTF-8: surrogates not allowed报错,导致了Gradio的异常 ERROR: Exception in ASGI application
二,分析
尝试1
因为在本地可以正常运行,但是在服务器上会报错,并且提示valid UTF-8,猜测可能是因为Gradio组件中的名词时中文的所以手动把上Gradio中的UI组件中所有的名字都改为了英文
结果并不行,还是会出现同样的错误。
尝试2
python在报Gradio的异常时, 不会提示在哪个组件初始化的时候出了问题,这就很麻烦,所以我采用了一种很笨的方法,在Gradio的UI初始化的代码部分,从后往前一部分一部分删除,然后运行,定位报错的组件。
最终定位在infer-web.py的1149行
with gr.Column():
model_choose = gr.Dropdown(label=i18n("模型"), choices=uvr5_names) # 1149行,错误部分
opt_vocal_root = gr.Textbox(
label=i18n("指定输出人声文件夹"), value="opt")
opt_ins_root = gr.Textbox(label=i18n("指定输出乐器文件夹"),value="opt")
定位到具体位置之后,首先把“模型”改为了“model”,但是仍然报错
所以考虑是不是uvr5_names的问题,输出uvr5_names,果然有问题,原来uvr5_names表示预训练模型列表,预训练模型是中文的,ubuntu系统解析错误。
所以,修改名字即可