スクリプティング

 

SharpCapにはスクリプト言語が組み込まれており、キーボードとマウスでSharpCapを制御するときに実行できるほぼすべてのアクションを実行できる単純なプログラムを作成できます。 スクリプト言語は、.NETフレームワークへのPythonプログラミング言語MicrosoftポートであるIronPythonと呼ばれる言語に基づいています。

 

 

スクリプトコンソール

 

スクリプトコンソールを表示するには、スクリプトメニューから[コンソールの表示]を選択します。 スクリプトコンソールは統合開発環境(IDE)です。 これにより、IronPythonプログラミング言語を使用したコードの作成、実行、デバッグ、およびSharpCapへの統合が可能になります。

 

image

 

 

IronPythonコンソールウィンドウにhelp()および<ENTER>と入力すると、次の基本的なヘルプ出力が表示されます。

 

 

image

 

 

いくつかの例が表示されます。 これらの1つは、SharpCapで使用可能なカメラをリストするコードです。

 

#List the cameras available print  (#利用可能なカメラのリストを印刷する

SharpCap.Cameras           SharpCap.Cameras

 

#で始まる行はコメント行です。つまり、コンピューターによって無視されます。

 

コードはコンソールに直接入力するか、コンソールウィンドウの下部にあるIronPython Padに貼り付けることができます。 ウィンドウの上部にコードを入力すると、<Enter>キーを押すとコードが実行されます。 コードの長いセクションは、[実行]ボタンが押されるまで実行されない下部のエディター領域に入力する必要があります。

 

 

SharpCapの制御は、各スクリプトセッションに自動的に読み込まれるSharpCapオブジェクトを使用して処理されます。 いくつかの簡単なコマンドは...

 

SharpCap.SelectedCamera = None # Close the camera that is currently active

 

SharpCap.SelectedCamera = None#現在アクティブなカメラを閉じます)

 

 

SharpCap.SelectedCamera = SharpCap.Cameras[0] # Open the first camera in the Cameras menu and start previewing it

 

SharpCap.SelectedCamera = SharpCap.Cameras [0][カメラ]メニューの最初のカメラを開き、プレビューを開始します)

 

 

カメラが起動したら、このようにプロパティを調整します

 

SharpCap.SelectedCamera.Controls.Exposure.Value = 1000 # Set the exposure to 1000ms (1s)

 

SharpCap.SelectedCamera.Controls.Exposure.Value = 1000#露出を1000ms1s)に設定します)

 

 

IronPythonパッドで、コードprint SharpCap.Camerasを入力し、実行ボタンを押します。

 

image

 

 

次の出力がIronPythonコンソールに表示されます。

 

image

 

 

フロッピーディスクアイコンをクリックし、以下の[スクリプトの実行]メニュー項目で使用するために、ファイルをcameras.pyとして保存します。

 

 

APIの探索

 

エディターは、「.」を入力すると、オブジェクトの可能なメソッドとプロパティを自動的に表示します。 ―これは、使用可能なAPIを探索するのに役立ちます。

 

IronPythonコンソールで、次の2行を入力します(テキストの場合と「.」の場合が重要です)。

 

import System

from System.

 

.」を入力するとすぐに、選択できるリストが表示されます。 このトリックはSharpCap APIの多くの部分に適用でき、使用可能なメソッドとそれらが必要とするパラメーターを検出できます。

 

image

 

 

 

スクリプトを実行する

 

[スクリプトの実行]メニュー項目をクリックすると、ファイルエクスプローラーウィンドウが開き、以前に作成したPythonスクリプトを選択できます。

 

スクリプト(プログラム)は、任意のテキストエディターを使用してWindows内から作成することもできます。 スクリプトは.py拡張子を付けて保存する必要があります。

 

メニューから[スクリプト]> [スクリプトの実行]  (Run Script)を選択します。

 

image

 

something.pyファイルを参照し、[開く]ボタンをクリックします。 スクリプトが実行されます。

 

   例

 

1.     メニューから、[スクリプト]> [コンソールの表示]を選択します。

2.     マウスを使用して、Iron Pythonコンソールを片側にドラッグします。

3.     メニューから[スクリプト]> [スクリプトの実行]を選択します。

