Example #1
0
def main():
    context = zmq.Context()
    socket: zmq.Socket = context.socket(zmq.PUB)

    done: zmq.Socket = context.socket(zmq.SUB)
    done.subscribe('')
    done.setsockopt(zmq.RCVTIMEO, 2000)

    socket.connect(DATA_ENDPOINT)
    done.connect(COMMAND_ENDPOINT)

    predictors = []
    models, false_model = get_models(sys.argv[1])
    for model in models:
        x = [recording for recording, _ in model]
        sample_len = int(
            np.ceil(np.average([recording_len for _, recording_len in model])))
        predictor = DTW(dtw_cost, sample_len)
        predictor.compile(dtw_k)
        predictor.train(x, [[0.0, 1.0] for _ in range(len(model))])
        predictors.append(predictor)

    def cb(found):
        socket.send_string('true' if found else 'false')
        print('found!', found)

    audio_handler = AudioHandler(cb, predictors)
    audio_handler.start()

    signal_received = False

    def signal_cb(_, __):
        nonlocal signal_received
        signal_received = True

    signal.signal(signal.SIGINT, signal_cb)
    print('started')
    socket.send_string('started')
    while not signal_received:
        try:
            string = done.recv_string()
            if string == 'done':
                signal_received = True
                break
        except zmq.ZMQError as err:
            print('Error while receiving: ', err)
        time.sleep(1)
    audio_handler.stop()
    socket.close()
    done.close()