本帖最后由 云天 于 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[np.argmax(prediction)]
 -     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()
 - 
 
  复制代码 【演示视频】 
 
 
 
 
 
 |