4.     前のセクションで作成したcameras.pyファイルに移動し、それを選択します。

5.     スクリプトが実行され、結果(使用可能なカメラ)がIronPythonコンソールに表示されます。

 

 

image

 

 

上記の例には実際的な使用はありませんが、SharpCap機能の使用方法を示すのに役立ちます。

 

 

 

スクリプトのチュートリアル

 

 

スクリプトを作成

 

このセクションでは、次の方法について説明します。

 

     IronPythonコンソールを使用して簡単なスクリプトを作成します。

     スクリプトを保存します。

     コンソール内からスクリプトを実行します。

     [スクリプトの実行]メニューオプションから保存したスクリプトを直接実行します。

 

「コンソールの表示」を選択すると、統合開発環境(IDE)が表示されます。 これにより、IronPythonプログラミング言語を使用したコードの作成、実行、デバッグが可能になります。

 

image

 

 

以下のコードは、単一のPNG画像をキャプチャしてファイルに保存します。 宛先d\ capture.pngは、使用しているコンピューターの都合の良い場所に変更する必要があります。

 

SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")

 

 

次の手順を実行して、スクリプト機能をテストします。

 

1.     SharpCapを起動し、メニューから[カメラ]> [カメラ1のテスト(ディープスカイ)]を選択します。

 

image

 

 

M42画像がキャプチャ表示領域に表示されます。

 

image

 

 

2.     カメラのコントロールパネルで、出力形式をPNGファイルに変更します…

 

image

 

 

3.     メニューから、[スクリプト]> [コンソールの表示] (Show Console)を選択します。

 

image

 

IronPythonコンソールが開きます。

 

 

4.     次のコードをコピーします。

 

SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")

 

 

Ctrl + Vで(または直接入力して)IronPythonパッド(IronPythonコンソールの下部)に貼り付けます。 使用するPCで適切な宛先になるように宛先(赤の下線付き)を編集します。

 

image

 

 

5.     実行アイコン(またはF5)を押します。

 

image

 

 

6.     宛先が正常であることを確認し、capture.pngcapture.png.CameraSettings.txtと呼ばれる2つの新しいファイルを追加します。

 

image

 

 

7.     コードを編集して、キャプチャファイル名をcapture2.pngに変更します。

 

image

 

 

8.     フロッピーディスクのアイコンをクリックすると、ファイルエクスプローラウィンドウが開きます。

 

image

 

ファイルをcapture2.pyとして保存します(.py拡張子は重要です)。

 

 

9.      IronPythonコンソールを閉じます。

 

[] もちろん、スクリプトのポイントはSharpCapの使用を自動化することであり、上記の手順はすべて、より複雑なスクリプトで自動化できます。たとえば、次のようになります。

 

SharpCap.SelectedCamera = SharpCap.Cameras.Find( lambda x:x.DeviceName == "Test Camera 1 (Deep Sky)")

SharpCap.SelectedCamera.Controls.OutputFormat.Value = "PNG Files (*.png)"

SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")

 

 

 

SharpCapスクリプトオブジェクトモデルリファレンス

 

アプリケーションの制御に使用できる主なオブジェクトは次のとおりです。

 

SharpCap  

メインアプリケーションオブジェクト、他のすべてのオブジェクトは、このオブジェクトを介してアクセスされます。

SharpCap.Cameras

使用可能なカメラのコレクション([カメラ]メニューに表示) 

SharpCap.SelectedCamera    

現在開いているカメラ(または開いているカメラがない場合は「なし」)

SharpCap.SelectedCamera.Controls

現在開いているカメラで使用できるコントロール。多くの一般的なコントロールに直接アクセスできますが、必要なコントロールを見つけるには、配列内の各アイテムをチェックする必要があるものもあります。  

SharpCap.Focusers   

SharpCapによって検出された(ASCOM)フォーカサーのコレクション。SharpCap.Focusers.SelectedFocuserを使用して、特定のフォーカサーに接続し、SelectedCamera.Controlsコレクションを介してアクセスできます。

SharpCap.MountsSharpCap.Wheels

ASCOMマウントとフィルターホイールのコレクションは、フォーカサーと同じように機能します。

SharpCap.Transforms

