行空板——“AI助‘手’”
本帖最后由 云天 于 2023-3-13 16:37 编辑【项目背景】
截至2018年底,中国残疾人总数为8,890.7万人,其中手部残疾人数为1,890.7万人。手部残疾人在生活中有很多不方便,其中一些现代化设备上的按钮、及各种遥控器,都是为有手指的健康人设计,上面小按键,对于手部有残疾的人,尤其是无手掌的残疾人,更无法使用。
【项目设计】
本项目使用行空板,加上腕带,固定在手臂上,通过手臂的摆动,可在行空板上画出各种图形。使用行空板加载人工智能模型识别这些图形,向物联网发送指令,控制相应设备,启动、关闭、调节等,如遥控电视开关、调台、音量,空调、热水器、风扇、照明灯等。
【项目实现】
本项目,通过掌控板接收物联网指令,模拟控制风扇、台灯。
【采集数据】
通过行空板的内置的加速度传感器配合unihiker库中基于tkinter库封装的一个GUI类,在屏幕上画图,再利用“pyautogui”库截屏分类保存图片(back,up,down,left,right)。
Mind+图形化程序
python代码
#-*- coding: UTF-8 -*-
# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI
import pyautogui
import time
u_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 = 0
S0x = 0
DuiXiangMing = "xian"
XuHao = 0
BiaoShi = 0
i = 0
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 = 1
if (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=) # x,y,w,h
img.save('back'+str(i)+'.png')
i = (i + 1)
BiaoShi = 0
u_gui.clear()
yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
Stx = 0
Sty = 0
time.sleep(3)
S0y = Sty
S0x = Stx
图形可扩展到数字、多边形、各种简易图案等
【训练模型】
将图片数据集,上传到”英艻AI训练平台“进行模型训练,下载模型到行空板。
【识别指令】
采集实时控制图形,加载模型识别指令,发送物联网。
#-*- coding: UTF-8 -*-
# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
import tensorflow.keras
from unihiker import GUI
from PIL import Image
import numpy as np
import pyautogui
import time
import siot
u_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 = 0
S0x = 0
DuiXiangMing = "xian"
XuHao = 0
BiaoShi = 0
i = 0
model = 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 = 1
if (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=) # x,y,w,h
img=img.resize((224, 224), Image.ANTIALIAS)
img = np.array(img,dtype=np.float32)
img = np.expand_dims(img,axis=0)
img = img/255
prediction = model.predict(img)
predicted_class = labels
i = (i + 1)
BiaoShi = 0
u_gui.clear()
yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
Stx = 0
Sty = 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 = Sty
S0x = Stx
【模拟控制】
使用掌控板连接物联网接收指令,通过电磁继 电器控制台灯,通过L289N驱动板控制风扇。模拟控制家用电器。
【演示视频】
https://www.bilibili.com/video/BV1Wk4y1b7zw/?share_source=copy_web&vd_source=98855d5b99ff76982639c5ca6ff6f528
大神,可以发一个百度人脸识别和百度图像识别的案例吗?我看行空板有这二个库
页:
[1]