immunobiotech commited on
Commit
1c276c4
ยท
verified ยท
1 Parent(s): 0f27351

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -41
app.py CHANGED
@@ -18,51 +18,72 @@ def search_artworks(query, is_public_domain=False):
18
 
19
  if is_public_domain:
20
  params["query"] = {"term": {"is_public_domain": True}}
21
-
22
- response = requests.get(search_url, params=params)
23
- results = response.json()
24
 
25
- if "data" not in results:
26
- return "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
 
 
 
 
 
 
 
 
27
 
28
- output = []
29
- for artwork in results["data"]:
30
- if artwork.get("image_id"):
31
- # IIIF ์ด๋ฏธ์ง€ URL ์ƒ์„ฑ
32
- image_url = f"https://www.artic.edu/iiif/2/{artwork['image_id']}/full/843,/0/default.jpg"
33
-
34
- # ์ž‘ํ’ˆ ์ •๋ณด ํฌ๋งทํŒ…
35
- artwork_info = f"""
36
- ์ œ๋ชฉ: {artwork.get('title', 'Unknown')}
37
- ์ž‘๊ฐ€: {artwork.get('artist_display', 'Unknown')}
38
- ์ œ์ž‘์—ฐ๋„: {artwork.get('date_display', 'Unknown')}
39
- """
40
-
41
- # ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๋ฐ PIL Image๋กœ ๋ณ€ํ™˜
42
- try:
43
- img_response = requests.get(image_url)
44
- img = Image.open(io.BytesIO(img_response.content))
45
- output.append((img, artwork_info))
46
- except:
47
- continue
48
 
49
- return output if output else "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  def get_gallery_info(gallery_id):
52
- # ๊ฐค๋Ÿฌ๋ฆฌ ์ •๋ณด API ํ˜ธ์ถœ
53
- gallery_url = f"{BASE_URL}/galleries/{gallery_id}"
54
- response = requests.get(gallery_url)
55
- gallery = response.json()
56
-
57
- if "data" not in gallery:
58
- return "๊ฐค๋Ÿฌ๋ฆฌ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
 
59
 
60
- gallery_data = gallery["data"]
61
- return f"""
62
- ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฆ„: {gallery_data.get('title', 'Unknown')}
63
- ์œ„์น˜: {gallery_data.get('location', 'Unknown')}
64
- ์„ค๋ช…: {gallery_data.get('description', 'No description available')}
65
- """
 
 
66
 
67
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
68
  with gr.Blocks() as demo:
@@ -73,8 +94,18 @@ with gr.Blocks() as demo:
73
  search_input = gr.Textbox(label="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”")
74
  public_domain = gr.Checkbox(label="๊ณต๊ฐœ ๋„๋ฉ”์ธ ์ž‘ํ’ˆ๋งŒ ๋ณด๊ธฐ")
75
  search_btn = gr.Button("๊ฒ€์ƒ‰")
76
- gallery = gr.Gallery(label="๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ")
77
- info = gr.Textbox(label="์ž‘ํ’ˆ ์ •๋ณด", lines=3)
 
 
 
 
 
 
 
 
 
 
78
 
79
  search_btn.click(
80
  fn=search_artworks,
 
18
 
19
  if is_public_domain:
20
  params["query"] = {"term": {"is_public_domain": True}}
 
 
 
21
 
22
+ try:
23
+ response = requests.get(search_url, params=params)
24
+ response.raise_for_status() # ์—๋Ÿฌ ์ฒดํฌ
25
+ results = response.json()
26
+
27
+ if "data" not in results:
28
+ return [], "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
29
+
30
+ images = []
31
+ captions = []
32
 
33
+ for artwork in results["data"]:
34
+ if artwork.get("image_id"):
35
+ # IIIF ์ด๋ฏธ์ง€ URL ์ƒ์„ฑ
36
+ image_url = f"https://www.artic.edu/iiif/2/{artwork['image_id']}/full/843,/0/default.jpg"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
+ # ์ž‘ํ’ˆ ์ •๋ณด ํฌ๋งทํŒ…
39
+ artwork_info = f"""์ œ๋ชฉ: {artwork.get('title', 'Unknown')}\n์ž‘๊ฐ€: {artwork.get('artist_display', 'Unknown')}\n์ œ์ž‘์—ฐ๋„: {artwork.get('date_display', 'Unknown')}"""
40
+
41
+ try:
42
+ img_response = requests.get(image_url, timeout=5) # ํƒ€์ž„์•„์›ƒ ์„ค์ •
43
+ img_response.raise_for_status() # ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ์—๋Ÿฌ ์ฒดํฌ
44
+
45
+ # ์ด๋ฏธ์ง€ ๊ฒ€์ฆ
46
+ img = Image.open(io.BytesIO(img_response.content))
47
+ img.verify() # ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒ€์ฆ
48
+ img = Image.open(io.BytesIO(img_response.content)) # ๋‹ค์‹œ ์—ด๊ธฐ
49
+
50
+ # RGB ๋ชจ๋“œ๋กœ ๋ณ€ํ™˜ (์•ŒํŒŒ ์ฑ„๋„ ์ œ๊ฑฐ)
51
+ if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
52
+ img = img.convert('RGB')
53
+
54
+ images.append(img)
55
+ captions.append(artwork_info)
56
+ except Exception as e:
57
+ print(f"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์—๋Ÿฌ ๋ฐœ์ƒ: {e}")
58
+ continue
59
+
60
+ if not images:
61
+ return [], "๊ฒ€์ƒ‰๋œ ์ž‘ํ’ˆ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
62
+
63
+ return images, "\n\n".join(captions)
64
+
65
+ except Exception as e:
66
+ print(f"API ์š”์ฒญ ์ค‘ ์—๋Ÿฌ ๋ฐœ์ƒ: {e}")
67
+ return [], f"๊ฒ€์ƒ‰ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
68
 
69
  def get_gallery_info(gallery_id):
70
+ try:
71
+ gallery_url = f"{BASE_URL}/galleries/{gallery_id}"
72
+ response = requests.get(gallery_url)
73
+ response.raise_for_status()
74
+ gallery = response.json()
75
+
76
+ if "data" not in gallery:
77
+ return "๊ฐค๋Ÿฌ๋ฆฌ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
78
 
79
+ gallery_data = gallery["data"]
80
+ return f"""
81
+ ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฆ„: {gallery_data.get('title', 'Unknown')}
82
+ ์œ„์น˜: {gallery_data.get('location', 'Unknown')}
83
+ ์„ค๋ช…: {gallery_data.get('description', 'No description available')}
84
+ """
85
+ except Exception as e:
86
+ return f"๊ฐค๋Ÿฌ๋ฆฌ ์ •๋ณด ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
87
 
88
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
89
  with gr.Blocks() as demo:
 
94
  search_input = gr.Textbox(label="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”")
95
  public_domain = gr.Checkbox(label="๊ณต๊ฐœ ๋„๋ฉ”์ธ ์ž‘ํ’ˆ๋งŒ ๋ณด๊ธฐ")
96
  search_btn = gr.Button("๊ฒ€์ƒ‰")
97
+
98
+ with gr.Row():
99
+ gallery = gr.Gallery(
100
+ label="๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ",
101
+ show_label=True,
102
+ elem_id="gallery",
103
+ columns=[2],
104
+ rows=[2],
105
+ height="auto"
106
+ )
107
+
108
+ info = gr.Textbox(label="์ž‘ํ’ˆ ์ •๋ณด", lines=10)
109
 
110
  search_btn.click(
111
  fn=search_artworks,