2015/05/27

Keine Ausgabe der Texterkennung bei gscan2pdf unter Ubuntu 14.04

Texterkennungsproblem unter Ubuntu 14.04


Nachdem man Ubuntu 12.04 LTS auf 14.04 LTS aktualisiert hat, wurde gscan2pdf 0.9.32 auf 1.2.3 aktualisiert. gscan2pdf kann mit zusätzlichen  Programme wie tesseract-ocr, cuneiform-Linux, GOCR usw. Texte erkennen. Bei der Texterkennung mit gscan2pdf 1.2.3 unter Ubuntu 14.04 tritt zwar das Problem wie mit gscan2pdf 0.9.32 unter Ubuntu 12.04 nicht auf. Aber ein anders Problem; Bei der Texterkennung gibt gscan2pdf 1.2.3 keine Ausgabe aus, wenn er mit tesseract-ocr oder mit cuneiform-Linux arbeitet.



Woran liegt es?


Es liegt die Dateinamenserweiterung. Tesseract-ocr verwendet in Version 3.0.3 als Dateinamenserweiterung .hocr, wobei gscan2pdf sie .html erwartet.(Siehe hier) Das Problem ist schon bekannt und ab gscan2pdf 1.2.5 wurde es fixiert.(Siehe hier)



Die Lösungen


Lösung 1
Modifiziere die Datei Tesseract.pm.(Siehe hier)
  1. öffne ein Terminal und gehe in den Ordner Gscan2pdf, wo die Datei Tesseract.pm liegt.
  cd /usr/share/perl5/Gscan2pdf/
  2. Öffne diese Datei in einem Editor (z. B. gedit) mit Rootrechten.
  sudo gedit Tesseract.pm 
  3. ersetze in Zeile 189 das ".html" durch ".hocr".
  4. Speichere die Datei Tesseract.pm und schließe den Editor.
 
Lösung 2
Aktualisiere den gscan2pdf von 1.2.3 auf neueste.(Siehe hier)
 
Lösung 3 (nur für gscan2pdf 1.2.4 Benutzer)
Wende den Patch (den Bugfix) Tesseract.pm.patch an.(Siehe hier)
Das ist die Lösung für gscan2pdf 1.2.4. Jedoch liegt unter Ubuntu 14.04 gscan2pdf in Version 1.2.3 in den offiziellen Paketquellen vor. Wer gscan2pdf 1.2.4 aus einer PPA herunterladet hat, installiert hat und nicht aktualisieren will, wäre diese Lösung anwendbar.



Was ist eigentlich gscan2pdf?


gscan2pdf ist ein Programm zu scannen und PDF-Dokumenten aus eingescannte Vorlagen zu erstellen. Viele weiteren Formaten z. B. DjVu-Dokumente sind erstellbar. Es können eine Texterkennung verwendet werden. Eine ausführliche Beschreibung liefert gscan2pdf.



Ist eine eingescannte Datei keine Text-Datei?


Generell nicht. Allgemein ist eine eingescannte Datei eine Bild-Datei. Deshalb obwohl sie lesbar ist, erkennt ein PC kein Zeichen drauf und funktioniert "Copy and Paste" nicht. Um Zeichen aus einer eingescannten Datei zu extrahieren, braucht man ein weiteres Programm sogenannten OCR (optical character recognition). 



Texterkennungsprogramme z.B.


GOCR, tesseract-ocr, ocropus, cuneiform-Linux, Ocrad, suw... Eine ausführliche Beschreibung liefert Texterkennung


2015/05/21

Fehlermeldung "Error during device I/O" beim gscan2pdf unter Ubuntu 12.04

Gscan2pdf unter Ubuntu 12.04 lässt sich nicht mehr scannen.



Eines Tages erschien die Fehlermeldung "Error opening device: Error during device I/O" bei der Scannererkennung mit gscan2pdf und danach erkennt PC mit gscan2pdf keinen Drucker/Scanner mehr und erscheint immer diese Meldung.
 


Wann tritt das Problem auf?


Wer entweder einen Drucker oder einen Scanner hat, tritt das Problem nicht auf.
Es tritt auf, wenn man
  - mehrere Drucker/Scanner zur Verfügung stellt,
  - den default Drucker/Scanner nicht angeschlossen (oder nicht eingeschaltet) hat und
  - von gscan2pdf ihn aufruft, um einzuscannen.


