Files
AvianVisitors/scripts/analyze.py
T
Jake Herbst dbb14cae69 Updating script/analyze.py to satisfy pep8 style guide and pass flake8 linting.
Used 'autopep8 --in-place --aggressive scripts/analyze.py' as initial style fixes.
Manually adjusted line lengths for parser help options.
Moved example comment to top below shebang.
2022-05-10 20:23:45 -04:00

139 lines
4.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""
# Example calls
python3 analyze.py --i 'example/XC558716 - Soundscape.mp3' \
--lat 35.4244 --lon -120.7463 --week 18
python3 analyze.py --i 'example/XC563936 - Soundscape.mp3' \
--lat 47.6766 --lon -122.294 --week 11 \
--overlap 1.5 --min_conf 0.25 --sensitivity 1.25 \
--custom_list 'example/custom_species_list.txt'
"""
import argparse
import socket
HEADER = 64
PORT = 5050
FORMAT = 'utf-8'
DISCONNECT_MESSAGE = "!DISCONNECT"
SERVER = "127.0.1.1"
ADDR = (SERVER, PORT)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
def send(msg):
message = msg.encode(FORMAT)
msg_length = len(message)
send_length = str(msg_length).encode(FORMAT)
send_length += b' ' * (HEADER - len(send_length))
client.send(send_length)
client.send(message)
print(client.recv(2048).decode(FORMAT))
def main():
global INCLUDE_LIST
global EXCLUDE_LIST
# Parse passed arguments
parser = argparse.ArgumentParser()
parser.add_argument(
'--i',
help='Path to input file.')
parser.add_argument(
'--o',
default='result.csv',
help='Path to output file. Defaults to result.csv.')
parser.add_argument(
'--lat',
type=float,
default=-1,
help='Recording location latitude. Set -1 to ignore.')
parser.add_argument(
'--lon',
type=float,
default=-1,
help='Recording location longitude. Set -1 to ignore.')
parser.add_argument(
'--week',
type=int,
default=-1,
help='''Week of the year when the recording was made.
Values in [1, 48] (4 weeks per month). Set -1 to ignore.''')
parser.add_argument(
'--overlap',
type=float,
default=0.0,
help='''Overlap in seconds between extracted spectrograms.
Values in [0.0, 2.9]. Defaults tp 0.0.''')
parser.add_argument(
'--sensitivity',
type=float,
default=1.0,
help='''Detection sensitivity;
Higher values result in higher sensitivity.
Values in [0.5, 1.5]. Defaults to 1.0.''')
parser.add_argument(
'--min_conf',
type=float,
default=0.1,
help='''Minimum confidence threshold.
Values in [0.01, 0.99]. Defaults to 0.1.''')
parser.add_argument(
'--include_list',
default='null',
help='''Path to text file containing a list of included species.
Not used if not provided.''')
parser.add_argument(
'--exclude_list',
default='null',
help='''Path to text file containing a list of excluded species.
Not used if not provided.''')
parser.add_argument(
'--birdweather_id',
default='99999',
help='Private Station ID for BirdWeather.')
args = parser.parse_args()
sockParams = ''
if args.i:
sockParams += 'i=' + args.i + '||'
if args.o:
sockParams += 'o=' + args.o + '||'
if args.birdweather_id:
sockParams += 'birdweather_id=' + args.birdweather_id + '||'
if args.include_list:
sockParams += 'include_list=' + args.include_list + '||'
if args.exclude_list:
sockParams += 'exclude_list=' + args.exclude_list + '||'
if args.overlap:
sockParams += 'overlap=' + str(args.overlap) + '||'
if args.week:
sockParams += 'week=' + str(args.week) + '||'
if args.sensitivity:
sockParams += 'sensitivity=' + str(args.sensitivity) + '||'
if args.min_conf:
sockParams += 'min_conf=' + str(args.min_conf) + '||'
if args.lat:
sockParams += 'lat=' + str(args.lat) + '||'
if args.lon:
sockParams += 'lon=' + str(args.lon) + '||'
send(sockParams)
send(DISCONNECT_MESSAGE)
# time.sleep(3)
###############################################################################
###############################################################################
if __name__ == '__main__':
main()