PowerShell: organizacja zrzutów ekranu z użyciem OCR

Wykonanie zrzutu ekranu w systemie Windows 10/11 jest niezwykle proste, sposobów też jest kilka a zapisany obraz od razu pojawia się w podkatalogu Zrzuty ekranu / Screenshots w katalogu Obrazy / Pictures. Dodatkowo w systemie Microsoftu mamy natywny OCR (optical character recognition / optyczne rozpoznawanie znaków).

Pracując wykonuje zrzuty ekranu jako formę krótkich, błyskawicznych notatek, udokumentowania stanu przed czy po wykonanych pracach.

Skutkuje to doskonałym materiałem do pisania dokumentacji ale też potężna ilością plików, w których po czasie może być bardzo ciężko coś znaleźć.

Zatem jak zorganizować swoje zrzuty ekranu? W jaki sposób posortować pliki graficzne wg daty? A może tak przeczytać tekst umieszczony w zrzucie ekranu i zapisać go do pliku?

Windows 10 wprowadził ciekawa funkcje a mianowicie natywny OCR. O funkcji wie niewielu użytkowników bo została ukryta w aplikacji OneNote. Wystarczy w niej na stronę notesu wkleić obraz a następnie pod prawym przyciskiem myszy mamy możliwość skopiowania tekstu z obrazu właśnie z użyciem OC

Całe szczęście sama funkcja OCR nie jest wbudowana w aplikacje a w system Windows, od wersji 11 używana jest np przez Edge do wyszukiwania treści w Bing.

My spróbujemy jej jednak użyć z wykorzystaniem PowerShell’a tak aby automatycznie przeszukiwać obrazy. Aby swobodnie używać OCR z niebieska konsla użyjemy modułu PsOcr z PowerShell Gallery

Założenie jest takie: posiadamy skrypt który z użyciem mechanizmy OCR przeszuka katalog ze zrzutami ekranu, następnie utworzy plik tekstowy z zawartością zrzutu (rozpoznanymi znakami).
W kolejnym etapie przeniesie oba pliki do katalogu z data (rok miesiąc) utworzenia zrzutu.

Poniżej gotowy skrypt i konkretny przykład użycia:

#script need OCR module - run only once to install module for OCR
#https://www.powershellgallery.com/packages/PsOcr/1.1.0
#Install-Module -Name PsOcr 

#Import Module for 
Import-Module -Name PsOcr

#path to screenshots folder in user profile
$path = "C:\Users\user\Pictures\Screenshots"

#get files from directory
$files = Get-ChildItem -Path $path -File

foreach ($file in $files) {

    #CreationTime of file to new folder name
    $YearMonth = $file.CreationTime.ToString('yyyyMM')

    $newPath = Join-Path -Path $path -ChildPath $YearMonth  

    #test folder if exist
    if ( !(Test-Path -Path $newpath)) {
        New-Item -ItemType Directory -Force -Path $newPath
    } 
    
    #text file name for OCR
    $textFileName = $file.BaseName + ".txt"

    #OCR usig module PsOcr
    (Convert-PsoImageToText -Path $path\$file).text | Out-File -FilePath $newPath\$textFileName

    #move file to new folder
    Move-Item -Path $file.FullName -Destination $newPath

}

A teraz jak to dziala 🙂

Mamy liste plików z zapisanymi zrzutami ekranu w katalogu:

Przykładowy zrzut ekranu z mojego katalogu Screenshoot:

Screenshot 2023-12-06 190830.png

Wyszukanie czegokolwiek to przeglądanie zrzutu za zrzutem, uruchamiamy wiec nasz skrypt. Z jednego worka gdzie lądowały domyślnie zrzuty tworzone z udziałem Win+PrtSc lub Win+Shift+S tworzymy listę katalogów na podstawie daty ich utworzenia, a w nich mamy oprócz plików graficznych pliki tekstowe z odczytana zawartością:

OK, zatem dla przykładu szukam zrzutu ekranu a właściwie ustawień bramy na tym zrzucie…po to go wykonałem. Mogę sobie przypomnieć, że robiłem ten zrzut w grudniu (wejdę wtedy do odpowiedniego katalogu i przeszukam 200 plików) ale pamietam też adres na karcie, miał w sobie 10.12.X.X spróbuje więc tekstowo.

Szukam wiec w katalogu Screenshoots zawartości tekstowej 10.12 i błyskawicznie otrzymuje rezultat. Znalazłem plik z takimi danymi (Windows Search radzi sobie z wyszukiwaniem wewnątrz plików tekstowych) – a przecież tego nie notowałem robiłem zwykły zrzut ekranu:

a jego zawartość prezentuje się tak:

mam już szukana przeze mnie bramę 🙂

W moim przypadku poniższy skrypt uruchamia się raz w tygodniu w harmonogramie zadań i sortuje mój bałagan związany ze zrzutami ekranu, ale zastosowań może być więcej…

Oprócz regularnych zrzutów ekranu z jakiś czynności administracyjnych i ich późniejszego wyszukiwania aż po OCR dla skanów kartek A4. Wszystko zależy od Was a gotowy fragment układanki już jest!

Więcej moich skryptów znajdziesz na repozytorium https://github.com/sprawdzoneit


Jeżeli mój wpis Ci się spodobał, pomógł w pracy? Chcesz mnie wspierać? Postaw kawę! To dzięki waszemu wsparciu nie ma reklam! Poniżej kod QR do płatności który jest jednocześnie linkiem do PayPal możesz też wpłacić BLIK z użyciem Przelewy24.pl