Nの世界

【 スキャナーを利用したプログラム入力 】

●はじめに

今まで紹介した方法からWindows上でテキストエディタに打ち込んだプログラムを
エミュレータ上に取込むことが可能であることが判りました。
つまり、理論上スキャナーでプログラムを取込み、OCRでテキストに変換することで、
プログラムの入力は可能ということになります。
実際、今まで、主にベーマガのプログラムをスキャナーを使って10本以上打込んでいます。
その経験?を元に実用性を検証してみました。

●スキャナー入力のメリット/デメリット

・画面上で元ソースと打込んだプログラムを比較出来るため、目を細めて雑誌を読む必要性が少ない。
・16進ダンプ系のデータの入力に関しては明らかに手入力より早く、正確に入力出来る。
(認識結果を一括置換で正しい文字に直す事も比較的容易なのも大きな要因。)
・手入力なら流れで絶対間違えないもの(Ex.GOTO−>GOT0 IF−>1F等)を間違えてしまう。

●市販OCRによる変換精度

当然の事ながら、スキャナーの種類、取込み元の原稿文字のサイズ等によって、結果は大きく異なります
ので、あくまで参考程度に考えて下さい。
(学習機能、認識パターンの登録等無し。英語認識。雑誌を直接スキャナーの上に置いて取込。)
※使用スキャナー:Canon CanoScan D1250U2

○e.Typistエントリー
スキャナーにバンドルされていたOCRソフトです。
製品版に比べて、「対話型解析」が使えない等、重要な機能が結構使用出来ないが痛いです。
ただ、雑誌の入力する上で必要最低限の機能(認識パターンの登録やシンクロ入力)と、
それなりの認識率を持っているようなので、十分入力に使用する事が出来ると思います。
製品版なら恐らく、後述の「読んde!!ココ」より認識率も使い易さも良い気がします。
e.Typistエントリー

< BASIC >
●スキャナー取込み画像(400DPI)
BASIC

●認識結果
BASIC

< マシン語 >
●スキャナー取込み画像(400DPI)
マシン語

●認識結果
マシン語

○読んde!!ココ
市販されてパーソナルレベルのOCRソフトでは、ポピュラーなソフトの1つです。
ベーマガのプログラム入力初期の頃は、このOCRソフトを利用していました。
スキャナーからこのソフトで雑誌を取込むと妙にノイズが乗り易い気がします。
スキャナーが提供する取込むI/Fを利用した方が認識率が高い気がするのは私だけでしょうか?
文字の認識率はそれなりに高いのですが、文字間の認識が下手で、変な位置で区切りを認識して
おかしな変換をする事が多々あります。(BASICの20行等は良い例)
文字パターンを登録していく事で、かなりのレベルまで認識率は上がるのですが、変な位置で
区切りを認識するのを上手く修正出来ず、現在、プロユースのWinReader Proを使用しています。
読んde!!ココ

< BASIC >
●スキャナー取込み画像(600DPI)
BASIC

●認識結果
BASIC

< マシン語 >
●スキャナー取込み画像(400DPI)
マシン語

●認識結果
マシン語
※これは、元画像にノイズが入りすぎなので、実際には解像度を落とすなり対策が必要…。

○WinReader Pro
前述のe.Typistエントリーを製作した会社が作成したプロ向けに作成したOCRです。
一般には売られていないようですが、ある方から旧バージョンを譲ってもらい、
現在、ベーマガのプログラムを入力する際、使っているOCRです。
単純な文字の認識率は、e.Typistエントリーより若干良い程度の気がしますが、
個人的には、元データの画像の上に、認識した文字を表示する事が出来るシンクロ機能が、
雑誌の細かな字を見る手間が省けてお気に入りです。
学習能力も、今回紹介した3種類の内、最も賢い気がします。
ただ、文字の区切りが読んde!!ココほどではないのですが、やはり苦手です。
WinReader Pro

< BASIC >
●スキャナー取込み画像(600DPI)
BASIC

●認識結果
BASIC

< マシン語 >
●スキャナー取込み画像(400DPI)
マシン語

●認識結果
マシン語

●字体の違い

