sonoisa commited on
Commit
ffb0f8f
·
1 Parent(s): ae35213

Add image query

Browse files
Files changed (1) hide show
  1. app.py +14 -17
app.py CHANGED
@@ -310,45 +310,42 @@ def encode_image(image_filename, model):
310
  return image_embedding
311
 
312
 
313
- st.title("いらすと検索(日本語CLIPゼロショット)")
314
- description_text = st.empty()
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
- st.session_state.df = df
335
- st.session_state.sentence_vectors = sentence_vectors
336
- st.session_state.image_vectors = image_vectors
337
 
338
- print("finished loading model and dataset")
339
-
340
- model = st.session_state.model
341
- df = st.session_state.df
342
- sentence_vectors = st.session_state.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 = st.text_input(label="説明文", value="", on_change=clear_result)
 
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