OCR-A のフリーな実装と MetaFont の可能性

最終更新日

OCR-A のフリーな実装を発見!

市販の OCR-A フォントの高額さを見兼ねたエンジニアが、OCR-A を自前生成して無償配布しているのを知った。配布しているのは John Sauter 氏で、2022 年 2 月まで物流会社 UPS で働いていた Computer Programmer。彼が 2004 年に制作した OCR-A は Source Forge で配布されてる。

John Sauter | LinkedIn

OCR-A は OCR のための書体で、1968 年に ANSI によって定義され、1976 年には国際規格 ISO 1073-1 として標準化された。規格品だから誰が実装しても同じ品質になる。例えば ID Automation.com が $ 99 (Single User 限定、OCR-B 同梱) でライセンス販売する OCR-A と、氏が Public Domain として無償で配布する OCR-A の品質は全く同じ。実に純粋で天晴な Free Software の実践だなあ!👏

機械で読み取れるために設計されているから、OCR-A の字形はとても独特。現代の進化した AI なら、必ずしも OCR-A のような規格化された書体でなくても読み取ってくれるけど、それでも OCR-A の字形は依然として魅力的だよね。下に載せたのは、OCR-A の字形の例。

OCR-A – 字形の例
略語名称 (EN)名称 (JP)
OCROptical Character Recognition光学文字認識
ANSIAmerican National Standards Institute米国国家規格協会
ISOInternational Organization for Standardization国際標準化機構
(参考) 略語の意味

実装に使われた MetaFont の技術

氏が配布する OCR-A の ReadMe.txt に “MetaFont” なるものが登場する。これが、僕にとって初耳だったので調べてみた。

A site license for the OCR-A font is very expensive, so I undertook to create a free font. I started with the MetaFont definitions, used FontForge and potrace to construct a TrueType font, then assigned each glyph a Unicode code point.

(抄訳) あるサイトの OCR-A ライセンスがとても高額なので、フリーのフォント制作を引き受けることにした。MetaFont コードを使って FontForge と potrace で TrueType を構築し、そして各グリフを Unicode 符号位置に割り当てた。

OCR-A font – Browse /OCR-A/1.0 at SourceForge.net

MetaFont はフォント作成用のプログラミング言語で、組版ソフト TeX と同じく Donald Knuth の発明品。CTAN (Comprehensive TeX Archive Network) の MetaFont ページでは「MetaFont は、字形の手続き的仕様を受け取り、ビットマップフォントを生成し出力します」と説明されてる。ブログ記事 Lessons from METAFONT も情報満載でとても参考になった (主眼は「なぜ MetaFont は失敗したか」だけどね…笑)。

MetaFont は、経路に沿ってペンを動かした軌跡として字形を記述する。上記の「字形の手続き的仕様」とはこのことで、MetaFont コードではペンの形や経路を定義する。下の図は、点 1 → 点 2 → 点 3 とペンを動かしてひらがなの「て」を構成してる例。日本語版 Wkipedia の記事からお借りしました。

METAFONT – Wikipedia を改変

上記「て」の MetaFont コードはこれ (Wikipedia から引用)。

beginchar(65,10pt#,10pt#,0pt#);
pickup pencircle xscaled 1.2pt yscaled 0.5pt rotated 120;
z1=(0.1w,0.75h);
z2-z1=whatever*(8,1);
x2=0.9w;
z3=(0.8w,0.1h);
draw z1--z2{z1-z2}..{z2-z1}z3;
labels(1,2,3);
endchar;
end.

MetaFont で OCR フォントを生成する

John Sauter 氏による OCR-A フォントは、OCR-A の MetaFont 実装をビットマップで出力し、それを Potrace でベクター化したもの。OCR-A の仕様は文字の幅を始め、筆画の幅や筆画の経路の座標で字形を定義している (下図参照) から、MetaFont での実装と相性がいい。実際、OCR-A の仕様は Tor Lillqvist 氏と Richard B. Wales 氏によって MetaFont で実装されていて (CTAN にソースがある)、John Sauter 氏はこれを利用してフォントを生成した。

Character Set for Optical Character Recognition (OCR-A) の仕様書より

一方で、既存の MetaFont コードから MetaPost を使って直に生成されたアウトラインフォントも配布されてる (by Mathew Scala 氏)。MetaPost とは、MetaFont コードからベクター画像を出力する関連ソフト。ビットマップを経由した John Sauter 氏の OCR-A と、MetaPost で直に生成した OCR-A の品質の差が気になるところ。

OCR-K の MetaFont 実装…?

日本語 OCR フォント「OCR-K」も似た方法で字形を定義してるから、MetaFont + MetaPost で生成できそう。OCR-K について、以前ブログに詳しく書いたね。

OKC-K の字形

もしかすると、CC0 ライセンスで OCR-K を配布してる Force4u も、MetaFont を駆使してフォントを生成してるのかな?もしそうなら是非そのソースコードも見てみたいなあ。 あるいは、自分で OCR-K を MetaFont で実装してみるのも楽しいかも…!

コメントを残す

%d