QRコード&バーコードに関する検証と考察

2024年4月30日更新
かなり昔の事なので記憶が曖昧ですが、
ジャンク品のバーコードスキャナを入手しました。
PS/2規格の物でしたがアダプタを使用するとUSBでも使えました。
そこでバーコードの読取器を作って遊んでいました。
チェックデジットを組み込んで書籍コードの読取に使用していました。
使用したソフトはファイルメーカーでしたが、
スキャナ本体が故障してソフトの行方も分からなりました。

現在の主流はQRコードに移行しているので、
改めてプログラムから利用する場合の実際を検証してみました。

尚、質問等は画面上部に設置の「ディスカッション」へお願いします。
[ 01 現状の調査 ]
プロデルから利用する場合にはダイナミックライブラリ形式か、
コマンドライン形式のソフトの何方かが使い易そうです。
また、使用条件が緩い事も必須条件です。

「mkqrimg.exe」は有限会社 サイテックの開発による、
QRコードの作成が可能なコンソールプログラムです。
二次配布や改変も自由で、使用許可やクレジットの表記も不要との事です。

「tdlQRCode.exe」は合同会社 トラストデザインの開発による、
QRコード作成が可能なコンソールプログラムでフリーソフトとの事です。

「Zxing.exe」はミュー氏の開発によるコンソールプログラムで、
QRコードの読み取りが可能なフリーソフトです。
個人/団体/社内利用を問わず自由に使用可能との事です。

「mQRwriter.exe」と「mQRreader.exe」は共に、
有限会社CTiQ(キック)の開発によるフリーソフトです。
正確には「Micro QR Code」の検証用のソフトのようです。
ライセンスの詳細は付属のドキュメントをご覧頂くとして、
営利目的での使用や転載および再配布は禁止との事です。
尚、本来は営利目的で開発中の検証用としてのフリーソフトなので、
「CTiQ」の透かしが入るのと左下に「CTiQ」のロゴが埋め込まれます。

未だ未だ探せばあると思われます。
[ 02 ピックアップしたソフトの試用 ]
前回の情報収集ではQRコード関係のソフトを幾つかピックアップしました。
今回はそれ等を実際に使用してプロデルとの相性を検証します。

「mkqrimg.exe」で作成したQRコード画像と、
「tdlQRCode.exe」で作成したQRコード画像は、
共に「Zxing.exe」を使用して読み取る事ができました。
不思議だったのは同じ内容からQRコード画像を作成しても、
両ソフトで作成された画像が同じではなかった事です。
然もそれでも同じ結果が得られてのは以外な発見でした。

次に「mQRwriter.exe」で作成したQRコード画像は、
「mQRreader.exe」を使用して読み取る事ができましたが、
「Zxing.exe」では正しく読み取る事ができませんでした。
また、「mQRwriter.exe」で作成したQRコード画像を、
「Zxing.exe」を使用して読み取る事もできませんでした。
「QRコード」と「マイクロQRコード」間での互換性は無いようです。

「mkqrimg.exe」や「tdlQRCode.exe」および「mQRwriter.exe」は、
何れも結果として画像ファイルを出力します。
そのファイル名やパス名も自由に設定可能なので、
プロデルから利用する事に問題は無さそうです。

また、読取側の「Zxing.exe」や「mQRreader.exe」も、
結果をテキストファイルに出力するので問題無さそうです。
「mkqrimg.exe」と「Zxing.exe」の組み合わせか、
「tdlQRCode.exe」と「Zxing.exe」の組み合わせになりそうです。
[ 03 特徴と想定される使用場面 ]
当時、偶然に入手したバーコードスキャナでしたので、
面白半分で読み取りソフトを作って遊んでいましたが、
スキャナ本体が壊れて以来無縁な状態が続いていました。
スキャナ本体が壊れたのが直接的な要因ですが、
それ程必要としていなかったからかも知れません。
そこで改めてバーコードが必要とされる場面を検討してみました。

何故バーコードが必要なのでしょうか。
 瞬時に簡単に読み取れるから
 内容を隠蔽できるから
瞬時に簡単に読み取れると言ってもスキャナを手に取ったり、
読み取り操作等も含めると有る程度の時間が掛かります。
タイピングに慣れた人が使用した場合のメリットは、
文字数や正確性という事になるでしょうか。
人が瞬時に覚えられる文字数以上が目安となります。

また、内容を隠蔽できるといっても目視ではという条件です。
スキャナデバイスと専用ソフトが有れば読み取られてしまいます。
現在では誰もが所持しているスマホで読み取る事が可能です。
覗き見防止程度の効果と考えた方が良さそうです。

