KDnuggets Gradio 크래시 코스


편집자 이미지
# 그라디오 소개
세워짐 기계 학습 실무자가 모델에 대한 대화형 웹 인터페이스를 만드는 방법을 변경하는 Python 프레임워크입니다. 단 몇 줄의 코드만으로 다양한 입력(텍스트, 이미지, 오디오)을 수용하고 직관적인 방식으로 출력을 표시하는 세련된 애플리케이션을 구축할 수 있습니다. 연구원, 데이터 과학자, 개발자 등 Gradio를 사용하면 누구나 모델 배포에 액세스할 수 있습니다.
Gradio의 장점 중 일부는 다음과 같습니다.
- 몇 분 안에 모델에서 데모로 이동할 수 있습니다.
- 프론트엔드 기술은 필요하지 않으며 순수한 Python 구현만 있으면 됩니다.
- 텍스트, 이미지, 오디오 등을 지원합니다.
- 로컬에서 쉽게 공유하고 배포할 수 있으며 무료로 공개적으로 호스팅할 수도 있습니다.
# Gradio 설치 및 기본 설정
Gradio를 시작하려면 pip 명령을 사용하여 패키지를 설치해야 합니다.
이제 Gradio가 설치되었으므로 첫 번째 Gradio 애플리케이션을 만들어 보겠습니다. 먼저 파일을 만들고 이름을 지정하세요. gradio_app.py 그런 다음 다음 코드를 추가하세요.
import gradio as gr
def greet(name):
return f"Hello {name}!"
demo = gr.Interface(
fn=greet,
inputs="text",
outputs="text",
title="Greeting App"
)
demo.launch()
이것을 실행하십시오 python gradio_app.py다음 위치에 실행 중인 웹 애플리케이션이 있을 것입니다. http://127.0.0.1:7860/. 인터페이스는 텍스트 입력, 제출 버튼 및 텍스트 출력을 제공하며 모두 간단한 사양에서 자동으로 생성됩니다.


작성자별 이미지
// Gradio 인터페이스 이해
그만큼 gr.Interface 클래스는 복잡성을 추상화하는 Gradio의 고급 API(응용 프로그래밍 인터페이스)입니다. 세 가지 필수 구성 요소가 필요합니다.
- 기능 (
fn): 입력을 처리하는 Python 함수 - 입력: 입력 유형 지정
- 출력: 출력 유형 지정
// 입력 및 출력 구성 요소 탐색
다음과 같은 간단한 문자열을 사용할 수 있지만 "text", "image"또는 "audio" 구성 요소를 지정하기 위해 Gradio는 명시적인 구성 요소 클래스를 통해 더 많은 제어 기능을 제공합니다.
import gradio as gr
demo = gr.Interface(
fn=lambda x: x,
inputs=gr.Textbox(lines=2, placeholder="Enter text here..."),
outputs=gr.Textbox(label="Output")
)
일반적인 구성 요소는 다음과 같습니다.
gr.Textbox(): 여러 줄의 텍스트 입력gr.Image(): 이미지 업로드/미리보기gr.Audio(): 오디오 파일 처리gr.Checkbox(): 부울 입력gr.Slider(): 수치 범위 입력gr.Radio(): 객관식 선택gr.Dropdown(): 옵션에서 선택하세요
// 다중 입력 및 출력 처리
실제 애플리케이션에는 여러 입력이 필요하거나 여러 출력이 생성되는 경우가 많습니다. Gradio는 목록을 사용하여 이를 우아하게 처리합니다.
import gradio as gr
def process_form(name, is_morning, temperature):
greeting = "Good morning" if is_morning else "Hello"
message = f"{greeting}, {name}! Temperature: {temperature}°C"
return message, temperature * 1.8 + 32 # Convert to Fahrenheit
demo = gr.Interface(
fn=process_form,
inputs=[
gr.Textbox(label="Name"),
gr.Checkbox(label="Is it morning?"),
gr.Slider(0, 100, label="Temperature (°C)")
],
outputs=[
gr.Textbox(label="Greeting"),
gr.Number(label="Temperature (°F)")
]
)
demo.launch()
산출:


