10分で始めるクイックスタート
ビデオチュートリアル1 - OpenMVの概要: https://singtown.com/learn/688
ビデオチュートリアル2 - 開封の紹介: https://singtown.com/learn/49985
ビデオチュートリアル3 - ドライバとIDEのインストールと使い方: https://singtown.com/learn/49989/
ソフトウェアのダウンロード
中国国内向け公式サイト:http://openmv.cc(「Software Download」をクリック)
米国向け公式サイト: https://openmv.io/pages/download
Windows
ダウンロード後は「次へ」をクリックし続けるだけで、通常はインストールが完了します。\

画像ウィンドウが表示されない場合は、右側から引き出すことができます。

ドライバのインストール
OpenMVをパソコンに接続します。\ 通常はドライバが自動的にインストールされ、手動でのインストールは不要です。デバイスマネージャーを開くと、次のように表示されます。

ただし、一部のパソコンではドライバが自動的にインストールされない場合があります。\ このとき、デバイスマネージャーに感嘆符が表示され、ドライバが正常にインストールされていないことを示します。

この場合は、手動でインストールする必要があります。\ まずドライバをダウンロードしてください: https://dl.singtown.com/openmv/openmv_windowsdriver.zip
デスクトップに解凍したら、デバイスマネージャーで対象デバイスを右クリックし、「ドライバーの更新」をクリックします。





Windowsでドライバのインストールに失敗する場合
以下のような状況が発生した場合(めったに起こりませんが、パソコン側の不具合です):\

OpenMVのドライバインストールが失敗する原因の90%はパソコン側の問題であり、簡易版OSや一部の最適化ソフトの使用が原因であることがほとんどです。OpenMVドライバの解決方法はArduinoの場合と似ています。
これは、簡易版(軽量版)のWindowsシステムでは、あまり使われないドライバ情報が削除されてしまうことが原因です。
トラブルシューティングの参考情報:\ https://forum.singtown.com/topic/230
最後に、以下を推奨します。
- パソコンを購入する際は、正規のOSがインストールされたものを購入してください。
- Windows Updateを有効にしておいてください(デフォルトで有効になっているので、オフにしないでください)。
- 非正規版のOSを使用している場合でも、MSDNから純正かつ完全なバージョンをダウンロードしてください。
- システムのインストールにGhostは絶対に使用しないでください。ドライバの不具合の90%はGhostが原因です。
MacOS
IDEソフトウェアをダウンロードしたら、インストーラーをダブルクリックします。あとは「次へ」をクリックし続けるだけです。
「App Storeと確認済みの開発元からのアプリケーションのみ許可」と表示された場合は、「セキュリティとプライバシー」で「すべてのアプリケーションを許可」に設定してください。\

Ubuntu
Ubuntuでは、ダウンロードしたファイルに実行権限を与える必要があります。その後、ダブルクリックしてインストールします。




Hello Worldを実行する
まず、IDEとドライバが正しくインストールされていることを確認してください。
USBケーブルでOpenMVをパソコンに接続すると、USBドライブが表示されます。

OpenMV IDEを開きます。

この画像に注目してください。
Connect(接続)をクリック- 続けて
Run(実行)をクリック
右上の画像ウィンドウに正しく画像が表示されます。\
下部のSerial Terminalをクリックすると、ターミナルウィンドウがポップアップ表示されます。\
同時に、Serial Terminalにデータが出力されます。これがフレームレートです。コードの17行目にあるprint(clock.fps())を実行した結果です。
ボールをトラッキングする
編集ボックスの内容をすべて削除し、次のコードに置き換えます。
# 色ブロック検出の例
#
# この例では、find_blobs()関数を使って画像内の色ブロックを検出する方法を示します
# ここで検出する色は濃い緑色です
import csi, image, time
csi0 = csi.CSI()
# 色トラッキングの例です。周囲の照明を必ず制御し、光を安定させてください。
green_threshold = ( 0, 80, -70, -10, -0, 30)
# 緑色のしきい値を設定します。括弧内の数値はそれぞれL A Bの最大値と最小値(minL, maxL, minA,
# maxA, minB, maxB)です。LABの値は画像左側の3つの座標図から選びます。グレースケール画像の場合は
# (min, max)の2つの値だけを設定すれば大丈夫です。
csi0.reset() # カメラを初期化
csi0.pixformat(csi.RGB565) # フォーマットをRGB565に設定
csi0.framesize(csi.QQVGA) # QQVGAを使うと処理が速くなります
csi0.snapshot(time = 2000) # 2000ms待機して新しい設定を反映させ、ホワイトバランスを自動調整します
csi0.auto_gain(False) # 自動ゲインをオフにします。デフォルトはオンですが、色認識では必ずオフにしてください。
csi0.auto_whitebal(False)
# ホワイトバランスをオフにします。デフォルトはオンですが、色認識では必ずオフにしてください。
clock = time.clock() # フレームレートを計測
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = csi0.snapshot() # イメージセンサから画像を1枚取得
blobs = img.find_blobs([green_threshold])
# find_blobs(thresholds, invert=False, roi=Auto)。thresholdsは色のしきい値で、
# タプルとして[ ]で囲んで渡す必要があります。invert=1で色のしきい値を反転、invert=Falseが
# デフォルトで反転なしです。roiは色認識を行う視野範囲を設定するもので、roiはタプルで
# roi = (x, y, w, h)、左上頂点(x, y)から幅w、高さhの矩形領域を表します。roiを設定しない場合は
# デフォルトで画像全体が対象になります。
# この関数はリストを返します。[0]は検出された対象色領域の左上頂点のx座標、[1]は
# 左上頂点のy座標、[2]は対象領域の幅、[3]は対象領域の高さ、[4]は対象
# 領域のピクセル数、[5]は対象領域の中心点のx座標、[6]は対象領域の中心点のy座標、
# [7]は対象色領域の回転角度(ラジアン値・浮動小数点型。リストの他の要素は整数型)、
# [8]はこの対象領域と交差する対象の数、[9]は色の番号(この領域がどのしきい値thresholdで
# 検出されたかを識別するために使えます)を表します。
if blobs:
# 対象の色が見つかった場合
for b in blobs:
# 見つかった対象色領域を順に処理
# Draw a rect around the blob.
img.draw_rectangle(b[0:4]) # rect
# 対象色領域を矩形でマークする
img.draw_cross((b[5], b[6])) # cx, cy
# 対象色領域の中心に十字マークを描く
print(clock.fps()) # 注意: OpenMVをパソコンに接続すると、フレームレートは元のおよそ半分になります
# パソコンから切断すると、フレームレートが上がります
プログラムを実行すると