何方も絶大な効果というよりそこそこの効果です。
実際の使用例として良く目にするのはサイトへの誘導です。
覚えて打ち込むには長過ぎますし間違えるとアウトです。
アドレス繋がりでデータベースのレコードへのジャンプにも使えそうです。
[ 04 簡単なテスト ]
「QRコード」の本格的な活用は具体的なソフトが決まってからですが、
取り合えず情報収集でピックアップしたソフトの使い勝手を検証します。

「mkqrimg.exe」でQRコード画像を生成させる為に必要なのは、
「mkqrimg.exe」だけでインストールも必要ありません。
オプションで一通りの指定が可能ですが文字種混在で、
標準的なサイズの4で生成する場合のバッチファイルは、
@echo off
 mkqrimg -S4 /O"QRFile.png" /T漢字やABC0123456789

こんな感じになります。

同様に「tdlQRCode.exe」の場合のバッチファイルは、
@echo off
 tdlQRCode -s 4 QRFile.png 漢字やABC0123456789

こんな感じになります。
こちらもインストールは必要ありません。

また、この様にして生成されたQRコード画像を読み取る場合、
「Zxing.exe」を使用したバッチファイルの内容は下記になります。
@echo off
 Zxing.exe .\QRFile.png

尚、「Zxing.exe」の動作には「zxing.dll」が必要です。
インストールの必要は有りません。
[ 05 QRコードのスキャナプログラムのサンプル ]
前回までの調査と検証でプロデルからQRコードを利用する事が可能であり、
その具体的な方法を検証したり用途を絞り込む事ができました。
しかし、実際にQRコードを活用したプログラムは未だ作っていません。

QRコードの作成時は画像ファイルとなり読み取りはテキストファイルです。
書き出した画像ファイルはピクチャーボックス等に貼り付けて利用しますが、
読み取り結果のテキストファイルは確認だけで普通は保存しません。
前述の「Zxing.exe」はQRコードの画像ファイルを指定して読み取ります。
一見問題無さそうですがプログラムからファイルのパスを指定する事になります。
もっと直感的にカメラやスキャナで読み取りたいケースが有りそうです。


そこで画面上のQRコードを読み取るだけのスキャナを作ってみました。
ご覧のように起動すると虫眼鏡が表示されるので、
グリップ部分を掴んでQRコードが収まるように移動します。
完全に収まったところでグリップをダブルクリックすると、
QRコードの内容が「result.txt」に書出されます。
詳細は添付ドキュメントをご覧ください。

※ダウンロードは こちら から。

[ 06 一次元バーコード関連のソフトは少ない ]
前回迄にて自作プログラムに於いてQRコードを利用する準備が整いました。
QRコード画像を作成したりそれをファイルや画面から読み取る事が可能です。
その具体的な応用例に関しては今のところ予定は有りません。
…なのでひと先ずこれで終わりにする予定でしたが、
QRコードはサイト誘導等の限られた使用の印象が強く、
一般商品のパッケージや書籍JANコードや日本図書コード等、
普段目にする大半は未だ従来のバーコードだったりします。
そこで従来のバーコードに関しても調査しておく事にしました。

紛らわしいので此処からは従来のバーコードの事を一次元バーコード、
QRコードの事を二次元バーコードと呼ぶ事にします。
検索した処、一次元バーコード関係のフリーソフトは少なく、
アプリケーションタイプのリーダおよびリーダ・ライタが幾つかと、
20年以上も前に作成されたコンソールコマンドタイプのライタや、
多種類の読み書きが可能なクラスライブラリが見付かりました。

アプリケーションタイプのリーダソフトは自作プログラムからは使い難く、
クラスライブラリの方は私の力量で使えるか分からないので、
実質コンソールコマンドタイプのライタの一択かも知れません。
[ 07 世代交代なのか住み分けなのか ]
一次元バーコードが現在も盛んに利用されている現状とは裏腹に、
そのサポート環境は発展して来なかったようです。
今回、検索に引っ掛かったリーダやライタおよびフォント等は、
何れも10〜20年以上も前に作成されものばかりです。
特に20年以上も前のソフトではヘルプファイルが添付されていても、
今ではそのままでは開く事すらできません。

二次元バーコードの出現で近い将来に世代交代が起きると思われたのか、
関連ソフトの開発(取分けフリーの)が行われて来なかったのかも知れません。
QRコードの開発元である株式会社デンソーウェーブは、
QRコードの使用者に対してライセンス料などは徴収しておらず、
申請も不要で誰でも自由に使うことができます。
それにも拘らず世代交代は起きておらず住み分けられています。