작성자별 이미지
여러 입력을 사용하는 경우 함수는 동일한 수의 매개변수를 허용해야 합니다. 마찬가지로, 여러 출력에서는 함수가 여러 값을 반환해야 합니다.
// 이미지 처리
Gradio를 사용하면 이미지 처리 모델을 놀라울 정도로 쉽게 시연할 수 있습니다.
import gradio as gr
import numpy as np
def apply_sepia(image):
# Image comes as numpy array with shape (height, width, channels)
sepia_filter = np.array([[0.393, 0.769, 0.189],
[0.349, 0.686, 0.168],
[0.272, 0.534, 0.131]])
sepia_image = image.dot(sepia_filter.T)
sepia_image = np.clip(sepia_image, 0, 255).astype(np.uint8)
return sepia_image
demo = gr.Interface(
fn=apply_sepia,
inputs=gr.Image(label="Input Image"),
outputs=gr.Image(label="Sepia Filtered"),
title="Sepia Filter App"
)
demo.launch()
산출:


작성자별 이미지
그만큼 gr.Image 구성 요소는 자동으로 파일 업로드, 미리 보기 및 이미지 변환을 처리합니다. 넘파이 처리용 배열.
// 오디오 처리 처리
오디오 애플리케이션도 마찬가지로 간단합니다.
import gradio as gr
def transcribe_audio(audio):
return "Transcribed text would appear here"
demo = gr.Interface(
fn=transcribe_audio,
inputs=gr.Audio(label="Upload Audio", type="filepath"),
outputs=gr.Textbox(label="Transcription"),
title="Speech-to-Text Demo"
)
demo.launch()
실제 애플리케이션에서는 내부에서 음성 인식 모델을 호출합니다. transcribe_audio(audio) 기능. 데모를 위해 자리 표시자를 반환합니다.
산출:


작성자별 이미지
# Gradio Block을 사용하여 고급 레이아웃 만들기
하는 동안 gr.Interface 간단한 응용 프로그램에 적합합니다. gr.Blocks 레이아웃과 데이터 흐름을 완벽하게 제어할 수 있습니다. 블록을 복잡한 다단계 애플리케이션을 구축할 수 있는 하위 수준 API로 생각하세요.
// 기본 블록 예제 구현
import gradio as gr
def greet(name):
return f"Hello {name}!"
with gr.Blocks() as demo:
name_input = gr.Textbox(label="Your Name")
greet_button = gr.Button("Greet")
output = gr.Textbox(label="Greeting")
greet_button.click(
fn=greet,
inputs=name_input,
outputs=output
)
demo.launch()
산출:


작성자별 이미지
// 행과 열로 복잡한 레이아웃 구축
다음은 트랜스포머. 다음을 확인하세요. 트랜스포머 패키지가 컴퓨터에 설치되었습니다.
pip install transformers
import gradio as gr
from transformers import pipeline
# Load a translation model
translator = pipeline("translation_en_to_de", model="t5-small")
def translate_text(text):
result = translator(text, max_length=40)[0]
return result['translation_text']
with gr.Blocks(title="English to German Translator") as demo:
gr.Markdown("# 🌍 English to German Translator")
with gr.Row():
with gr.Column():
english_input = gr.Textbox(
label="English Text",
placeholder="Enter text to translate...",
lines=4
)
translate_btn = gr.Button("Translate", variant="primary")
with gr.Column():
german_output = gr.Textbox(
label="German Translation",
lines=4
)
# Add example prompts
gr.Examples(
examples=[
["Hello, how are you?"],
["The weather is beautiful today"],
["Machine learning is fascinating"]
],
inputs=english_input
)
translate_btn.click(
fn=translate_text,
inputs=english_input,
outputs=german_output
)
demo.launch()
산출:


