Tesseract는 프로세스 교체를 허용하지 않습니다.

Tesseract는 프로세스 교체를 허용하지 않습니다.

tesseract클립보드의 이미지에 OCR 도구(OCR 도구)를 사용하여 텍스트로 변환하고 출력하는 빠른 스크립트를 만들고 있습니다 . 다음과 같습니다.

#!/bin/sh

temp="$(mktemp tmpXXX.png)"
xclip -selection clipboard -t image/png -o > $temp
tesseract $temp stdout 2>/dev/null
rm $temp

tesseract <(xclip -selection clipboard -t image/png -o) stdout이 줄이 왜 작동하지 않는지 궁금합니다 . 내가 아는 한, 프로세스 교체는 tesseract입력 파일로 사용되는 임시 파일을 생성해야 합니다(내 전체 스크립트와 유사). 아쉽게도 이로 인해 오류가 발생합니다.

Error in pixReadStream: Unknown format: no pix returned
Error in pixRead: pix not read
Error during processing.

왜 이런 일이 일어나는지 아는 사람이 있나요?

미리 감사드립니다.

답변1

그런데 프로세스 교체는 ksh(zsh 및 bash에서도 사용 가능)의 기능입니다. 대신 sh는 /dev/fd/n임시 파일이 아닌 파이프(지원되는 시스템에서는 이름이 지정되지 않고 다른 이름으로 지정됨)를 사용합니다.

여기서는 tesseract파일 내부를 보거나 파일 크기를 미리 알 수 있어야 하지만 파이프로는 불가능합니다. 파일 이름에 특정 확장자가 있을 것으로 예상할 수도 있습니다.

=(...)임시 파일을 사용하여 프로세스를 교체하려면 쉘에서만 사용할 수 있는 양식이 필요합니다 zsh.

tesseract =(xclip -selection clipboard -t image/png -o) stdout

$TMPPREFIX(기본값은 /tmp/zsh) 및/또는 $TMPSUFFIX(기본값은 비어 있음)을 설정하여 생성된 임시 파일의 =(...)이름을 지정하는 방법을 제어 할 수 있습니다.

TMPSUFFIX=.png
tesseract =(xclip -selection clipboard -t image/png -o) stdout

예를 들어.

5.0 이전의 zsh 및 bash 버전과 Linux 또는 Cygwin에서는 다음을 수행할 수도 있습니다.

{
  xclip -selection clipboard -t image/png -o > /dev/fd/3 &&
    tesseract /dev/fd/3 stdout
} 3<<< ''

heredocs와 herestrings는 삭제된 임시 파일로 (과거에는 bash에서) 구현되었으며 Linux 및 Cygwin에서는 /dev/fd/nn이 파일에서 열린 파일 설명자인 파일 설명자를 열면 대부분의 경우와는 달리 파일이 열립니다( 그렇지 않은 경우 모두) fd를 다른 시스템에 복사합니다.

관련 정보