Beispiel #1
0
        /// <summary>
        /// Преобразует речь в текст и запускает выполнение команды
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private async Task AnalizeCommandHandwritten()
        {
            string filePath = AudioRecording.RecorderPath;

            if (!String.IsNullOrEmpty(filePath))
            {
                using (var audioInput = AudioConfig.FromWavFileInput(filePath))
                {
                    using (var recognizer = new SpeechRecognizer(SpeechAnalyzer.SpeechConfiguration, audioInput))
                    {
                        var result = await recognizer.RecognizeOnceAsync();

                        if (result.Reason == ResultReason.RecognizedSpeech)
                        {
                            if (String.IsNullOrEmpty(result.Text))
                            {
                                await SpeechSyntezer.VoiceResult("Не удалось распознать речь");
                            }
                            else
                            {
                                string processedText = SpeechAnalyzer.PreprocessingCommands(result.Text);
                                await DoCommandsActionOnHandwritten(processedText);
                            }
                        }
                        else
                        {
                            await SpeechSyntezer.VoiceResult("Не удалось распознать речь");
                        }
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Распознать рукописный текст и озвучить
        /// </summary>
        /// <param name="photo"></param>
        /// <returns></returns>
        private async Task RecognizeAndVoiceHandwrittenText(MediaFile photo)
        {
            BusyIndicator.IsVisible = true;
            BusyIndicator.IsBusy    = true;

            this.BackgroundImageSource = ImageSource.FromStream(() =>
            {
                return(photo.GetStreamWithImageRotatedForExternalStorage());
            });
            try
            {
                detectedText = await TextDetector.ReadHandwrittenText(photo.Path);

                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;

                await SpeechSyntezer.VoiceResultInEnglish(detectedText);
            }
            catch (TextDetectorException ex)
            {
                await SpeechSyntezer.VoiceResultInEnglish(ex.Message);
            }
            finally
            {
                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;
            }
        }
Beispiel #3
0
        /// <summary>
        ///  Выбор фото из галереи, распознование банкноты и озвучка номинала
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void GetPhotoButton_Clicked(object sender, EventArgs e)
        {
            try
            {
                GetPhotoButton.IsEnabled = false;
                MediaFile photo = await CameraActions.GetPhoto();

                if (photo == null)
                {
                    return;
                }
                else
                {
                    await RecognizeAndVoiceBanknote(photo);
                }
            }
            catch (CameraException ex)
            {
                await SpeechSyntezer.VoiceResult(ex.Message);
            }
            catch (BanknotesDetectionException ex)
            {
                await SpeechSyntezer.VoiceResult(ex.Message);
            }
            catch (Exception)
            {
                await Navigation.PushAsync(new SomethingWentWrongPage());
            }
            finally
            {
                GetPhotoButton.IsEnabled = true;
            }
        }
Beispiel #4
0
        /// <summary>
        /// Сделать фото, распознать рукописный текст и озвучить результат
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void TakePhotoButton_Clicked(object sender, EventArgs e)
        {
            try
            {
                TakePhotoButton.IsEnabled = false;
                var photo = await CameraActions.TakePhoto();

                if (photo == null)
                {
                    return;
                }
                else
                {
                    await RecognizeAndVoiceHandwrittenText(photo);
                }
            }
            catch (CameraException ex)
            {
                await SpeechSyntezer.VoiceResult(ex.Message);
            }
            catch (Exception)
            {
                await Navigation.PushAsync(new SomethingWentWrongPage());
            }
            finally
            {
                TakePhotoButton.IsEnabled = true;
            }
        }
Beispiel #5
0
        /// <summary>
        /// Переход на следующую страницу при нажатии на кнопку
        /// </summary>
        /// <param name="obj">The Object</param>
        private void Next(object obj)
        {
            SpeechSyntezer.CancelSpeech();
            var itemCount = (obj as SfRotator).ItemsSource.Count();

            switch (selectedIndex)
            {
            case 0:
                SpeechSyntezer.VoiceResult("Сделайте фотографию на камеру или загрузите из галереи");
                break;

            case 1:
                SpeechSyntezer.VoiceResult("Подождите, когда приложение озвучит текст на фото");
                break;

            case 2:
                SpeechSyntezer.VoiceResult("Вы можете еще раз прослушать результат, нажав на кнопку повтора");
                break;

            case 3:
                SpeechSyntezer.VoiceResult("Управляйте приложением голосом используя команды. Для запуска коснитесь экрана два раза или кнопки микрофона");
                break;

            case 4:
                SpeechSyntezer.VoiceResult("Команды для главной страницы: печатный. банкноты. рукописный. помощь. Команды для функции распознования: камера. галерея. повтор. назад. ");
                break;

            default:
                break;
            }
            if (this.ValidateAndUpdateSelectedIndex(itemCount))
            {
                this.MoveToNextPage();
            }
        }
        /// <summary>
        /// Распознать печатный текст и озвучить
        /// </summary>
        /// <param name="photo"></param>
        /// <returns></returns>
        private async Task RecognizeAndVoicePrintedText(MediaFile photo)
        {
            try
            {
                BusyIndicator.IsVisible = true;
                BusyIndicator.IsBusy    = true;

                this.BackgroundImageSource = ImageSource.FromStream(() =>
                {
                    return(photo.GetStreamWithImageRotatedForExternalStorage());
                });
                detectedText = await TextDetector.ReadPrintedText(photo.Path);

                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;

                await SpeechSyntezer.VoiceResult(detectedText);
            }
            catch (TextDetectorException)
            {
                await SpeechSyntezer.VoiceResult("Ничего не распознано. Попробуйте другое фото");
            }
            finally
            {
                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;
            }
        }
        /// <summary>
        ///  Выбрать фото из галереи, распознать печтаный текст и озвучить результат
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void GetPhotoButton_Clicked(object sender, EventArgs e)
        {
            try
            {
                GetPhotoButton.IsEnabled = false;
                var photo = await CameraActions.GetPhoto();

                if (photo == null)
                {
                    return;
                }
                else
                {
                    await RecognizeAndVoicePrintedText(photo);
                }
            }
            catch (CameraException ex)
            {
                await SpeechSyntezer.VoiceResult(ex.Message);
            }
            catch (Exception ex)
            {
                await DisplayAlert("OK", ex.Message, "OK");

                await Navigation.PushAsync(new SomethingWentWrongPage());
            }
            finally
            {
                GetPhotoButton.IsEnabled = true;
            }
        }
Beispiel #8
0
        /// <summary>
        /// Выполняет задачу заданную голосом на странице рукописного текста
        /// </summary>
        /// <param name="cameraCommand"></param>
        /// <returns></returns>
        public async Task DoCommandsActionOnHandwritten(string cameraCommand)
        {
            if (cameraCommand.Length < 3)
            {
                await SpeechSyntezer.VoiceResult("Такой команды не существует");
            }
            else
            {
                if (cameraCommand.Contains("камер"))
                {
                    var photo = await CameraActions.TakePhoto();

                    if (photo == null)
                    {
                        return;
                    }
                    else
                    {
                        await RecognizeAndVoiceHandwrittenText(photo);
                    }
                    return;
                }
                if (cameraCommand.Contains("гал"))
                {
                    MediaFile photo = await CameraActions.GetPhoto();

                    if (photo == null)
                    {
                        return;
                    }
                    else
                    {
                        await RecognizeAndVoiceHandwrittenText(photo);
                    }
                    return;
                }
                if (cameraCommand.Contains("наз"))
                {
                    await Navigation.PopToRootAsync();

                    return;
                }
                if (cameraCommand.Contains("повтор"))
                {
                    if (detectedText != null)
                    {
                        SpeechSyntezer.CancelSpeech();
                        await SpeechSyntezer.VoiceResultInEnglish(detectedText);
                    }
                    return;
                }
                else
                {
                    await SpeechSyntezer.VoiceResult("Такой команды не существует");

                    return;
                }
            }
        }
Beispiel #9
0
 /// <summary>
 /// Повторно озвучить результат распознавания
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private async void RepeatButton_Clicked(object sender, EventArgs e)
 {
     if (detectedBanknote != null)
     {
         SpeechSyntezer.CancelSpeech();
         await SpeechSyntezer.VoiceResult(detectedBanknote);
     }
 }
Beispiel #10
0
 /// <summary>
 /// Повторить озвучку результатов распознавания
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private async void RepeatButton_Clicked(object sender, EventArgs e)
 {
     if (detectedText != null)
     {
         SpeechSyntezer.CancelEnglishSpeech();
         await SpeechSyntezer.VoiceResultInEnglish(detectedText);
     }
 }
Beispiel #11
0
 /// <summary>
 /// Повтроная проверка подключения к интернету
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private async void TryAgain_Clicked(object sender, EventArgs e)
 {
     if (Xamarin.Essentials.Connectivity.NetworkAccess != Xamarin.Essentials.NetworkAccess.Internet)
     {
         await SpeechSyntezer.VoiceResult("Нет Интернета");
     }
     else
     {
         await Navigation.PopToRootAsync();
     }
 }
        /// <summary>
        /// Выполняет задачу заданную голосом на главной странице
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        private async Task DoCommandActionOnMain(string command)
        {
            if (command.Length < 5)
            {
                await SpeechSyntezer.VoiceResult("Такой команды не существует.");
            }
            else
            {
                if (command.Contains("банк"))
                {
                    await Navigation.PushAsync(new BanknotesRecognitionPage());

                    return;
                }
                if (command.Contains("печат"))
                {
                    await Navigation.PushAsync(new RecognitionPrintedPage());

                    return;
                }
                if (command.Contains("рукоп"))
                {
                    await Navigation.PushAsync(new RecognitionHandwrittenPage());

                    return;
                }
                if (command.Contains("помощ"))
                {
                    await Navigation.PushAsync(new OnBoardingAnimationPage());

                    await SpeechSyntezer.VoiceResult("Выберите в главном меню нужную функцию распознавания");

                    return;
                }
                else
                {
                    await SpeechSyntezer.VoiceResult("Такой команды не существует");
                }
            }
        }
Beispiel #13
0
        /// <summary>
        /// Распознование банкноты и озвучка номинала
        /// </summary>
        /// <param name="photo"></param>
        /// <returns></returns>
        private async Task RecognizeAndVoiceBanknote(MediaFile photo)
        {
            try
            {
                BusyIndicator.IsVisible = true;
                BusyIndicator.IsBusy    = true;

                this.BackgroundImageSource = ImageSource.FromStream(() =>
                {
                    return(photo.GetStreamWithImageRotatedForExternalStorage());
                });
                detectedBanknote = await BanknotesDetector.MakeBanknotesDetectionRequest(photo.Path);

                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;

                await SpeechSyntezer.VoiceResult(detectedBanknote);
            }
            finally
            {
                BusyIndicator.IsVisible = false;
                BusyIndicator.IsBusy    = false;
            }
        }
Beispiel #14
0
 protected override void OnSleep()
 {
     SpeechSyntezer.CancelSpeech();
     SpeechSyntezer.CancelEnglishSpeech();
 }
 public RecognitionPrintedPage()
 {
     InitializeComponent();
     SpeechSyntezer.VoiceResult("Печатный текст");
 }
Beispiel #16
0
 /// <summary>
 /// Выход со страницы подсказок при нажатии на кнопку
 /// </summary>
 /// <param name="obj">The Object</param>
 private void Skip(object obj)
 {
     SpeechSyntezer.CancelSpeech();
     this.MoveToNextPage();
 }
Beispiel #17
0
 public SomethingWentWrongPage()
 {
     InitializeComponent();
     SpeechSyntezer.VoiceResult("Произошла ошибка");
 }
        /// <summary>
        /// Открывает страницу обучения
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void TipsButtonClicked(object sender, EventArgs e)
        {
            await Navigation.PushAsync(new OnBoardingAnimationPage());

            await SpeechSyntezer.VoiceResult("Выберите в главном меню нужную функцию распознавания");
        }
Beispiel #19
0
 /// <summary>
 /// Отменяет озвучку при выходе со страницы
 /// </summary>
 protected override void OnDisappearing()
 {
     SpeechSyntezer.CancelEnglishSpeech();
 }
Beispiel #20
0
 public BanknotesRecognitionPage()
 {
     InitializeComponent();
     SpeechSyntezer.VoiceResult("Банкноты");
 }
Beispiel #21
0
 public RecognitionHandwrittenPage()
 {
     InitializeComponent();
     SpeechSyntezer.VoiceResult("Рукописный текст");
 }
Beispiel #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NoInternetConnectionPage" /> class.
 /// </summary>
 public NoInternetConnectionPage()
 {
     InitializeComponent();
     SpeechSyntezer.VoiceResult("Нет Интернета");
 }