前回は、 Mathematica での化学構造式の光学認識 (Optical Chemical Structure Recognition) の性能を検証しました。 今回は、OCSR の機能を Graphical User Interface (GUI) に落とし込んでみます。
Mathematica には実行可能形式 (exe) を作成する機能はないため、ノートブック上に GUI を構築するとします。 Mathematica ではすべてが関数なので、それらを組み合わせることで GUI を作成できます。
Panel[] で枠を、Button[] でボタンを配置できます。

左下の Browse ボタンでファイルブラウザを開くようにします。 Button[] 内で SystemDialogInput[] を使うには Method -> "Queued" を定義する必要があります。
Button["Browse", file = SystemDialogInput["FileOpen"],
Method -> "Queued", ImageSize -> {45, 25}]
このとき、file に画像のパスがセットされます。パスがセットされると、左側の Panel に画像が表示されるようにします。
ただし、Mathematica では値を更新しても他で参照している値を更新してくれません。なので、Dynamic[] で括る必要があります。
Dynamic[
If[file === Null || FailureQ[image = Import[file]],
noImage, image]
]
Dynamic[] は括る範囲によって怒られる時もあります。基本的になるべく大きくとるといいです。
Convert ボタンをクリックすると、画像を認識して右側の Panel に表示します。

ラジオボタンで 3D 表示にも対応しておきました。

ちなみに、Edit ボタンをクリックすると、MoleculeDraw[] が起動します。使用感は人それぞれだと思いますが、Mathematica 内で完結できるのはすごいです。 Ts はトシル基のことで今回はうまく認識できていません。

Save ボタンで mol ファイル、Export ボタンで png ファイルを保存できます。
今回は、GUI 構築の話がメインだったと思います。率直に言って、私の手には余るといった感じですか。 幸いにも、先人の例は山ほどあります。 そもそも、Mathematica には GUI ビルダーが無く、難易度高めです(自分で作ればいいじゃん・・・という話ですが)。
ちなみに、Wolfram Cloud で MoleculeRecognize[] は使えません。今後に期待!!!