2015-12-04 30 views
9

Sto lavorando con il campione di Windows universale per OCR trova qui:Come si mette a fuoco una videocamera in Windows Universal Apps?

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR/cs

In particolare i OcrCapturedImage.xaml.cs

Sembra che la fotocamera diventa spesso sfocata, confusa, e in nessun posto vicino buona qualità come l'app fotocamera nativa. Come posso impostare la messa a fuoco automatica e/o toccare per correggere l'esposizione?

Quello che ho provato finora è guardare gli altri campioni di fotocamere che aiutano a impostare la risoluzione, ma non riesco a trovare nulla su messa a fuoco/esposizione.

Aggiornamento:

Penso

await mediaCapture.VideoDeviceController.FocusControl.FocusAsync(); 

e

await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true); 

Ma questo non funziona (non fa nulla-ancora ecc sfocata) e potrebbe essere costruito su se qualcuno sa come toccare una determinata area e applicare di conseguenza la messa a fuoco/l'esposizione.

fotocamera nativa:

enter image description here

App Fotocamera:

enter image description here

Aggiornamento in base alla risposta:

Devo essere stato mettere i miei metodi di messa a fuoco nel posto sbagliato perché il mio codice di aggiornamento originale funziona. Anche Sergi funziona. Voglio utilizzare l'evento TAPpato in combinazione con esso, qualcosa di simile:

Point tapped=e.GetPosition(null); //Where e is TappedRoutedEventArgs from a tapped event method on my preview screen 
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionsAsync(); 
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionsAsync(new[] { new RegionOfInterest() { Bounds = new Rect(tapped.X, tapped.Y, 0.02, 0.02) } }); //Throws Parameter Incorrect 

Ma esso genera parametri errati. Inoltre, come dovrei mostrare l'overlay di un rettangolo sulla schermata di anteprima, in modo che l'utente sappia quanto è grande la regione di interesse?

Questo è un grande legame https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/CameraManualControls/cs/MainPage.Focus.xaml.cs

+0

Non vedo 'CapturedImage.cs' nella pagina che si sta collegando. – Jeremy

+0

@Nick Il mio cattivo OcrCapturedImage.xaml.cs. Ho aggiornato –

+0

Potresti verificare se la messa a fuoco è disponibile utilizzando queste due proprietà 'mediaCapture.VideoDeviceController.FocusControl.Supported' e' mediaCapture.VideoDeviceController.Focus.Capabilities.Supported'? –

risposta

8

configurazione della messa a fuoco automatica utilizzando il metodo della classe FocusControlConfigure.

mediaCapture.VideoDeviceController.FocusControl.Configure(
    new FocusSettings { Mode = FocusMode.Auto }); 
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync(); 

Per concentrarsi su una certa area, propery RegionOfInterestControl può essere utilizzato. Ha il metodo SetRegionsAsync per aggiungere una raccolta di istanze RegionOfInterest. RegionOfInterest ha la proprietà Bounds che definisce la regione di messa a fuoco. Questo esempio mostra come impostare lo stato attivo al centro:

// clear previous regions of interest 
await mediaCapture.VideoDeviceController.RegionOfInterestControl.ClearRegionsAsync(); 
// focus in the center of the screen 
await mediaCapture.VideoDeviceController.RegionOfInterestControl.SetRegionsAsync(
    new [] 
     { 
      new RegionOfInterest() {Bounds = new Rect(0.49,0.49,0.02,0.02) } 
     }); 
+0

Ho contrassegnato la tua risposta come corretta, ma ci sono un paio di cose che potrebbero essere aggiunte che ho elencato in un aggiornamento nella mia domanda. Assegnerò il premio se nessuna altra risposta è migliore alla fine del periodo di tempo –

+0

Ho corretto il parametro errato aggiungendo AutoFocusEnabled = true, AutoExposureEnabled = true, AutoWhiteBalanceEnabled = true, BoundsNormalized = true, Type = RegionofInterestType.Unknown e Weight = 100 al mio Roi invece di solo Bounds. Ora ottengo argomenti fuori portata. Il mio punto o dimensione deve essere errata –