Spaces:
Runtime error
Runtime error
section plot now works
Browse files- Gradio_app.ipynb +83 -28
- app.py +31 -14
- requirements.txt +1 -0
Gradio_app.ipynb
CHANGED
|
@@ -152,7 +152,28 @@
|
|
| 152 |
},
|
| 153 |
{
|
| 154 |
"cell_type": "code",
|
| 155 |
-
"execution_count":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
"metadata": {},
|
| 157 |
"outputs": [
|
| 158 |
{
|
|
@@ -167,7 +188,7 @@
|
|
| 167 |
"name": "stdout",
|
| 168 |
"output_type": "stream",
|
| 169 |
"text": [
|
| 170 |
-
"Running on local URL: http://127.0.0.1:
|
| 171 |
"\n",
|
| 172 |
"To create a public link, set `share=True` in `launch()`.\n"
|
| 173 |
]
|
|
@@ -175,7 +196,7 @@
|
|
| 175 |
{
|
| 176 |
"data": {
|
| 177 |
"text/html": [
|
| 178 |
-
"<div><iframe src=\"http://127.0.0.1:
|
| 179 |
],
|
| 180 |
"text/plain": [
|
| 181 |
"<IPython.core.display.HTML object>"
|
|
@@ -188,16 +209,9 @@
|
|
| 188 |
"data": {
|
| 189 |
"text/plain": []
|
| 190 |
},
|
| 191 |
-
"execution_count":
|
| 192 |
"metadata": {},
|
| 193 |
"output_type": "execute_result"
|
| 194 |
-
},
|
| 195 |
-
{
|
| 196 |
-
"name": "stdout",
|
| 197 |
-
"output_type": "stream",
|
| 198 |
-
"text": [
|
| 199 |
-
"torch.Size([256])\n"
|
| 200 |
-
]
|
| 201 |
}
|
| 202 |
],
|
| 203 |
"source": [
|
|
@@ -205,6 +219,7 @@
|
|
| 205 |
"\n",
|
| 206 |
"import gradio as gr\n",
|
| 207 |
"import numpy as np\n",
|
|
|
|
| 208 |
"from phasehunter.model import Onset_picker, Updated_onset_picker\n",
|
| 209 |
"from phasehunter.data_preparation import prepare_waveform\n",
|
| 210 |
"import torch\n",
|
|
@@ -221,6 +236,7 @@
|
|
| 221 |
"from obspy.clients.fdsn.header import URL_MAPPINGS\n",
|
| 222 |
"\n",
|
| 223 |
"import matplotlib.pyplot as plt\n",
|
|
|
|
| 224 |
"\n",
|
| 225 |
"def make_prediction(waveform):\n",
|
| 226 |
" waveform = np.load(waveform)\n",
|
|
@@ -328,7 +344,10 @@
|
|
| 328 |
" continue\n",
|
| 329 |
"\n",
|
| 330 |
" if len(waveform) == 3:\n",
|
| 331 |
-
"
|
|
|
|
|
|
|
|
|
|
| 332 |
" \n",
|
| 333 |
" distances.append(distance)\n",
|
| 334 |
" t0s.append(starttime)\n",
|
|
@@ -346,19 +365,31 @@
|
|
| 346 |
" p_phases = output[:, 0]\n",
|
| 347 |
" s_phases = output[:, 1]\n",
|
| 348 |
"\n",
|
| 349 |
-
"\n",
|
| 350 |
-
"
|
| 351 |
-
"
|
| 352 |
-
"
|
| 353 |
-
"
|
| 354 |
-
"
|
| 355 |
-
"
|
| 356 |
-
"
|
| 357 |
-
"
|
| 358 |
-
"
|
| 359 |
-
"
|
| 360 |
-
"
|
| 361 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 362 |
" image = np.array(fig.canvas.renderer.buffer_rgba())\n",
|
| 363 |
" plt.close(fig)\n",
|
| 364 |
"\n",
|
|
@@ -470,10 +501,34 @@
|
|
| 470 |
},
|
| 471 |
{
|
| 472 |
"cell_type": "code",
|
| 473 |
-
"execution_count":
|
| 474 |
"metadata": {},
|
| 475 |
-
"outputs": [
|
| 476 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 477 |
}
|
| 478 |
],
|
| 479 |
"metadata": {
|
|
|
|
| 152 |
},
|
| 153 |
{
|
| 154 |
"cell_type": "code",
|
| 155 |
+
"execution_count": 75,
|
| 156 |
+
"metadata": {},
|
| 157 |
+
"outputs": [
|
| 158 |
+
{
|
| 159 |
+
"ename": "NameError",
|
| 160 |
+
"evalue": "name 't0s' is not defined",
|
| 161 |
+
"output_type": "error",
|
| 162 |
+
"traceback": [
|
| 163 |
+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
| 164 |
+
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
|
| 165 |
+
"Cell \u001b[0;32mIn[75], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpandas\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpd\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m pd\u001b[39m.\u001b[39mdate_range(start\u001b[39m=\u001b[39mt0s[i], periods\u001b[39m=\u001b[39mwaveforms[i][\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39mshape[\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m], freq\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39m1s\u001b[39m\u001b[39m'\u001b[39m)\n",
|
| 166 |
+
"\u001b[0;31mNameError\u001b[0m: name 't0s' is not defined"
|
| 167 |
+
]
|
| 168 |
+
}
|
| 169 |
+
],
|
| 170 |
+
"source": [
|
| 171 |
+
"import pandas as pd\n"
|
| 172 |
+
]
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"cell_type": "code",
|
| 176 |
+
"execution_count": 114,
|
| 177 |
"metadata": {},
|
| 178 |
"outputs": [
|
| 179 |
{
|
|
|
|
| 188 |
"name": "stdout",
|
| 189 |
"output_type": "stream",
|
| 190 |
"text": [
|
| 191 |
+
"Running on local URL: http://127.0.0.1:7935\n",
|
| 192 |
"\n",
|
| 193 |
"To create a public link, set `share=True` in `launch()`.\n"
|
| 194 |
]
|
|
|
|
| 196 |
{
|
| 197 |
"data": {
|
| 198 |
"text/html": [
|
| 199 |
+
"<div><iframe src=\"http://127.0.0.1:7935/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
|
| 200 |
],
|
| 201 |
"text/plain": [
|
| 202 |
"<IPython.core.display.HTML object>"
|
|
|
|
| 209 |
"data": {
|
| 210 |
"text/plain": []
|
| 211 |
},
|
| 212 |
+
"execution_count": 114,
|
| 213 |
"metadata": {},
|
| 214 |
"output_type": "execute_result"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
}
|
| 216 |
],
|
| 217 |
"source": [
|
|
|
|
| 219 |
"\n",
|
| 220 |
"import gradio as gr\n",
|
| 221 |
"import numpy as np\n",
|
| 222 |
+
"import pandas as pd\n",
|
| 223 |
"from phasehunter.model import Onset_picker, Updated_onset_picker\n",
|
| 224 |
"from phasehunter.data_preparation import prepare_waveform\n",
|
| 225 |
"import torch\n",
|
|
|
|
| 236 |
"from obspy.clients.fdsn.header import URL_MAPPINGS\n",
|
| 237 |
"\n",
|
| 238 |
"import matplotlib.pyplot as plt\n",
|
| 239 |
+
"import matplotlib.dates as mdates\n",
|
| 240 |
"\n",
|
| 241 |
"def make_prediction(waveform):\n",
|
| 242 |
" waveform = np.load(waveform)\n",
|
|
|
|
| 344 |
" continue\n",
|
| 345 |
"\n",
|
| 346 |
" if len(waveform) == 3:\n",
|
| 347 |
+
" try:\n",
|
| 348 |
+
" waveform = prepare_waveform(np.stack([x.data for x in waveform]))\n",
|
| 349 |
+
" except:\n",
|
| 350 |
+
" continue\n",
|
| 351 |
" \n",
|
| 352 |
" distances.append(distance)\n",
|
| 353 |
" t0s.append(starttime)\n",
|
|
|
|
| 365 |
" p_phases = output[:, 0]\n",
|
| 366 |
" s_phases = output[:, 1]\n",
|
| 367 |
"\n",
|
| 368 |
+
" fig, ax = plt.subplots(nrows=1, figsize=(10, 3), sharex=True)\n",
|
| 369 |
+
" for i in range(len(waveforms)):\n",
|
| 370 |
+
" current_P = p_phases[i::len(waveforms)]\n",
|
| 371 |
+
" current_S = s_phases[i::len(waveforms)]\n",
|
| 372 |
+
" x = [t0s[i] + pd.Timedelta(seconds=k/100) for k in np.linspace(0,6000,6000)]\n",
|
| 373 |
+
" x = mdates.date2num(x)\n",
|
| 374 |
+
" ax.plot(x, waveforms[i][0, 0]+distances[i]*111.2, color='black', alpha=0.5)\n",
|
| 375 |
+
" ax.scatter(x[int(current_P.mean()*waveforms[i][0].shape[-1])], waveforms[i][0, 0].mean()+distances[i]*111.2, color='r')\n",
|
| 376 |
+
" ax.scatter(x[int(current_S.mean()*waveforms[i][0].shape[-1])], waveforms[i][0, 0].mean()+distances[i]*111.2, color='b')\n",
|
| 377 |
+
" ax.set_ylabel('Z')\n",
|
| 378 |
+
"\n",
|
| 379 |
+
" ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))\n",
|
| 380 |
+
" ax.xaxis.set_major_locator(mdates.SecondLocator(interval=10))\n",
|
| 381 |
+
"\n",
|
| 382 |
+
" # for a in ax:\n",
|
| 383 |
+
" # a.axvline(current_P.mean()*waveforms[i][0].shape[-1], color='r', linestyle='--', label='P')\n",
|
| 384 |
+
" # a.axvline(current_S.mean()*waveforms[i][0].shape[-1], color='b', linestyle='--', label='S')\n",
|
| 385 |
+
"\n",
|
| 386 |
+
" # ax[-1].set_xlabel('Time, samples')\n",
|
| 387 |
+
" # ax[-1].set_ylabel('Uncert.')\n",
|
| 388 |
+
" # ax[-1].legend()\n",
|
| 389 |
+
"\n",
|
| 390 |
+
" plt.subplots_adjust(hspace=0., wspace=0.)\n",
|
| 391 |
+
" \n",
|
| 392 |
+
" fig.canvas.draw();\n",
|
| 393 |
" image = np.array(fig.canvas.renderer.buffer_rgba())\n",
|
| 394 |
" plt.close(fig)\n",
|
| 395 |
"\n",
|
|
|
|
| 501 |
},
|
| 502 |
{
|
| 503 |
"cell_type": "code",
|
| 504 |
+
"execution_count": 105,
|
| 505 |
"metadata": {},
|
| 506 |
+
"outputs": [
|
| 507 |
+
{
|
| 508 |
+
"data": {
|
| 509 |
+
"text/plain": [
|
| 510 |
+
"DatetimeIndex(['2019-07-04 17:33:49', '2019-07-04 17:33:50',\n",
|
| 511 |
+
" '2019-07-04 17:33:51', '2019-07-04 17:33:52',\n",
|
| 512 |
+
" '2019-07-04 17:33:53', '2019-07-04 17:33:54',\n",
|
| 513 |
+
" '2019-07-04 17:33:55', '2019-07-04 17:33:56',\n",
|
| 514 |
+
" '2019-07-04 17:33:57', '2019-07-04 17:33:58',\n",
|
| 515 |
+
" ...\n",
|
| 516 |
+
" '2019-07-04 19:13:39', '2019-07-04 19:13:40',\n",
|
| 517 |
+
" '2019-07-04 19:13:41', '2019-07-04 19:13:42',\n",
|
| 518 |
+
" '2019-07-04 19:13:43', '2019-07-04 19:13:44',\n",
|
| 519 |
+
" '2019-07-04 19:13:45', '2019-07-04 19:13:46',\n",
|
| 520 |
+
" '2019-07-04 19:13:47', '2019-07-04 19:13:48'],\n",
|
| 521 |
+
" dtype='datetime64[ns]', length=6000, freq='S')"
|
| 522 |
+
]
|
| 523 |
+
},
|
| 524 |
+
"execution_count": 105,
|
| 525 |
+
"metadata": {},
|
| 526 |
+
"output_type": "execute_result"
|
| 527 |
+
}
|
| 528 |
+
],
|
| 529 |
+
"source": [
|
| 530 |
+
"pd.date_range(start=obspy.UTCDateTime(\"2019-07-04 17:33:49\").timestamp*1e9, periods=6000, freq='s')"
|
| 531 |
+
]
|
| 532 |
}
|
| 533 |
],
|
| 534 |
"metadata": {
|
app.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
import numpy as np
|
|
|
|
| 5 |
from phasehunter.model import Onset_picker, Updated_onset_picker
|
| 6 |
from phasehunter.data_preparation import prepare_waveform
|
| 7 |
import torch
|
|
@@ -18,6 +19,7 @@ from obspy.taup.helper_classes import SlownessModelError
|
|
| 18 |
from obspy.clients.fdsn.header import URL_MAPPINGS
|
| 19 |
|
| 20 |
import matplotlib.pyplot as plt
|
|
|
|
| 21 |
|
| 22 |
def make_prediction(waveform):
|
| 23 |
waveform = np.load(waveform)
|
|
@@ -125,7 +127,10 @@ def predict_on_section(client_name, timestamp, eq_lat, eq_lon, radius_km, source
|
|
| 125 |
continue
|
| 126 |
|
| 127 |
if len(waveform) == 3:
|
| 128 |
-
|
|
|
|
|
|
|
|
|
|
| 129 |
|
| 130 |
distances.append(distance)
|
| 131 |
t0s.append(starttime)
|
|
@@ -143,19 +148,31 @@ def predict_on_section(client_name, timestamp, eq_lat, eq_lon, radius_km, source
|
|
| 143 |
p_phases = output[:, 0]
|
| 144 |
s_phases = output[:, 1]
|
| 145 |
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
image = np.array(fig.canvas.renderer.buffer_rgba())
|
| 160 |
plt.close(fig)
|
| 161 |
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
import numpy as np
|
| 5 |
+
import pandas as pd
|
| 6 |
from phasehunter.model import Onset_picker, Updated_onset_picker
|
| 7 |
from phasehunter.data_preparation import prepare_waveform
|
| 8 |
import torch
|
|
|
|
| 19 |
from obspy.clients.fdsn.header import URL_MAPPINGS
|
| 20 |
|
| 21 |
import matplotlib.pyplot as plt
|
| 22 |
+
import matplotlib.dates as mdates
|
| 23 |
|
| 24 |
def make_prediction(waveform):
|
| 25 |
waveform = np.load(waveform)
|
|
|
|
| 127 |
continue
|
| 128 |
|
| 129 |
if len(waveform) == 3:
|
| 130 |
+
try:
|
| 131 |
+
waveform = prepare_waveform(np.stack([x.data for x in waveform]))
|
| 132 |
+
except:
|
| 133 |
+
continue
|
| 134 |
|
| 135 |
distances.append(distance)
|
| 136 |
t0s.append(starttime)
|
|
|
|
| 148 |
p_phases = output[:, 0]
|
| 149 |
s_phases = output[:, 1]
|
| 150 |
|
| 151 |
+
fig, ax = plt.subplots(nrows=1, figsize=(10, 3), sharex=True)
|
| 152 |
+
for i in range(len(waveforms)):
|
| 153 |
+
current_P = p_phases[i::len(waveforms)]
|
| 154 |
+
current_S = s_phases[i::len(waveforms)]
|
| 155 |
+
x = [t0s[i] + pd.Timedelta(seconds=k/100) for k in np.linspace(0,6000,6000)]
|
| 156 |
+
x = mdates.date2num(x)
|
| 157 |
+
ax.plot(x, waveforms[i][0, 0]+distances[i]*111.2, color='black', alpha=0.5)
|
| 158 |
+
ax.scatter(x[int(current_P.mean()*waveforms[i][0].shape[-1])], waveforms[i][0, 0].mean()+distances[i]*111.2, color='r')
|
| 159 |
+
ax.scatter(x[int(current_S.mean()*waveforms[i][0].shape[-1])], waveforms[i][0, 0].mean()+distances[i]*111.2, color='b')
|
| 160 |
+
ax.set_ylabel('Z')
|
| 161 |
+
|
| 162 |
+
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
|
| 163 |
+
ax.xaxis.set_major_locator(mdates.SecondLocator(interval=10))
|
| 164 |
+
|
| 165 |
+
# for a in ax:
|
| 166 |
+
# a.axvline(current_P.mean()*waveforms[i][0].shape[-1], color='r', linestyle='--', label='P')
|
| 167 |
+
# a.axvline(current_S.mean()*waveforms[i][0].shape[-1], color='b', linestyle='--', label='S')
|
| 168 |
+
|
| 169 |
+
# ax[-1].set_xlabel('Time, samples')
|
| 170 |
+
# ax[-1].set_ylabel('Uncert.')
|
| 171 |
+
# ax[-1].legend()
|
| 172 |
+
|
| 173 |
+
plt.subplots_adjust(hspace=0., wspace=0.)
|
| 174 |
+
|
| 175 |
+
fig.canvas.draw();
|
| 176 |
image = np.array(fig.canvas.renderer.buffer_rgba())
|
| 177 |
plt.close(fig)
|
| 178 |
|
requirements.txt
CHANGED
|
@@ -12,4 +12,5 @@ torchvision==0.15.1
|
|
| 12 |
tqdm==4.65.0
|
| 13 |
webdataset==0.2.48
|
| 14 |
obspy
|
|
|
|
| 15 |
git+http://github.com/nikitadurasov/masksembles
|
|
|
|
| 12 |
tqdm==4.65.0
|
| 13 |
webdataset==0.2.48
|
| 14 |
obspy
|
| 15 |
+
pandas
|
| 16 |
git+http://github.com/nikitadurasov/masksembles
|