|
import os |
|
from collections import defaultdict, namedtuple |
|
from datetime import datetime, timedelta |
|
from json import dumps |
|
|
|
import numpy as np |
|
import tensorflow as tf |
|
|
|
from model import ModelConfig, UNet |
|
from postprocess import extract_amplitude, extract_picks |
|
import pandas as pd |
|
import obspy |
|
|
|
|
|
tf.compat.v1.disable_eager_execution() |
|
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) |
|
PROJECT_ROOT = os.path.realpath(os.path.join(os.path.dirname(__file__), "..")) |
|
|
|
|
|
model = UNet(mode="pred") |
|
sess_config = tf.compat.v1.ConfigProto() |
|
sess_config.gpu_options.allow_growth = True |
|
|
|
sess = tf.compat.v1.Session(config=sess_config) |
|
saver = tf.compat.v1.train.Saver(tf.compat.v1.global_variables()) |
|
init = tf.compat.v1.global_variables_initializer() |
|
sess.run(init) |
|
latest_check_point = tf.train.latest_checkpoint(f"{PROJECT_ROOT}/model/190703-214543") |
|
print(f"restoring model {latest_check_point}") |
|
saver.restore(sess, latest_check_point) |
|
|
|
|
|
def calc_timestamp(timestamp, sec): |
|
timestamp = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f") + timedelta(seconds=sec) |
|
return timestamp.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] |
|
|
|
def format_picks(picks, dt): |
|
picks_ = [] |
|
for pick in picks: |
|
for idxs, probs in zip(pick.p_idx, pick.p_prob): |
|
for idx, prob in zip(idxs, probs): |
|
picks_.append( |
|
{ |
|
"id": pick.fname, |
|
"timestamp": calc_timestamp(pick.t0, float(idx) * dt), |
|
"prob": prob, |
|
"type": "p", |
|
} |
|
) |
|
for idxs, probs in zip(pick.s_idx, pick.s_prob): |
|
for idx, prob in zip(idxs, probs): |
|
picks_.append( |
|
{ |
|
"id": pick.fname, |
|
"timestamp": calc_timestamp(pick.t0, float(idx) * dt), |
|
"prob": prob, |
|
"type": "s", |
|
} |
|
) |
|
return picks_ |
|
|
|
|
|
stream = obspy.read() |
|
stream = stream.sort() |
|
assert(len(stream) == 3) |
|
data = [] |
|
for trace in stream: |
|
data.append(trace.data) |
|
data = np.array(data).T |
|
assert(data.shape[-1] == 3) |
|
|
|
|
|
|
|
|
|
data = np.stack([data for i in range(10)]) |
|
data = data[:,:,np.newaxis,:] |
|
print(f"{data.shape = }") |
|
data = (data - data.mean(axis=1, keepdims=True))/data.std(axis=1, keepdims=True) |
|
|
|
feed = {model.X: data, model.drop_rate: 0, model.is_training: False} |
|
preds = sess.run(model.preds, feed_dict=feed) |
|
|
|
picks = extract_picks(preds, fnames=None, station_ids=None, t0=None) |
|
picks = format_picks(picks, dt=0.01) |
|
|
|
|
|
picks = pd.DataFrame(picks) |
|
print(picks) |