Add image query
Browse files
app.py
CHANGED
@@ -310,45 +310,42 @@ def encode_image(image_filename, model):
|
|
310 |
return image_embedding
|
311 |
|
312 |
|
313 |
-
st.
|
314 |
-
|
315 |
-
|
316 |
-
if "model" not in st.session_state:
|
317 |
description_text.text("日本語CLIPモデル読み込み中... ")
|
318 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
319 |
model = ClipModel("sonoisa/clip-vit-b-32-japanese-v1", device=device)
|
320 |
-
st.session_state.model = model
|
321 |
|
322 |
-
print("extract dataset")
|
323 |
pyminizip.uncompress(
|
324 |
"clip_zeroshot_irasuto_items_20210224.pq.zip", st.secrets["ZIP_PASSWORD"], None, 1
|
325 |
)
|
326 |
|
327 |
-
print("loading dataset")
|
328 |
df = pq.read_table("clip_zeroshot_irasuto_items_20210224.parquet",
|
329 |
columns=["page", "description", "image_url", "sentence_vector", "image_vector"]).to_pandas()
|
330 |
|
331 |
sentence_vectors = np.stack(df["sentence_vector"])
|
332 |
image_vectors = np.stack(df["image_vector"])
|
333 |
|
334 |
-
|
335 |
-
st.session_state.sentence_vectors = sentence_vectors
|
336 |
-
st.session_state.image_vectors = image_vectors
|
337 |
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
sentence_vectors =
|
343 |
-
image_vectors = st.session_state.image_vectors
|
344 |
|
345 |
description_text.text("日本語CLIPモデル(ゼロショット)を用いて、説明文の意味が近い「いらすとや」画像を検索します。\nキーワードを列挙するよりも、自然な文章を入力した方が精度よく検索できます。\n画像は必ずリンク先の「いらすとや」さんのページを開き、そこからダウンロードしてください。")
|
346 |
|
347 |
def clear_result():
|
348 |
result_text.text("")
|
349 |
|
|
|
|
|
|
|
|
|
350 |
prev_query = ""
|
351 |
-
query_input =
|
|
|
352 |
|
353 |
closest_n = st.number_input(label="検索数", min_value=1, value=10, max_value=100)
|
354 |
|
|
|
310 |
return image_embedding
|
311 |
|
312 |
|
313 |
+
@st.cache
|
314 |
+
def load_model_and_data():
|
|
|
|
|
315 |
description_text.text("日本語CLIPモデル読み込み中... ")
|
316 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
317 |
model = ClipModel("sonoisa/clip-vit-b-32-japanese-v1", device=device)
|
|
|
318 |
|
|
|
319 |
pyminizip.uncompress(
|
320 |
"clip_zeroshot_irasuto_items_20210224.pq.zip", st.secrets["ZIP_PASSWORD"], None, 1
|
321 |
)
|
322 |
|
|
|
323 |
df = pq.read_table("clip_zeroshot_irasuto_items_20210224.parquet",
|
324 |
columns=["page", "description", "image_url", "sentence_vector", "image_vector"]).to_pandas()
|
325 |
|
326 |
sentence_vectors = np.stack(df["sentence_vector"])
|
327 |
image_vectors = np.stack(df["image_vector"])
|
328 |
|
329 |
+
return model, df, sentence_vectors, image_vectors
|
|
|
|
|
330 |
|
331 |
+
|
332 |
+
st.title("いらすと検索(日本語CLIPゼロショット)")
|
333 |
+
description_text = st.empty()
|
334 |
+
|
335 |
+
model, df, sentence_vectors, image_vectors = load_model_and_data()
|
|
|
336 |
|
337 |
description_text.text("日本語CLIPモデル(ゼロショット)を用いて、説明文の意味が近い「いらすとや」画像を検索します。\nキーワードを列挙するよりも、自然な文章を入力した方が精度よく検索できます。\n画像は必ずリンク先の「いらすとや」さんのページを開き、そこからダウンロードしてください。")
|
338 |
|
339 |
def clear_result():
|
340 |
result_text.text("")
|
341 |
|
342 |
+
query_type = st.radio(label="クエリ種別", options=("説明文", "画像"))
|
343 |
+
|
344 |
+
col1, col2 = st.columns(2)
|
345 |
+
|
346 |
prev_query = ""
|
347 |
+
query_input = col1.text_input(label="説明文", value="", on_change=clear_result, use_column_width=True)
|
348 |
+
query_image = col2.file_uploader(label="画像", type=["png", "jpg", "jpeg"], on_change=clear_result, use_column_width=True)
|
349 |
|
350 |
closest_n = st.number_input(label="検索数", min_value=1, value=10, max_value=100)
|
351 |
|