53889浏览
查看: 53889|回复: 1

[项目] 行空板——“AI助‘手’”

[复制链接]
本帖最后由 云天 于 2023-3-13 16:37 编辑

【项目背景】
截至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

【演示视频】


老曾  初级技神

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

大神,可以发一个百度人脸识别和百度图像识别的案例吗?我看行空板有这二个库
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail