2002年のザクカメラを復活させてみた

バンダイの「Digital Mono Eye MS-06 ZAKU II」は、2002年に発売された
デジタルカメラ内蔵のザク II の頭部 (1/60、パーフェクトグレードの
頭部と差し替え可能)。モノアイがそのままレンズになっていて、
30万画素の CMOS で 640×480 の写真と動画が撮れる。

320x240モード

なぜ、そのままでは動かないか

付属ドライバは 32 ビット版 Windows 用で、64 ビットの
Windows 10 / 11 ではインストールできない。さらにこのカメラは
UVC (USB Video Class) ではなくメーカー独自プロトコルなので、
OS 標準のカメラドライバでも認識できない。
チップは EndPoints 社の SE402 で、USB の ID は
VID_03E8 / PID_2172。

やり方の概要

・Zadig で両方のインターフェースに WinUSB ドライバを割り当てる
・通信プロトコルを Python で再実装したアプリから libusb 経由で直接制御する
 (参考にした公開資料: Linux 用 epcam ドライバ、libgphoto2 の aox ドライバ)
・映像は Unity Capture の仮想カメラとして出すことで、Teams 等の会議アプリか 
 ら普通の Web カメラとして選べるようにする

実測: 解像度と fps

モード画角実測 fps
320×240センサ中央の切り出し約 3 fps
640×480センサ全幅約 1 fps

320×240 は縮小ではなく、センサの中央だけを読み出す仕様 (その分速い)。
fps が低いのはセンサ側の読み出し速度が限界で、USB の帯域は 1/3 程度しか
使っていない。
2002 年の 30 万画素機の素の実力である。
焦点は固定で、最短撮影距離は約 50 cm。近すぎるとぼける。
色も今の Web カメラと比べると地味だが、これはセンサの素性。

カメラ単体での撮影もできる (付属のバッテリーユニットを付け、
シャッターは頭部の後ろ側)。撮った写真は内蔵メモリ (SDRAM) に
入るが揮発性なので、電源を切ると消える。
取り込みは動画と同じ仕組み (libusb 経由) で PC から読み出せる。
写真ファイルは見かけ JPEG 風だが、実体は独自形式
(EPJPGBYR) のヘッダ + 生の Bayer データで、現像処理が必要だった。

「ジオン驚異のメカニズム」ですね。

ということで、pythonのコード置いておきます。
某AIさんにご協力していただきました。


ダウンロード

トラブルシューティング

・Code 10 が出る: ポートを変える。延長ケーブルやハブを外してUSB 2.0 ポートに直挿しする。
・デバイスマネージャーで ⚠ が付いて認識しない:そのデバイスをアンインストールしてから挿し直す。それでもダメなら PC を再起動する。
USB 3.0 ポートしか空いていない: 当たれば動くが不安定。実用は 2.0 推奨
・カメラを速く動かすと映像が固まることがある:転送エラー (STALL) からの自動復旧を入れてあるので数秒待てば戻る。ケーブルやコネクタの接触も疑うこと

配布とライセンス / 注意

・確認環境は Windows 10 (Python 3.11.8)。Windows 11 でも同じ仕組みで動くはずだが未検証
・本体のプログラムは、公開されているオープンソース資料を参考にプロトコルを再実装したもので、バンダイ純正ドライバのコードやファイルは含まない
・同梱物のライセンス: Unity Capture は MIT、libusb は LGPL v2.1 (キット内の LICENSES フォルダ参照)
・自己責任でどうぞ。