86 lines
2.6 KiB
Bash
Executable File
86 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# wut-dl-sort-txmode-all
|
|
#
|
|
# Training of all waterfalls. Used for modes that have few samples.
|
|
#
|
|
# Populates the data/ directory from the download/dir.
|
|
# Does it just for a specific transmitter mode (encoding)
|
|
# Available encodings:
|
|
# AFSK AFSK1k2 AHRPT APT BPSK BPSK1k2 BPSK9k6 BPSK12k5 BPSK400 CERTO CW DUV
|
|
# FFSK1k2 FM FSK1k2 FSK4k8 FSK9k6 FSK19k2 GFSK1k2 GFSK2k4 GFSK4k8 GFSK9k6
|
|
# GFSK19k2 GFSK Rktr GMSK GMSK1k2 GMSK2k4 GMSK4k8 GMSK9k6 GMSK19k2 HRPT LRPT
|
|
# MSK1k2 MSK2k4 MSK4k8 PSK PSK31 SSTV USB WSJT
|
|
#
|
|
# XXX This script removes directories in data/ !!! XXX
|
|
#
|
|
# Usage:
|
|
# wut-dl-sort-txmode-all [Minimum Observation ID] [Maximum Observation ID]
|
|
# Example:
|
|
# wut-dl-sort-txmode-all 1467000 1470000
|
|
# For December, 2019 Example:
|
|
# wut-dl-sort-txmode-all 1292461 1470525
|
|
# wut-dl-sort-txmode-all 1292434 1470525
|
|
#
|
|
# * Takes the files in the download/ dir.
|
|
# * Looks at the JSON files to see if it is :good", "bad", or "failed".
|
|
# * Hard link it in the appropriate data/ directory.
|
|
# * File is randomly copied to either data/train or data/val directory.
|
|
#
|
|
# Possible vetted_status: bad, failed, good, null, unknown.
|
|
|
|
|
|
OBSENC="ALL"
|
|
OBSIDMIN="$1"
|
|
OBSIDMAX="$2"
|
|
OBSID=$OBSIDMIN
|
|
DATADIR="/srv/satnogs/data/txmodes/$OBSENC"
|
|
DOWNDIR="/srv/satnogs/download"
|
|
|
|
mkdir -p $DATADIR
|
|
cd $DATADIR || exit
|
|
|
|
# Enable the following if you want to download waterfalls in this range:
|
|
#echo "Downloading Waterfalls"
|
|
#./wut-water-range $OBSIDMIN $OBSIDMAX
|
|
|
|
# XXX remove data/train and data/val directories XXX
|
|
echo "Removing subdirectories"
|
|
rm -rf train/ val/
|
|
# Create new empty dirs
|
|
mkdir -p train/good/ train/bad/ train/failed/
|
|
mkdir -p val/good/ val/bad/ val/failed/
|
|
|
|
# Then parse each file and link appropriately
|
|
echo "Parsing download/ directory for observation IDs $OBSIDMIN to $OBSIDMAX"
|
|
cd $DOWNDIR || exit
|
|
|
|
while [ $OBSID -lt $OBSIDMAX ]
|
|
do cd $OBSID
|
|
VET=`cat $OBSID.json | jq --compact-output '.[0] | {vetted_status}' | cut -f 2 -d ":" | sed -e 's/}//g' -e 's/"//g'`
|
|
ENC=`cat $OBSID.json | jq --compact-output '.[0] | {transmitter_mode}' | cut -f 2 -d ":" | sed -e 's/}//g' -e 's/"//g'`
|
|
# Do all of them
|
|
if [ "$OBSENC" = "$OBSENC" ] ; then
|
|
RAND_DIR=`echo $((0 + RANDOM % 2))`
|
|
if [ $RAND_DIR = 1 ] ; then
|
|
CLASS_DIR="train"
|
|
else
|
|
CLASS_DIR="val"
|
|
fi
|
|
case "$VET" in
|
|
bad) ln waterfall_$OBSID_*.png $DATADIR/$CLASS_DIR/$VET/
|
|
;;
|
|
good) ln waterfall_$OBSID_*.png $DATADIR/$CLASS_DIR/$VET/
|
|
;;
|
|
failed) ln waterfall_$OBSID_*.png $DATADIR/$CLASS_DIR/$VET/
|
|
;;
|
|
null) echo "null, not copying"
|
|
;;
|
|
unknown) echo "unknown, not copying"
|
|
;;
|
|
esac
|
|
fi
|
|
let OBSID=$OBSID+1
|
|
cd ..
|
|
done
|
|
|