홈으로 돌아가기

Wayland 스크린샷 검색 (AI 없이): 스크립트

AI 없이 Wayland에서 OCR 스크린샷 캡처 구현 Bash 스크립트. screen.sh가 PNG와 .txt 저장, ssearch.sh가 tofi를 통한 퍼지 검색 제공. Hyprland/Sway 단축키 설정.

Wayland: 신경망 없이 OCR-스크린샷 검색
Advertisement 728x90

AI 없이 웨이랜드에서 로컬 화면 캡처 검색하기

Bash 스크립트를 활용해 자동으로 OCR 텍스트 추출과 콘텐츠 기반 검색을 수행할 수 있습니다. 신경망이나 클라우드 서비스 없이도 가능하며, grim, slurp, tesseract, tofi를 사용한 웨이랜드 환경에 최적화되어 있습니다. 각 화면 캡처는 추출된 텍스트가 포함된 .txt 보조 파일과 함께 저장되어 인덱싱 및 빠른 검색이 가능합니다.

필요한 도구:

  • grim: 화면 캡처
  • slurp: 영역 선택
  • tesseract: OCR 엔진
  • tofi: 검색 인터페이스
  • wl-clipboard 및 cliphist: 클립보드 관리
  • notify-send: 데스크탑 알림

screen.sh: 캡처 및 OCR 스크립트

선택한 화면 영역을 캡처하고 PNG 형식으로 저장한 후, 백그라운드에서 tesseract를 실행하여 텍스트 사이드카 파일을 생성합니다. 러시아어와 영어 모두 지원됩니다.

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

OCR 결과 정제 함수:

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는 백그라운드에서 실행됩니다: command -v tesseract &>/dev/null && { save_sidecar "$FILEPATH" & disown; }. 알림은 상호작용식이며, 폴더 열기, swappy로 편집, 클립보드에 복사 등의 옵션 제공합니다.

--ocr 모드는 파일 저장 없이 직접 추출된 텍스트를 복사합니다.

Google AdInline article slot

ssearch.sh: 인덱싱 및 검색 스크립트

세 가지 모드를 지원합니다:

  • --index: .txt 사이드카가 없는 기존 PNG 파일 처리
  • --list: 경로, 타임스탬프, 텍스트 스니펫을 TSV 형식으로 출력
  • 메인 모드: tofi를 통한 유사 검색

인덱싱 로직:

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

목록 생성:

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

검색은 tofi에 파이프로 전달되며, 유사 매칭과 1100px 너비를 지원합니다. 선택된 결과는 텍스트를 wl-clipboard에 복사하고, xdg-open으로 이미지를 열 수 있습니다.

설치 및 통합

Arch에 설치:

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

스크립트 실행 권한 부여 및 하이프랜드에서 단축키 설정:

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

오래된 캡처 파일 처리: ./ssearch.sh --index

핵심 포인트

  • OCR는 비동기적으로 실행되어 UI 차단 없음; 혼합 콘텐츠 화면에 적합한 PSM 3 사용
  • tofi의 유사 매칭은 OCR 오류를 자연스럽게 처리
  • 항상 사이드카 파일이 생성됨(비어 있어도) — 신뢰할 수 있는 인덱싱 보장
  • AI나 클라우드 의존성 제로; 순수 유닉스 도구만 사용
  • 웨이랜드 + tofi에 특화; GNOME/KDE로 전환 시 런처 교체 필요

제한 사항 및 개선 방안

Tesseract는 어두운 테마에서 작은 글꼴 처리에 어려움 — PSM/OEM 설정 조정 실험 필요. 검색은 문자열 기반뿐이며 의미 이해 없음. 회전된 캡처는 cron 또는 systemd-timer로 N일 이상 된 파일 정리 설정 권장.

— Editorial Team

Advertisement 728x90

다음 읽기