Exemplo n.º 1
0
        // SoftwareBitmap を OCR に掛ける
        private async Task RecognizeBitmapAsync(UwpSoftwareBitmap bitmap)
        {
            this.RecognizedTextTextBox.Text = string.Empty;

            var          ocrEngine = UwpOcrEngine.TryCreateFromLanguage(this.LangComboBox.SelectedItem as UwpLanguage);
            UwpOcrResult ocrResult = await ocrEngine.RecognizeAsync(bitmap);

            foreach (var ocrLine in ocrResult.Lines)
            {
                this.RecognizedTextTextBox.Text += (ocrLine.Text + "\n");
            }
        }
Exemplo n.º 2
0
        public void SetOcrLanguage(string language)
        {
            OcrLanguages langus = new OcrLanguages();
            string       tag    = langus.GetTag(language);

            ocrLanguage = new UwpLanguage(tag);
            engine      = UwpOcrEngine.TryCreateFromLanguage(ocrLanguage);

            if (engine == null)
            {
                ocrLanguage = null;
                throw new InvalidOperationException(errMsgFailedToSetLanguage);
            }
        }
Exemplo n.º 3
0
        public WindowsOCR()
        {
            // Engine を既定の言語で初期化する。
            engine = UwpOcrEngine.TryCreateFromUserProfileLanguages();
            if (engine == null)
            {
                throw new InvalidOperationException(errMsgFailedToConstract);
            }

            // Propertyの初期化
            ocrLanguage = new UwpLanguage(engine.RecognizerLanguage.LanguageTag);
            ocrAngle    = 0.0;
            ocrResults  = new List <WinOcrResult>();
        }
Exemplo n.º 4
0
        private async void MainWindow_Loaded(object sender, RoutedEventArgs ea)
        {
            setLanguageList();
            bool hasCamera = await setCameraListAsync();

            if (hasCamera)
            {
                await InitializeMediaCaptureAsync();

                setBrightnessControl();
                initializeTimer();
            }
            return;

            #region local functions in MainWindow_Loaded
            void setLanguageList()
            {
                IReadOnlyList <UwpLanguage> langList = UwpOcrEngine.AvailableRecognizerLanguages;

                this.LangComboBox.ItemsSource       = langList;
                this.LangComboBox.DisplayMemberPath = nameof(UwpLanguage.DisplayName);
                this.LangComboBox.SelectedValuePath = nameof(UwpLanguage.LanguageTag);

                var ocrEngine
                    = UwpOcrEngine.TryCreateFromUserProfileLanguages();

                this.LangComboBox.SelectedValue = ocrEngine.RecognizerLanguage.LanguageTag;
            }

            async Task <bool> setCameraListAsync()
            {
                var devices = await UwpDeviceInformation.FindAllAsync(UwpDeviceClass.VideoCapture);

                if (devices.Count == 0)
                {
                    hideCameraUI();
                    return(false);
                }
                setupCameraComboBox(devices);
                return(true);

                void hideCameraUI()
                {
                    this.CameraLabel.Visibility         = Visibility.Collapsed;
                    this.CameraComboBox.Visibility      = Visibility.Collapsed;
                    this.MonitorCameraButton.Visibility = Visibility.Collapsed;
                    this.CameraControlGrid.Visibility   = Visibility.Collapsed;
                    this.OcrCameraButtan.Visibility     = Visibility.Collapsed;
                }

                void setupCameraComboBox(IReadOnlyList <UwpDeviceInformation> deviceList)
                {
                    this.CameraComboBox.ItemsSource       = deviceList;
                    this.CameraComboBox.DisplayMemberPath = nameof(UwpDeviceInformation.Name);
                    this.CameraComboBox.SelectedValuePath = nameof(UwpDeviceInformation.Id);
                    this.CameraComboBox.SelectedIndex     = 0;
                }
            }

            void setBrightnessControl()
            {
                // [明るさ] スライダーを設定
                var brightCtl = _mediaCapture.BrightnessControl;

                this.BrightSlider.Minimum = brightCtl.Capabilities.Min;
                this.BrightSlider.Maximum = brightCtl.Capabilities.Max;
                if (brightCtl.TryGetValue(out double bright))
                {
                    this.BrightSlider.Value = bright;
                }

                // [コントラスト] スライダーを設定
                var contrastCtl = _mediaCapture.ContrastControl;

                this.ContrastSlider.Minimum = contrastCtl.Capabilities.Min;
                this.ContrastSlider.Maximum = contrastCtl.Capabilities.Max;
                if (contrastCtl.TryGetValue(out double contrast))
                {
                    this.ContrastSlider.Value = contrast;
                }
            }

            void initializeTimer()
            {
                // CapturePhotoToStreamAsync() が、どうも毎秒1回程度しかキャプチャさせてくれないようだ。
                // タイマー動作にする必要はなかったかもしれない。

                _dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal)
                {
                    Interval = TimeSpan.FromMilliseconds(333),
                };
                _dispatcherTimer.Tick += new EventHandler(OnTimerTickAsync);
                _dispatcherTimer.Start();
            }

            #endregion
        } // END MainWindow_Loaded