行空板——“AI助‘手’”

2023-03-136.1万
精华项目
AI 快速预览详细 收起
本项目名为“AI助‘手’”,旨在帮助手部残疾人通过行空板和腕带,利用手臂摆动绘制图形,并通过人工智能模型识别这些图形,向物联网发送指令控制家用电器。项目中使用了行空板内置的加速度传感器和unihiker库中的GUI类来绘制图形,并利用pyautogui库截屏分类保存图片。通过英艻AI训练平台训练模型后,实时采集控制图形,加载模型识别指令,发送到物联网进行控制。最终,使用掌控板连接物联网接收指令,通过电磁继电器和L289N驱动板模拟控制台灯和风扇。


【项目背景】
截至2018年底,中国残疾人总数为8,890.7万人,其中手部残疾人数为1,890.7万人。手部残疾人在生活中有很多不方便,其中一些现代化设备上的按钮、及各种遥控器,都是为有手指的健康人设计,上面小按键,对于手部有残疾的人,尤其是无手掌的残疾人,更无法使用。
【项目设计】
本项目使用行空板,加上腕带,固定在手臂上,通过手臂的摆动,可在行空板上画出各种图形。使用行空板加载人工智能模型识别这些图形,向物联网发送指令,控制相应设备,启动、关闭、调节等,如遥控电视开关、调台、音量,空调、热水器、风扇、照明灯等。
【项目实现】
本项目,通过掌控板接收物联网指令,模拟控制风扇、台灯。
行空板——“AI助‘手’”图1

【采集数据】
通过行空板的内置的加速度传感器配合unihiker库中基于tkinter库封装的一个GUI类,在屏幕上画图,再利用“pyautogui”库截屏分类保存图片(back,up,down,left,right)。
行空板——“AI助‘手’”图2

行空板——“AI助‘手’”图3


行空板——“AI助‘手’”图4

Mind+图形化程序
行空板——“AI助‘手’”图5

python代码
  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. from pinpong.extension.unihiker import *
  5. from pinpong.board import Board,Pin
  6. from unihiker import GUI
  7. import pyautogui
  8. import time
  9. u_gui=GUI()
  10. Board().begin()
  11. YunXingShiJian = time.time()
  12. x=u_gui.draw_text(text="行空板",x=0,y=0,font_size=20, color="#0000FF")
  13. yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
  14. S0y = 0
  15. S0x = 0
  16. DuiXiangMing = "xian"
  17. XuHao = 0
  18. BiaoShi = 0
  19. i = 0
  20. while True:
  21.     ShiJianCha = (time.time() - YunXingShiJian)
  22.     if (ShiJianCha > 0.06):
  23.         YunXingShiJian = time.time()
  24.         Sty = (S0y + (accelerometer.get_x() * 10))
  25.         Stx = (S0x + (accelerometer.get_y() * 10))
  26.         yuan.config(y=(160 + Sty))
  27.         yuan.config(x=(120 - Stx))
  28.         if (((Stx > 10) or (Stx < -10)) or ((Sty > 10) or (Sty < -10))):
  29.             if (BiaoShi == 0):
  30.                 QiDongShiJian = time.time()
  31.                 BiaoShi = 1
  32.         if (BiaoShi == 1):
  33.             DuiXiangMingZuHe = (str(DuiXiangMing) + str(XuHao))
  34.             DuiXiangMingZuHe=u_gui.draw_line(x0=(120 - S0x),y0=(160 + S0y),x1=(120 - Stx),y1=(160 + Sty),width=5,color="#0000FF")
  35.             XuHao = (XuHao + 1)
  36.             if ((time.time() - QiDongShiJian) > 5):
  37.                 img = pyautogui.screenshot(region=[0,0,240,320]) # x,y,w,h
  38.                 img.save('back'+str(i)+'.png')
  39.                 i = (i + 1)
  40.                 BiaoShi = 0
  41.                 u_gui.clear()
  42.                 yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
  43.                 Stx = 0
  44.                 Sty = 0
  45.                 time.sleep(3)
  46.         S0y = Sty
  47.         S0x = Stx
