fantos commited on
Commit
5fa3533
ยท
verified ยท
1 Parent(s): f61de90

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -165
app.py CHANGED
@@ -1,168 +1,45 @@
1
  import gradio as gr
2
- import aiohttp
3
- import asyncio
4
- import time
5
- from datetime import datetime
6
- import random
7
-
8
- async def make_session_request(url, session_id, request_id):
9
- """๊ฐ ์„ธ์…˜๋ณ„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜"""
10
- async with aiohttp.ClientSession() as session:
11
- headers = {
12
- 'User-Agent': f'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/{random.randint(70, 100)}.0',
13
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
14
- 'Accept-Language': 'en-US,en;q=0.5',
15
- 'Connection': 'keep-alive',
16
- 'DNT': '1',
17
- 'Upgrade-Insecure-Requests': '1'
18
- }
19
- start_time = time.time()
20
- try:
21
- async with session.get(url, headers=headers, ssl=False, timeout=30) as response:
22
- await response.read() # ์‹ค์ œ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ฝ์Œ
23
- end_time = time.time()
24
- return {
25
- 'session_id': session_id,
26
- 'request_id': request_id,
27
- 'status': response.status,
28
- 'time': end_time - start_time,
29
- 'timestamp': datetime.now().strftime('%H:%M:%S.%f')[:-3]
30
- }
31
- except Exception as e:
32
- end_time = time.time()
33
- return {
34
- 'session_id': session_id,
35
- 'request_id': request_id,
36
- 'status': f"Error: {str(e)}",
37
- 'time': end_time - start_time,
38
- 'timestamp': datetime.now().strftime('%H:%M:%S.%f')[:-3]
39
- }
40
-
41
- async def run_session(url, session_id, num_requests, progress_queue):
42
- """๊ฐ ์„ธ์…˜์˜ ์š”์ฒญ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜"""
43
- tasks = []
44
- for i in range(num_requests):
45
- task = make_session_request(url, session_id, i+1)
46
- tasks.append(task)
47
- await asyncio.sleep(random.uniform(0.1, 0.5)) # ์ž์—ฐ์Šค๋Ÿฌ์šด ์š”์ฒญ ๊ฐ„๊ฒฉ
48
-
49
- results = await asyncio.gather(*tasks)
50
- await progress_queue.put((session_id, len(results)))
51
- return results
52
-
53
- async def load_test(url, num_sessions, requests_per_session, progress=gr.Progress()):
54
- """๋ฉ”์ธ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜"""
55
- if not url.startswith(('http://', 'https://')):
56
- url = 'http://' + url
57
-
58
- start_time = time.time()
59
- progress_queue = asyncio.Queue()
60
- total_requests = num_sessions * requests_per_session
61
- completed_requests = 0
62
-
63
- # ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜
64
- async def monitor_progress():
65
- nonlocal completed_requests
66
- while completed_requests < total_requests:
67
- session_id, count = await progress_queue.get()
68
- completed_requests += count
69
- progress(completed_requests / total_requests,
70
- desc=f"์ง„ํ–‰ ์ค‘... ({completed_requests}/{total_requests} requests)")
71
-
72
- # ๋ชจ๋“  ์„ธ์…˜ ์‹œ์ž‘
73
- tasks = []
74
- for session_id in range(num_sessions):
75
- task = run_session(url, session_id + 1, requests_per_session, progress_queue)
76
- tasks.append(task)
77
-
78
- # ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ํƒœ์Šคํฌ ์‹œ์ž‘
79
- monitor_task = asyncio.create_task(monitor_progress())
80
-
81
- # ๋ชจ๋“  ์„ธ์…˜์˜ ๊ฒฐ๊ณผ ์ˆ˜์ง‘
82
- all_results = []
83
- for session_results in await asyncio.gather(*tasks):
84
- all_results.extend(session_results)
85
-
86
- await monitor_task
87
-
88
- end_time = time.time()
89
- total_time = end_time - start_time
90
-
91
- # ๊ฒฐ๊ณผ ๋ถ„์„
92
- success_count = sum(1 for r in all_results if isinstance(r['status'], int) and 200 <= r['status'] < 300)
93
- failed_count = len(all_results) - success_count
94
- response_times = [r['time'] for r in all_results]
95
-
96
- result_text = f"""ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ:
97
- ======================
98
- ์ด ์„ธ์…˜ ์ˆ˜: {num_sessions}
99
- ์„ธ์…˜๋‹น ์š”์ฒญ ์ˆ˜: {requests_per_session}
100
- ์ด ์š”์ฒญ ์ˆ˜: {total_requests}
101
- ์„ฑ๊ณต: {success_count}
102
- ์‹คํŒจ: {failed_count}
103
- ์ด ์†Œ์š” ์‹œ๊ฐ„: {total_time:.2f}์ดˆ
104
- ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜: {total_requests/total_time:.1f}
105
-
106
- ์‘๋‹ต ์‹œ๊ฐ„ ํ†ต๊ณ„:
107
- - ํ‰๊ท : {sum(response_times)/len(response_times):.3f}์ดˆ
108
- - ์ตœ์†Œ: {min(response_times):.3f}์ดˆ
109
- - ์ตœ๋Œ€: {max(response_times):.3f}์ดˆ
110
-
111
- ์ƒ์„ธ ์š”์ฒญ ๋กœ๊ทธ:
112
- ======================
113
  """
