george333
@george333

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

faxの向きを機械学習をもとに自動で回転したい

解決したいこと

faxの向きを機械学習をもとに自動で回転したい。
下記の投稿をもとに自分のPCでも実行してみたが、うまくいかない。
そもそも機械学習もといプログラミングの知識がないため、どのように実行するかもあまりわかってない。
iniファイルをどのように設定するのか?また、学習した結果をもとにどのように自動回転させるのか、教えてほしい。

発生している問題・エラー

出ているエラーメッセージを入力
KeyError: 'RootSection'

自分で試したこと

from sklearn.externals import joblib
エラーになったので直接
import joblib に直しました。

0

2Answer

学習データとしてpdf,txt,gifのデータ群を用意しているようです(自分で用意したのかネットに転がってるのかはわかりません)
txtの中身は

[RootSection]
ID=123456
FROM=0123456789
DATE=2019/06/25
TIME=04:20:24
FILENAME=7146_001.pdf
PAGE=1
DIRECTIION=2
HANDWRITING=30
送信元=hogehoge
GUESS=5
LABEL=5

のような感じですがLABELだけ書いてれば問題ないと思います。
難しそうなら0,90,180,270度に回転させたpdfにOCRをして一番認識率が高いものを使う方法があるようです

2Like

Comments

  1. @george333

    Questioner

    ご返答ありがとうございます。

    pdf,txt,gifのデータ群を用意しなくてはいけないのですね‥
    正月休みで時間はあるので、もしよければどのようなデータを集めればよいかご教授頂けますと大変助かります。。
    また、下記の目的変数をどこにどのように記載するのでしょうか‥? 
    新規のファイルごとにtxt,gifデータを用意しなくてはいけませんか‥?

    17357966911062590957993648982395.jpg

  2. 難しそうなら0,90,180,270度に回転させたpdfにOCRをして一番認識率が高いものを使う方法があるようです

    これめちゃくちゃおもしろいですね!賢い!

  3. pdfは持ってるものとして、gifはネットの変換ソフトや変換プログラム、txtはメモ帳で先のテキストをコピペ
    目的変数はpdfを目視で確認して対応しているものを選択し、LABEL=<目的変数の数字>と変えます
    pdf一つ一つに対してこの作業をしないといけず、数百枚はいると思うのでちょっと大変だと思います。

  4. @george333

    Questioner

    ありがとうございます!
    ただ、上記の学習データを用意すれば、あとは勝手に予測してどんどん自動回転できるという事ですよね?
    頑張ってデータ用意してみます。

  5. 補足と注意点ですが、
    ・例えばあるPDFを0,90,180,270度回転させたものを用意すれば4倍のデータを用意できます。
    ・元の記事の人はアノテーションツールなどでラベル作成を自動化してると思います。その辺調べると楽できるかと
    ・実際に正しい向きに回転させる部分と自動でPDFに適用する部分には別のプログラムが必要です。
    ・学習にはある程度高性能なPCが必要です。(GPUは欲しい)
    ・元の記事にあるように精度にはあまり期待しないほうがいいです。

まとめ

今回のエラーは、学習元のpdfに対応するtxtファイルがないか、あっても期待する形式でないようです。
また、iniについては、記事中にサンプルがあるので、改めて記事を確認してください。

機械学習に詳しくないということで、気になっている点が1つあります。

このコードは、「教師あり学習」というものを、学習元データの学習から行っています。
そのため、0から学習元データを作成・準備するとなると骨が折れそうですが大丈夫そうでしょうか?
場合によっては学習済みのモデルを探し、予測だけを行う方がいいかもしれません。

詳細

KeyErrorは辞書に該当のキーが無い時に発生するエラーです。
参考: https://docs.python.org/ja/3.13/library/exceptions.html#KeyError

エラー自体は、元記事の以下のコードで発生していると思われます。

		ini.read(ini_file, 'UTF-8')
		label = ini["RootSection"]["LABEL"]	

これは @george333 さんのわからないと記載されているポイントの通り、iniファイルに問題があるようです。
以下のコード・文章を見ると、pdf毎に、iniファイルと、1枚目のgifを保存しているようです。

PDFの1ページ目を画像フォーマットで保存する

画像の向きを検出したラベル値をINIファイルに保存して

	for pdf_file in files:
		ini_file = pdf_file + ".txt"			# ~~~~.pdf.txt
		img_file = pdf_file + ".gif"			# ~~~~.pdf.gif
		ini = configparser.ConfigParser()
		ini.read(ini_file, 'UTF-8')
		label = ini["RootSection"]["LABEL"]		# 教師データあり、ラベル情報読み込み

ということであるディレクトリに、学習元のpdfと、それに紐づく設定、そして表紙の画像を一定のルールで準備する必要がありそうです。
例えば、対象のpdfをexample.pdfとすると以下の3ファイルが必要です。

example.pdf
example.pdf.txt
example.pdf.gif

以上より、今回のエラーは、pdfに対応するtxtファイルがないか、あっても期待する形式でないようです。

0Like

Comments

  1. @george333

    Questioner

    ご返答ありがとうございます!

    このコードは、「教師あり学習」というものを、学習元データの学習から行っています。
    そのため、0から学習元データを作成・準備するとなると骨が折れそうですが大丈夫そうでしょうか?
    場合によっては学習済みのモデルを探し、予測だけを行う方がいいかもしれません。

    データを作成・準備するのは大丈夫ですが、どのようなデータを集めればよいでしょうか‥?
    学習済みのモデルを探す方法も検討したいですが、qiita内には無さそうですが、他にあったりしますか?(こういう時などにgithubを活用するのでしょうか‥?)
    このコードを動かして自動でどんどん入ってくるpdfをどんどん回転させたかったのですが、それは難しそうですでしょうか‥?

    質問ばっかりすみませんが、もし宜しければお返事いただけますと幸いです。

  2. どのようなデータを集めればよいでしょうか‥?

    今回の目的としては、上下左右に回転したpdfを集めることです。

    学習済みのモデルを探す方法も検討したいですが、qiita内には無さそうですが、他にあったりしますか?(こういう時などにgithubを活用するのでしょうか‥?)

    これは自分も詳しくないです……。
    「学習済みモデル」とかで調べていくと参考情報が色々拾えそうですね。
    https://gen-ai-media.guga.or.jp/glossary/pre-trained-models/

    どんどん入ってくるpdfをどんどん回転させたかった

    ここでいう、どんどん入ってくるpdfを一部利用して、ラベリングとgifの生成が可能であればそれが学習元としても適切な気がします。

  3. @george333

    Questioner

    ありがとうございます。
    ちなみに最終的に、実際に回転させるためには、予測で受け取ったラベルの値を回転角度に変換しなくてはいけないと思うのですが、その認識で合ってますでしょうか?

  4. はい、私もその認識です。
    記載のコードは予測値をini相当のtxtに書き込むところまでしかしていないように見受けられます。
    なので、正しい向きのPDFファイルが必要な場合は、別途PDFの回転を行う処理を書くことになりそうです。

  5. @george333

    Questioner

    ありがとうございます!:relaxed:
    どこまで出来るか分かりませんが、少し試しにデータを集めてみます!

Your answer might help someone💌