Exemple #1
0
def speak(person_name, location_name, ignore_motion, ignore_confirmation,
          voice_id, no_audio, simulate, fail_confirm):
    try:
        while True:
            click.echo("Checking for messages . . .")

            lm = LocationManager()
            loc = lm.get_location(location_name)
            if not ignore_motion and not loc.is_motion:
                print 'Exiting. No motion detected at ' + location_name
                exit(1)
            speaker = Speaker(NoAudio=no_audio)
            message_manager = MessageManager(LocationName=location_name)
            click.echo('getting files')
            cache_manager = CacheManager(BucketName='pollexy-media',
                                         CacheName='chimes')
            cache_manager.sync_remote_folder()
            print 'Writing speech'
            vid, speech = message_manager.write_speech(PersonName=person_name)
            if vid:
                voice_id = vid
            if not speech:
                print "I have nothing to say"
                message_manager.delete_sqs_msgs()
            else:
                print "Speech:\n\n%s" % speech
                try:
                    pm = PersonManager()
                    p = pm.get_person(person_name)
                    do_speech = True
                    if fail_confirm:
                        logging.warning("FORCE FAILING confirmation")
                        reason, do_speech = "NoResponse", False

                    elif not no_audio and p.require_physical_confirmation and \
                            not ignore_confirmation:
                        lv = LocationVerification(PersonName=person_name,
                                                  LocationName=location_name,
                                                  VoiceId=voice_id)
                        do_speech, retry_count, timeout = \
                            lv.verify_person_at_location(SpeechMethod=say)

                    if do_speech:
                        speaker = Speaker(NoAudio=no_audio)
                        speaker.generate_audio(Message=speech,
                                               TextType='ssml',
                                               VoiceId=voice_id)
                        speaker.speak(IncludeChime=True)
                        message_manager.succeed_speech(dont_delete=simulate)
                    else:
                        message_manager.fail_speech(Reason=reason)
                finally:
                    speaker.cleanup()

    except Exception as exc:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print repr(
            traceback.format_exception(exc_type, exc_value, exc_traceback))
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemple #2
0
def say(**kwargs):
    msg = kwargs.get('Message')
    voice = kwargs.get('VoiceId', 'Joanna')
    include_chime = kwargs.get('IncludeChime', True)
    s = Speaker()
    s.generate_audio(Message=msg, TextType='text', VoiceId=voice)
    s.speak(IncludeChime=include_chime)
Exemple #3
0
 def __init__(self):
     super(ArrivalPoint, self).__init__()
     # Загрузить форму
     self.mainWindow = uic.loadUi("./uis/arrivalPoint.ui")
     # Подключить действие по нажатию Enter
     self.mainWindow.rfidInput.returnPressed.connect(self.read_rfid)
     self.return_timer = QtCore.QTimer()
     self.return_timer.timeout.connect(self.return_to_input)
     self.return_timer.setInterval(msg_time)
     self.mainWindow.sampleLabel.setVisible(False)
     # Сохранить текст, чтобы не потерять форматирование
     self.success_header = self.mainWindow.successHeaderLabel.text()
     self.success_middle = self.mainWindow.successMiddleLabel.text()
     self.error_middle = self.mainWindow.errorMiddleLabel2.text()
     # Окно без заголовка
     self.mainWindow.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
     # При открытии окна, оно будет развернуто на всю доступную область
     self.mainWindow.setGeometry(
         QtWidgets.QDesktopWidget().availableGeometry())
     self.mainWindow.show()
     # Синтез речи в отдельном потоке
     self.speaker = Speaker()
Exemple #4
0
def teach(no_audio, voice_id):
    try:
        c = ConfigHelper().config
        cache_manager = CacheManager(BucketName='pollexy-media',
                                     CacheName='chimes')
        cache_manager.sync_remote_folder()
        chime = c['teach_chime']
        speech = random.choice(c['teach_phrases'])
        speaker = Speaker(NoAudio=no_audio)
        logging.info('Teach phrase={}'.format(speech))
        speaker.generate_audio(Message=speech, TextType='text',
                               VoiceId=voice_id)
        speaker.speak(IncludeChime=True, Chime=chime)
        speaker.cleanup()

    except Exception as exc:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print repr(traceback.format_exception(exc_type, exc_value,
                   exc_traceback))
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemple #5
0
# Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Amazon Software License (the "License"). You may not
# use this file except in compliance with the License. A copy of the
# License is located at:
#    http://aws.amazon.com/asl/
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, expressi
# or implied. See the License for the specific language governing permissions
# and limitations under the License.

from speaker.speaker import Speaker
import boto3
import arrow

