Spaces:
Running
Running
Commit ·
7c078a3
1
Parent(s): 8cdd8e4
split code
Browse files
app.py
CHANGED
|
@@ -2,60 +2,18 @@
|
|
| 2 |
|
| 3 |
from __future__ import annotations
|
| 4 |
|
| 5 |
-
import deepdanbooru as dd
|
| 6 |
import gradio as gr
|
| 7 |
-
import huggingface_hub
|
| 8 |
-
import numpy as np
|
| 9 |
import PIL.Image
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
def load_model() -> tf.keras.Model:
|
| 13 |
-
path = huggingface_hub.hf_hub_download('public-data/DeepDanbooru',
|
| 14 |
-
'model-resnet_custom_v3.h5')
|
| 15 |
-
model = tf.keras.models.load_model(path)
|
| 16 |
-
return model
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
def load_labels() -> list[str]:
|
| 20 |
-
path = huggingface_hub.hf_hub_download('public-data/DeepDanbooru',
|
| 21 |
-
'tags.txt')
|
| 22 |
-
with open(path) as f:
|
| 23 |
-
labels = [line.strip() for line in f.readlines()]
|
| 24 |
-
return labels
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
model = load_model()
|
| 28 |
-
labels = load_labels()
|
| 29 |
-
|
| 30 |
|
| 31 |
def predict(image: PIL.Image.Image, score_threshold: float):
|
| 32 |
-
|
| 33 |
-
image = np.asarray(image)
|
| 34 |
-
image = tf.image.resize(image,
|
| 35 |
-
size=(height, width),
|
| 36 |
-
method=tf.image.ResizeMethod.AREA,
|
| 37 |
-
preserve_aspect_ratio=True)
|
| 38 |
-
image = image.numpy()
|
| 39 |
-
image = dd.image.transform_and_pad_image(image, width, height)
|
| 40 |
-
image = image / 255.
|
| 41 |
-
probs = model.predict(image[None, ...])[0]
|
| 42 |
-
probs = probs.astype(float)
|
| 43 |
-
|
| 44 |
-
indices = np.argsort(probs)[::-1]
|
| 45 |
-
result_all = dict()
|
| 46 |
-
result_threshold = dict()
|
| 47 |
result_html = ''
|
| 48 |
-
for
|
| 49 |
-
label = labels[index]
|
| 50 |
-
prob = probs[index]
|
| 51 |
-
result_all[label] = prob
|
| 52 |
-
if prob < score_threshold:
|
| 53 |
-
break
|
| 54 |
result_html = result_html + '<p class="m5dd_list use"><span>' + str(label) + '</span><span>' + str(round(prob, 3)) + '</span></p>'
|
| 55 |
-
|
| 56 |
result_text = ', '.join(result_threshold.keys())
|
| 57 |
result_text = '<div id="m5dd_result">' + str(result_text) + '</div>'
|
| 58 |
-
result_html = '<div>' + str(result_html) + '</div>'
|
| 59 |
return result_html, result_text
|
| 60 |
|
| 61 |
js = """
|
|
|
|
| 2 |
|
| 3 |
from __future__ import annotations
|
| 4 |
|
|
|
|
| 5 |
import gradio as gr
|
|
|
|
|
|
|
| 6 |
import PIL.Image
|
| 7 |
+
from genTag import genTag
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
def predict(image: PIL.Image.Image, score_threshold: float):
|
| 10 |
+
result_threshold = genTag(image, score_threshold)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
result_html = ''
|
| 12 |
+
for label, prob in result_threshold.items():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
result_html = result_html + '<p class="m5dd_list use"><span>' + str(label) + '</span><span>' + str(round(prob, 3)) + '</span></p>'
|
| 14 |
+
result_html = '<div>' + str(result_html) + '</div>'
|
| 15 |
result_text = ', '.join(result_threshold.keys())
|
| 16 |
result_text = '<div id="m5dd_result">' + str(result_text) + '</div>'
|
|
|
|
| 17 |
return result_html, result_text
|
| 18 |
|
| 19 |
js = """
|
genTag.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import deepdanbooru as dd
|
| 6 |
+
import huggingface_hub
|
| 7 |
+
import numpy as np
|
| 8 |
+
import PIL.Image
|
| 9 |
+
import tensorflow as tf
|
| 10 |
+
|
| 11 |
+
def load_model() -> tf.keras.Model:
|
| 12 |
+
path = huggingface_hub.hf_hub_download('public-data/DeepDanbooru',
|
| 13 |
+
'model-resnet_custom_v3.h5')
|
| 14 |
+
model = tf.keras.models.load_model(path)
|
| 15 |
+
return model
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def load_labels() -> list[str]:
|
| 19 |
+
path = huggingface_hub.hf_hub_download('public-data/DeepDanbooru',
|
| 20 |
+
'tags.txt')
|
| 21 |
+
with open(path) as f:
|
| 22 |
+
labels = [line.strip() for line in f.readlines()]
|
| 23 |
+
return labels
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
model = load_model()
|
| 27 |
+
labels = load_labels()
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def genTag(image: PIL.Image.Image, score_threshold: float):
|
| 31 |
+
_, height, width, _ = model.input_shape
|
| 32 |
+
image = np.asarray(image)
|
| 33 |
+
image = tf.image.resize(image,
|
| 34 |
+
size=(height, width),
|
| 35 |
+
method=tf.image.ResizeMethod.AREA,
|
| 36 |
+
preserve_aspect_ratio=True)
|
| 37 |
+
image = image.numpy()
|
| 38 |
+
image = dd.image.transform_and_pad_image(image, width, height)
|
| 39 |
+
image = image / 255.
|
| 40 |
+
probs = model.predict(image[None, ...])[0]
|
| 41 |
+
probs = probs.astype(float)
|
| 42 |
+
|
| 43 |
+
indices = np.argsort(probs)[::-1]
|
| 44 |
+
result_all = dict()
|
| 45 |
+
result_threshold = dict()
|
| 46 |
+
result_html = ''
|
| 47 |
+
for index in indices:
|
| 48 |
+
label = labels[index]
|
| 49 |
+
prob = probs[index]
|
| 50 |
+
result_all[label] = prob
|
| 51 |
+
if prob < score_threshold:
|
| 52 |
+
break
|
| 53 |
+
result_threshold[label] = prob
|
| 54 |
+
|
| 55 |
+
return result_threshold
|