python で ocr — tessdata_best

ocr で文字認識するためのいわば辞書があるようで、通常は tessdata_first が使用されますがそうすると認識率が悪くなります。

認識率を上げるためには tessdata_best というものを使用する必要があるようです。

tessdata_first による認識

サンプルとして、E.フロムの「愛するということ」を使います。

これを tessdata_first で処理すると、

農であれ、買えるだけの物はなんでも買うことである。誰もがそれと同じような眼で人
ている。男にとっての魅力的な女性、あるいは女にとっての魅力的な男性は、」
間を分が探している掘り出し物なのだ。ふつう[魅力的|という言葉は、人間の市場で人
があり、みんなが欲しがるような性質を、一包みに詰め合わせたものを意味している。行に左右される。
何が人を魅力的にするかは、肉体的にも精神的にも、その時代の流行にー九二〇年代には、お酒を飲んだりタバコを吸う、元気でセクシーな女性が魅力的だと
年人MMは
された。最近は、もっと家庭的でおしとやかなタイプのほうが好かれる。前世紀末から
今世紀初頭にかけて、男が魅力的な[商品」になるためには、大胆で野心満々でなければならなかった。今では社交的で寛容でなければならない
いずれにせよ、よふつう恋心を抱けるような相手は、自分自身と交換することが可能か
会的価値とい
範囲の商品]に限らちられる。私は「お買い得品]を探す。相手はは、私の長所やゃや可能性を、
メメっ


点から望ましい物でなければならないし、同時にその相手極めたうえで、私を欲しがっていかお
G
六刻

にあらわれた部分も隠された部分もひっくるめこのように二人の人間は、自分の交換価値の限界を考慮したうえで、
この取り引きでは
ければならちらなoo。場で手に入る最良の商品を見つけたと思ったときに、恋に落ちる。
]ー

このレベルでは使い物にならないと思います。

tessdata_best を使う

Github の「https://github.com/tesseract-ocr/tessdata_best」にアクセスして、「jpn_vert.traineddata」をダウンロードします。18 MB ほどです。ちなみに tessdata_first は 3 MB ほどでした。

これらの学習データは、linux mint 21.1 では「/usr/share/tesseract-ocr/4.00/tessdata/」に収納されるので、コピーします。


sudo cp ~/jpn_vert.traineddata /usr/share/tesseract-ocr/4.00/tessdata/

そうして画像を処理してみます。

その結果は、