SharpCap.Transforms.SelectedTransformプロパティを設定することでプレビューウィンドウに適用できるフレーム変換のコレクション(現時点ではバギー)

 SharpCap.MainWindow   

SharpCapのメインアプリケーションウィンドウ。プロパティを変更したり、メソッドの呼び出しに注意してください。  

 SharpCap.Reticules 

画面上に描画するために選択できるレチクルオーバーレイのコレクション(現在はバグのある変換など)

 SharpCap.Settings   

すべてのアプリケーション設定、注意して変更し、変更を有効にするために変更後に「Save()」を呼び出します

 

 

一般に、最も使用されるオブジェクトはSharpCap.SelectCameraおよびSharpCap.SelectCamera.Controlsです。

 

 

カメラオブジェクト

 

SelectedCameraオブジェクトの最も重要なメソッドとプロパティは次のとおりです(情報プロパティは、選択されていない他のカメラでも機能します)。

 

CanCaptureCanStillCapture

カメラがビデオと静止画をそれぞれキャプチャできるかどうかを示します

 CanPause

カメラは停止せずにビデオキャプチャを一時停止できますか?

 CaptureConfig

フレーム制限など、実行するキャプチャのタイプを制御する設定

 PrepareToCapture()

RunCapture()を呼び出す前に、ビデオキャプチャを設定するために呼び出す必要があります

 RunCapture()

準備されたビデオキャプチャを開始します。キャプチャは、制限に達するか、StopCapture()が呼び出されるまで実行されます。出力ファイルには、選択した命名規則に従って名前が付けられます。

 CancelCapture()   

RunCaptureを使用して実行する代わりに)準備されたキャプチャをキャンセルします。

 CaptureSingleFrame()

