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