复制代码
图形可扩展到数字、多边形、各种简易图案等
行空板——“AI助‘手’”图7

【训练模型】
将图片数据集,上传到”英艻AI训练平台“进行模型训练,下载模型到行空板。
行空板——“AI助‘手’”图6


【识别指令】
采集实时控制图形,加载模型识别指令,发送物联网。
行空板——“AI助‘手’”图8

  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. from pinpong.extension.unihiker import *
  5. from pinpong.board import Board,Pin
  6. import tensorflow.keras
  7. from unihiker import GUI
  8. from PIL import Image
  9. import numpy as np
  10. import pyautogui
  11. import time
  12. import siot
  13. u_gui=GUI()
  14. siot.init(client_id="",server="192.168.31.9",port=1883,user="siot",password="dfrobot")
  15. Board().begin()
  16. siot.connect()
  17. siot.loop()
  18. YunXingShiJian = time.time()
  19. yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
  20. S0y = 0
  21. S0x = 0
  22. DuiXiangMing = "xian"
  23. XuHao = 0
  24. BiaoShi = 0
  25. i = 0
  26. model = tensorflow.keras.models.load_model('keras_model.h5')
  27. labels=['back','up','down','left','right']
  28. while True:
  29.     ShiJianCha = (time.time() - YunXingShiJian)
  30.     if (ShiJianCha > 0.06):
  31.         YunXingShiJian = time.time()
  32.         Sty = (S0y + (accelerometer.get_x() * 10))
  33.         Stx = (S0x + (accelerometer.get_y() * 10))
  34.         yuan.config(y=(160 + Sty))
  35.         yuan.config(x=(120 - Stx))
  36.         if (((Stx > 10) or (Stx < -10)) or ((Sty > 10) or (Sty < -10))):
  37.             if (BiaoShi == 0):
  38.                 QiDongShiJian = time.time()
  39.                 BiaoShi = 1
  40.         if (BiaoShi == 1):
  41.             DuiXiangMingZuHe = (str(DuiXiangMing) + str(XuHao))
  42.             DuiXiangMingZuHe=u_gui.draw_line(x0=(120 - S0x),y0=(160 + S0y),x1=(120 - Stx),y1=(160 + Sty),width=5,color="#0000FF")
  43.             XuHao = (XuHao + 1)
  44.             if ((time.time() - QiDongShiJian) > 5):
  45.                 img = pyautogui.screenshot(region=[0,0,240,320]) # x,y,w,h
  46.                 img=img.resize((224, 224), Image.ANTIALIAS)
  47.                 img = np.array(img,dtype=np.float32)
  48.                 img = np.expand_dims(img,axis=0)
  49.                 img = img/255
  50.                 prediction = model.predict(img)
  51.                 predicted_class = labels[np.argmax(prediction)]
  52.                 i = (i + 1)
  53.                 BiaoShi = 0
  54.                 u_gui.clear()
  55.                 yuan=u_gui.fill_circle(x=120,y=160,r=10,color="#0000FF")
  56.                 Stx = 0
  57.                 Sty = 0
  58.                 识别结果=u_gui.draw_text(text=predicted_class,x=0,y=100,font_size=40, color="#0000FF")
  59.                 if (predicted_class == "up"):
  60.                     siot.publish(topic="ai/hand", data="1")
  61.                 if (predicted_class == "down"):
  62.                     siot.publish(topic="ai/hand", data="2")
  63.                 if (predicted_class == "left"):
  64.                     siot.publish(topic="ai/hand", data="3")
  65.                 if (predicted_class == "right"):
  66.                     siot.publish(topic="ai/hand", data="4")
  67.                 time.sleep(3)
  68.                 识别结果.remove()
  69.         S0y = Sty
  70.         S0x = Stx
复制代码

【模拟控制】
使用掌控板连接物联网接收指令,通过电磁继 电器控制台灯,通过L289N驱动板控制风扇。模拟控制家用电器。
行空板——“AI助‘手’”图9

【演示视频】


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
老曾
老曾
大神,可以发一个百度人脸识别和百度图像识别的案例吗?我看行空板有这二个库
- 没有更多了 -