client = boto3.client('polly')
response = client.describe_voices(LanguageCode='en-AU')
d = arrow.utcnow().format('dddd, MMMM DD, YYYY')
s = Speaker(NoAudio=False)
voice_id = 'Joanna'
# for voice in response["Voices"]:
#    voice_id = voice["Id"]
#    print voice_id + " . . ."
s.just_say(Message="Calvin. Miss Kelly is outside your bedroom. Open your " +
           " bedroom door. Open your bedroom door and give her a hug.",
           VoiceId=voice_id,
           IncludeChime=True)
s.cleanup()
Exemple #6
0
 def speak(self, **kwargs):
     msg = kwargs.get('Message')
     s = Speaker(VoiceId=self.voice_id)
     s.generate_audio(Message=msg, TextType='text')
     s.speak(IncludeChime=False)
Exemple #7
0
def say(message, voice_id, include_chime):
    s = Speaker()
    s.generate_audio(Message=message, TextType='text',
                     VoiceId=voice_id)
    s.speak(IncludeChime=include_chime)
Exemple #8
0
def speak(person_name,
          location_name,
          ignore_motion,
          ignore_confirmation,
          voice_id,
          no_audio,
          simulate,
          fail_confirm,
          verbose):
    log = logging.getLogger('PollexyCli')
    if verbose:
        os.environ['LOG_LEVEL'] = 'DEBUG'
        log.setLevel(logging.DEBUG)
    try:
        while True:
            lm = LocationManager()
            loc = lm.get_location(location_name)
            if not ignore_motion and not loc.is_motion:
                print 'Exiting. No motion detected at ' + location_name
                exit(1)
            speaker = Speaker(NoAudio=no_audio)
            message_manager = MessageManager(LocationName=location_name)
            bm = message_manager.get_messages(MessageType='Bot',
                                              PersonName=person_name)
            if bm and len(bm) > 0:
                log.debug('Bot count = {}'.format(len(bm)))
                for bot in bm:
                    username = str(uuid.uuid4())
                    try:
                        lp = LexPlayer(
                            BotNames=bot.bot_names,
                            Alias="$LATEST",
                            Username=username,
                            VoiceId=voice_id,
                            IceBreaker=bot.ice_breaker,
                            Introduction=bot.introduction,
                            NoAudio=no_audio,
                            BotsRequired=bot.required_bots)
                        while (not lp.is_done):
                            lp.get_user_input()
                    except Exception as e:
                        print 'Bot failed: {}'.format(e)
                        raise
                message_manager.succeed_messages(dont_delete=simulate)

            cache_manager = CacheManager(BucketName='pollexy-media',
                                         CacheName='chimes')
            cache_manager.sync_remote_folder()
            vid, speech = message_manager.write_speech(PersonName=person_name)
            if vid:
                voice_id = vid
            if not speech:
                message_manager.succeed_messages(dont_delete=simulate)
                message_manager.delete_sqs_msgs()
            else:
                try:
                    pm = PersonManager()
                    p = pm.get_person(person_name)
                    do_speech = True
                    if fail_confirm:
                        log.warn("FORCE FAILING confirmation")
                        reason, do_speech = "NoResponse", False

                    elif not no_audio and p.require_physical_confirmation and \
                            not ignore_confirmation:
                        lv = LocationVerification(PersonName=person_name,
                                                  LocationName=location_name,
                                                  VoiceId=voice_id)
                        do_speech, retry_count, timeout = \
                            lv.verify_person_at_location(SpeechMethod=say)
                    log.debug('do_speech={}'.format(bool(do_speech)))
                    if fail_confirm:
                        message_manager.fail_messages(Reason=reason)
                    else:
                        if do_speech:
                            log.debug('starting speech')
                            speaker = Speaker(NoAudio=no_audio)
                            speaker.generate_audio(Message=speech,
                                                   TextType='ssml',
                                                   VoiceId=voice_id)
                            speaker.speak(IncludeChime=True)
                        log.debug('Succeeding messages')
                        message_manager.succeed_messages(dont_delete=simulate)
                finally:
                    speaker.cleanup()

    except Exception as exc:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print repr(traceback.format_exception(exc_type, exc_value,
                   exc_traceback))
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemple #9
0
init(autoreset=True)

parser = argparse.ArgumentParser(description='An interactive bot to talk about stars and planets')
parser.add_argument('--dep_tree', default=False, type=bool, help='print dependencies tree of every heard sentence (default: False)')
parser.add_argument("--kb_file", help="file containing the knowledge-base (dafault: the last updated file in the kb directory)")

args = parser.parse_args()

# TO BUILD THE DEPENDENCIES TREE
if args.dep_tree:
    stanfordnlp.download('en')   # This downloads the English models for the neural pipeline
    print('Building pipeline...')
    nlp = stanfordnlp.Pipeline() # This sets up a default neural pipeline in English

listener = Listener()
speaker = Speaker()

