본 페이지에서는 Gradio 튜토리얼에 대해 다루겠습니다.
Gradio는 머신러닝 모델을 웹 앱 형태로 빌드하고 배포할 수 있도록 돕는 파이썬 라이브러리 입니다.
실제로 코드 몇 줄이면 머신러닝 모델을 사용할 수 있는 웹 기반 인터페이스를 구현할 수 있습니다.
추가 설명 예정
pip install gradio
이미지 추가 예정
import gradio as gr
def greet(name):
return "Hello " + name + "!!"
iface = gr.Interface(fn=greet, inputs="text", outputs="text")
iface.launch()
이미지 추가 예정
import gradio as gr
def greet(name):
return "Hello " + name + "!!"
iface = gr.Interface(fn=greet,
inputs=gr.inputs.Textbox(lines=2, placeholder="이름을 입력하세요."),
outputs="text")
iface.launch()
이미지 추가 예정
import gradio as gr
def greet(name, is_morning, temperature):
salutation = "Good morning" if is_morning else "Good evening"
greeting = f"{salutation} {name}. It is {temperature} degrees today"
celsius = (temperature - 32) * 5 / 9
return greeting, round(celsius, 2)
demo = gr.Interface(
fn=greet,
inputs=["text", "checkbox", gr.Slider(0, 100)],
outputs=["text", "number"],
)
demo.launch()
이미지 추가 예정
Gradio는 Image, DataFrame, Video 혹은 Label과 같은 다양한 유형의 구성 요소를 지원합니다.
아래는 이미지를 이미지로 변환하는 기능을 사용하는 예시입니다.
import numpy as np
import gradio as gr
def sepia(input_img):
sepia_filter = np.array([
[0.393, 0.769, 0.189],
[0.349, 0.686, 0.168],
[0.272, 0.534, 0.131]
])
sepia_img = input_img.dot(sepia_filter.T)
sepia_img /= sepia_img.max()
return sepia_img
demo = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
demo.launch()
Image 구성 요소를 입력으로 사용할 때 함수는 Shape(너비, 높이, 3)의 Numpy Array로 입력받습니다.
이미지 추가 예정
Gradio에는 인터페이스 클래스 말고도 블록이라는 클래스가 존재합니다.(더 높은 자유도로 사용 가능)
import gradio as gr
def greet(name):
return "Hello " + name + "!"
with gr.Blocks() as demo:
name = gr.Textbox(label="Name")
output = gr.Textbox(label="Output Box")
greet_btn = gr.Button("Greet")
greet_btn.click(fn=greet, inputs=name, outputs=output)
demo.launch()
이미지 추가 예정
import numpy as np
import gradio as gr
def flip_text(x):
return x[::-1]
def flip_image(x):
return np.fliplr(x)
with gr.Blocks() as demo:
gr.Markdown("Flip text or image files using this demo.")
with gr.Tab("Flip Text"):
text_input = gr.Textbox()
text_output = gr.Textbox()
text_button = gr.Button("Flip")
with gr.Tab("Flip Image"):
with gr.Row():
image_input = gr.Image()
image_output = gr.Image()
image_button = gr.Button("Flip")
with gr.Accordion("Open for More!"):
gr.Markdown("Look at me...")
text_button.click(flip_text, inputs=text_input, outputs=text_output)
image_button.click(flip_image, inputs=image_input, outputs=image_output)
demo.launch()
이미지 추가 예정
이미지 추가 예정
출력 인터페이스 아래에 "Flag" 버튼이 있습니다.
사용자가 모델을 테스트하며 에러를 발견할 때, 개발자가 해당 이슈를 검토할 수 있도록 입력에 플래그를 지정할 수 있습니다.
인터페이스 생성자의 flagging_dir
인수에 설정한 경로 안의 CSV파일에 기록됩니다.
인터페이스에 이미지 및 오디오 컴포넌트와 같은 파일 데이터가 포함된 경우, 플래그가 해당 데이터도 저장하기 위해 폴더가 생성됩니다.
이미지 추가 예정
launch()
메서드 안에 share=True
를 설정하면 공개적으로 공유가 가능합니다.
gr.Interface(classify_image, "image", "label").launch(share=True)
위처럼 설정하면 누구나 접근 가능한 공개 링크가 생성됩니다.
이 링크를 통해 상대방의 브라우저에서 모델을 시험해 볼 수 있습니다.
(서버가 켜져있어야 함.)
Colab 노트북에서 작업하는 경우 항상 공유 링크가 생성됩니다.
링크가 Gradio 링크를 통해 제공되지만 로컬 서버의 프록시일 뿐
인터페이스를 통해 전송된 데이터를 저장하지 않습니다.
share=False
(기본값)를 설정하면, 특정 사용자와 포트 포워딩을 통해 공유할 수 있는 로컬 링크만 생성됩니다.
공유 링크는 72시간 후 만료됩니다.
이미지 추가 예정
접근을 제한하기 위해 인터페이스 앞에 인증 페이지를 넣을 수 있습니다.
launch() 메서드의 auth 인자를 사용하면 허용되는 사용자 이름/암호 튜플 리스트를 전달할 수 있습니다.
또는 커스텀 인증 처리를 위해서는 사용자 이름과 암호를 인자로 사용하는 함수를 전달하고,
인증을 허용하려면 True를 반환하고 아니면 False를 반환합니다.
이미지 추가 예정
Gradio 프리미엄 계정을 생성할 경우
Gradio 인프라에서 호스팅해 인터페이스를 영구적으로 공개 공유할 수 있습니다.