114
-
115
- all_results.sort(key=lambda x: x['timestamp'])
116
- for r in all_results[:50]: # ์ฒ˜์Œ 50๊ฐœ ์š”์ฒญ๋งŒ ํ‘œ์‹œ
117
- result_text += f"[{r['timestamp']}] Session {r['session_id']:2d} - Request {r['request_id']:3d} - Status: {r['status']} - Time: {r['time']:.3f}s\n"
118
-
119
- if len(all_results) > 50:
120
- result_text += f"\n... ๋ฐ {len(all_results) - 50}๊ฐœ์˜ ์ถ”๊ฐ€ ์š”์ฒญ"
121
-
122
- return result_text
123
-
124
- def sync_load_test(url, num_sessions, requests_per_session, progress=gr.Progress()):
125
- return asyncio.run(load_test(url, int(num_sessions), int(requests_per_session), progress))
126
-
127
- with gr.Blocks() as demo:
128
- gr.Markdown("# ๋™์‹œ ์ ‘์† ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ")
129
-
130
- with gr.Row():
131
- url_input = gr.Textbox(
132
- label="๋Œ€์ƒ URL",
133
- placeholder="example.com or http://example.com"
134
- )
135
-
136
- with gr.Row():
137
- session_count = gr.Number(
138
- label="๋™์‹œ ์„ธ์…˜ ์ˆ˜",
139
- value=10,
140
- minimum=1,
141
- maximum=100,
142
- step=1
143
- )
144
- requests_per_session = gr.Number(
145
- label="์„ธ์…˜๋‹น ์š”์ฒญ ์ˆ˜",
146
- value=10,
147
- minimum=1,
148
- maximum=100,
149
- step=1
150
- )
151
-
152
- with gr.Row():
153
- test_button = gr.Button("ํ…Œ์ŠคํŠธ ์‹œ์ž‘", variant="primary")
154
-
155
- with gr.Row():
156
- output = gr.Textbox(
157
- label="ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ",
158
- lines=30
159
- )
160
-
161
- test_button.click(
162
- fn=sync_load_test,
163
- inputs=[url_input, session_count, requests_per_session],
164
- outputs=output
165
- )
166
 
167
- demo.queue()
168
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ import utils
3
+
4
+ def choose_encode(inp_im, inp_mark, cho):
5
+ if cho == "stegan":
6
+ out_im, out_msg = utils.encode(inp_im, inp_mark)
7
+ return out_im, out_msg
8
+ if cho == "pnginfo":
9
+ out_im, out_msg = utils.png_encode(inp_im, inp_mark)
10
+ return out_im, out_msg
11
+
12
+ css = """
13
+ footer {
14
+ visibility: hidden;
15
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ with gr.Blocks(css=css) as app:
19
+ gr.HTML("""<a href="https://visitorbadge.io/status?path=https%3A%2F%2Ffantos-watermark.hf.space">
20
+ <img src="https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Ffantos-watermark.hf.space&countColor=%23263759" />
21
+ </a>""")
22
+
23
+ with gr.Tab("Add Watermark"):
24
+ cho = gr.Radio(choices=["stegan", "pnginfo"], value="stegan")
25
+ with gr.Row():
26
+ with gr.Column():
27
+ inp_im = gr.Image(label="Input Image", type="filepath")
28
+ inp_mark = gr.Textbox(label="Watermark")
29
+ mark_btn = gr.Button("Add Watermark")
30
+ msg_box = gr.Textbox(label="System Message")
31
+ with gr.Column():
32
+ out_im = gr.Image(label="Watermarked Image")
33
+
34
+ with gr.Tab("Detect Watermark"):
35
+ with gr.Row():
36
+ with gr.Column():
37
+ det_im = gr.Image(label="Watermarked Image", type="filepath")
38
+ det_btn = gr.Button("Detect")
39
+ with gr.Column():
40
+ det_msg = gr.Textbox(label="Detected Watermark", lines=6, max_lines=50)
41
+
42
+ mark_btn.click(choose_encode, [inp_im, inp_mark, cho], [out_im, msg_box])
43
+ det_btn.click(utils.decode, [det_im], det_msg)
44
+
45
+ app.launch()