bot_name = "\t\t\t\t\tAstroBot"
colorAstro = colored(bot_name +':', 'yellow')
agent = Agent(speaker, listener, colorAstro, args.kb_file)
print(f"{colorAstro} Hi, how can I help you?")
speaker.speak("Hi, how can I help you?")
while True:
    command = listener.listen()
    command = command.strip()

    if command == "exit":
        print(f"{colorAstro} Bye bye")
        speaker.speak("Bye bye")
        break
    
Exemple #10
0
class ArrivalPoint(QtWidgets.QWidget):
    def __init__(self):
        super(ArrivalPoint, self).__init__()
        # Загрузить форму
        self.mainWindow = uic.loadUi("./uis/arrivalPoint.ui")
        # Подключить действие по нажатию Enter
        self.mainWindow.rfidInput.returnPressed.connect(self.read_rfid)
        self.return_timer = QtCore.QTimer()
        self.return_timer.timeout.connect(self.return_to_input)
        self.return_timer.setInterval(msg_time)
        self.mainWindow.sampleLabel.setVisible(False)
        # Сохранить текст, чтобы не потерять форматирование
        self.success_header = self.mainWindow.successHeaderLabel.text()
        self.success_middle = self.mainWindow.successMiddleLabel.text()
        self.error_middle = self.mainWindow.errorMiddleLabel2.text()
        # Окно без заголовка
        self.mainWindow.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
        # При открытии окна, оно будет развернуто на всю доступную область
        self.mainWindow.setGeometry(
            QtWidgets.QDesktopWidget().availableGeometry())
        self.mainWindow.show()
        # Синтез речи в отдельном потоке
        self.speaker = Speaker()

    # Читать введенный номер карты
    def read_rfid(self):
        self.driver_id = rfid_to_driver(self.mainWindow.rfidInput.text())
        if self.driver_id:
            self.trip_state = trip_status(self.driver_id)
            if self.trip_state[1] == 1 or self.trip_state[1] == 5:
                self.mainWindow.stackedWidget.setCurrentIndex(1)
                self.driver_name = get_driver(self.driver_id)[0]
                self.mainWindow.successHeaderLabel.setText(
                    self.success_header.format("{} {}".format(
                        self.driver_name.split(" ")[1],
                        self.driver_name.split(" ")[2])))
                self.mainWindow.successMiddleLabel.setText(
                    self.success_middle.format(
                        QtCore.QDateTime.currentDateTime().toString(
                            "hh:mm:ss")))
                self.check_arrival()
                with open('./speaker/speech.txt', 'w') as speech:
                    speech.write(
                        arrival_success.format("{} {}".format(
                            self.driver_name.split(" ")[1],
                            self.driver_name.split(" ")[2])))
                self.speaker.start()
            elif 1 < self.trip_state[1] < 5:
                self.mainWindow.stackedWidget.setCurrentIndex(3)
                self.mainWindow.errorMiddleLabel2.setText(
                    self.error_middle.format(self.trip_state[0]))
        else:
            self.mainWindow.stackedWidget.setCurrentIndex(2)
            with open('./speaker/speech.txt', 'w') as speech:
                speech.write(arrival_error)
            self.speaker.start()
        # Включить таймер для возврата на главную страницу
        self.return_timer.start()
        self.mainWindow.rfidInput.clear()

    # Возврат на главную страницу по таймеру
    def return_to_input(self):
        self.mainWindow.stackedWidget.setCurrentIndex(0)
        self.mainWindow.sampleLabel.setVisible(False)
        self.return_timer.stop()

    # Записать в БД
    def check_arrival(self):
        self.driver_info = get_driver(self.driver_name)
        self.loadpoint = get_default_loadpoint(self.driver_info[2])
        # TODO добавить для прибывших с поля
        if self.trip_state[1] == 1:
            pass
        elif self.trip_state[1] == 5:
            record_insert(
                0, self.driver_info[0], self.driver_info[1],
                self.driver_info[2], self.loadpoint, 0,
                QtCore.QDateTime.currentDateTime().toString(
                    'yyyy-MM-dd hh:mm:ss'), False)
            self.trip_state = trip_status(self.driver_id)
            if self.trip_state[1] == 1 or self.trip_state[1] == 2:
                self.lab_line = get_lab_line(2, self.driver_info[2],
                                             self.loadpoint,
                                             shift_time(datetime.now())[0],
                                             shift_time(datetime.now())[1])
                if len(self.lab_line) > 0:
                    if (self.trip_state[0]
                            in self.lab_line) or (self.trip_state[0]
                                                  == self.lab_line[0]):
                        create_sample()
                        set_sample_number(self.trip_state[0],
                                          get_last_sample_number())
                        self.mainWindow.sampleLabel.setVisible(True)