云天 发表于 2023-3-13 16:37:23

行空板——“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

老曾 发表于 2023-3-22 16:24:11

大神,可以发一个百度人脸识别和百度图像识别的案例吗?我看行空板有这二个库
页: [1]
查看完整版本: 行空板——“AI助‘手’”