云天 发表于 2022-12-5 21:11:43

行空板——有趣的灯

本帖最后由 云天 于 2022-12-5 21:21 编辑



【项目背景】
有个小台灯,不用按钮控制、不用语音控制,需要你写字,它才能亮灭。
【改造台灯】
将旧台灯内部电路板、废电池拆掉,灯红线接锂电池正极,黑线引出,电池接线引出,两线接电磁继电器。

【行空板】



电磁继电器接行空板23引脚,LED灯带(24灯珠)接24引脚,摄像头固定在灯头上,接行空板USB接口。

【功能简介】
通过摄像头采集书写的每一笔,识别后控制彩灯及台灯亮灭。如书写“开”,写第一笔“一”后,LED灯带0号灯至7号灯亮。写完第二笔“二”,LED灯带8号灯至15号灯亮。写完第三笔“?”,LED灯带16号灯至23号灯亮。写完第四笔“开”,台灯亮。书写“关”字,反之。
【训练模型】
识别书写的文字图像通过Google Teachable Machine,Google Teachable Machine是Google免费的无代码深度学习模型创建网络平台。使用该平台你可以构建模型来对图像,音频甚至姿势进行分类。完成上述操作后,你可以下载经过训练的模型并将其用于你的应用程序。你可以使用Tensorflow或PyTorch之类的框架来构建自定义的卷积神经网络,或者如果你想要一种简单的无代码方式进行此操作,则可以使用 Google Teachable Machine(https://teachablemachine.withgoogle.com/)平台为你完成相同的操作。
【英荔 AI 训练平台】
国内可通过英荔 AI 训练平台:
https://train.aimaker.space/train/image
【训练过程】
训练”开“







训练”关“同上
……
训练”背景“

训练模型


预览模型

下载模型

下载模型,并将模型文件“keras_model.h5”,放到行空板程序所在目录下。【Mind+编写程序】


#-*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.extension.unihiker import *
from keras.models import load_model
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from unihiker import GUI
import numpy as np
import time


u_gui=GUI()
Board().begin()
import cv2
np.set_printoptions(suppress=True)
model = load_model('keras_model.h5', compile=False)
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
cap = cv2.VideoCapture()
cap.open(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)#设置摄像头图像宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)   #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
labels = [ 'background','one','two','three','open','four','five','six','close']
font = cv2.FONT_HERSHEY_SIMPLEX
success = True
image = 0
pin1=Pin(Pin.P24, Pin.OUT)
np1 = NeoPixel(pin1,24)
背景=u_gui.fill_rect(x=0,y=0,w=240,h=320,color="#000000")
显示=u_gui.draw_text(text="趣味台灯",x=5,y=130,font_size=45, color="#FF0000")
while not (False):
    success, image = cap.read()
    if (success == False):
      break
    image = cv2.flip(image,1)
    image = cv2.resize(image,(224,224))
    image = np.array(image,dtype=np.float32)
    image = np.expand_dims(image,axis=0)/255
    prediction = model.predict(image)
    predicted_class = labels
    if (predicted_class == "open"):
      p_p23_out=Pin(Pin.P23, Pin.OUT)
      p_p23_out.write_digital(1)
      显示.config(text="开灯")
    elif (predicted_class == "close"):
      np1.range_color(0,23,0x000000)
      p_p23_out=Pin(Pin.P23, Pin.OUT)
      p_p23_out.write_digital(0)
      显示.config(text="关灯")
    elif (predicted_class == "one"):
      np1.range_color(0,7,0xFF0000)
    elif (predicted_class == "two"):
      np1.range_color(8,15,0xFF0000)
    elif (predicted_class == "three"):
      np1.range_color(16,23,0xFF0000)
    elif (predicted_class == "four"):
      np1.range_color(16,23,0x000000)
    elif (predicted_class == "five"):
      np1.range_color(8,15,0x000000)
    elif (predicted_class == "six"):
      np1.range_color(0,7,0x000000)
cap.release()

【演示视频】
https://www.bilibili.com/video/BV1cG4y137nn/?share_source=copy_web&vd_source=98855d5b99ff76982639c5ca6ff6f528




rzegkly 发表于 2022-12-6 08:54:07

图像识别很好案例

Forgotten 发表于 2022-12-8 14:52:47

很有意思{:6_213:}
页: [1]
查看完整版本: 行空板——有趣的灯