13.1.4. スクリプトの実行#
スタートボタン(接続ボタンの下にある緑色の矢印、または Ctrl+R)は、現在のエディタタブにあるスクリプトを接続中のカメラに送信して実行します。スクリプトの実行中、スタートボタンは実行を停止するストップボタンに変わります。この2つのボタンが、カメラ上でのあらゆる開発の中心となるループです。編集し、実行し、観察し、停止し、また編集する。
このループでは2つの点が重要です。第一に、スクリプトはカメラの RAM に送られてそこで実行されます。スクリプトの開始はカメラのストレージには何も書き込まず、リセット後にスクリプトは消えます。第二に、実行されるのは保存の有無にかかわらず、表示されているままの現在のエディタタブです。別途アップロードする手順はなく、エディタと食い違う古いコピーがカメラに残ることもありません。IDE が唯一取る自由は、送信するコピーからコメントを取り除くことです。スクリプトのソースはコンパイル中カメラの RAM に置かれ、コメントの多いサンプルはコメントなしの方が小さくなります。行は削除されず空にされるだけなので、トレースバックの行番号はエディタと一致したままです。
スクリプトの実行中、その print() 出力はシリアルターミナルにストリーミングされ、キャプチャした各フレームはフレームバッファビューアに表示され、チャンネルとして公開したものはチャンネルビューに表示されます。スクリプトが未処理の例外を送出すると、トレースバックがシリアルターミナルに出力され、IDE はエディタを該当行にジャンプさせ、その行を赤くマークして横にエラーを表示します。複数ファイルのアプリケーションでは、まずカメラのドライブから指定されたファイルを開きます。マークはファイルを編集するか、再実行するか、切断すると消えます。スクリプトが停止すると、停止ボタンによるものでもクラッシュによるものでも、チャンネルビューは次のスクリプトが始まるまで、最後に公開された値を画面に残します。
13.1.4.1. スクリプトを永続化する#
IDEなしで、つまり電源投入時に単独で、現場でカメラにスクリプトを実行させるには、スクリプトを main.py としてカメラに保存します。Tools → Save open script to OpenMV Cam (as main.py) は、現在のエディタタブをその名前でカメラのドライブに書き込みます。その際にコメントを除去して空白を圧縮するかどうかを尋ねます(ファイルは小さくなりますが、読めないコピーが書き込まれます)。そして Tools → Reset OpenMV Cam がカメラを再起動し、保存されたスクリプトで起動させます。この2つを合わせたものがデプロイ手順です。これ以降、カメラはIDEの有無にかかわらず、電源が入っているときは常にあなたのスクリプトを実行します。
リセットされたカメラが保存済みの main.py を実行している間でも、IDEはそれに接続できます。Stop Script on Connect/Disconnect が有効(デフォルト)であれば、接続すると保存済みスクリプトが停止し、制御がエディタに戻ります。
参考
カメラの起動シーケンスにおける main.py の意味、および完成したアプリケーションを編集可能なストレージから完全に移動する方法については スクリプトをファームウェアにフリーズする を参照してください。
13.1.4.2. カメラのドライブ#
カメラのフラッシュファイルシステム(およびSDカードが挿入されている場合はそのカード)は、ホスト上にUSBフラッシュドライブとしてマウントされます。Tools → Open OpenMV Cam Drive folder でファイルマネージャ内に開けます。ここはスクリプトがインポートまたはロードするライブラリモジュール、モデルファイル、アセットをコピーする場所であり、スクリプトが保存した画像やログを取り出す場所でもあります。ドライブのパスはステータスバーにも表示されます。
スクリプトが作成したファイルは、ホスト上にすぐには表示されません。ホストはドライブをマウントした時点でファイルシステムをキャッシュするため、実行中のスクリプトが保存したスナップショットは、ドライブが再マウントされるまで見えないままです。Tools → Reset OpenMV Cam はドライブを再マウントします。スクリプトが書き込んだばかりのものにアクセスするための手早い方法です。
注意が1つあります。カメラとホストはそのファイルシステムを共有しており、両方から同時に書き込むと破損する可能性があります。ストレージに書き込んでいるスクリプトがない状態でファイルをコピーし、カードを抜く前にはきちんとイジェクトしてください。