一度普及してしまったものを変更するのは莫大なコストが掛かるので、
余程の理由が無い限り敢えて替えないという事なのかも知れません。
確かにソフトの変更だけに止まらず読取装置の交換や、
印刷対象のパッケージ等のデザイン変更等で相当のコストが見込まれます。
その様な状況ですので共存状態が暫く続くものと思われます。

従って現在でも一次元バーコードへの備えはしておいた方が良さそうです。
しかし、個人で一次元バーコードを使い始める準備は簡単では無さそうです。
昔はMS-Officeからは比較的簡単に使えたような記憶が有るのですが、
当時はAccessを使用していたからかも知れません。
最新のMS-Officeではどうなのかは分かりませんが、
Office2007のExcelとWordしか入れていない環境では、
Microsoft BarCodeは使えないようです。
これに関してはAccessのランタイムを導入する事で解決するようです。
Accessのランタイムは無料で配布されているようですが試していません。

更にMicrosoft BarCodeを使用する時にはOCR-Bフォントも必要なようです。
これが何なのか調べたところ一次元バーコードの直下に表示する書体でした。
これがインストールされていないとエラーになるソフトが有るようです。
このフォントもAccessと同時にインストールされるようなので、
私のPCには入っていませんでした。
始める前から前途多難な予感がして来ました。
次回は実際にその検証を行います。
[ 08 事前調査と準備 ]
今回から一次元バーコードの読み書きの実際に移ります。
一次元バーコードを生成する方法としてはプログラムに依るものと、
専用のフォントを使用する方法が有る事が分かりました。
日本国内で使用されている一次元バーコードの大半は「JAN13」なので、
検証は「JAN13」を中心に行う事にします。

冒頭で昔、ジャンクのバーコードスキャナを手に入れた事が切っ掛けで、
ファイルメーカーでバーコードの読取器を作ったと書きました。
既にスキャナ本体や実行ファイルとソースも行方不明の状態ですが、
簡易取説だけが保管されていました。
それによるとファイルメーカー製だとばかり思っていたのですが、
当時、触り始めた「VB6.0」で作ったものでした。

この時のソースが有ればプロデルに移植するだけなのですが、
無いので仕方なく一から調べ直しです。
一次元バーコードで扱えるのは半角の英数文字だけです。
ところが実際に表示されるのは数字だけです。
つまり入力された文字をそのまま表示しているのではなく、
何等かの変換処理をして表示している事になります。

更に入力されたコードが正当なものか評価しています。
このエラーチェックの事をチェックデジットと言います。
この部分は何となく覚えていましたが、
本体の変換部分の仕組みは相当複雑だった事を覚えている程度で、
その詳細に関しては全く思い出せません。

専用フォントに関しては「JAN13」用と「CODE39」用が入手可能でした。
一次元バーコードの直下に書き添えられる数字書体の「OCR-B」フォントは、
マイクロソフト製の「Access」にライセンス依存しているようです。
その互換フォントは幾つか公開されていましたが殆どが出所が明確でない、
いわゆる海賊フォントのようで使用を躊躇われます。
唯一、会津若松市役所が作成して公開している互換フォントの場合は、
出所が明白なので安心して使えます。

専用フォントがそのまま使えたならその方法が簡単なのですが、
暗号化のような複雑な変換処理が必要なので直ぐには使えません。
従って既に入手済みのコンソールプログラムのライタの検証からです。
次回は実際に検証を行う予定です。
[ 09 バーコードジェネレイタの試作開始 ]
今回から事前に調査・準備したソフトを使用しての検証に移ります。
最終的にプロデルを使用して実現する事が目標なので、
フォントを除いてインストールタイプのソフトは避けたいですし、
デスクトップアプリケーションも望ましくありません。
元々の数が少ない上にこの様な条件で絞り込んだら、
唯一残ったのが じゅぐ氏 が開発された「バー工房 コマンド」です。

「バー工房 コマンド」は20年以上も前に開発されたプログラムです。
マニュアル代わりのヘルプファイルが添付されていますが、
「HLP」タイプなので今では開く事すらできません。
また、生成されるバーコード画像は「emf」というメタファイルなので、
これまた扱えるソフトが少ないです。


写真は上記のような条件の下で作成中のバーコード生成器のモックアップです。
課題を一つ一つクリアしながら完成させたいと思っています。
[ 10 実験中のバーコード生成器 ]
前回の[ 9 ]からコンソールプログラムの「バー工房 コマンド」を使って、
プロデルでバーコード生成器を作り始めました。
「バー工房 コマンド」は じゅぐ氏 が20年以上も前に開発されたソフトです。
幸いにも現在の環境でも動作が確認できたので一縷の望みを託しています。
プログラム名は「JgBarCom.exe」で起動と基本動作を確認しました。

