经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!
来源:cnblogs  作者:狂师  时间:2024/5/24 10:30:51  对本文有异议

大家好,我是狂师!

今天给大家推荐一款开源的Python库:Gradio!

Gradio是一个开源的Python库,用于创建机器学习和数据科学的交互式应用和演示。

项目地址:

  1. https://github.com/gradio-app/gradio

1、项目介绍

Gradio旨在简化展示和测试机器学习模型的过程,它允许用户通过构建漂亮的界面来展示其模型,而无需编写复杂的前端代码。通过Gradio,可以快速地为模型创建Web界面,并支持多种类型的输入和输出,如文本、图像和音频。这个库非常适合于快速迭代开发和用户反馈获取,以及在教学和展示中与观众互动。

通过提供简单的API,Gradio可以在几行代码中将任何Python函数转换为一个Web应用程序,无需前端开发经验。

2、工具用途

Gradio的主要用途包括:

  • 展示和测试机器学习模型:通过创建具有输入字段(如文本输入或图像上传)和输出字段(如模型预测结果)的界面,用户可以直接与模型进行交互,从而测试和验证模型的性能。
  • 演示机器学习模型:Gradio可以帮助开发者向客户、合作者和学生展示机器学习模型的功能和应用场景。通过创建简单漂亮的用户界面,可以更好地展示模型的预测效果和可视化结果。
  • 快速部署模型:通过自动共享链接,Gradio可以快速部署机器学习模型,并使其在互联网上可用。这使得开发者可以轻松地与团队成员、合作伙伴或用户共享模型,并收集他们对模型性能的反馈。
  • 交互式调试模型:在开发过程中,Gradio提供了内置的操作和解释工具,允许开发者交互式地调试机器学习模型。

3、安装、使用

可以使用pip进行安装,安装之前要确保python版本大于 3.8。

  1. pip install gradio

示例1: 牛刀小试

  1. import gradio as gr
  2. def greet(name, intensity):
  3. return "Hello " * intensity + name + "!"
  4. demo = gr.Interface(
  5. fn=greet,
  6. inputs=["text", "slider"],
  7. outputs=["text"],
  8. )
  9. demo.launch()

运行之后,在浏览器打开http://localhost:7860/即可访问web程序

示例2:生成外网地址

  1. import gradio as gr
  2. def greet(name):
  3. return "Hello " + name + "!"
  4. demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
  5. demo.launch(share=True) # Share your demo with just 1 extra parameter ??

运行时候,就会自动生成一个URL链接,类似https://a23dsf231adb.gradio.live,可以将这个链接发给别人进行访问使用。当然你也可以选择将应用部署到云服务器。

示例3: 和FastAPI框架集成

  1. from fastapi import FastAPI
  2. import gradio as gr
  3. CUSTOM_PATH = "/gradio"
  4. app = FastAPI()
  5. @app.get("/")
  6. def read_main():
  7. return {"message": "This is your main app"}
  8. io = gr.Interface(lambda x: "Hello, " + x + "!", "textbox", "textbox")
  9. app = gr.mount_gradio_app(app, io, path=CUSTOM_PATH)
  10. # Run this from the terminal as you would normally start a FastAPI app: `uvicorn run:app`
  11. # and navigate to http://localhost:8000/gradio in your browser.

示例4: 一个更为完整的示例

  1. import os
  2. from authlib.integrations.starlette_client import OAuth, OAuthError
  3. from fastapi import FastAPI, Depends, Request
  4. from starlette.config import Config
  5. from starlette.responses import RedirectResponse
  6. from starlette.middleware.sessions import SessionMiddleware
  7. import uvicorn
  8. import gradio as gr
  9. app = FastAPI()
  10. # Replace these with your own OAuth settings
  11. GOOGLE_CLIENT_ID = "..."
  12. GOOGLE_CLIENT_SECRET = "..."
  13. SECRET_KEY = "..."
  14. config_data = {'GOOGLE_CLIENT_ID': GOOGLE_CLIENT_ID, 'GOOGLE_CLIENT_SECRET': GOOGLE_CLIENT_SECRET}
  15. starlette_config = Config(environ=config_data)
  16. oauth = OAuth(starlette_config)
  17. oauth.register(
  18. name='google',
  19. server_metadata_url='https://accounts.google.com/.well-known/openid-configuration',
  20. client_kwargs={'scope': 'openid email profile'},
  21. )
  22. SECRET_KEY = os.environ.get('SECRET_KEY') or "a_very_secret_key"
  23. app.add_middleware(SessionMiddleware, secret_key=SECRET_KEY)
  24. # Dependency to get the current user
  25. def get_user(request: Request):
  26. user = request.session.get('user')
  27. if user:
  28. return user['name']
  29. return None
  30. @app.get('/')
  31. def public(user: dict = Depends(get_user)):
  32. if user:
  33. return RedirectResponse(url='/gradio')
  34. else:
  35. return RedirectResponse(url='/login-demo')
  36. @app.route('/logout')
  37. async def logout(request: Request):
  38. request.session.pop('user', None)
  39. return RedirectResponse(url='/')
  40. @app.route('/login')
  41. async def login(request: Request):
  42. redirect_uri = request.url_for('auth')
  43. # If your app is running on https, you should ensure that the
  44. # `redirect_uri` is https, e.g. uncomment the following lines:
  45. #
  46. # from urllib.parse import urlparse, urlunparse
  47. # redirect_uri = urlunparse(urlparse(str(redirect_uri))._replace(scheme='https'))
  48. return await oauth.google.authorize_redirect(request, redirect_uri)
  49. @app.route('/auth')
  50. async def auth(request: Request):
  51. try:
  52. access_token = await oauth.google.authorize_access_token(request)
  53. except OAuthError:
  54. return RedirectResponse(url='/')
  55. request.session['user'] = dict(access_token)["userinfo"]
  56. return RedirectResponse(url='/')
  57. with gr.Blocks() as login_demo:
  58. gr.Button("Login", link="/login")
  59. app = gr.mount_gradio_app(app, login_demo, path="/login-demo")
  60. def greet(request: gr.Request):
  61. return f"Welcome to Gradio, {request.username}"
  62. with gr.Blocks() as main_demo:
  63. m = gr.Markdown("Welcome to Gradio!")
  64. gr.Button("Logout", link="/logout")
  65. main_demo.load(greet, None, m)
  66. app = gr.mount_gradio_app(app, main_demo, path="/gradio", auth_dependency=get_user)
  67. if __name__ == '__main__':
  68. uvicorn.run(app)

4、小结

Gradio通过提供一个简洁的API和直观的界面,降低了创建交互式机器学习应用的技术门槛,特别适合入门级开发者和初学者使用。它的设计理念在于让开发者能够专注于模型的功能和性能,而不是耗费大量时间在界面设计和代码复杂化上。因此,无论是教学、研究还是商业演示,Gradio都是一个非常有价值的工具。

总的来说,你可以不用,但是你不能不知道,脑海里多一个方案,在解题时就能多一种选择。

原文链接:https://www.cnblogs.com/jinjiangongzuoshi/p/18210113

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号