Как использовать OCR из командной строки в Linux?

В Linux попробуйте:

find /my/path -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]}' | sort

Как это работает

  • find / my / path

    Это ищет файлы в / my / path.

  • -maxdepth 1

    Это указывает find не искать подкаталоги. (Если вы хотите рекурсивный поиск, опустите эту опцию.)

  • -type f

    Указывает find ограничить поиск обычными файлами.

  • -printf '% TY-% Tm% s \ n'

    Это указывает find выводить год-месяц, за которым следует размер в байтах для каждого файла.

    Поскольку они нам не нужны, имена найденных файлов не печатаются.

  • b [$ 1] + = $ 2

    Для каждого найденного файла мы добавляем его количество байтов, найденное в столбце 2, к счету этой комбинации года и месяца в ассоциативном массиве b .

  • END {для (date in b) print date, b [date]}

    После того, как мы обработали весь вывод из find , мы распечатываем результаты.

  • sort

    Сортировка результатов по дате.

Многострочная версия

Для тех, кто предпочитает, чтобы их код был разбросан на несколько строк:

find /my/path -maxdepth 1 -type f -printf '%TY-%Tm %s\n' |
  awk '
    {
      b[$1]+=$2
    }

    END{
      for (date in b)
        print date, b[date]
    }
    ' | sort

Пример

Давайте рассмотрим каталог с этими файлами:

$ ls -l
total 27816
-rw------- 1 john1024 john1024 2459173 Nov 23  2015 img100.jpg
-rw------- 1 john1024 john1024 3479750 Nov 23  2015 img101.jpg
-rw------- 1 john1024 john1024 4028939 Nov 23  2015 img102.jpg
-rw------- 1 john1024 john1024 2928519 Jul 30 18:55 img103.jpg
-rw------- 1 john1024 john1024 2948294 Jul 30 18:55 img104.jpg
-rw------- 1 john1024 john1024 3177583 Aug  1 16:56 img105.jpg
-rw-rw---- 1 john1024 john1024 3111737 Apr 18  2016 img106.jpg
-rw-rw---- 1 john1024 john1024 1441310 Apr 18  2016 img107.jpg
-rw-rw---- 1 john1024 john1024 2430158 Apr 25 16:26 img108.jpg
-rw-rw---- 1 john1024 john1024 2424504 Apr 25 16:26 img109.jpg

Результат нашей команды:

$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]}' | sort
2015-11 9967862
2016-04 9407709
2016-07 5876813
2016-08 3177583

Усовершенствования

Если нам нужен результат в мебибайтах (MiB) вместо байтов, мы можем преобразовать единицы следующим образом:

$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]/1024**2, "MiB"}' | sort
2015-11 9.50609 MiB
2016-04 8.97189 MiB
2016-07 5.60457 MiB
2016-08 3.03038 MiB

Мы можем получить еще больший контроль над форматом вывода, используя printf . Здесь, чтобы сохранить только одну цифру после десятичной точки, мы форматируем размер как % 5.1f :

$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) printf "%s %5.1f MiB\n", date, b[date]/1024**2}' | sort
2015-11   9.5 MiB
2016-04   9.0 MiB
2016-07   5.6 MiB
2016-08   3.0 MiB
30
10.07.2017, 00:22
4 ответа

Para los usuarios de Linux, nada funciona tan bien como usar Calibre para convertir pdf a docx.https://calibre-ebook.com/download_linux

-1
27.01.2020, 19:38

Установите imagemagick, pdftotext(, найденные в пакете с именем poppler-utilsв некоторых менеджерах пакетов )и ocrmypdf . Последнее — это быстрое (распознавание, которое потребляет много ресурсов процессора и настроено на использование всех ваших ядер ), с открытым -исходным кодом и часто обновляемым программным обеспечением для распознавания текста. Этот подход, возможно, является излишним, поскольку он фактически пытается назначить строку каждому слову, а не просто пометить слово, но у меня было много проблем с поиском хорошего и простого в использовании программного обеспечения OCR с открытым исходным кодом в целом. Затем в каталоге, где вы сохранили все свои файлы JPG:

$ convert *.jpg pictures.pdf
$ ocrmypdf pictures.pdf scanned.pdf
$ pdftotext scanned.pdf scanned.txt
$ wc -w scanned.txt
22
27.01.2020, 19:38

TL;DR

for i in /path_to/*.jpg;do./myocr.sh $i $(basename $i.jpg);done

#!/bin/bash
# PROGRAM=myocr.sh
if [ "$1" ] && [ -e "$1" ]; then
  TMPF=$(mktemp myocr.sh.XXXXXXXX.tif)
  DEST="$2"
  if [ ! "$DEST" ]; then
    DEST="${1%.*}.txt"
    if [ -e "$DEST" ]; then
      echo "$DEST already exists; please provide a new textfile name" >&2
      exit 1
    fi
  fi
  /usr/bin/convert "$1" -colorspace Gray -depth 8 -resample 200x200 -flatten -alpha Off $TMPF \
  && /usr/bin/tesseract $TMPF "$DEST"
  EX=$?
  /bin/rm -f $TMPF
  [ $EX -eq 0 ] && [ "$TERM" ] && echo "created $DEST"
  exit $EX
else
  echo "Usage: $0 imagefile [textfile]" >&2
  echo " creates a plain text file with the text found in imagefile" >&2
  exit 1
fi

Источник:https://help.ubuntu.com/community/OCR

0
27.01.2020, 19:38

tesseract , вероятно, наиболее -используемое здесь решение. Он доступен в большинстве репозиториев пакетов, например,

sudo apt install tesseract-ocr

и может использоваться с

tesseract input.png out.txt
38
27.01.2020, 19:38

Теги

Похожие вопросы