Zpět na domů

Vyhledávání v snímcích Wayland bez AI: skripty

Skripty v bash implementují zachycení snímků s OCR ve Wayland bez AI. screen.sh ukládá PNG a .txt, ssearch.sh zajišťuje fuzzy vyhledávání přes tofi. Nastavení pro Hyprland/Sway s klávesovými zkratkami.

Wayland: vyhledávání v OCR-snímcích bez neuronových sítí
Advertisement 728x90

Místní vyhledávání snímků obrazovky v Waylandu bez AI

Skripty v bash umožňují vytvářet snímky obrazovky s automatickým OCR rozpoznáním textu a hledat je podle obsahu bez použití neuronových sítí nebo cloudových služeb. Řešení je určeno pro prostředí Wayland s nástroji grim, slurp, tesseract a tofi. Každý snímek se ukládá spolu s příslušným .txt souborem obsahujícím extrahovaný text pro indexaci a vyhledávání.

Požadované komponenty:

  • grim: zachycení obrazovky
  • slurp: výběr oblasti
  • tesseract: OCR
  • tofi: rozhraní pro vyhledávání
  • wl-clipboard a cliphist: práce s klipboardem
  • notify-send: oznámení

Skript screen.sh: zachycení a OCR

Skript provede zachycení oblasti obrazovky, uloží ji jako PNG a asynchronně spustí tesseract pro vytvoření textového sidecar souboru. Podporuje rozpoznávání ruského a anglického jazyka.

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; }

Funkce OCR s čištěním výsledku:

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 běží na pozadí: command -v tesseract &>/dev/null && { save_sidecar "$FILEPATH" & disown; }. Oznámení je interaktivní s akcemi: otevření složky, úprava v swappy nebo kopírování textu do schránky.

Režim --ocr zkopíruje text přímo bez ukládání souboru.

Google AdInline article slot

Skript ssearch.sh: indexace a vyhledávání

Podporuje tři režimy:

  • --index: zpracování existujících souborů PNG bez .txt
  • --list: výstup ve formátu TSV (cesta, datum, úryvek textu)
  • Hlavní: vyhledávání přes tofi s fuzzy-matchem

Indexace:

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

Výpis seznamu:

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

Vyhledávání je přivedeno do tofi s fuzzy-matchem a šířkou 1100px. Po výběru se text zkopíruje do wl-clipboard a obrázek se otevře přes xdg-open.

Nastavení a integrace

Instalace na Arch:

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

Udělat skripty spustitelné a přidat klávesové zkratky v 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

Pro starší snímky: ./ssearch.sh --index.

Co je důležité

  • OCR běží asynchronně, nepřerušuje uživatelské rozhraní; PSM 3 je optimální pro smíšený obsah.
  • Fuzzy-match v tofi kompenzuje chyby rozpoznávání.
  • Sidecar soubory se vždy vytvářejí, i když jsou prázdné, pro spolehlivou indexaci.
  • Žádné závislosti na AI nebo cloudu; čisté Unix nástroje.
  • vhodné pro Wayland stack s tofi; adaptace pro GNOME/KDE vyžaduje nahrazení launcheru.

Omezení a vylepšení

Tesseract slabě zvládá malý písmo v tmavých tematech – testujte PSM/OEM. Vyhledávání je řetězcové, bez semantiky. Pro rotaci snímků nastavte cron nebo systemd-timer na odstranění souborů starších než N dní.

— Editorial Team

Advertisement 728x90

Číst dál