Wie kann man das Problem lösen?


Das ist ein Bug des gscan2pdf 0.9.32 und der Bug wurde schon fixiert. Aber der gscan2pdf 0.9.32 ist die neueste Version unter Ubuntu 12.04. (Siehe auch Bug report)
Dafür gibt es mehrere Lösungen;
Lösung 1 : Aktualisiere das BS von Unbuntu 12.04 auf 14.04.
Unter Ubuntu 14.04 liegt gscan2pdf in Version 1.2.4 in den offiziellen Paketquellen von Ubuntu vor. (Siehe Upgrade auf Trusty)
 
Lösung 2 : Aktualisiere den gscan2pdf von 0.9.32 auf neueste.
Wer noch Ubuntu 12.04 weiter benutzt, unter dem gscan2pdf in Version 0.9.32 in den offiziellen Quellen vorliegt, kann gscan2pdf von 0.9.32 auf die neueste Version aus einem PPA aktualisieren. (Siehe Aus einem PPA)
 
Lösung 3 : modifiziere die versteckten Datei .gscan2pdf.
Wenn man noch Ubuntu 12.04 mit gscan2pdf 0.9.32 weiter benutzen möchte, kann man die versteckten Datei .gscan2pdf ändern, um das Problem zu lösen;

    1. schließe gscan2pdf.
    2. aktiviere die Anzeige von versteckten Dateien in den persönlichen Ordner.
        (Siehe versteckte Dateien)
    3. Öffne die versteckten Datei .gscan2pdf.
    4. Lösche den eingetragene Wert von device.
        Ähnlich wie;
            device = hpaio:/net/Deskjet_3520_series?ip=192.168.xxx.xxx
            --->
            device =
    5. Speichere .gscan2pdf.
 
Lösung 4 : lösche die versteckten Datei .gscan2pdf.
Wenn man noch Ubuntu 12.04 mit gscan2pdf 0.9.32 weiter benutzen möchte, und auf persönliche Einstellungen verzichten kann, ist diese Lösung einfacher als andere.

    1. schließe gscan2pdf.
    2. aktiviere die Anzeige von versteckten Dateien in den persönlichen Ordner.
        (Siehe versteckte Dateien)
    3. Lösche die versteckten Datei .gscan2pdf in den persönlichen Ordner.

2015/05/17

Ubuntu  gscan2pdf で Error opening device: Error during device I/O 解決方法 その4

前回、gscan2pdf で Error opening device: Error during device I/O というエラーメッセージが出たときの解決について3通りの方法を書いた。

要約すると,
gscan2pdf 0.9.32 を使ってUSB接続のスキャナー機能付き All in One プリンターからスキャンした後,誤ってこのプリンターのUSBケーブルを接続していない状態でスキャンしようとすると下記のエラーメッセージが出る。

その後、接続してスキャンしようとしてもこのメッセージは消えず,スキャンできない。
解決方法は
その1 Ubuntu 12.04 を 14.04 にアップグレードする
その2 gscan2pdf 0.9.32 を最新ヴァージョンにアップグレードする。
その3 .gscan2pdf を編集する。

今回は4番目の解決としてもっとも簡単な方法を紹介する。ただし、この方法では設定が全てデフォルトに戻ってしまうので,個人の設定を残しておきたい場合は "その3" の方法がいいだろう。 


解決方法


その4 .gscan2pdf を削除する。

