28 lines
1.6 KiB
PowerShell
28 lines
1.6 KiB
PowerShell
|
|
param([string]$ImagePath)
|
|
Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
|
$asTaskGeneric = [System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' } | Select-Object -First 1
|
|
|
|
function Await($WinRtTask, $ResultType) {
|
|
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
|
|
$netTask = $asTask.Invoke($null, @($WinRtTask))
|
|
$netTask.Wait(-1) | Out-Null
|
|
$netTask.Result
|
|
}
|
|
|
|
[Windows.Globalization.Language, Windows.Globalization, ContentType=WindowsRuntime] | Out-Null
|
|
[Windows.Graphics.Imaging.BitmapDecoder, Windows.Graphics.Imaging, ContentType=WindowsRuntime] | Out-Null
|
|
[Windows.Media.Ocr.OcrEngine, Windows.Media.Ocr, ContentType=WindowsRuntime] | Out-Null
|
|
[Windows.Storage.StorageFile, Windows.Storage, ContentType=WindowsRuntime] | Out-Null
|
|
|
|
$file = Await ([Windows.Storage.StorageFile]::GetFileFromPathAsync($ImagePath)) ([Windows.Storage.StorageFile])
|
|
$stream = Await ($file.OpenAsync([Windows.Storage.FileAccessMode]::Read)) ([Windows.Storage.Streams.IRandomAccessStream])
|
|
$decoder = Await ([Windows.Graphics.Imaging.BitmapDecoder]::CreateAsync($stream)) ([Windows.Graphics.Imaging.BitmapDecoder])
|
|
$bitmap = Await ($decoder.GetSoftwareBitmapAsync()) ([Windows.Graphics.Imaging.SoftwareBitmap])
|
|
|
|
$lang = [Windows.Globalization.Language]::new('zh-Hans-CN')
|
|
$engine = [Windows.Media.Ocr.OcrEngine]::TryCreateFromLanguage($lang)
|
|
$result = Await ($engine.RecognizeAsync($bitmap)) ([Windows.Media.Ocr.OcrResult])
|
|
|
|
$result.Lines | ForEach-Object { $_.Text }
|