【搬运】StickV(UnitV)+StickC进行自我学习实现移动侦测-Arduino中文社区 - Powered by Discuz! Archiver

vany5921 发表于 2020-1-8 15:34

【搬运】StickV(UnitV)+StickC进行自我学习实现移动侦测

本帖最后由 vany5921 于 2020-1-8 15:36 编辑

此项目通过StickV的自我学习进行图像判断,发现异常后发送图像到line平台达到报警作用。
原文地址 https://m5stack.hackster.io/anoken2017/mimamori-alert-for-your-home-security-098b12
主要处理过程如下:
①首先,利用Mobilnet的神经网络计算特征向量。 Mobilnet使用Keras和NNcase创建了V1权重为0.5。 NNCASE是Kendryte工具。
task = kpu.load(0x200000)
fmap = kpu.forward(task, img)
new_data = np.array(fmap[:])

②将神经网络获得的特征向量在时间序列方向上进行滤波,得到加权平均值。向量运算使用Numpy。
#Feature Vector Update
def update(capture,new_data,weight):
    new_data= new_data*weight+capture*(1.0-weight)
    return new_data
new_data=update(capture,new_data,cap_weight)

③计算当前时间的平均向量与特征向量之间的距离。这等同于找到运动。如果移动,则距离较大,如果静态,则距离较小。
Feature Vector Compare
def get_dis(new_data,master_data):
    dist = np.sum((new_data-master_data)*(new_data-master_data))
    return dist

dist=get_dis(new_data,master_data)

④检测波形的上升沿并通过UART发送数据。将上升沿与时间序列中的先前数据进行比较

if dist > dist_thresh:
    if dist_old <= dist_thresh:
      img_buf = img.copy()
      img_buf.compress(quality=70)
      img_size1 = (img_buf.size()& 0xFF0000)>>16
      img_size2 = (img_buf.size()& 0x00FF00)>>8
      img_size3 = (img_buf.size()& 0x0000FF)>>0
      data_packet = bytearray()
      uart_Port.write(data_packet)
      uart_Port.write(img_buf)
      time.sleep(1.0)
      print("image send,data_packet")



⑤M5StickC通过UART的通知将图像和消息发送到LINE。 M5StickC是使用ArduinoIDE开发的。


此源代码需要MixPy选项配置Numpy。自定义二进制文件存储在Github中。而且,神经网络需要权重为0.5的MobileNetV1。该Kmodel文件也存储在Github中。使用Kflash GUI工具写入M5StickV / UnitV






点击小子 发表于 2020-1-8 17:45

你这个是k210的芯片吧!

vany5921 发表于 2020-1-9 10:49

点击小子 发表于 2020-1-8 17:45
你这个是k210的芯片吧!

是的
页: [1]
查看完整版本: 【搬运】StickV(UnitV)+StickC进行自我学习实现移动侦测