이미지 206개 한국어 설명과 예제 대시보드 및 화면 문구 보완

This commit is contained in:
Codex
2026-09-13 17:34:15 +09:00
parent 087e80126d
commit 3c7549c104
112 changed files with 29557 additions and 47 deletions
@@ -0,0 +1,36 @@
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$null = [Windows.Storage.StorageFile, Windows.Storage, ContentType=WindowsRuntime]
$null = [Windows.Storage.Streams.IRandomAccessStream, Windows.Storage.Streams, ContentType=WindowsRuntime]
$null = [Windows.Graphics.Imaging.BitmapDecoder, Windows.Graphics.Imaging, ContentType=WindowsRuntime]
$null = [Windows.Graphics.Imaging.SoftwareBitmap, Windows.Graphics.Imaging, ContentType=WindowsRuntime]
$null = [Windows.Media.Ocr.OcrEngine, Windows.Foundation, ContentType=WindowsRuntime]
$null = [Windows.Media.Ocr.OcrResult, Windows.Foundation, ContentType=WindowsRuntime]
$asyncMethod = [System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.Name -eq 'AsTask' -and $_.IsGenericMethod -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' } | Select-Object -First 1
function AwaitOperation($operation, $resultType) {
$task = $asyncMethod.MakeGenericMethod($resultType).Invoke($null, @($operation))
$task.Wait()
return $task.Result
}
$engine = [Windows.Media.Ocr.OcrEngine]::TryCreateFromUserProfileLanguages()
if ($null -eq $engine) { throw 'OCR language unavailable' }
$sourceRoot = (Resolve-Path 'work/trilium/phase3/doc_notes/en').Path
$items = Get-ChildItem -LiteralPath $sourceRoot -Recurse -File | Where-Object {$_.Extension -in '.png','.jpg','.gif'}
$results = [System.Collections.Generic.List[object]]::new()
foreach ($entry in $items) {
try {
$file = AwaitOperation ([Windows.Storage.StorageFile]::GetFileFromPathAsync($entry.FullName)) ([Windows.Storage.StorageFile])
$stream = AwaitOperation ($file.OpenAsync([Windows.Storage.FileAccessMode]::Read)) ([Windows.Storage.Streams.IRandomAccessStream])
$decoder = AwaitOperation ([Windows.Graphics.Imaging.BitmapDecoder]::CreateAsync($stream)) ([Windows.Graphics.Imaging.BitmapDecoder])
$bitmap = AwaitOperation ($decoder.GetSoftwareBitmapAsync()) ([Windows.Graphics.Imaging.SoftwareBitmap])
$ocr = AwaitOperation ($engine.RecognizeAsync($bitmap)) ([Windows.Media.Ocr.OcrResult])
$latin = [regex]::Matches($ocr.Text,'[A-Za-z]{3,}').Count
$results.Add([pscustomobject]@{file=$entry.FullName.Substring($sourceRoot.Length+1).Replace('\','/');latinWords=$latin;text=$ocr.Text;error=$null})
$bitmap.Dispose();$stream.Dispose()
} catch {
$results.Add([pscustomobject]@{file=$entry.FullName.Substring($sourceRoot.Length+1).Replace('\','/');latinWords=-1;text='';error=$_.Exception.Message})
}
if ($results.Count % 30 -eq 0) { Write-Output ('OCR processed: '+$results.Count+'/'+$items.Count) }
}
$utf8 = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText((Join-Path (Get-Location) 'work/trilium/help-image-ocr.json'),($results | ConvertTo-Json -Depth 5),$utf8)
Write-Output ('OCR complete: '+$results.Count)