iris_detection.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 虹彩検出2の例
#
# この例は、目を検出した後に視線(瞳孔検出)を求める方法を示します
# 画像内の目。このスクリプトは、瞳孔を含むはずのROIの中心点を判定する find_eyes 関数を使用します
# 瞳孔を含むはずのROIの中心点。基本的には次の方法で求めます
# 目のROI内で最も暗い領域の中心を求めることで、それが瞳孔の中心となります。
#
# 注記:このスクリプトは最初に顔を検出しません。望遠レンズと併用してください。
import csi
import time
import image
csi0 = csi.CSI()
csi0.reset()
csi0.contrast(3)
csi0.gainceiling(16)
csi0.framesize(csi.VGA)
# 画像を200x100にビニング/クロップすることで、処理データ量を抑えつつより多くの詳細が得られます
csi0.window((220, 190, 200, 100))
csi0.pixformat(csi.GRAYSCALE)
# Haar カスケードを読み込む
# デフォルトではすべてのステージを使用します。ステージ数を減らすと高速になりますが精度は下がります。
eyes_cascade = image.HaarCascade("/rom/haarcascade_eye.cascade", stages=24)
print(eyes_cascade)
# FPSクロック
clock = time.clock()
while True:
clock.tick()
# スナップショットを取得します
img = csi0.snapshot()
# 目を検出!
# 注意: scale係数を小さくすると画像がより縮小され、より小さい物体を検出できます。
# しきい値を高くすると検出率は上がりますが、誤検出も増えます。
eyes = img.find_features(eyes_cascade, threshold=0.5, scale=1.5)
# 虹彩を検出
for e in eyes:
iris = img.find_eye(roi=e)
img.draw_rectangle(e)
img.draw_cross(iris)
# FPSを表示します。
# 注意: 実際のFPSはもっと高く、FBをストリーミングすることで遅くなっています。
print(clock.fps())