M5UnitVを使い始める

UnitV

MaixPy IDE での開発

MaixPyIDE ここから MaixPy をダウンロードしました。 まずは手順に乗っ取り、Helloworld.py を実行したところ問題なく実行することができました。

とりあえず処理を書いてみる

Micro Python での画像処理は以前 OpenMV で行っていてほとんど環境も変わっていないため、問題なくプログラムを書けそうです。とりあえず今回は初回なので AI 要素は使わず、シンプルに色検出を行ってみました。

1import sensor, image, time,ustruct
2
3thresholds = [
4(0, 100, -128, -30, -128, 127)  #検出する色の閾値(LAB空間)
5]
6
7sensor.reset()  #センサーの設定
8sensor.set_pixformat(sensor.RGB565)
9sensor.set_framesize(sensor.QVGA)
10sensor.set_brightness(-1)
11sensor.skip_frames(30)
12sensor.set_auto_gain(False)
13
14maxrect = 0
15x_data = 0
16y_data = 0
17
18while(True):
19        rectarray = []
20        img = sensor.snapshot() #センサーから画像を取得
21
22        for blob in img.find_blobs(thresholds, pixel_threshold = 100, area_threshold = 100, merge = True, margin = 5):
23            rectarray.append(list(blob.rect()))     #見つかった閾値内のオブジェクトをリストに格納
24
25        try:
26            maxrect = max(rectarray,key=lambda x: x[2]*x[3])    #配列の中から面積の一番大きい物を選定
27            img.draw_rectangle(maxrect)     #オブジェクトを囲う四角形の描画
28            x_data = maxrect[0]+(maxrect[2]/2)  #中心のx座標の算出
29            y_data = maxrect[1]+(maxrect[3]/2)  #中心のy座標の算出
30
31        except ValueError as err:   #オブジェクトがひとつも見つからなかった場合の例外処理
32            pass
33
34        x = int((x_data / 320) * 70.8)  #視野角に合わせた座標の変換
35        y = int(((y_data - 240) / -240) * 55.6)
36
37        print("x = ",x,"   y = ",y)

指定した色閾値内の物体を探し一番面積の大きいものを抽出するというシンプルな物です。

今回はおーいお茶のキャップを使用しました。ちゃんとキャップを囲う四角形が描画され中心座標がシリアルに出力されました。

次回以降について

とりあえずカメラとして使用することはできたので次回以降 M5Stack との通信や AI 機能を用いた物体認識などをやっていこうと思います。