-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathAILens.py
215 lines (167 loc) · 5.08 KB
/
AILens.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
from microbit import *
Camera_Add = 0x14
Card = 2
Face = 6
Ball = 7
Tracking = 8
Color = 9
Learn = 10
numberCards = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
letterCards = ["A", "B", "C", "D", "E"]
otherCards = ["Mouse", "micro:bit", "Ruler", "Cat", "Peer", "Ship", "Apple", "Car", "Pan", "Dog", "Umbrella",
"Airplane", "Clock", "Grape", "Cup", "Turn left", "Turn right", "Forward", "Stop", "Back"]
colorList = ["Green", "Blue", "Yellow", "Black", "Red", "White"]
class AILENS(object):
"""基本描述
二郎神AI摄像头(AI-Lens)
"""
def __init__(self):
self.__Data_buff = [0, 0, 0, 0, 0, 0, 0, 0, 0]
i2c.init()
sleep(5000)
try:
i2c.read(Camera_Add, 1)
except:
display.scroll("Init AILens Error!")
def switch_function(self, func):
"""基本描述
选择摄像头功能
Args:
:param func: 选择功能号
"""
i2c.write(Camera_Add, bytearray([0x20, func]))
def get_image(self):
"""基本描述
获取一帧画面
:return: 当前画面数据
"""
self.__Data_buff = i2c.read(Camera_Add, 9)
sleep(100)
def get_ball_color(self):
"""基本描述
检测画面中的小球颜色
:return: 颜色
"""
if self.__Data_buff[0] == 7:
if self.__Data_buff[1] == 1:
return "Blue"
elif self.__Data_buff[1] == 2:
return "Red"
else:
return "No Ball"
def get_ball_data(self):
"""基本描述
返回画面中小球的信息
:return: BallData [x,y,w,h,confidence,total,order]
"""
BallData = []
for i in range(7):
BallData.append(self.__Data_buff[i + 2])
return BallData
def get_face(self):
"""基本描述
判断画面中是否存在人脸
:return:
"""
return self.__Data_buff[0] == 6
def get_face_data(self):
"""基本描述
返回画面中人脸的信息
:return: FaceData [x,y,w,h,confidence,total,order]
"""
FaceData = []
for i in range(7):
FaceData.append(self.__Data_buff[i + 2])
return FaceData
def get_card_content(self):
"""基本描述
返回卡片内容
:return: 卡片内容
"""
if self.__Data_buff[0] == 2:
return numberCards[self.__Data_buff[1] - 1]
elif self.__Data_buff[0] == 4:
return letterCards[self.__Data_buff[1] - 1]
elif self.__Data_buff[0] == 3 and self.__Data_buff[1] < 21:
return otherCards[self.__Data_buff[1] - 1]
else:
return "No Card"
def get_card_data(self):
"""基本描述
返回画面中卡片的信息
:return: CardData [x,y,w,h,confidence,total,order]
"""
CardData = []
for i in range(7):
CardData.append(self.__Data_buff[i + 2])
return CardData
def get_color_type(self):
"""基本描述
返回卡片颜色
:return: 颜色
"""
if self.__Data_buff[0] == 9:
return colorList[self.__Data_buff[1] - 1]
else:
return "No Color"
def get_color_data(self):
"""基本描述
返回画面中颜色的信息
:return: ColorData [x,y,w,h,confidence,total,order]
"""
ColorData = []
for i in range(7):
ColorData.append(self.__Data_buff[i + 2])
return ColorData
def get_track_data(self):
"""基本描述
返回画面中线段的信息
:return: LineData [angel,width,len]
"""
LineData = []
for i in range(3):
LineData.append(self.__Data_buff[i + 1])
return LineData
def learn_object(self, learn_id):
"""基本描述
以ID号来学习一个物品
:param learn_id: 要学习的ID号
"""
if learn_id > 5 or learn_id < 1:
print("Learn id out of range")
else:
i2c.write(Camera_Add, bytearray([10, learn_id]))
def get_learn_data(self):
"""基本描述
返回画面中已学习物品的信息
:return: LearnData [ID,confidence]
"""
LearnData = [self.__Data_buff[1], 100 - self.__Data_buff[2]]
return LearnData
if __name__ == '__main__':
ai = AILENS()
ai.switch_function(Learn)
while 0:
ai.get_image()
print(ai.get_ball_color())
print(ai.get_ball_data())
while 0:
ai.get_image()
print(ai.get_face)
print(ai.get_face_data())
while 0:
ai.get_image()
print(ai.get_card_content())
print(ai.get_card_data())
while 0:
ai.get_image()
print(ai.get_color_type())
print(ai.get_color_data())
while 0:
ai.get_image()
print(ai.get_track_data())
while 1:
ai.get_image()
if button_a.is_pressed():
ai.learn_object(1)
print(ai.get_learn_data())