先ず最初の課題である「JgBarCom.exe」が出力するメタファイルの扱いですが、
「emf」を「png」へ変換可能なコンソールプログラムを幾つか発見しました。
「EMFclip2PNG.exe」「meta2jpeg.exe」「nconvert.exe」の3ソフトです。
最後の「nconvert.exe」だけは「https://www.xnview.com/」からですが、
それ以外は「JgBarCom.exe」も含めて全て「Vector」から入手可能でした。

実際のところ「EMFclip2PNG.exe」はコンソールプログラムでは有りませんが、
ダイアログは一瞬で閉じるので何も操作をする必要は有りません。
このソフトだけファイルではなくクリップボードから変換する方式なので、
他と異なる特徴を重んじて選択肢の一つに加えてあります。


写真は一応不完全ながら動作するバーコード生成器のアルファ版です。
現在はこれ等3ソフトと「JgBarCom.exe」との相性や設定項目の標準値等、
試行錯誤を繰り返してパラメータ用のデータを収集しています。
[ 11 バーコード生成器のベータ版を公開 ]
制作中のバーコード生成器は予定していた機能を全て盛り込み、
エラー処理もそこそこ追加したので普通に使える状態になりました。
…とは言うものの本格的なテストを控えたベータ版です。


写真は動作確認中のバーコード生成器ベータ版です。
簡単な操作で主要なバーコードを生成可能です。
使う場面によって各種微調整が可能です。
全ての操作はこのダイアログ上で直感的に可能なように工夫しました。

この「BarcodeGenerator」は普通にバーコード生成器として使えますが、
使用時のケース毎に各種の最適なパラメータを取得する事が本来の目的です。
このソフトで微調整して得られた結果をプロデルの手順に書出す事ができます。
それをアレンジして自身のプログラムに書き加えるだけで、
容易にバーコードを導入する事が可能です。

※「Barcode Generator β」のダウンロードは こちら から。

[ 12 バーコードスキャナの制作開始 ]
今回はこのテーマを始めた時から遣ってみたかった事です。
[ 05 ]でQRコードのスキャナプログラムのサンプルを公開しました。
PCの画面上から読み取る方式を採用してこれはこれで便利です。
しかし、印刷物から読み取る方式を作ってみたいと思っていました。
バーコードリーダとかバーコードスキャナ呼ばれているものです。

画像をスキャンする方式なのでPCの画面上からも読み取る事が可能です。
後回しになったのは研究所のPCにはカメラが付いていないからです。
そればかりかマイクもプリンタもフラットベッドスキャナも有りません。
当研究所の予算では備品の新規購入が難しいので仕方が有りません。


今回、廉価版のWebカメラを入手したので制作を開始しました。
写真は動作テスト用に作成した実験用プログラムです。
ご覧のようにこのクラスのカメラは画質が充分とは言えません。
読取制度を上げるには可能な限り画面一杯に大きく撮影する事です。
しかし、ご覧のようにイメージサークルの周辺部は画質が悪く、
光量も均一ではないので程好い辺りに収める必要があります。

撮影後に画像補正を行う事で読み取りが可能になりました。
機会が有れば他から高性能なカメラを借りて比較テストを行うつもりですが、
当面は調整用のデータを取って読取精度を上げて行きます。
[ 13 バーコードスキャナのサンプルが完成しました ]
最低限の機能から始めて様々な付加機能までテストして、
漸くバーコードスキャナのサンプルが完成しました。
その過程で欲張りな機能の検証も行いましたが、
プログラムの安定性を欠くようなものは最終的に排除しました。


写真はバーコードスキャナ サンプルの最新版です。
実際のスキャナと同じようにバーコードを認識すると「ピッ」と鳴ります。
連続してスキャンする事も可能ですし履歴も残ります。
また、履歴とは別にリアルタイムに結果を取り出す仕組みも装備しました。

※「Barcode Scanner β」のダウンロードは こちら から。

[ 14 バーコード生成器でQRコードの生成が可能に… ]
[ 11 ]ではバーコード生成器のサンプルを公開しました。
バーコードを生成するコマンドとその使い方は[ 04 ]で紹介しました。
バーコード生成器はそれを実際に使用したサンプルです。
主要なバーコードを選択可能ですがQRコードが除外されていました。
今回はバーコード生成器の生成項目にQRコードを追加しました。
従って呼名も「QRコード&バーコード生成器」に変更しました。


写真はバーコード生成器 サンプルの最新版です。
同じフォルダ内に[ 04 ]で紹介した「mkqrimg.exe」が有れば、
それを認識して選択項目に追加します。

