前回は、 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[]
は使えません。今後に期待!!!