であれ、買えるだけの物はなんでも買うことである。誰もがそれと同じような眼で人間を見ている。男にとっての魅力的な女性、あるいは女にとっての魅力的な男性は、が探している掘り出し物なのだ。ふつう[魅力的」という言葉は、人間の市場でがあり、みんなが欲しがるような性質を、一包みに詰め合わせたものを意味している。何が人を魅力的にするかは、肉体的にも精神的にも、その時代の流行に左右される。ー九二〇年代には、お酒を飲んだりタバコを吸う、元気でセクシーな女性が魅力的だとされた。最近は、もっと家庭的でおしとやかなタイプのほうが好かれる。前世紀末から今世紀初頭にかけて、男が魅力的な[商品」になるためには、大胆で野心満々でなければならなかった。今では社交的で寛容でなければならない。
いずれにせよ、ふつう恋心を抱けるような相手は、自分自身と交換することが可能な範囲の[商品]に限られる。私は[お買い得品]を探す。相手は、社会的価値という点から望ましい物でなければならないし、同時にその相手は、私の長所可能性を、表にあらわれた部分も了明された部分もひっくるめて見極めたうえで、私を欲しがっていなければならないゅい。このように二人の人間は、自分の交換価値の限界を考慮したうえで、市場で手に入る最良の商品を見つけたと思ったときに、恋に落ちる。この取り引きでは

赤いアンダーラインの部分がおかしいと思います。全部で8箇所です。
随分改善されましたが、まだ少し不満が残ります。

これは 3 年前のデータなのでもう少し新しいものはないんでしょうかね。

tesseract 5.3.0 を使ってみる

最新の tesseract 5.3.0 を使ってみました。


sudo add-apt-repository ppa:alex-p/tesseract-ocr5
sudo apt-get update
sudo apt install -y tesseract-ocr

確認します。


tesseract --version
tesseract 5.3.0
 leptonica-1.82.0
  libgif 5.1.9 : libjpeg 8d (libjpeg-turbo 2.1.1) : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.2 : libopenjp2 2.4.0
 Found AVX2
 Found AVX
 Found FMA
 Found SSE4.1
 Found OpenMP 201511
 Found libarchive 3.6.0 zlib/1.2.11 liblzma/5.2.5 bz2lib/1.0.8 liblz4/1.9.3 libzstd/1.4.8
 Found libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.13

tessdata_best もコピー先も変更する必要があります。


sudo cp ~/jpn_vert.traineddata /usr/share/tesseract-ocr/5/tessdata/

実行結果は、

であれ、買えるだけの物はなんでも買うことである。誰もがそれと同じような眼で人間を見ている。男にとっての魅力的な女性、あるいは女にとっての魅力的な男性は、自分が探している掘り出し物なのだ。ふつう[魅力的」という言葉は、人間の市場で人気があり、みんなが欲しがるような性質を、一包みに詰め合わせたものを意味している。何が人を魅力的にするかは、肉体的にも精神的にも、その時代の流行に左右される。ー九二〇年代には、お酒を飲んだりタバコを吸う、元気でセクシーな女性が魅力的だとされた。最近は、もっと家庭的でおしとやかなタイプのほうが好かれる。前世紀末から今世紀初頭にかけて、男が魅力的な[商品」になるためには、大胆で野心満々でなければならなかった。今では社交的で寛容でなければならない。
いずれにせよ、ふつう恋心を抱けるような相手は、自分自身と交換することが可能な範囲の[商品]に限られる。私は「お買い得品]を探す。相手は、社会的価値という観点から望ましい物でなければならないし、同時にその相手は、私の長所や可能性を、表にあらわれた部分も了明された部分もひっくるめて見極めたうえで、私を欲しがっていなければならない。このように二人の人間は、自分の交換価値の限界を考慮したうえで、市場で手に入る最良の商品を見つけたと思ったときに、恋に落ちる。この取り引きでは

今回はおかしな部分は4箇所です。

tesseract 4 よりは少し改善しているようです。

python で tesseract 5 を使用する

コマンドラインから ocr した結果と python による結果は違っています。

python で tesseract を使用するスクリプトが間違っていたようです。


from PIL import Image
import pyocr
import re
import os

class Pocr():

    def __init__( self ):
        self.txt1 = ""
        self.totaltxt = ""
        self.imgDir = '/home/mituo/after'
        self.imgArr = []
    
    def get_imgArr( self ):
        for dir_path, dir_names, file_names in os.walk(self.imgDir):
            for file_name in file_names:
                self.imgArr.append( dir_path + '/' + file_name )
        self.imgArr.sort()

    def analys(self):
        tools = pyocr.get_available_tools()
        tool = tools[0]
        for eimg in self.imgArr:
            print(eimg)
            img = Image.open(eimg)           
            builder = pyocr.builders.TextBuilder(tesseract_layout=5)
            self.txt1 = tool.image_to_string( img, lang="jpn_vert", builder=pyocr.builders.TextBuilder(tesseract_layout=5) )         
            self.del_spaces()
        print(self.totaltxt) 
        with open('/home/mituo/result.txt', 'w') as f:
            f.write(self.totaltxt)

    def del_spaces(self):
        text = re.sub(r"[\u3000 ]", "", self.txt1)
        text = re.sub('\n{2,}', '----------', text)
        text = re.sub(r"\n", "", text)
        text = re.sub(r"----------", "\n", text)
        self.totaltxt = self.totaltxt + "\n---------------------------------\n" + text

if __name__ == '__main__':
    pocr = Pocr()
    pocr.get_imgArr()
    pocr.analys()

今の段階では windows で「読んでココ」の方がいい

windows は嫌いなので、新しくコンピュータを購入するとすぐに linux mint をクリーンインストールします。
でも、ものによっては windows の方がいいものもあります。

例えば ocr に関しては、「読んでココ ver13」の方が誤認識が少ないようです。
私は、virtualbox の windows 10 で「読んでココ」を動かしています。

賦であれ、買えるだけの物はなんでも買うことである。誰もがそれと同じような眼で人間を見ている。男にとっての魅力的な女性、あるいは女にとっての魅力的な男性は、自分が探している掘り出し物なのだ。ふつう「魅力的」 という言葉は、人間の市場で人気があり、みんなが欲しがるような性質を、一包みに詰め合わせたものを意味している。 何が人を魅力的にするかは、肉体的にも精神的にも、その時代の流行に左右される。一九二〇年代には、お酒を飲んだりタバコを吸う、元気でセクシーな女性が魅力的だとされた。最近は、もっと家庭的でおしとやかなタイプのほうが好かれる。前世紀末から今世紀初頭にかけて、男が魅力的な「商品」 になるためには、大胆で野心満々でなければならなかった。今では社交的で寛容でなければならない。
 いずれにせよ、ふつう恋心を抱けるような相手は、自分自身と交換することが可能な範囲の 「商品」 に限られる。私は 「お買い得」を探す。相手は、社会的価値という観点から望ましい物でなければならないし、同時にその相手は、私の長所や可能性を、表にあらわれた部分も隠された部分もひっくるめて見極めたうえで、私を欲しがっていなければならない。このように二人の人間は、自分の交換価値の限界を考慮したうえで、市場で手に入る最良の商品を見つけたと思ったときに、恋に落ちる。この取り引きでは

全角スペースが少し入りますが、誤認識は1箇所しかありません。