※「Barcode Generator β2」のダウンロードは こちら から。

[ 15 バーコードスキャナが完成しました ]
[ 13 ]のバーコードスキャナを細部を見直して更新しました。
具体的にはPCとカメラへの負荷を低減させると共にカメラ対応を改善したり、
二重起動を防止する等の改修内容です。



写真は見た目も大きく変わったバーコードスキャナの最新版です。
前回、バーコード生成器によるQRコードの生成が可能になったので、
バーコードとQRコードの読み取り比較なども行ってみました。
また、より高性能なWebカメラでハードウェアによる比較も行いました。

これ迄はバーコードの読み取り精度を上げる為に画像を拡大したり、
至近距離から撮影する等してできる限り大きく取り込むようにして、
可能な限り元々の解像度を高くした上で画像補正を行って来ました。
また、照明を調整して明るくもしてみました。

しかし、手持ち撮影という事も有り認識するのに数秒必要でした。
この様な使用方法はWebカメラとしては想定外なので、
使う側でマクロレンズをアタッチしたりリングライトを付けたり、
撮影距離を固定化する工夫が必要かも知れません。

ところが同じ条件でQRコードの読み取りを検証してみたところ、
少々被写体が小さかろうが動いていようが暗かろうが、
驚異の認識結果を示しました。
QRコードなら情報量も多いですし漢字も使えます。
余程の事情が無い限りQRコードを使用した方が良さそうです。

本当はもう少し多角的に検証を行いたい処なのですが、
Webカメラの調子が非常に悪く映らなかったり認識されなかったりと、
殆ど使用に耐えない状況なので検証と開発が困難になってしまいました。
そもそも安易に安物に手を出したのが悪かったのか、
はたまた単にこのPCとの相性が悪いだけなのか最悪の選択でした。
いつの日か新しいWebカメラを入手したら再開するかもしれませんが、
取り合えずこれで一旦終了とします。

※「Barcode Scanner β2」のダウンロードは こちら から。

[ 16 バーコード生成器を改良しました ]
バーコード生成器は一次元バーコードと二次元バーコードの生成が可能です。
一次元バーコード用は生成部分とファイル変換の部分に分かれていて、
生成された「emf」ファイルを「png」ファイルへ変換して表示しています。
前版まではその変換に使用するソフトを3種類から選べる仕様でした。
今版から別アプローチの版を追加しました。

「emf」ファイルは現在では使われていないので何かと不便です。
プロデルに限らず多くのソフトで表示できないファイル形式なので、
外部ソフトを利用して「png」形式に変換しています。
今回は「emf」用のSusie Pluginを使用して直接読込方式にしてみました。

変換ソフトがプラグインに変わっただけと思うかも知れませんが、
プログラム上は全く別の意味を持って来ます。
変換ソフトの場合は「emf」を「png」へ変換して保存しています。
更にその保存された「png」ファイルを開いて表示する流れです。

今回のプラグイン方式では「emf」を開いて表示してから、
「png」ファイルへ保存しています。
用途によってはファイルへの保存が必要ない場合も有ります。
画像オブジェクトが先に存在しているので何かと都合が良いです。

尚、今回の改修に伴ってプロデル用の手順書出機能も刷新しました。
バーコード生成器は前版までの方式をEタイプとし、
今版からの直接読込方式のものをPタイプと呼ぶ事にします。
尚、Eタイプの方は今版を以って制作終了とします。

※「Barcode Generator」のダウンロードは こちら から。

[ 17 64bit版にも対応しました ]
直接読込方式のバーコード生成器を更新しました。
前版は32bit専用でしたが今版は64bit用コードの生成も可能です。

元々32bit専用のSusie Pluginを64bitで動作させるには、
「UNBYPASS」というソフトが必要なのですが、
最近ではそれが動作しなくなっていました。
原因を特定できなかったので止む無く32bit専用にしましたが、
「Produire.Susie.dll」との相性らしいという事が分かりました。

今版では32bit用と64bit用の何方のプロデルコードも書出し可能です。
64bit用に開発する場合には「Produire.Susie.dll」は初版を使用します。
尚、今版のバーコード生成器自体は64bit版となります。

※「Barcode Generator」のダウンロードは こちら から。

[ 18 type E と type P を改修しました ]
現在、バーコード生成器は type E と type P の2種類を公開しています。
これは現時点でバーコードを使用したソフトの開発予定が無いので、
最善の方式を決めかねているからです。

今回は type E と type P の双方にバグを発見したので改修しました。
バグ改修以外の機能追加などの変更は有りません。

※「Barcode Generator」のダウンロードは こちら から。