単一フレームのスナップショットをキャプチャします(出力ファイルには、選択した命名規則に従って名前が付けられます

 CaptureSingleFrameTostring filePath

単一のフレームをキャプチャし、指定された出力ファイル名に保存します。パスは完全なパスである必要があり、指定した拡張子はSharpCap.SelectedCameras.Controls.OutputFormat.Valueで選択した拡張子と一致する必要があります。

 Name

アプリケーションUIで使用されるカメラの名前

 VideoDeviceId

カメラの内部識別子(空またはかなりオタクの場合があります)

 StartPreview()、StopPreview()

カメラのフレームのプレビューをそれぞれ開始および停止する

 RestartPreview()

カメラのフレームのプレビューを停止してから再開します

 GetStatusboolean allStats

キャプチャされたフレーム、平均フレームレートなどを含むカメラのステータスを記述するオブジェクトを返します。

 IsOpenIsPreviewingCanCountFrames、キャプチャ

名前付きの情報プロパティ

 CapturedFrameCount

プレビューが最後に開始された、またはキャプチャが開始または停止されてからカメラで処理されたフレームの数(プレビューフレームを含む)。

 ApplySelectedTransform()

予約済み、内部使用のみ

 

 

次のコントロールは、SelectedCameraControlsオブジェクトで直接使用できます。

 

ビニング、カラースペース、露出、フィルターホイール、フォーカス、ゲイン、出力フォーマット、解像度

 

 

他のコントロールは、Controlsコレクション内で使用できる可能性が高く、名前で検索する必要があります。次に例を示します。

 

cooler = SharpCap.SelectedCamera.Controls.Find(lambda x: x.Name == "Cooler")

 

 

使用可能なコントロールはカメラごとに異なり、ColourSpaceExposureResolution、およびOutputFormatのみが常に使用可能であることに注意してください。

 

 

 

コントロールオブジェクト

 

利用可能

コントロールが実際に値の読み取りまたは書き込みに使用できる場合はTrue

 読み取り専用

コントロールからの読み取りのみが可能な場合はTrue(たとえば、センサー温度の読み取り)

 AutoAvailable    

コントロールを自動モードに設定できる場合はTrue

 オート

自動モードと手動モードの間でコントロールを切り替える

 名前

UIに表示されるコントロールの名前

 Id

現在含まれている一般的なプロパティタイプの列挙:その他、露出、FrameRate、パン、チルト、解像度、ColourSpaceOutputFormat、フォーカス、FilterWheelFrameFilter、ビニング、ゲイン

 最小、最大

数値制御の最小値と最大値を取得します

 ステップ

整数コントロールには、ステップ値が定義されている場合があります-​​更できるのは、この値の倍数のみです。これは非常にまれです。

 

取得および変更可能なコントロールの値(読み取り専用でない場合)。

 タイプ

コントロールが持つ値のタイプ。

整数

 数値、整数値

ダブル

 数値、整数または小数値

ブール値

 オン/オフ値(チェックボックス)

コマンド

 UIのボタンによって起動される単一のアクション

複数の選択肢

 UIのドロップダウンコントロールとして表示されるオプションのリスト

カスタム

 他のタイプのコントロール。

 利用可能な値

 MultipleChoiceコントロールの場合、利用可能な選択肢のリスト。

 

 

 

スクリプトサンプル

 

スクリプトタスクの例を以下に示します。

 

 

定期的なキャプチャとタイムスタンプ画像

 

以下のコードは、約15秒ごとに単一のPNG画像をキャプチャし、保存する前に画像自体にタイムスタンプを書き込みます。 コードを変更して、タイムスタンプ付きの各画像を異なるファイル名で保存したり、タイムスタンプのステップを削除したりするのは簡単です。

 

このコードは、すでに選択されプレビューされているカメラと、カメラがPNGファイルに出力できることを前提としています(つまり、カメラが12/16ビットモードの場合は機能しません)。

 

 

インポート時間:

clr.AddReference("System.Drawing")

 

 

System.Drawingのインポート:

SharpCap.SelectedCamera.Controls.OutputFormat.Value = 'PNG files (*.png)'

if (SharpCap.SelectedCamera.Controls.Exposure.AutoAvailable):

SharpCap.SelectedCamera.Controls.Exposure.Automatic = True

 

 

Trueの間:

SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")

time.sleep(1)

bm = System.Drawing.Bitmap("d:\capture.png")

g = System.Drawing.Graphics.FromImage(bm)

f = System.Drawing.Font("Arial", 12)

g.DrawString(System.DateTime.Now.ToString(), f, System.Drawing.Brushes.Red, System.Drawing.Point(0,0))

g.Dispose()

f.Dispose()

bm.Save("d:\\timestamped.png")

bm.Dispose()

# do more with png file here

time.sleep(15)

 

 

 

選択長方形の制御

 

この例を開始する前に、適切なフォーカススコア方式または画像ヒストグラムを選択して、プログラムによって生成された選択領域を表示できるようにします。 選択領域は、ツールバーアイコンでオフにする必要があります。

 

[スクリプト]> [コンソールの表示]から、次のコードをIronPythonコンソールに入力します。 これは演習の目的を無効にするため、コピーして貼り付けないでください。 一部の場所では、「.」を入力するとドロップダウンが表示され、可能なメソッドとプロパティが示されます。 適切なテキストを選択します。

 

import clr

clr.AddReference("System.Drawing")

from System.Drawing import Rectangle

SharpCap.Transforms.AreaSelection = True # turn on selection area

SharpCap.Transforms.SelectionRect = Rectangle(100,200,300,400) # adjust selection rectangle, parameters are (x, y, width, height)

 

入力したコードは次のようになります。 実行すると、何も起こらないように見え、追加の>>>がコンソールに表示されます。 エラーメッセージがないことは良い兆候です。

 

image

 

 

これにより、選択領域を指定するために必要な.NETタイプのSystem.Drawing.Rectangleを使用できるようになります。.NETタイプへのアクセスを許可する最初の3行は、他の.NETに使用できるため、ここでは重要な行です タイプも。

 

 

スクリプトを作成するタスクの例

 

次の重要なタスクを検討してください。

 

     LRGBフィルターを含むUSBフィルターホイールを制御する

     Lフィルターを使用して10x5分の露出をキャプチャ

     Rフィルターに切り替え

     Rフィルターを使用して10x5分の露出をキャプチャ

     Gフィルターに切り替え

     Gフィルターを使用して10x5分の露出をキャプチャ

     Bフィルターに切り替え

     Bフィルターを使用して10x5分の露出をキャプチャ

 

合計キャプチャ時間= 3時間20分ですが、キャプチャがスクリプトによって管理されている場合、介入は必要ありません。