Recherche de captures d’écran localisée sous Wayland sans IA
Des scripts Bash permettent de capturer des captures d’écran avec extraction automatique de texte par OCR, puis de les rechercher en fonction de leur contenu — sans réseaux neuronaux ni services cloud. Conçu pour les environnements Wayland utilisant grim, slurp, tesseract et tofi. Chaque capture est sauvegardée avec un fichier .txt associé contenant le texte extrait, facilitant l’indexation et la récupération rapide.
Outils requis :
- grim : capture d’écran
- slurp : sélection de région
- tesseract : moteur OCR
- tofi : interface de recherche
- wl-clipboard et cliphist : gestion du presse-papiers
- notify-send : notifications de bureau
screen.sh : script de capture et OCR
Ce script capture une région sélectionnée à l’écran, la sauvegarde au format PNG, et exécute en arrière-plan tesseract pour générer un fichier texte complémentaire. Prend en charge la reconnaissance de texte en russe et en anglais.
#!/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; }
Fonction OCR avec nettoyage des résultats :
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
}
L’OCR s’exécute en arrière-plan : command -v tesseract &>/dev/null && { save_sidecar "$FILEPATH" & disown; }. Les notifications sont interactives — elles proposent d’ouvrir le dossier, d’éditionner dans swappy ou de copier le texte dans le presse-papiers.
Le mode --ocr copie directement le texte extrait sans sauvegarder de fichier.
ssearch.sh : script d’indexation et de recherche
Supporte trois modes :
--index: traiter les fichiers PNG existants sans fichier .txt associé--list: afficher un TSV avec chemin, horodatage et extrait de texte- Mode principal : recherche floue via tofi
Logique d’indexation :
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
Génération de liste :
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
La recherche est transmise à tofi avec correspondance floue et largeur fixée à 1100px. Les résultats sélectionnés copient le texte dans wl-clipboard et ouvrent l’image via xdg-open.
Installation et intégration
Installation sur Arch :
sudo pacman -S grim slurp tesseract tesseract-data-rus wl-clipboard libnotify swappy
Rendre les scripts exécutables et lier des raccourcis dans 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
Pour les anciennes captures : ./ssearch.sh --index.
Points clés
- L’OCR s’exécute de manière asynchrone — jamais de blocage de l’interface ; PSM 3 est idéal pour les écrans à contenu mixte.
- tofi gère habilement les imprécisions de l’OCR grâce à sa correspondance floue.
- Les fichiers sidecar toujours créés — même vides — pour une indexation fiable.
- Aucune dépendance IA ou cloud ; uniquement des outils Unix purs.
- Adapté à Wayland + tofi ; adapter à GNOME/KDE nécessite de remplacer le lanceur.
Limites et améliorations
Tesseract peine avec les petits caractères dans les thèmes sombres — tester les paramètres PSM/OEM. La recherche est basée uniquement sur des chaînes de caractères, sans compréhension sémantique. Pour les captures tournées, configurer un cron ou systemd-timer pour supprimer les fichiers plus vieux que N jours.
— Editorial Team
Aucun commentaire pour le moment.