プログラムリストの載っている書籍によって、結構字体が大きく異なっています。
しかも、同じ雑誌でもリストの縮小率によって同じ字体でも違うように感じますし、
年代によって、字体が全く異なったりします。
(ここで、取り上げていない字体(例えば、プロポシェ、Pio、他プログラミング本等)は、
将来打込む事があれば、随時取り上げる予定です。

○はるみのプログラミングレッスン
高橋はるみさんの著書は、普通の字体と違い、点字なので、OCRソフト泣かせです。
間にスペースがあると別の文字と見る傾向が強く、かなりの文字を分離誤認識する為、OCRソフトで
入力しようとすると、普通に入力するより遥かに手間が掛かります。
しかも、コメント(REM文等)の緑色の文字が取り込めたり取り込めなかったりします。
この本に関しては、ある程度打込み速度に自信があれば、手で打込んだ方が良いかと思います。
はるみのプログラミングレッスン

○ベーマガ
まずは、ベーマガ初期のリストです。字がやや太いのが特長です。
そして、全般的に字体が小さい時代でした。
字体が小さいとOCRソフトで認識率が落ちるので、拡大コピーをしてからスキャナーに掛けた方が、
認識率は上がる気がします。
また、「0」に斜線が入っているのもこのリストの特長です。
(この頃から、月によって斜線が入ったり入らなかったりしていました。)

また稀に、このリストのように解説が入ったリストがありました。
このリストの場合、認識を各行毎に行う必要性があるので、非常に手間が掛かります。
(これも、ある程度打込み速度に自信があれば、手で打込んだ方が良いかと思います。)
ベーマガ

次に、ベーマガ後期のリストです。現在のフォントにかなり近い洗練された字が特長です。
全般的に字体が大きくなった時代でした。
字体が大きく、フォントが洗練されているお陰で、昔のリストと比べるとOCRソフトでの認識率は
格段に上がっている気がします。
ちなみに、このリストには、「0」が斜線が入っていません。お陰で「O」と見分けは非常に厳しいです。
ベーマガ

●よくある誤認識

自分が文字認識時に良く感じる誤認識する文字について所感を付けてまとめて見ました。
「,」と「.」 「,」の下の髭部分が認識範囲から漏れる場合がある。
「:」と「Iや1」 「:」の間を上手く認識しない場合が結構ある。
「=」と「−」 「=」の間を上手く認識しない場合が結構ある。
「()」と「{}」と「<>」 この3種類の括弧の見分けがフォントによっては見分けが付かない。
「F」と「P」 「F」と先が繋がっていると思い、「P」と認識しているらしい。
「O」と「D」 「D」の直線を上手く認識しないと、「O」と認識するらしい。
「N」と「H」 「N」の直線を上手く斜めと認識しないと、「H」と認識するらしい。
「1」と「Iやl」 手で打込む時に、当時の雑誌でも注意事項として書かれていた「I」。
やはり、上手く認識出来ません。
OCRの場合、小文字の「l」もよく誤認識する。
「0」と「Oや8」 手で打込む時に、当時の雑誌でも注意事項として書かれていた「O」。
やはり、上手く認識出来ません。斜め棒の入った「0」の場合、「8」とも
誤認識します。
「8」と「B」 手で打込む時に、当時の雑誌でも注意事項として書かれていた「B」。
やはり、上手く認識出来ません。
「5」と「SやG」 「S」の上下の部分が直線的だと、「5」とよく誤認識する。
また、意外かも知れませんが「G」とも結構誤認識する。

●経験談

今までスキャナーを利用して、プログラムを入力した際感じた経験についてです。

・認識パターンを登録しても、その後も上手く認識しない事が多い気がします。
フォントが一定であれば、上手く学習させる事で解決出来るかも知れませんが…。
特に、「1」と「I」、「0」と「O」等目視でも見間違えるものは、完璧に認識出来ない気がします。
他にも、「=」と「−」を混同したり、「U」を「l」と「J」と分離して認識するなどOCR特有の
認識ミスがあるので、入力時に見逃すと、プログラムのデバックが非常に大変です。

・学習に関しては、似たパターンの文字が無ければ、スムーズに学習してくれますが、そうでない場合、
逆に似たパターンの文字と認識し、認識精度が悪くなる事が結構あります。この場合、学習効果を
取り消した方が結果的に認識精度が上がる気がします。また、同じパターンで同じ様に何度も間違える
事も良くあります。これも前述と同じ原因かと思いますが、区切り位置を誤って認識する場合は、
意外と対処方法がないので、諦めて手入力で直すしかない気がします。

・認識する際、日本語の認識ではなく、英語の認識で行うと、全般的に認識率が上がるようです。
この場合、カナ文字及びGRPHキーで入力する文字は、変換出来ませんが、全体の文字比率から
考えると微々たるものなので、その部分は手で入力した方が早いと思います。

・OCRソフトで認識させる時、いきなり全てを認識させようとすると、大概の場合、修正する
気が失せるゴミのような変換結果になります。
大体5行〜10行ずつ認識していき、良く認識に失敗するものを文字パターン登録して、プログラム
入力中に認識率を上げていく事で、後の方の入力を楽にするのが、OCRソフトを利用した
プログラム入力だと私は思っています。

【 スキャナーを利用したBASICの入力方法 】へ続く



[戻る]