83 lines
3.5 KiB
Python
83 lines
3.5 KiB
Python
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()
|
|
|
|
# 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'
|