「Program List OCR」の追加報告
前回の記事でも取り上げた、eighttails氏が公開されたOCRソフト、「Program List OCR」でいくつかのプログラムリストを認識させてみました。
プログラムリストとプリンターの関係について
プログラムの打ち込み経験のある方ならご存知かと思いますが、当時の出版物に掲載されたリストは、プリンターで出力したものをそのまま掲載するという形を採っていました。そしてよく見ると、雑誌によって、あるいは機種によって、リストの字体が異なっているのに気づかされます。
これは、FMシリーズ対応、PCシリーズ対応、MZシリーズ対応……といったように、各々のPCに対応したプリンターが存在したためです(ただし、複数の機種に対応したプリンターも少なくはありませんでした)。各プリンターが持っているフォントの字体がそれぞれ異なるため、様々な字体によるリストが掲載されることとなったわけです。
さらに、たとえばFMシリーズ対応プリンターは多数発売されていたので、雑誌AはX社のプリンター、雑誌BはY社のプリンター……というように、同じFMシリーズ用のリストでも雑誌ごとに字体が異なることとなりました。もっといえば、同じ雑誌でも年代によって採用プリンターが変わったりもしています。
これらのことはたとえば、多数の機種のリストが掲載されていた「マイコンBASICマガジン」を見るとよくわかります。リストを見ただけで、どの機種用のプログラムかがわかるというケースもありました。
それでも、現在の一般的なOCRソフトは多少の字体の違いも読み取ってくれるものですが、当時のプリンターは解像度が低かったのに加え、前述のようにプリントアウトしたものをそのまま掲載しているため鮮明さに欠けるケースも多く、OCRで認識させるのは困難であろうことは容易に想像できます。
にもかかわらず、この「Program List OCR」は高い精度でリストを読み取ってくれます。PC-6001用リストに合わせて言語ファイルを作ってあるということですが、前回の記事でも取り上げたように、FM-7用リストでもきちんと読み取ってくれました。
とはいっても、FM-7用リストも掲載誌、あるいは時期によって様々な字体が使われており、一括りにできるものではありません。そこで検証の意味も含めて、4つほどのプログラムリストを認識させてみました。イメージ化を行なう際の参考になれば幸いです。
なお、リストのスキャン画像は、「Program List OCR」のマニュアルにあるように600dpiで取り込み、画像補正やグレースケール化などを施したものを読み取らせています。リストの編集には「サクラエディタ」を使用し、行番号、予約語、REM文、ダブルクォーテーション内文字などに色づけをして見やすくしてあります。フォントはVLゴシックを使っています。
テスト(1) 影ちゃんのSEA DIVING
■マイコンBASICマガジン 1983年8月号掲載/BASIC
このプログラムは、本来はMULTI8用として掲載されたものなのですが、キャラクターのパターンデータ部分のみを差し替える(REM(’)を外す)ことによってFM-7/8/11でも動くようになるという、珍しい形態の作品です。当時リストを打ち込んだのですが、行方不明になってしまっていたので、それを取り戻すべく、イメージ化に挑んでみました。
リストの字体は同誌のFM-7用リストと同一に見えますので、同じプリンターで出力していたのかもしれません。どのプリンターを使っていたかは知る由もありませんが、「Oh!FM」1984年7月号の特集、「おいしいプリンタ大研究!」内に当時発売されていたプリンターの印字例がいくつか掲載されており、これから推測するにエプソンのRP-80シリーズ(もしくは、前身のMP-80?)あたりのような気がします。いずれにせよ、このリストがOCRできちんと読み取れれば、ベーマガの他のFM-7用リストも読み取れることになります。
結果ですが、目につくのは0(ゼロ)がO(オー)として認識されてしまっている箇所が多いことですね。この2つは間違えやすい代表的な文字ではありますが、大きな原因は、このプリンターのゼロがスラッシュ付きのゼロではないことでしょう。スラッシュ付きだったら、ほぼ正しく認識していたと思います。ほかには数字の「6」を読み取るのが苦手なようで、「&」や「の」になっている部分も見受けられます。
BASICの場合、各行の冒頭は必ず数字になりますので、たとえばスペースにぶつかるまでは各文字を0~9として認識するようにできれば、ミスは減るかと思います。
そのほかは概ね正しく認識できており、多少の手直しでイメージ化が行なえました。
テスト(2) Oh!FMスロットマシン
■Oh!FM 第5号(1983年10/11月号)掲載/BASIC+ダンプリスト
ダンプリストの認識率を確かめようということで、手頃な長さのマシン語プログラムのあるリストを探し、選んだのがこのゲームです。単純なスロットマシンのゲームなのですが、1983年7月に東京で開催された「パソコンFM祭」というイヴェントのOh!FMブースで、プレゼントの抽選用に使われたものだそうです。
プログラムリストのフォントは、初期の「Oh!FM」で全般的に使われていたタイプのものです。ほかにも、「ログイン」や「プログラムポシェット」などでも多く見られます。PC-8001/8801/9801系のリストでよく見る印象なのですが、どうなんでしょうか?
このプリンターは印字がとてもクッキリしており、ゼロにスラッシュも入っているので、かなり高い精度で読み取ってくれます。1190行や1210行など、きちんと読めていない部分もありますが、全体的に見れば完璧に近い優秀さです。
ダンプリストに至っては、100%完璧に読み取れていました。やはり使用文字を限定すると効果が高くなりますね。このフォントのリストなら、「Program List OCR」を通して楽にイメージ化できると考えてよさそうです。
テスト(3) 撃墜王
■T&Eマガジン 第2号(1984MAR)掲載/BASIC+ダンプリスト
「T&Eマガジン」はT&Eソフトがファン向けに発行していた情報誌で、同社の市販ソフトのプログラムリストがいくつか掲載されていました。第2号に掲載されたのが、FM-7/8用の「撃墜王」です。ただし、市販版にあるタイトル画面の零戦のグラフィックスは、掲載版ではカットされています。
このプログラムリストは、前出の「影ちゃんのSEA DIVING」と同じ字体のもので、しかもダンプリストのバックの一部にゼロ戦の絵が描かれているという悪条件なのですが、どこまで読み取ってくれるのかということで挑戦してみました。
BASIC部分は、やはりゼロがオーとして認識されているところが多いです。オーのほかに、○(丸)に変換されているケースもありました。
ほかにも細かい認識ミスは散見されますが、簡単に手直しできる程度で済みました。たとえば、180行のPRINT文内のスペースがリストより1つ多かったのですが、これだけ連続した空白で誤差が1つだけなのは素晴らしいといえます。
一方ダンプリストのほうですが、当然ゼロはすべてゼロとして認識していますし、ほとんど正確に読み取れています。ただ、画像が被っている問題の部分は、やはりまともに変換できていませんでした。さすがにこれは厳しいですね。まあ、リスト全体にかかるような大きな画像ではないですし、修正は大した手間ではありませんでした。それより、このリストはチェックサムがついていないため、1行ずつチェックするのがとても大変でした。直接請求すれば送付してもらえたようですが、今となっては……ですね。
テスト(4) Oh!FMの音
■Oh!FM 1987年8月号掲載/BASIC
毎回ジョークプログラムを取り上げていた「きょうふの水曜日」のコーナーに掲載されたプログラムです。このコーナーのプログラムはあまり打ち込んでいなかったので、その中で手頃なショートプログラムだった本作をOCRにかけてみました。
リストの字体は、Oh!FMの中期以降で全般的に使われていたもので、漢字対応のプリンターによる印字だと思います。そのため解像度が高めですし、英数字はセリフ体で印字されるので一般的な活字に近く、OCRとの相性はよいと思われます。
実際、ゼロはスラッシュが入っていないのに完全に読めていますし、全体を見てもかなりの精度を誇っています。平綴じの雑誌の場合、スキャンするときにノド部分がどうしても歪んでしまうのですが、そこも大体読めています。
正しく変換できていないのは、O(オー)が○(丸)に、「Y」が「¥」になってしまっている点でしょうか。特に、横線に相当するものがないのに「Y」が「¥」とされてしまうのは、不可解な気がします。
しかし、トータルではやはり精度は高く、イメージ化は楽だと思われます。今回はダンプリストの検証はできませんでしたが、おそらく完璧に近い認識率を見せてくれるでしょう。
ということで、今回は3種類の字体をダンプリストも含めて「Program List OCR」で読ませてみましたが、どれもほとんどの部分は正しく読めており、このソフトの素晴らしさが改めてわかりました。字体によって多少の得手、不得手はあるようですが、今後のアップデートでさらに精度が高まるのを期待したいです。
ディスカッション
コメント一覧
詳細なレビューありがとうございます。
数字が誤認識を起こしやすいのは認識しており(他に8と3など)その辺を改善した(つもり)のバージョン1.1.0をリリースしています。
お使いいただければ幸いです。
7年前から、不定期にこのHPを閲覧させていただいています。
最近時間もできたため、OCRを使って、Oh!FMに載っていたプログラムをXM7や実機で動かそうと考えています。
ところで、XM7では、コピペができませんが、OCRを使って読み取ったプログラムをどうやってXM7に移せばいいのでしょうか?
お手数をおかけしますが、教えていただけると助かります。
XM7はコピペも可能です。
XM7.iniの[Keyboard]セクションに
PasteWait=20
PasteWaitCntl=200
を追加すると、ツール→貼り付け、またはAlt+Pでペーストできるようになります。
XM7.txtにあるように、この数値は、通常キー間隔、制御キー間隔を指定しています。これが適正値ということで問題ないと思いますが、うまくいかなかったら調整してみてください。
ただ、長いプログラムをコピペで入力させるのは現実的ではないですね。
その場合は、
D77Manager
https://www.vector.co.jp/soft/winnt/util/se513427.html
DumpListEditor
http://bugfire2009.ojaru.jp/input.html
などを使うと、d77あるいはt77ファイルに取り込むことができます。
丁寧なご返信、ありがとうございました。
確かに長いリストをコピペで入力するのは無理がありますね。
教えていただいた方法を早速試してみます。
これで学生時代、FM-77を十分に使えなかった無念さを少しは晴らすことが出来そうです。
本当にありがとうございました。
Laver様
d77managerをインストールしました。
色々試してみましたが、
BASICプログラムの入力、編集、
BASICバイナリーファイルをどのように作るのかが
わかりません。
すみませんが、簡単に教えていただけると助かります。
まず、Program List OCRで読み取ったプログラムリストを保存します。読み取りミスがあったら、修正してください。
次に、XM7の ツール→新規ディスク作成、または 新規テープ作成 で空のイメージファイルを作ります。
そしてd77managerの ファイル→開く でこのイメージファイルを開き、 インポート→ファイルのインポート で、OCRで読み取って保存したファイルを読み込みます。
これでディスクイメージ、またはテープイメージ内にプログラムリストが読み込まれたので、 ファイル→上書き保存 で保存します。
このイメージファイルをXM7で開けばOKです。この方法で作成した新規ディスクにはF-BASICが入っていないので、F-BASIC(DISK BASIC)起動後にLOADでファイルを読み込んでください。
Laver様
丁寧にご説明いただき、ありがとうございます。
早速試してみます。
実はOh!FMも3年分ぐらい、まだ持っています。
掲載リストを活かすのが楽しみです。
Laver様
たびたびすみません。
上記の手順で試したみましたが、
d77managerにインポートしたファイルは、
BASICアスキー、またはランダムファイル
となってしまい、
XM7のLOADでファイルを読み込むことができません。
理解不足の点がありましたら、教えてください。
BASICアスキーとなるのは正常です。アスキーファイルでもLOADで読み込めるはずです。
FILESコマンドでファイル名は表示されていますか?
また、読み込めないというのは何かエラーが出るのでしょうか?
プログラムリストに間違いがないか、よく見直してみてください。
Laver様
ご回答ありがとうございます。
FILESコマンドでは
ファイル名 0 A S 2
が示されますが、
load”ファイル名”を実行すると
Syntax Errorが表示されます。
プログラムリストに1か所でも間違いがあると
Syntax Errorになって、LOADできないのでしょうか?
お手数をおかけしてすみません。
Laver様
上記の件、自己解決しました。
プログラムに大きなエラーがあると、上記の症状が出ることが分かりました。
教えていただき、ありがとうございました。
ところで、
XM7.iniの[Keyboard]セクションに
PasteWait=20
PasteWaitCntl=200
を追加してみましたが、XM7は自動で
PasteWait=0
PasteWaitCntl=0
とXM7.iniを自動で上書きするようです。
この点を回避する方法があれば、教えていただけないでしょうか。
解決したようで、よかったです。
XM7.iniの件ですが、XM7を起動した状態で追加していないでしょうか。
いったん終了させてからXM7.iniを書き換えてみてください。
LAVER様
ご指摘のとおりでXM7.iniの書き換えができました。
本当にありがとうございます。
試しに4ページのプログラムをOCRで読み込んで動かしてみました。
意外に修正箇所が多くて時間がかかりましたが、
手入力することを考えると十分実用だと思いました。
いろいろ教えていただき、感謝です。