// 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"); } }
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); } }
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>(); }
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