実験の事前効果:マスク着用の判断を実現
実験装置の準備: k210 マイクロコントローラー、カメラ、スクリーン。
実験原理の分析:マスク認識モデルをK210に焼き付けて、人がマスクを着用しているかどうかを判断し、
MaixHub 公式 Web サイトのモデル ライブラリでモデルを検索する
マシンコードを取得する
kflash_gui でのモデルの書き込み
MaixHub公式 Web サイトのモデル ライブラリでマスク認識のモデルをダウンロードします(<--ここをクリック)
このモデルは暗号化モデルのため、独自のID取得モデルであるk210マシンコードを入力する必要があります。
マシンコードの取得方法:
(kflash_gui 書き込みソフトウェアと MaixPy IDE プログラミング環境はデフォルトでインストールされています)
K210 は、マシン コードの取得に特別に使用されるファームウェア key_gen_v1.2.bin を公式に提供しています。このファームウェアをここからダウンロードします: Download Station - Sipeed
key_gen_v1.2.bin ファイルを最初のアドレス 0x00000 に書き込みます。
ダウンロードが成功したことが示されたら、MaixPy IDE を開き、ツールを選択し、ターミナルを開き、新しいターミナルを開きます。
独自の k210 のマシン コードを取得できます。
注:先ほど最初のアドレスのマシンコードを取得するためにファームウェアを書き込んだため、最初のアドレスのファームウェアが使用されています。元のファームウェアがなければ、k210 に接続することはできません。固有のマシン コード。次回使用するために携帯電話で写真を撮り、元のファームウェアに焼き戻します。k210 データ パッケージの 02 サンプル プログラム --- 03 関連ファームウェアで、このファームウェアを最初のアドレスに焼き戻します。 0x00000。
マシンコードを取得した後、マスク認識モデルを取得できます
ダウンロード後、解凍して解凍します。
2つのファイルを取得しました
1.マスクはmain関数のコードです
2.mask.smodelは売春のモデルです
コードを MaixPy IDE に貼り付けてコピーします。
import sensor, image, lcd, time
import KPU as kpu
color_R = (255, 0, 0)
color_G = (0, 255, 0)
color_B = (0, 0, 255)
class_IDs = ['no_mask', 'mask']
def drawConfidenceText(image, rol, classid, value):
text = ""
_confidence = int(value * 100)
if classid == 1:
text = 'mask: ' + str(_confidence) + '%'
color_text=color_G
else:
text = 'no_mask: ' + str(_confidence) + '%'
color_text=color_R
image.draw_string(rol[0], rol[1], text, color=color_text, scale=2.5)
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_exposure(1)
sensor.set_auto_gain(1)
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(1)
task = kpu.load(0x300000)
anchor = (0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310, 3.4423, 5.6823)
_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
img_lcd = image.Image()
clock = time.clock()
while (True):
clock.tick()
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
totalRes = len(code)
for item in code:
confidence = float(item.value())
itemROL = item.rect()
classID = int(item.classid())
if confidence < 0.52:
_ = img.draw_rectangle(itemROL, color=color_B, tickness=5)
continue
if classID == 1 and confidence > 0.65:
_ = img.draw_rectangle(itemROL, color_G, tickness=5)
if totalRes == 1:
drawConfidenceText(img, (0, 0), 1, confidence)
else:
_ = img.draw_rectangle(itemROL, color=color_R, tickness=5)
if totalRes == 1:
drawConfidenceText(img, (0, 0), 0, confidence)
_ = lcd.display(img)
print(clock.fps())
_ = kpu.deinit(task)
kpu.load() 関数はトレーニング モデルの実行に使用されます。モデルは 0x300000 に配置されます。主にモデルのサイズに応じて自分で設定できます。最大アドレスは 0x800000 に配置できると記憶しています。
如果报错“memory not enough! ”就是空间不够了,可在下载站中找一个适当的固件,或者使用SD卡存放模型。
对摄像头Sensor的配置做了一些修改,之前的摄像头和显示屏角度老是别扭。
于是我们将第二个模型文件,烧录在0x300000地址:(如果弹出下载失败,拔掉重新插线试一试)
现象: