Gradio由TypeError: str is not valid UTF-8: surrogates not allowe引起ERROR:Exception in ASGI application

在将Retrieval-based-Voice-Conversion-WebUI部署到Ubuntu服务器时遇到ASGI应用错误,主要是由于非有效UTF-8编码的字符串导致。分析过程中,尝试更改GradioUI组件名称和定位错误源,发现问题出在含有中文的预训练模型列表uvr5_names。修改为英文名称后解决了TypeError。
摘要由CSDN通过智能技术生成

目录

一,错误信息

二,分析

      尝试1

      尝试2

三,解决办法


一,错误信息

        在尝试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系统解析错误。

 所以,修改名字即可

三,解决办法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值