このプログラムは、green_thresholdのしきい値に基づいて色ブロックを検索します。
しきい値を変更する
では、このしきい値を自分で変更するにはどうすればよいでしょうか?対象物の色のしきい値をどうやって知ればよいでしょうか?
- まずカメラの映像内で対象色を見つけ、フレームバッファ上で対象色の部分を左クリックしてドラッグし、矩形で囲みます
- フレームバッファ下部の座標図で、LAB Color Spaceを選択します。

- 3つの座標図はそれぞれ、囲んだ矩形領域内の色のLAB値を表しています。3つの座標図それぞれの最大値と最小値を選ぶと、つまり(0, 60, -70, -10, -0, 30)となります

ファイルシステム
ファイルシステムは、OpenMV(あるいはMicroPython)が持つ特に優れた機能の一つです。ファイルシステムとは何でしょうか?簡単に言えば、さまざまなフォルダやファイルがツリー構造で配置されたもので、簡単に言うとあなたのUSBメモリのようなものです。そして、コード内でパスを使ってファイルの読み込みや作成などを行うことができます。

オフライン動作
ビデオチュートリアル付録2 - オフライン動作: https://singtown.com/video
では、次の疑問です。OpenMVがファイルシステムをサポートしていることに、どんなメリットがあるのでしょうか?
答えは、非常に便利だということです。\ OpenMVは内蔵のFlashをファイルシステムとして仮想化しています。OpenMVをパソコンに接続すると、USBメモリとしてポップアップ表示されます。その中身がOpenMVのファイルシステムです。ファームウェアを書き込みたいときは、スクリプトファイルをこの「USBメモリ」のmain.pyにコピーするだけです。電源を入れるたびに、OpenMVは内部のmain.pyを自動的に実行するため、オフラインで動作させることができます。
ワンクリックダウンロード
ツールバーで「開いているスクリプトをOpenMV Camに保存(main.pyとして)」をクリックすると、IDEが現在のファイルを自動的にmain.pyとして保存してくれるため、非常に便利です。

電源供給
OpenMVには2つの電源入力端子があります。
- VIN(VCCと表記されている場合もあります)
- USB入力
VIN入力は3.6V~5Vで、5Vを推奨します。\ USBとVINは同時に電力を供給しても構いません。

OpenMVには電源出力端子が1つあります。
- 3.3V。この電圧はOpenMVのレギュレータから出力されるもので、他のセンサーに電力を供給するために使用します。注意: 内部チップの保護がない状態で3.3Vを直接給電すると、故障しやすくなります。
SDカード
コードが10万行にもなり、内蔵Flashの容量が足りない場合はどうすればよいでしょうか?画像を保存したい場合はどうすればよいでしょうか?
答えは、SDカードを使うことです。

では、SDカードはどのように使うのでしょうか?SDカードもファイルシステムです。電源投入時にSDカードが挿入されていると、SDカードのファイルシステムが内蔵Flashのファイルシステムを自動的に置き換えます。電源を入れるたびに、SDカード内のmain.pyが実行されます。とても直感的で便利ですね。SDカードの最大容量は32Gです。