dbb14cae69
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.
139 lines
4.0 KiB
Python
Executable File
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()
|