4-1. gscan2pdf を終了させる。(これをしないと4-2. で行う変更が反映されない。)
4-2. .gscan2pdf を削除する。
       方法1 - Launcher のホームフォルダをクリック。
         - "表示" -> "隠しファイルを表示する" とクリックする。(参照:前回
         - .gscan2pdf を選択し,削除する。
       方法2  端末を起動させて以下のコマンドを入力する。

 rm .gscan2pdf

2015/05/16

Ubuntu  gscan2pdf で Error opening device: Error during device I/O

gscan2pdf を使ってUSB接続のプリンター (スキャナー機能付き All in One プリンター) からスキャンした後,誤ってプリンターのUSBケーブルを接続していない状態でスキャンしようとすると下記のエラーメッセージが出る。


その後,ケーブルをつないでスキャンしようとしても上記のエラーメッセージが出てスキャンできない。また、一度 gscan2pdf を閉じて再起動した後でもこのメッセージが出てスキャンできない。

動作環境

    OS Ubuntu 12.04
    ソフトウェア gscan2pdf 0.9.32
    プリンター HP PSC 1400 Series (USB接続)
     HP Deskjet 3520 Series (無線LAN接続)

原因

これは gscan2pdf 0.9.32 のバグで,使用可能なスキャナー(またはスキャナー機能付きプリンター)が2台以上ある場合に起こりうる。gscan2pdf 0.9.32 は最初に選択したスキャナーを .gscan2pdf にデフォルトのスキャナーとして登録し,別途 "device" にもこのスキャナーを登録する。この双方の登録情報は一致していなければならない。ところが、次回以降デフォルトに設定したスキャナーが見つからないと、使用可能なスキャナーを "device" に登録する。この時デフォルトのスキャナーは変更されない。従って,双方の情報が一致しないために入出力エラーとなって gscan2pdf 0.9.32 からスキャナーを使用出来なくなる。尚,このバグは 0.9.32 以降のバージョンでは修正されている。

解決方法

その1 Ubuntu 12.04 を 14.04 にアップグレードする。

"ソフトウェアの更新" を起動させて最新の状態にアップデート後,”アップグレード” をクリックする。

その2 gscan2pdf 0.9.32 を最新のバージョンにアップグレードする。

端末を起動させて,以下のコマンドを1行ずつ実行する。(1行入力して ”エンターキー" を押す。)

sudo add-apt-repository ppa:jeffreyratcliffe/ppa
sudo apt-get update
sudo apt-get install gscan2pdf

元のバージョンに戻すには

sudo apt-get install ppa-purge
sudo ppa-purge ppa:jeffreyratcliffe/ppa

その3 .gscan2pdf を編集する。

3-1. gscan2pdf を終了させる。(これをしないと3-2. で行う変更が反映されない。) 
3-2. .gscan2pdf を開く。
       方法1 .gscan2pdf はホームフォルダー内にある隠しファイルなので、デフォルトの状態で
           は表示されない。これを表示させるには Launcher のホームフォルダをクリックし、


           "表示" -> "隠しファイルを表示する" とクリックする。


       方法2 端末を起動させて以下のコマンドを入力する。

gedit .gscan2pdf

3-3. 開いたファイルの下の方の "device" で始まる行の値を空欄にする。


…
version = 0.9.32
device = hpaio:/net/Deskjet_3520_series?ip=192.168.xxx.xxx  (x は数字)
unsharp threshold = 0.05
…


…
version = 0.9.32
device =
unsharp threshold = 0.05
…

3-4. 修正したらファイルを保存して閉じる。 


備考

解決方法 "その1" を実行すれば,gscan2pdf もアップグレードされるので、バグは修正されることになる。"その2" の方法でも gscan2pdf はアップグレードされるので、バグは修正されるはずだ。しかし、私の環境ではアップグレードされた gscan2pdf は起動しなかった。ただ、なぜ起動しないのかは調べていない。現在は "その3" の方法でバグを回避している。

 

 参考

1. gscan2pdf cannot be started again after it crashed
2. 第337回 12.04から14.04へアップグレードする際に気をつけるべきこと
3. How To Install Gscan2PDF 1.2.4 On All The Supported Ubuntu, Linux Mint, Elementary OS And Their Derivative Systems

2015/05/06

Ubuntu  rename を使ったファイル名の一括変換 2


前回 rename を使ったファイル名の一括変換の例を書いた。その時にいくつかの renameコマンドについて書かれたHPを参考にさせていただいたが,変換規則で利用するperl言語の正規表現まで踏み込んで書かれたHPは見つけられなかった。そこで renameコマンドについてと、renameコマンドでよく使われるであろうperl言語の正規表現についてを含めてまとめておいた。ただし、ファイル名の変換規則ではperl言語を利用できるが,ここではperl言語の文法については今回は触れていない。perl言語を使用した例は前回書いてあるので,そちらを参考にしていただきたい。

 

書式: rename [ -option ] 'perlexpr' [ files ] 

 

option 


   option は指定しなくてもよい。指定する場合には以下の3通りがある。

    -v リネームしたファイル名を表示する。
    -n リネーム後の名前を表示のみする。
    -f リネームを実行し,ファイル名が重複する場合には元からあるファイルを上書きする。

files


   files は指定しなくてもよい。
   指定する場合には変換したいファイル名を書くファイル名にはワイルドカードが使える
   例えば
    *.txt フォルダ内のすべてのファイル
    file.* フォルダ内で同じファイル名で拡張子がことなるファイル。。
    *.* フォルダ内のすべてのファイル。(単に * だけでもよい。)

   ファイル名を指定しない場合には標準入力 (キーボード) からの入力待ちになる。
   この場合,ファイル名にワイルドカードは使えない
   入力は renameコマンドを入力した後,(ここで入力待ちになる。)

   1. 変換したいファイル名が一つの場合
      1-1  ファイル名を入力して、
      1-2  エンターキー「⏎」をおす。
      1-3  「ctrl」と「D」を同時におす。

   2. 変換したいファイルが複数ある場合
      2-1  ファイル名を入力して、
      2-2  エンターキー「⏎」をおす。
      2-3  2-1, 2-1 をファイルの数だけ繰り返す。
      2-4  「ctrl」と「D」を同時におす。

perlexpr

   Perlexpr の書式  (変換の仕方を perl言語の正規表現に従って記す。)

   (s|y)/expr1/[expr2]/[Modifier]

   (s|y)
     s か y のどちらか一方を指定しなければならない。単語や数字などの
       文字を変換したい場合には y 例:ここの 1-5
       文字を変換したい場合には s 例:ここの 1-1, 1-2
     を指定する。

   expr1
     変換したい単語や数字などの文字列,または文字を指定する。

   expr2
     変換後に示されるべき単語や数字などの文字列,または文字を指定する。
     expr2 は指定しなくてもよい。指定しない時は expr1 の内容を削除する。(例:ここの 2-1)

   Modifier
     Modifier は指定しなくてもよい。Modifier には以下の3通りがある。
       e perl言語を使用する 例:ここの 1-4, 4-1
       g expr1 で指定した内容を繰り返し変換する 例:ここの 1-3, 1-4
       i 大文字、小文字の区別をしない

   expr1, expr2 で使用できる表現 (正規表現) 

     文字
       - メタ文字; \, ^, ., $, |, (, ), [, ], ?, *, + 
           後述の選択子、量化子、グループ化で使用する特別な文字

      - アルファベット数字記号それらを組み合わせた文字列
          ただし、メタ文字を記号として使用する場合には
             \\, \^, \., \$, \|, \(, \), \[, \], \?, \*, \+
          と記す。
      文字の例:ここの 1-1, 1-2, 3-2

     選択子 (selector)
      - [ ] の中の1文字
            例 [aD3] a または D または 3
[a-h] a から h までの1文字
[0-5] 0 から 5 までの数字
[^c-j] c から j まで以外の1文字
      - \d 0から9までの任意の数字
      - \w アルファベット1文字、 0から9までの任意の数字、またはアンダーバー "_"
      - . アルファベット1文字、 0から9までの任意の数字、または空白以外の記号一つ。
      - ^ ファイル名の先頭
      - $ ファイル名の最後
       選択子の例:ここの 1-1, 3-1

     量化子(quantifier)
      - {m,n} m文字以上n文字以下
      - {m,} m文字以上
      - {,n} n文字以下
      - {n} n文字
      - ? 1文字または0文字 ({0,1} と同じ意味)
      - * 0文字以上 ({0,} と同じ意味)
      - + 1文字以上 ({1,} と同じ意味)
      量化子の例 \w{5} 5文字以下の文字列

\d{3} 3桁の数字

\d{+} 1桁以上の数字
                          ここの 1-4, 3-3, 4-1, 5-1

     グループ化(Grouping)
      - ( ) グループ化記号 expr1 の中の文字列を一つのかたまりとみなす記号。
      - | 選択記号 文字列を選択する記号
              例 (desktop | laptop) desktop または laptop
(desktop | laptop | tabletPC) desktop または laptop または tabletPC
      - $n expr2でexpr1 の中のn番目のグループを指定する記号

       グループ化の例:ここの 3-3, 5-1


 参考

1. rename command
2. Bulk renaming files in Ubuntu
3. rename
4. Linux and Unix rename command
5. Perl 正規表現のクイックスタート
6. Perl 正規表現
7. 標準入出力