内容介绍
内容介绍
FastBond活动选择的项目方向介绍
- 智能建筑
- 智能控制:由于疫情的原因或者比较危险的地方,采用隔空的AI姿势识别会极大的提高操作的安全性
- 对于本次FastBond的想法
- 平时会思考技术在行业场景上面的应用,制造业以及医疗行业
- 制造业:
- 对于比较危险的场景、精度比较高的场景、隔离的场景,较适合隔空无接触的方式进行指示,有机器来完成相关的操作,例如:高压、高温场景
- 医疗行业:
- 对于无菌高要求、无接触要求的场景,适合手势控制,例如:在进行手术的医生,还需要查阅影像系统,采用手势隔空操作是最佳方式
项目设计思路
- 采用K210的AI芯片(Maix Dock M1)进行AI方面的识别工作,同时也具有多种外设可进行控制。
- 本次Demo采用三极管控制LED灯进行。
- 通过卷积神经网络进行视觉的训练,可以识别训练的特定手势。
- 利用识别的手势控制GPIO来控制LED的点亮或者熄灭
- 同时加上时间的判定,可以确定灯的亮度,如凌晨开灯较暗,平时开灯全亮。
代码
# object classifier boot.py
# generated by maixhub.com
import sensor, image, lcd, time
import KPU as kpu
import gc, sys
from fpioa_manager import fm
from Maix import GPIO
from machine import I2C
io_led=35
fm.register(io_led, fm.fpioa.GPIO0)
led=GPIO(GPIO.GPIO0, GPIO.OUT)
class RTC:
w = ["FRI","SAT","SUN","MON","TUE","WED","THU"]
def __init__(self, address=0x68, register=0x00):
self.rtc_address = address
self.rtc_register = register
self.i2c=I2C(I2C.I2C4, freq=100000, scl=11, sda=9)
def DS3231_SetTime(self, NowTime = b'\x00\x23\x12\x28\x14\x07\x21'):
self.i2c.writeto_mem(int(self.rtc_address), int(self.rtc_register),NowTime)
def bcd2bin(self, value):
return (value or 0) - 6 * ((value or 0) >> 4)
def pre_zero(self, value):
pre_zero = True
if pre_zero:
if value < 10:
value = "0"+str(value)
return value
def DS3231_ReadTime(self):
try:
buffer = self.i2c.readfrom_mem(self.rtc_address,self.rtc_register,7)
year = self.bcd2bin(buffer[6]) + 2000
month = self.bcd2bin(buffer[5])
day = self.bcd2bin(buffer[4])
weekday = self.w[self.bcd2bin(buffer[3])]
hour = self.pre_zero(self.bcd2bin(buffer[2]))
minute = self.pre_zero(self.bcd2bin(buffer[1]))
second = self.pre_zero(self.bcd2bin(buffer[0]))
time_string = str(hour) + ":" + str(minute) + ":" + str(second) + " " + weekday + " " +
\str(year) + "-" + str(month) + "-" + str(day)
return time_string
except:
return False
def lcd_show_except(e):
import uio
err_str = uio.StringIO()
sys.print_exception(e, err_str)
err_str = err_str.getvalue()
img = image.Image(size=(224,224))
img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))
lcd.display(img)
def main(labels = None, model_addr="/sd/m.kmodel",
\sensor_window=(224, 224), lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing(sensor_window)
sensor.set_hmirror(sensor_hmirror)
sensor.set_vflip(sensor_vflip)
sensor.run(1)
rtc = RTC()
lcd.init(type=1)
lcd.rotation(lcd_rotation)
lcd.clear(lcd.WHITE)
try:
img = image.Image("startup.jpg")
lcd.display(img)
except Exception:
img = image.Image(size=(320, 240))
img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)
lcd.display(img)
try:
task = None
task = kpu.load(model_addr)
status = None
while(True):
img = sensor.snapshot()
date = rtc.DS3231_ReadTime()
t = time.ticks_ms()
fmap = kpu.forward(task, img)
t = time.ticks_ms() - t
plist=fmap[:]
pmax=max(plist)
max_index=plist.index(pmax)
if max_index == 1:
led.value(0)
status = "Close"
else:
led.value(1)
status = "Open"
img.draw_string(0,0, "%.2f : %s" %(pmax, labels[max_index].strip()), scale=1.5,color=(255, 0, 0))
img.draw_string(185,0, status, scale=1.5, color=(255, 255, 0))
img.draw_string(0, 210, "t:%dms" %(t), scale=1.3, color=(255, 0, 0))
img.draw_string(105, 213, date, scale=1, color=(255, 0, 0))
lcd.display(img)
except Exception as e:
raise e
finally:
if not task is None:
kpu.deinit(task)
if __name__ == "__main__":
try:
labels = ["openbutton", "closebutton"]
# main(labels=labels, model_addr=0x300000)
main(labels=labels, model_addr="/sd/m.kmodel")
except Exception as e:
sys.print_exception(e)
lcd_show_except(e)
finally:
gc.collect()
采用元件
美信DS3231时钟模块
- 低成本、高精度I2C实时时钟(RTC)
- 具有集成的温补晶体振荡器(TCXO)和晶体。
- 该器件包含电池输入端,断开主电源时认可保持精确的计时。
- 其提供年、月、日、星期、时、分、秒信息,提供有效期到2100年的闰年补偿。
亚德诺ADP3338-3.3电源芯片
- 高线路和负载精度:±0.8% (25°C),±1.4%(整个温度范围)
- 超低压差:190 mV(典型值、1 A)
- 具有130 µA(典型值)超低静态电流
整体照片
附件下载
boot.py
主代码
m.kmodel
训练模型
团队介绍
电子爱好者,对于电路设计、嵌入式编程、人工智能、工业自动化控制、工业物联网有着极大的兴趣,也是平时的爱好。
非常热衷于参加电子森林的各种活动(虽然比较忙)
团队成员
小宝呱
评论
0 / 100
查看更多