SharpCapにはスクリプト言語が組み込まれており、キーボードとマウスでSharpCapを制御するときに実行できるほぼすべてのアクションを実行できる単純なプログラムを作成できます。 スクリプト言語は、.NETフレームワークへのPythonプログラミング言語のMicrosoftポートであるIronPythonと呼ばれる言語に基づいています。
スクリプトコンソールを表示するには、スクリプトメニューから[コンソールの表示]を選択します。 スクリプトコンソールは統合開発環境(IDE)です。 これにより、IronPythonプログラミング言語を使用したコードの作成、実行、デバッグ、およびSharpCapへの統合が可能になります。
IronPythonコンソールウィンドウにhelp()および<ENTER>と入力すると、次の基本的なヘルプ出力が表示されます。
いくつかの例が表示されます。 これらの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#露出を1000ms(1s)に設定します)
IronPythonパッドで、コードprint SharpCap.Camerasを入力し、実行ボタンを押します。
次の出力がIronPythonコンソールに表示されます。
フロッピーディスクアイコンをクリックし、以下の[スクリプトの実行]メニュー項目で使用するために、ファイルをcameras.pyとして保存します。
APIの探索
エディターは、「.」を入力すると、オブジェクトの可能なメソッドとプロパティを自動的に表示します。 ―これは、使用可能なAPIを探索するのに役立ちます。
IronPythonコンソールで、次の2行を入力します(テキストの場合と「.」の場合が重要です)。
import System
from System.
「.」を入力するとすぐに、選択できるリストが表示されます。 このトリックはSharpCap APIの多くの部分に適用でき、使用可能なメソッドとそれらが必要とするパラメーターを検出できます。
[スクリプトの実行]メニュー項目をクリックすると、ファイルエクスプローラーウィンドウが開き、以前に作成したPythonスクリプトを選択できます。
スクリプト(プログラム)は、任意のテキストエディターを使用してWindows内から作成することもできます。 スクリプトは.py拡張子を付けて保存する必要があります。
メニューから[スクリプト]> [スクリプトの実行] (Run Script)を選択します。
something.pyファイルを参照し、[開く]ボタンをクリックします。 スクリプトが実行されます。
例
1. メニューから、[スクリプト]> [コンソールの表示]を選択します。
2. マウスを使用して、Iron Pythonコンソールを片側にドラッグします。
3. メニューから[スクリプト]> [スクリプトの実行]を選択します。
4. 前のセクションで作成したcameras.pyファイルに移動し、それを選択します。
5. スクリプトが実行され、結果(使用可能なカメラ)がIronPythonコンソールに表示されます。
上記の例には実際的な使用はありませんが、SharpCap機能の使用方法を示すのに役立ちます。
このセクションでは、次の方法について説明します。
● IronPythonコンソールを使用して簡単なスクリプトを作成します。
● スクリプトを保存します。
● コンソール内からスクリプトを実行します。
● [スクリプトの実行]メニューオプションから保存したスクリプトを直接実行します。
「コンソールの表示」を選択すると、統合開発環境(IDE)が表示されます。 これにより、IronPythonプログラミング言語を使用したコードの作成、実行、デバッグが可能になります。
以下のコードは、単一のPNG画像をキャプチャしてファイルに保存します。 宛先d:\ capture.pngは、使用しているコンピューターの都合の良い場所に変更する必要があります。
SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")
次の手順を実行して、スクリプト機能をテストします。
1. SharpCapを起動し、メニューから[カメラ]> [カメラ1のテスト(ディープスカイ)]を選択します。
M42画像がキャプチャ表示領域に表示されます。
2. カメラのコントロールパネルで、出力形式をPNGファイルに変更します…
3. メニューから、[スクリプト]> [コンソールの表示] (Show Console)を選択します。
IronPythonコンソールが開きます。
4. 次のコードをコピーします。
SharpCap.SelectedCamera.CaptureSingleFrameTo("d:\capture.png")
Ctrl + Vで(または直接入力して)IronPythonパッド(IronPythonコンソールの下部)に貼り付けます。 使用するPCで適切な宛先になるように宛先(赤の下線付き)を編集します。
5. 実行アイコン(またはF5)を押します。
6. 宛先が正常であることを確認し、capture.pngとcapture.png.CameraSettings.txtと呼ばれる2つの新しいファイルを追加します。
7. コードを編集して、キャプチャファイル名をcapture2.pngに変更します。
8. フロッピーディスクのアイコンをクリックすると、ファイルエクスプローラウィンドウが開きます。
ファイルを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.Cameras |
使用可能なカメラのコレクション([カメラ]メニューに表示) |
SharpCap.SelectedCamera |
現在開いているカメラ(または開いているカメラがない場合は「なし」) |
SharpCap.SelectedCamera.Controls |
現在開いているカメラで使用できるコントロール。多くの一般的なコントロールに直接アクセスできますが、必要なコントロールを見つけるには、配列内の各アイテムをチェックする必要があるものもあります。 |
SharpCap.Focusers |
SharpCapによって検出された(ASCOM)フォーカサーのコレクション。SharpCap.Focusers.SelectedFocuserを使用して、特定のフォーカサーに接続し、SelectedCamera.Controlsコレクションを介してアクセスできます。 |
SharpCap.Mounts、SharpCap.Wheels |
ASCOMマウントとフィルターホイールのコレクションは、フォーカサーと同じように機能します。 |
SharpCap.Transforms |
SharpCap.Transforms.SelectedTransformプロパティを設定することでプレビューウィンドウに適用できるフレーム変換のコレクション(現時点ではバギー) |
SharpCap.MainWindow |
SharpCapのメインアプリケーションウィンドウ。プロパティを変更したり、メソッドの呼び出しに注意してください。 |
SharpCap.Reticules |
画面上に描画するために選択できるレチクルオーバーレイのコレクション(現在はバグのある変換など) |
SharpCap.Settings |
すべてのアプリケーション設定、注意して変更し、変更を有効にするために変更後に「Save()」を呼び出します |
一般に、最も使用されるオブジェクトはSharpCap.SelectCameraおよびSharpCap.SelectCamera.Controlsです。
SelectedCameraオブジェクトの最も重要なメソッドとプロパティは次のとおりです(情報プロパティは、選択されていない他のカメラでも機能します)。
CanCapture、CanStillCapture |
カメラがビデオと静止画をそれぞれキャプチャできるかどうかを示します |
CanPause |
カメラは停止せずにビデオキャプチャを一時停止できますか? |
CaptureConfig |
フレーム制限など、実行するキャプチャのタイプを制御する設定 |
PrepareToCapture() |
RunCapture()を呼び出す前に、ビデオキャプチャを設定するために呼び出す必要があります |
RunCapture() |
準備されたビデオキャプチャを開始します。キャプチャは、制限に達するか、StopCapture()が呼び出されるまで実行されます。出力ファイルには、選択した命名規則に従って名前が付けられます。 |
CancelCapture() |
(RunCaptureを使用して実行する代わりに)準備されたキャプチャをキャンセルします。 |
CaptureSingleFrame() |
単一フレームのスナップショットをキャプチャします(出力ファイルには、選択した命名規則に従って名前が付けられます |
CaptureSingleFrameTo(string filePath) |
単一のフレームをキャプチャし、指定された出力ファイル名に保存します。パスは完全なパスである必要があり、指定した拡張子はSharpCap.SelectedCameras.Controls.OutputFormat.Valueで選択した拡張子と一致する必要があります。 |
Name |
アプリケーションUIで使用されるカメラの名前 |
VideoDeviceId |
カメラの内部識別子(空またはかなりオタクの場合があります) |
StartPreview()、StopPreview() |
カメラのフレームのプレビューをそれぞれ開始および停止する |
RestartPreview() |
カメラのフレームのプレビューを停止してから再開します |
GetStatus(boolean allStats) |
キャプチャされたフレーム、平均フレームレートなどを含むカメラのステータスを記述するオブジェクトを返します。 |
IsOpen、IsPreviewing、CanCountFrames、キャプチャ |
名前付きの情報プロパティ |
CapturedFrameCount |
プレビューが最後に開始された、またはキャプチャが開始または停止されてからカメラで処理されたフレームの数(プレビューフレームを含む)。 |
ApplySelectedTransform() |
予約済み、内部使用のみ |
次のコントロールは、SelectedCameraのControlsオブジェクトで直接使用できます。
ビニング、カラースペース、露出、フィルターホイール、フォーカス、ゲイン、出力フォーマット、解像度
他のコントロールは、Controlsコレクション内で使用できる可能性が高く、名前で検索する必要があります。次に例を示します。
cooler = SharpCap.SelectedCamera.Controls.Find(lambda x: x.Name == "Cooler")
使用可能なコントロールはカメラごとに異なり、ColourSpace、Exposure、Resolution、およびOutputFormatのみが常に使用可能であることに注意してください。
利用可能 |
コントロールが実際に値の読み取りまたは書き込みに使用できる場合はTrue。 |
||||||||||||
読み取り専用 |
コントロールからの読み取りのみが可能な場合はTrue(たとえば、センサー温度の読み取り) |
||||||||||||
AutoAvailable |
コントロールを自動モードに設定できる場合はTrue |
||||||||||||
オート |
自動モードと手動モードの間でコントロールを切り替える |
||||||||||||
名前 |
UIに表示されるコントロールの名前 |
||||||||||||
Id |
現在含まれている一般的なプロパティタイプの列挙:その他、露出、FrameRate、パン、チルト、解像度、ColourSpace、OutputFormat、フォーカス、FilterWheel、FrameFilter、ビニング、ゲイン |
||||||||||||
最小、最大 |
数値制御の最小値と最大値を取得します |
||||||||||||
ステップ |
整数コントロールには、ステップ値が定義されている場合があります-変更できるのは、この値の倍数のみです。これは非常にまれです。 |
||||||||||||
値 |
取得および変更可能なコントロールの値(読み取り専用でない場合)。 |
||||||||||||
タイプ |
コントロールが持つ値のタイプ。
|
||||||||||||
利用可能な値 |
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)
入力したコードは次のようになります。 実行すると、何も起こらないように見え、追加の>>>がコンソールに表示されます。 エラーメッセージがないことは良い兆候です。
これにより、選択領域を指定するために必要な.NETタイプのSystem.Drawing.Rectangleを使用できるようになります。.NETタイプへのアクセスを許可する最初の3行は、他の.NETに使用できるため、ここでは重要な行です タイプも。
次の重要なタスクを検討してください。
● LRGBフィルターを含むUSBフィルターホイールを制御する
● Lフィルターを使用して10x5分の露出をキャプチャ
● Rフィルターに切り替え
● Rフィルターを使用して10x5分の露出をキャプチャ
● Gフィルターに切り替え
● Gフィルターを使用して10x5分の露出をキャプチャ
● Bフィルターに切り替え
● Bフィルターを使用して10x5分の露出をキャプチャ
合計キャプチャ時間= 3時間20分ですが、キャプチャがスクリプトによって管理されている場合、介入は必要ありません。