Powrót do strony głównej

Wyszukiwanie w zrzutach ekranu Wayland bez AI: skrypty

Skrypty w bash implementują przechwytywanie zrzutów ekranu z OCR w Wayland bez AI. screen.sh zapisuje PNG i .txt, ssearch.sh zapewnia wyszukiwanie fuzzy przez tofi. Konfiguracja pod Hyprland/Sway ze skrótami klawiszowymi.

Wayland: wyszukiwanie w zrzutach ekranu OCR bez sieci neuronowych
Advertisement 728x90

Wyszukiwanie po ekranach w Waylandzie bez AI

Skrypty bash pozwalają tworzyć zrzuty ekranu z automatycznym rozpoznawaniem tekstu (OCR) i wyszukiwać je według zawartości, bez wykorzystania sieci neuronowych czy usług chmurowych. System działa w środowiskach Wayland z narzędziami grim, slurp, tesseract oraz tofi. Każdy zrzut jest zapisywany razem z plikiem .txt zawierającym wyodrębniony tekst — do indeksowania i przeszukiwania.

Wymagane składniki:

  • grim: przechwytywanie ekranu
  • slurp: wybór obszaru
  • tesseract: OCR
  • tofi: interfejs wyszukiwania
  • wl-clipboard i cliphist: obsługa schowka
  • notify-send: powiadomienia

Skrypt screen.sh: przechwytywanie i OCR

Skrypt wykonuje przechwycenie obszaru ekranu, zapisuje go jako PNG i asynchronicznie uruchamia tesseract, aby stworzyć plik tekstowy sidecar. Obsługuje języki rosyjski i angielski.

Google AdInline article slot
#!/bin/bash
set -euo pipefail

SCREENSHOT_DIR="${SCREENSHOT_DIR:-$HOME/Pictures/screens}"
OCR_LANG="${OCR_LANG:-rus+eng}"
SLURP_ARGS=(-d -b 1B1F2866 -c 89b4faff -w 1)
GRIM_ARGS=(-t png -l 3)

die()  { notify-send "screen.sh" "$1" -i dialog-error -t 4000; exit 1; }
need() { for cmd in " $@"; do command -v "$cmd" &>/dev/null || die "missing: $cmd"; done; }

Funkcja OCR z oczyszczeniem wyniku:

run_ocr() {
    tesseract "$1" - -l "$OCR_LANG" --psm 3 2>/dev/null \
        | grep -v '^[[:space:]]*$' \
        | sed 's/[[:space:]]\+/ /g; s/^ //; s/ $//'
}

save_sidecar() {
    run_ocr "$1" > "${1%.png}.txt" 2>/dev/null || true
}

OCR uruchamiany w tle: command -v tesseract &>/dev/null && { save_sidecar "$FILEPATH" & disown; }. Powiadomienie interaktywne z opcjami: otwarcie folderu, edycja w swappy lub kopiowanie tekstu do schowka.

Tryb --ocr kopiuje tekst bezpośrednio bez zapisywania pliku.

Google AdInline article slot

Skrypt ssearch.sh: indeksacja i wyszukiwanie

Obsługuje trzy tryby:

  • --index: przetwarzanie istniejących plików PNG bez plików .txt
  • --list: wypisywanie TSV z listą (ścieżka, data, fragment tekstu)
  • Główny: wyszukiwanie przez tofi z dopasowaniem typu fuzzy

Indeksacja:

if [[ "${1:-}" == "--index" ]]; then
    while IFS= read -r png; do
        txt="${png%.png}.txt"
        [[ -f "$txt" ]] && continue
        run_ocr "$png" > "$txt" 2>/dev/null || true
    done < <(find "$SCREENSHOT_DIR" -name "screenshot-*.png" -type f | sort)
fi

Wyświetlanie listy:

Google AdInline article slot
if [[ "${1:-}" == "--list" ]]; then
    while IFS= read -r txt; do
        png="${txt%.txt}.png"
        [[ -f "$png" ]] || continue
        base=$(basename "$txt" .txt)
        dt="${base#screenshot-}"
        stamp="${dt:0:10} ${dt:11:2}:${dt:13:2}:${dt:15:2}"
        snippet=$(head -3 "$txt" | tr '\n' ' ' | cut -c1-120)
        printf '%s\t%s\t%s\n' "$png" "$stamp" "$snippet"
    done < <(find "$SCREENSHOT_DIR" -name "screenshot-*.txt" -type f | sort -r)
fi

Wyszukiwanie przekazywane do tofi z dopasowaniem typu fuzzy i szerokością 1100px. Po wyborze tekst kopiowany jest do wl-clipboard, obraz otwierany przez xdg-open.

Konfiguracja i integracja

Instalacja w Arch:

sudo pacman -S grim slurp tesseract tesseract-data-rus wl-clipboard libnotify swappy

Udziel wykonania skryptów i powiązanie hotkeyów w Hyprland:

bind = , Print, exec, ~/wayland/scripts/screen.sh
bind = SHIFT, Print, exec, ~/wayland/scripts/screen.sh --ocr
bind = SUPER, F, exec, ~/wayland/scripts/ssearch.sh

Dla starych zrzutów: ./ssearch.sh --index.

Co ważne

  • OCR asynchroniczny, nie blokuje interfejsu; PSM 3 jest optymalny dla mieszanych treści.
  • Dopasowanie typu fuzzy w tofi kompensuje błędy rozpoznawania.
  • Pliki sidecar są tworzone zawsze, nawet puste — zapewniają stabilną indeksację.
  • Brak zależności od AI czy chmury; tylko czyste narzędzia Unix.
  • Działa w stacku Wayland z tofi; adaptacja pod GNOME/KDE wymaga zmiany launcheru.

Ograniczenia i ulepszenia

Tesseract słabo radzi sobie z małymi czcionkami w ciemnych motywach — testuj PSM/OEM. Wyszukiwanie oparte na ciągach, bez semantyki. Dla rotacji zrzutów skonfiguruj cron lub systemd-timer do usuwania plików starszych niż N dni.

— Editorial Team

Advertisement 728x90

Czytaj dalej