TWAINとは、スキャナーやカメラといった、画像入力装置の制御を行うための国際的な標準規格(インターフェース)です。
ただ、カメラではほとんど使われていないので事実上はスキャナーのための規格になっています。
スキャナーの規格はTWAINの他にもISIS、WIA、SANEなどの規格がありますが、最もメジャーなのがTWAINです。
目次
TWAINが必要な理由
スキャナーをWindowsなどのパソコン上で動かすためには、スキャナーを動かすためのアプリケーションが必要です。
そのアプリケーションはスキャナーメーカーが開発し、スキャナーに同梱してくれています。
しかし今使っているスキャナーとは違うメーカーのスキャナーも使いたいと思った時はどうなるでしょうか?
メーカーAのスキャナーに対応したアプリケーションA、メーカーBのスキャナーに対応したアプリケーションBの両方をインストールしないといけないとなると、不便ですよね。
さらにメーカーC、メーカーDと増えていくと…訳が分からなくなります。
これを解消しようとしたのがTWAINです。
TWAINとは、スキャナーとアプリケーション間のインターフェースを、全メーカーで共通化したものです。
これによって、一つのアプリケーションでどのメーカーのスキャナーも使えるようになります。
メーカーごとの仕様に合わせた異なるアプリケーションを作る(使う)必要が無くなるわけですね。
これがTWAINが必要な理由です。
TWAIN Working Group
TWAINは、”TWAIN Working Group”によって制定されています。
“TWAIN Working Group”は世界各国の画像系に関する主要メーカーが一堂に参画している国際団体で、日本だと富士通やパナソニック、Epsonなどが参画しています。
TWAIN規格は定期的に更新されていて、最新バージョンは2.4ですね。
https://www.twain.org/specification/
リンク先のドキュメントとソースコードがTWAINのすべてなので、このページを読破するとTWAINマスターになれます。
また新しく、TWAIN Directというネットワーク(クラウド)経由でスキャンする構想もあるようですが、こちらはあまり進んでいないようです。
TWAINドライバー
TWAIN規格に対応しているスキャナードライバーのことを一般的に”TWAINドライバー”と呼びます。
ドライバーとは、パソコンとUSB機器(スキャナー)間を制御するソフトウェアのことです。
実際には、アプリケーションはTWAINドライバーに指示を出し、TWAINドライバーはUSBを通じてスキャナに指示を出してスキャナーを制御します。
スキャナーを選ぶ際の条件として、ドライバーがTWAINに対応しているかどうかは結構重要です。
業務用のスキャナーであればほぼすべてがTWAINに対応していますが、個人用スキャナーの場合はTWAIN未対応のドライバーも少なくありません。
TWAINに未対応ということは、そのメーカーが提供しているアプリケーションを使わないとスキャンできないことと同義です。
例えば非常に高いシェアを誇るScanSnapシリーズは、TWAIN未対応です。
サードパーティ製のソフトから直接スキャナーで画像を取り込みたい場合は、TWAINに対応しているスキャナーを選んだほうが良いですね。
TWAINインターフェースの具体的な中身
ここからは中身の話に移ります。TWAINの中の制御はどうなっているのでしょうか。
アプリケーションからスキャナーを制御する際、登場人物は3人います。
- TWAIN対応アプリケーション
- データソースマネージャー
- データソース(TWAINドライバー)
データソースとは、スキャナードライバー本体のことです。
データソースマネージャーとは、”TWAIN Working Group”が提供している、データソースを制御するソフトウェアです。
Windowsであれば、最初からPCにインストールされています。
上の図の通り、アプリケーションはデーターソースマネージャーとしか通信しません。
データソースマネージャーは、アプリケーションから受け取った指示を、データソースに(適切な形で)そのまま横流ししています。
アプリケーションとデータソースは直接通信しないのです。
あくまで仲介者のデータソースマネージャーが、すべてのやり取りを担う形になっています。
TWAINとはこの、”アプリケーション ⇔ データソースマネージャー”、”データソースマネージャー ⇔ データソース”の通信規格を指します。
そして実は、すべてのやり取りはたった一つのAPIで行われています。
アプリケーション ⇔ データソースマネージャーはDSM_Entry()、データソースマネージャー ⇔ データソースはDS_Entry()です。
それぞれのAPIの引数(トリプレットといいます)の値で、スキャンしたり設定を変えたりといった色々な指示を出していきます。
アプリケーション側から見れば、APIはたった一つだけなのでとても開発がやり易く、引数の中身を変えるだけでいろいろできるので、正直誰でも開発が可能です。
TWAINドライバーでできないこと
TWAINドライバーの役割は、あくまで”TWAIN規格に則ってスキャナーの画像をアプリケーションに渡す”ことなので、それ以外のことはできません。
もちろん、高度な画像処理ならドライバー側で色々とできますが、TWAIN規格外のことは一切できないのです。
例えばクラウド上のストレージにスキャンした画像を直接保存したり、なんてことはTWAIN規格にないのでできません。
そういったことはドライバー側じゃなくアプリケーション側の機能になりますね。
スキャナーを買う際、ドライバーと付属するアプリケーションがそれぞれどんなことができるのか、機能をあらかじめ調べておくことは非常に重要です。
TWAINドライバーの画像処理機能が豊富でも、アプリケーションが使いにくければ満足度は下がりますし、
アプリケーションがめちゃくちゃ使いやすくてクラウドに保存する機能も付いてても、ドライバーの画像処理機能が全然ダメならきれいな画像は期待できないでしょう。
ドライバーとアプリケーションの両方をよくリサーチしておくことが大切です。
さいごに
今記事ではTWAINとは何かをざっくり紹介しました。
スキャナーを使う上でよく目にする単語なので、覚えておいて損は無いです。
でも正直、TWAINドライバの優劣に関してはどのメーカーもあまり差が無くなってきていますので、ドライバーよりもアプリケーションの機能差を気にしたほうが良いかなと個人的には思います。