Gradio

현서·2025년 7월 16일

파이썬 웹서비스

목록 보기
5/7
post-thumbnail

1. Gradio

머신러닝 모델을 간단히 웹 애플리케이션 형태로 배포할 수 있게 해주는 파이썬 라이브러리.

  • 인터랙티브 웹 인터페이스를 통해 모델을 테스트하고 공유할 수 있다.
  • 직관적인 UI를 생성할 수 있다.
  • 모델의 입력과 출력을 정의하면 자동으로 웹 기반 인터페이스를 생성하며, 이를 로컬에서 실행하거나 웹에 배포할 수 있다.

Gradio 설치

!pip install gradio

import gradio as gr
with gr.Blocks() as demo:
    gr.Markdown("# 안녕하세요")
    gr.Markdown("## 여기는 제목을 입력합니다")
    gr.Markdown("- 첫번째 아이템\n- 두번째 아이템\n- 세번째 아이템")

demo.launch()


with gr.Blocks() as demo:
  text_input = gr.Textbox(label='문자입력', lines=1)
  output_text = gr.Textbox(label='출력')

demo.launch()


def handle_input(text):
  return text

with gr.Blocks() as demo:
  text_input = gr.Textbox(label='문자입력', lines=1)
  output_text = gr.Textbox(label='출력')
  text_input.submit(handle_input, inputs=text_input, outputs=output_text)

demo.launch()


def handle_checkbox(selected):
  if selected:
    return "동의했습니다!"
  return "동의하지 않았습니다!"

with gr.Blocks() as demo:
  checkbox = gr.Checkbox(label='개인정보 사용에 동의하겠습니까?')
  output_checkbox = gr.Textbox(label="출력")
  checkbox.change(handle_checkbox, inputs=checkbox, outputs=output_checkbox)

demo.launch()


def handle_fruit(fruit):
  return f'선택한 과일: {fruit}'

with gr.Blocks() as demo:
  fruit_dropdown = gr.Dropdown(label='과일', choices=['사과', '오렌지', '바나나', '메론'])
  output_fruit = gr.Textbox(label='구입한 과일')
  fruit_dropdown.change(handle_fruit, inputs=fruit_dropdown, outputs=output_fruit)

demo.launch()


def add(num1, num2):
  return num1 + num2

interface = gr.Interface(
    fn=add,
    inputs = ['number', 'number'],
    outputs = 'number',
    title='덧셈 계산기',
    description='숫자 두 개를 입력하세요',
    flagging_mode="never"
)

interface.launch()

만약 여기서 flagging_mode = "auto" 이면

이렇게 결과를 확인할 수 있다.
Gradio는 기본적으로 flagged/ 폴더에 CSV 파일로 결과를 저장한다.

Flag 버튼

기본적으로 생성된 인터페이스에서 사용자가 앱의 입력이나 출력을 플래그(flagging)할 수 있도록 제공되는 기능이다.
플래그 버튼을 누르면 해당 입력과 출력이 기록되어 문제 상황이나 유용한 사례를 저장하거나 분석하는 데 활용된다.
Flag 버튼을 원하지 않는 경우 flagging_mode를 "never"로 하여 비활성화하거나 설정을 변경하여 제거할 수 있다.

flagging_mode="never"

flagging_mode 옵션 정리

설명
"never"Flag 버튼 비활성화 (기본값)
"manual"사용자에게 Flag 버튼을 보여주고, 수동으로 결과를 신고 가능
"auto"사용자가 Flag를 누르면 자동으로 결과 저장
"always"항상 자동으로 결과를 저장 (사용자 입력과 상관없이)

def favorite_language(language):
  messages = {
        "Python": "Python은 데이터 과학, 웹 개발, AI에 아주 적합한 언어입니다!",
        "JavaScript": "JavaScript는 웹 개발에 강력하며, 프론트엔드와 백엔드에서 모두 사용됩니다.",
        "Java": "Java는 안정성과 성능으로 유명하며, 대규모 시스템에 적합합니다.",
        "C++": "C++는 고성능 애플리케이션과 게임 개발에 자주 사용됩니다."
    }
  return messages.get(language, '선택된 언어에 대한 정보가 없습니다')


interface = gr.Interface(
    fn = favorite_language,
    inputs = gr.Radio(['Python', 'JavaScript', 'Java', 'C++'], label='좋아하는 언어를 선택하세요'),
    outputs = 'text',
    title='좋아하는 언어',
    description='라디오 버튼에서 좋아하는 프로그래밍 언어를 선택하세요'
)

interface.launch()

profile
The light shines in the darkness.

0개의 댓글