更新SANT的esp-ai继承调用方法

This commit is contained in:
dahanzimin
2025-05-27 14:50:58 +08:00
parent fcc4ae26a7
commit cf0c668ec5

View File

@@ -0,0 +1,106 @@
"""
AI-Camera (Inherit C module)
MicroPython library for the AI-Camera(Inherit C module)
=======================================================
@dahanzimin From the Mixly Team
"""
import esp_ai
from micropython import const
CODE_DETECTION = const(0)
COLOR_DETECTION = const(1)
MOTION_DEECTION = const(2)
CAT_FACE_DETECTION = const(3)
FACE_DETECTION = const(4)
FACE_RECOGNITION = const(5)
class AI:
def __init__(self, function):
self._func = function
self._ai = None
self._once = True
def _init(self, *args):
if self._func == CODE_DETECTION:
self._ai = esp_ai.code_recognition()
elif self._func == COLOR_DETECTION:
self._ai = esp_ai.color_detection(color=args[0])
elif self._func == MOTION_DEECTION:
self._ai = esp_ai.motion_recognition(threshold=args[0])
elif self._func == CAT_FACE_DETECTION:
self._ai = esp_ai.cat_detection()
elif self._func == FACE_DETECTION:
self._ai = esp_ai.face_detection()
elif self._func == FACE_RECOGNITION:
self._ai = esp_ai.face_recognition()
else:
raise AttributeError('AI model is not supported')
self._ai.start() #启动检测可以通过LCD观察结果
self._once = False
def _result(self, res, _t, _s=0, _n=0): #_s:第几个, _n:细分第几个
if not res: return None
if _t == 'len':
return res[0]
elif _t == 'pos':
if len(res) >= (5 + _s * 4):
return res[(1 + _s * 4):(5 + _s * 4)]
elif _t == 'keypoint':
if len(res) >= (7 + _s * 14 + _n * 2):
return res[(5 + _s * 14 + _n * 2):(7 + _s * 14 + _n * 2)]
def code_recognition(self):
if self._func == CODE_DETECTION:
if self._once: self._init()
return self._ai.read()
else:
raise AttributeError('This model can only run QR code detection')
def color_detection(self, color=0, event='pos', num=0):
if self._func == COLOR_DETECTION:
if self._once: self._init(color)
return self._result(self._ai.read(), event, num)
else:
raise AttributeError('This model can only run color detection')
def motion_recognition(self, threshold=50):
if self._func == MOTION_DEECTION:
if self._once: self._init(threshold)
return self._ai.read()
else:
raise AttributeError('This model can only run motion recognition')
def cat_detection(self, event='pos', num=0):
if self._func == CAT_FACE_DETECTION:
if self._once: self._init()
return self._result(self._ai.read(), event, num)
else:
raise AttributeError('This model can only run cat face detection')
def face_detection(self, event='pos', num=0, point=0):
if self._func == FACE_DETECTION:
if self._once: self._init()
return self._result(self._ai.read(), event, num, point)
else:
raise AttributeError('This model can only run face detection')
def face_recognition(self, event='pos', num=0, point=0):
if self._func == FACE_RECOGNITION:
if self._once: self._init()
return self._result(self._ai.recognize(), event, num, point)
else:
raise AttributeError('This model can only run face recognition')
def face_enroll(self):
if self._func == FACE_RECOGNITION:
return self._ai.enroll()
else:
raise AttributeError('This model can only run face recognition')
def face_delete(self, _id):
if self._func == FACE_RECOGNITION:
self._ai.delete(_id)
else:
raise AttributeError('This model can only run face recognition')