|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<meta charset="utf-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
<title>Gradio-Lite: Serverless Gradio Running Entirely in Your Browser</title> |
|
<meta name="description" content="Gradio-Lite: Serverless Gradio Running Entirely in Your Browser"> |
|
|
|
<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script> |
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" /> |
|
|
|
<style> |
|
html, body { |
|
margin: 0; |
|
padding: 0; |
|
height: 100%; |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
<gradio-lite> |
|
<gradio-file name="app.py" entrypoint> |
|
import gradio as gr |
|
from transformers_js_py import pipeline |
|
from filters import convert |
|
|
|
pipe = await pipeline('object-detection', 'Xenova/detr-resnet-50') |
|
|
|
async def fn(image): |
|
result = await pipe(image) |
|
return result |
|
|
|
#demo = gr.Interface.from_pipeline(pipe) |
|
|
|
async def predict(image): |
|
result = await pipe(image) |
|
print(result) |
|
result = convert(result) |
|
print(result) |
|
return image, result |
|
|
|
demo = gr.Interface( |
|
fn=predict, |
|
inputs=gr.Image(type='pil'), |
|
outputs=gr.AnnotatedImage(), |
|
title='On-Device Object-Detection with Gradio-Lite & Transformers.js' |
|
) |
|
|
|
demo.launch() |
|
</gradio-file> |
|
|
|
<gradio-file name="filters.py"> |
|
def convert(input_data): |
|
# Initialize the output list |
|
result_labels = [] |
|
|
|
# Iterate over each item in the input data |
|
for item in input_data: |
|
# Extract the label |
|
label = item['label'] |
|
|
|
# Extract the bounding box coordinates |
|
xmin = item['box']['xmin'] |
|
ymin = item['box']['ymin'] |
|
xmax = item['box']['xmax'] |
|
ymax = item['box']['ymax'] |
|
|
|
# Convert coordinates into the required output format (list of coordinates) |
|
coordinates = [xmin, ymin, xmax, ymax] |
|
|
|
# Append the tuple of coordinates and label to the output list |
|
result_labels.append((coordinates, label)) |
|
|
|
# Return the output list |
|
return result_labels |
|
|
|
</gradio-file> |
|
|
|
<gradio-requirements> |
|
# Same syntax as requirements.txt |
|
transformers-js-py |
|
</gradio-requirements> |
|
</gradio-lite> |
|
</body> |
|
</html> |