質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

564閲覧

OCRの学習素材を自作する方法

quietusay

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/09/14 09:08

OCRを用いたプログラムの開発をしているのですが、その中で特定の文字種に特化した学習素材が必要になりました。
しかし、有効と思われる素材が中々見つからなかったので、自作することにしました。
現状、精度は重視せず、とりあえず使えるものを作るだけ作ろうと考えています。

https://ebi-works.com/ocr-python/
↑こちらのサイトを参考にしようと思っているのですが、

本来は自分で素材を準備して使用するのが良いですが、今回はネット上に公開されている機械学習向けの素材を使用させていただきます。

とのことで、学習素材そのものを作る方法は書かれていません。
また同サイトで提示されているletter.dataについても、画像化および画像のテキスト化の方法が分からず困っています。

letter.dataはどのようなファイルで、どうやって作られたものなのでしょうか?
また、このような学習素材を自作する場合、どのような手順を踏むのが適切でしょうか?

試したこと

「OCR」「学習データ」「作り方」などで検索をかけてみたものの、出てくるのはOCR技術や学習素材の使い方ばかりで、素材の作り方は出てきませんでした。
また、letter.dataをメモ帳やバイナリエディタで開いてみましたが、規則的な書き方はされていたもののそれ以上の手掛かりは得られませんでした。当該ファイルのDL元によると、手書きの文字をラスター化?しているようですが…。

補足情報(FW/ツールのバージョンなど)

開発にはPython 3.11.5を用いていますが、学習素材を作るのに不向きであれば別の環境を使うことも視野に入れています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/09/14 10:11

当該ファイルのDL元に「タブ区切り」と記載があり、具体的な列については以下に記載があります。 http://ai.stanford.edu/~btaskar/ocr/letter.names 画像としては縦16x横8ピクセルの白黒のようです。 元画像は何枚かあるが、それらを元に 提示フォーマットのテキストファイルを作成することができない といった質問内容でしょうか?
退会済みユーザー

退会済みユーザー

2023/09/14 10:41 編集

> 規則的な書き方はされていたもののそれ以上の手掛かりは MITライセンスで"おそらく"そのデータを教材にしているPythonのコードが見つかりました。 https://github.com/PacktPublishing/Artificial-Intelligence-with-Python/blob/master/Chapter%2014/code/ocr.py#L28 このリンクがデータの読み取り部分のようです。参考になりませんか? データを読み込みさえすれば、データ増強なり学習なりSVMで力業なりやりようがありそうです。
quietusay

2023/09/14 12:35

>can110さん 大体そんな感じです。 ただ先に提示したサイトで画像化されたものはどう見ても16x8を超えているような… >fourteenlengthさん 「データを読み込みさえ」した後の処理は既存の情報でどうにでもなると考えています。 ただ、今回はそのデータをどうやって用意するかで困っています。
退会済みユーザー

退会済みユーザー

2023/09/14 14:43 編集

なので、また貼りますが、まずはこのリンク先を開いてください。 https://github.com/PacktPublishing/Artificial-Intelligence-with-Python/blob/master/Chapter%2014/code/ocr.py#L28 まんまその指定のファイルらしいものをPythonのwithで開いて、「データを読み込み」、その上解析する部分まで切り込む教材を紹介しました。何回も書きますが、解析まで踏み込む教材なので当然ファイルのロード処理も通過地点としてソースコードが開示されているわけです。 そういう流れで一連の紹介をした上で、特に困ることがないように、「データを読み込みさえ」の部分をL28と行数指定で丁寧にリンクを貼ったたもりです。 もっというと、46行目でデータセットが加工された上でリストに格納されて53行目でnumpy arrayに変換されています。もうこれで読み込みさえすれば、の目的は達成できるだろうと私は思って先のコメントしました。 同名のファイル違いだったら申し訳ないですが、データの出典がスタンフォードの有名データセットでOCRのようですので、OCRの教材で気前よく公開されていて、同名のファイルなら普通は間違い無いだろう、と思っています。 ここまで書いて違っていたらマイナス査定ものですね💦 もし、画像があるのにフォーマットがわからない、ということでしたらストレートにそう質問に書いたほうが良いかもしれません。 とはいえ、やることはファイルの読み込み処理と同じことを反対向きにnumpy array から書き砕いてリストに格納してタブ区切りのテキストファイルに戻すとなりますが…。numpy arrayの画像はペイントで書くか写真を撮るか、CADみたいなので書くか、またデータがあれば歪ませたり何なりしてデータ増強するか、強硬策なら生成系AIにがんばってもらうかでしょうか。 どのデータセットも、基本的に人力で誰かが手間ひまかけて整備するしかないので…。Amazonなんかは1クリック0・X円でパートさんに投げていると思います。それくらい人海戦術しかないです。 調べるのであれば、Qiitaの手書き漢字を認識させてみた系記事か、ここはまずOCRから離れて、自前の画像を用意させて認識させてみた系の記事が良いです。MNISTを自作してみた、みたいな記事も良いかもしれません。 画像を切り取るのがめんどくさい、であればアノテーションツールと検索してください。どのあたりがわからないかもう少し具体的にできますか? という感じで突き放したことばかり書きましたが、やったことがある側の話としては、一文字あたりの解像度が低過ぎると認識が苦しいし、大きいと扱いに困るので適当なトレードオフがいるということと、日本語みたいな文字数が多い言葉だとしんどいのでなるべく手を抜ける方法かシステマチックに画像を回収できる方法を考えた方が良いです。このデータセットにこだわるよりは、MNISTのようなフォーマットも参考事例も亜種も記事もソースコードも充実したものをベースにした方が藪に入らなくていいと思います。参考まで
quickquip

2023/09/14 23:11

> ただ先に提示したサイトで画像化されたものはどう見ても16x8を超えているような… どの画像を見て言ってますか?
guest

回答1

0

1行目はこうです(区切りはタブです)。テキストエディタがあれば見えます

1 o 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

データ(フィールド)が134個なのは数えれば分かります
https://ai.stanford.edu/~btaskar/ocr/ にフィールドの意味が書いてあって、1〜6番目までがメタデータで7番目以降がピクセルデータだと分かります。
ならばデータは128個です
文字のピクセルデータなら 8×16 か 16×8 だろうな、と想像します
ならばまず8個ずつ区切ってみようと思います。
実際にテキストエディタで手を動かしてやってみます

00000000 00000000 00000000 01110000 01111100 01000110 11000011 10000001 10000001 10000001 10000011 10001110 11111000 00000000 00000000 00000000

と見えます。
2番目のフィールドが o だったので合ってそうです。

ということをすればよかったです。

この01の形にタブを入れて、適宜改行もタブにすれば、必要な形式のデータになります。
つまりテキストエディタさえあればデータは作れます


このような学習素材を自作する場合、どのような手順を踏むのが適切でしょうか?

手で書いて白黒に変換してファイルに書く 以外ないわけで、
ボールペンで紙に手書きしたデータを20代〜60代まで偏りなく集めたい
とか
ディスプレイに向かってマウスで書いたという特徴を持ったデータを集めたい。個人の属性は問わない
とか
とりあえず自分で書いた文字でいいから方眼用紙にとにかく手書きすればいい
とか
そういう条件がまずあって、それをクリアするにはどうするのか? 例えば、何を用意するのか? どこでどう人を募集するか? という検討が要ります。それはTeratailの範疇を超える話でしょう。

投稿2023/09/14 23:58

編集2023/09/15 01:31
quickquip

総合スコア11046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問