点击蘑菇云创造 关注我们
项目背景
截至2018年底,中国残疾人总数为8,890.7万人,其中手部残疾人数为1,890.7万人。手部残疾人在生活中有很多不方便,其中一些现代化设备上的按钮、及各种遥控器,都是为有手指的健康人设计,上面小按键,对于手部有残疾的人,尤其是无手掌的残疾人,更无法使用。
项目设计
本项目使用行空板,加上腕带,固定在手臂上,通过手臂的摆动,可在行空板上画出各种图形。使用行空板加载人工智能模型识别这些图形,向物联网发送指令,控制相应设备,启动、关闭、调节等,如遥控电视开关、调台、音量,空调、热水器、风扇、照明灯等。
项目实现
本项目,通过掌控板接收物联网指令,模拟控制风扇、台灯。
采集数据
通过行空板的内置的加速度传感器配合unihiker库中基于tkinter库封装的一个GUI类,在屏幕上画图,再利用“pyautogui”库截屏分类保存图片(back,up,down,left,right)。
Mind+图形化程序
python代码
# -*- coding: UTF-8 -*-# MindPlus# Pythonfrom pinpong.extension.unihiker import *from pinpong.board import Board,Pinfrom unihiker import GUIimport pyautoguiimport timeu_gui=GUI()Board().begin()YunXingShiJian = time.time()x=u_gui.draw_text(text="行空板",x=0,y=0,font_size=20, color="#0000FF")yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")S0y = 0S0x = 0DuiXiangMing = "xian"XuHao = 0BiaoShi = 0i = 0while True:ShiJianCha = (time.time() - YunXingShiJian)if (ShiJianCha > 0.06):YunXingShiJian = time.time()Sty = (S0y + (accelerometer.get_x() * 10))Stx = (S0x + (accelerometer.get_y() * 10))=(160 + Sty))=(120 - Stx))if (((Stx > 10) or (Stx < -10)) or ((Sty > 10) or (Sty < -10))):if (BiaoShi == 0):QiDongShiJian = time.time()BiaoShi = 1if (BiaoShi == 1):DuiXiangMingZuHe = (str(DuiXiangMing) + str(XuHao))DuiXiangMingZuHe=u_gui.draw_line(x0=(120 - S0x),y0=(160 + S0y),x1=(120 - Stx),y1=(160 + Sty),width=5,color="#0000FF")XuHao = (XuHao + 1)if ((time.time() - QiDongShiJian) > 5):img = pyautogui.screenshot(region=[0,0,240,320]) # x,y,w,himg.save('back'+str(i)+'.png')i = (i + 1)BiaoShi = 0u_gui.clear()yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")Stx = 0Sty = 0time.sleep(3)S0y = StyS0x = Stx
左右滑动,查看完整代码
图形可扩展到数字、多边形、各种简易图案等
训练模型
将图片数据集,上传到“英荔AI训练平台”进行模型训练,下载模型到行空板。
识别指令
采集实时控制图形,加载模型识别指令,发送物联网。
Mind+图形化程序
python代码
# -*- coding: UTF-8 -*-# MindPlus# Pythonfrom pinpong.extension.unihiker import *from pinpong.board import Board,Pinimport tensorflow.kerasfrom unihiker import GUIfrom PIL import Imageimport numpy as npimport pyautoguiimport timeimport siotu_gui=GUI()siot.init(client_id="",server="192.168.31.9",port=1883,user="siot",password="dfrobot")Board().begin()siot.connect()siot.loop()YunXingShiJian = time.time()yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")S0y = 0S0x = 0DuiXiangMing = "xian"XuHao = 0BiaoShi = 0i = 0model = tensorflow.keras.models.load_model('keras_model.h5')labels=['back','up','down','left','right']while True:ShiJianCha = (time.time() - YunXingShiJian)if (ShiJianCha > 0.06):YunXingShiJian = time.time()Sty = (S0y + (accelerometer.get_x() * 10))Stx = (S0x + (accelerometer.get_y() * 10))yuan.config(y=(160 + Sty))yuan.config(x=(120 - Stx))if (((Stx > 10) or (Stx < -10)) or ((Sty > 10) or (Sty < -10))):if (BiaoShi == 0):QiDongShiJian = time.time()BiaoShi = 1if (BiaoShi == 1):DuiXiangMingZuHe = (str(DuiXiangMing) + str(XuHao))DuiXiangMingZuHe=u_gui.draw_line(x0=(120 - S0x),y0=(160 + S0y),x1=(120 - Stx),y1=(160 + Sty),width=5,color="#0000FF")XuHao = (XuHao + 1)if ((time.time() - QiDongShiJian) > 5):img = pyautogui.screenshot(region=[0,0,240,320]) # x,y,w,himg=img.resize((224, 224), Image.ANTIALIAS)img = np.array(img,dtype=np.float32)img = np.expand_dims(img,axis=0)img = img/255prediction = model.predict(img)predicted_class = labels[np.argmax(prediction)]i = (i + 1)BiaoShi = 0u_gui.clear()yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")Stx = 0Sty = 0识别结果=u_gui.draw_text(text=predicted_class,x=0,y=100,font_size=40, color="#0000FF")if (predicted_class == "up"):siot.publish(topic="ai/hand", data="1")if (predicted_class == "down"):siot.publish(topic="ai/hand", data="2")if (predicted_class == "left"):siot.publish(topic="ai/hand", data="3")if (predicted_class == "right"):siot.publish(topic="ai/hand", data="4")time.sleep(3)识别结果.remove()S0y = StyS0x = Stx
左右滑动,查看完整代码
模拟控制
使用掌控板连接物联网接收指令,通过电磁继 电器控制台灯,通过L289N驱动板控制风扇。模拟控制家用电器。
演示视频
本文来源:DF创客社区
作者:云天
往期推荐