작성자별 이미지
# Gradio 애플리케이션의 상태 관리
상태 관리는 대화형 애플리케이션에 중요합니다. Gradio는 전역 상태와 세션 상태라는 두 가지 접근 방식을 제공합니다.
// 세션 상태 관리(사용자별)
사용자별 상태의 경우 Gradio에 내장된 상태 관리를 사용하세요. 다음 예에서는 대화 기록을 유지하기 위해 상태를 사용하는 간단한 챗봇 논리를 보여줍니다.
import gradio as gr
with gr.Blocks() as demo:
chatbot = gr.Chatbot(label="Conversation")
msg = gr.Textbox(label="Your Message")
clear = gr.Button("Clear")
state = gr.State([])
def user_message(message, history):
# Update history with user message and placeholder for bot
return "", history + [[message, None]]
def bot_response(history):
# Simple echo bot logic
response = f"I received: {history[-1][0]}"
history[-1][1] = response
return history
msg.submit(
user_message,
[msg, state],
[msg, state]
).then(
bot_response,
state,
chatbot
)
clear.click(lambda: (None, []), None, [chatbot, state])
demo.launch()
# 애플리케이션 배포 및 공유
빠른 공유를 위해 Gradio는 공개 URL을 만들 수 있습니다.
이를 통해 데모 및 동료와의 빠른 공유에 적합한 임시 공개 액세스 링크가 생성됩니다. 일반적으로 72시간 동안 유효합니다.
무료 영구 호스팅:
- 만들기 포옹하는 얼굴 계정
- 소프트웨어 개발 키트(SDK)인 Gradio를 사용하여 새로운 공간을 만들어보세요.
- 신청서 파일을 업로드하세요.
app.py(주 애플리케이션 파일) 및requirements.txt(파이썬 종속성). 에 있어야 할 내용의 예requirements.txt파일:
git add .
git commit -m "Initial commit"
git push
귀하의 신청서는 다음에서 제공됩니다. https://huggingface.co/spaces/your-username/your-space-name.
Gradio 애플리케이션은 Python 웹 애플리케이션을 지원하는 모든 플랫폼에 배포할 수 있습니다.
- 사용
demo.launch(server_name="0.0.0.0", server_port=7860) - Docker 컨테이너 내부의 모든 종속성을 사용하여 애플리케이션을 패키징합니다.
- AWS, Google Cloud, Azure 및 기타 플랫폼에 배포
# 이미지 분류 대시보드 구축
우리가 배운 모든 것을 모아서 프로젝트를 만들어 봅시다. 이 프로젝트는 간단한 이미지 분류 대시보드로 구축되었습니다. 파이토치 그리고 그라디오. 이를 통해 사용자는 웹 인터페이스를 통해 이미지를 업로드하고 사전 훈련된 딥 러닝 모델에서 생성된 상위 5개 예측 클래스를 받을 수 있습니다.
우리는 사용할 것이다 ResNet-50ImageNet 데이터세트로 훈련된 잘 알려진 컨벌루션 신경망. 모델이 사전 훈련되었으므로 프로젝트에는 사용자 정의 훈련이나 레이블이 지정된 데이터가 필요하지 않습니다. 생산용이 아닌 데모, 실험 및 교육 목적으로 사용됩니다.
우리는 Gradio를 사용하여 사용자가 브라우저에서 직접 모델과 상호 작용할 수 있도록 경량 사용자 인터페이스를 제공할 것입니다.
import gradio as gr
import torch
from torchvision import models, transforms
from PIL import Image
# Load pre-trained model
model = models.resnet50(pretrained=True)
model.eval()
# Preprocessing
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
def classify_image(image):
image = Image.fromarray(image)
input_tensor = preprocess(image)
input_batch = input_tensor.unsqueeze(0)
with torch.no_grad():
output = model(input_batch)
# Get top 5 predictions
probabilities = torch.nn.functional.softmax(output[0], dim=0)
top5_prob, top5_catid = torch.topk(probabilities, 5)
results = []
for i in range(top5_prob.size(0)):
results.append(f"Category {top5_catid[i].item()}: {top5_prob[i].item()*100:.2f}%")
return "\n".join(results)
demo = gr.Interface(
fn=classify_image,
inputs=gr.Image(label="Upload Image"),
outputs=gr.Textbox(label="Top 5 Predictions"),
title="Image Classifier"
)
demo.launch()
# 마무리
Gradio는 모델 개발과 사용자 상호 작용 사이의 기존 장벽을 제거하여 기계 학습 배포를 쉽게 만듭니다. 이 집중 과정을 통해 Gradio 인터페이스 생성의 기본 사항, 다양한 입력/출력 유형을 위한 구성 요소 기반 디자인, Gradio Blocks를 사용한 고급 레이아웃, 대화형 애플리케이션을 위한 상태 관리, 작업 공유를 위한 배포 전략을 배웠습니다.
Gradio의 진정한 힘은 단순성과 유연성에 있습니다. 내부 테스트를 위해 빠른 프로토타입을 구축하든, 공개적으로 사용할 수 있도록 세련된 애플리케이션을 구축하든 상관없습니다. Gradio는 기계 학습 모델에 생명을 불어넣는 데 필요한 도구를 제공합니다.
시투 올루미드 그는 세부 사항에 대한 예리한 안목과 복잡한 개념을 단순화하는 재주를 바탕으로 최첨단 기술을 활용하여 매력적인 내러티브를 만드는 데 열정을 갖고 있는 소프트웨어 엔지니어이자 기술 작가입니다. Shittu는 다음에서도 찾을 수 있습니다. 지저귀다.



Post Comment