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

安全眼——自行车智能安全辅助系统

[复制链接]
【设计意图】
ThuAugust-202208044896..png

随着经济的快速发展,生活节奏日益加快,由于缺少运动许多人被亚健康所困扰,再者随着城市交通压力的增加,人们意识到汽车出行尾气等弊处,开始提倡绿色出行,因此越来越多人选择自行车作为出行或者上班的交通工具,近来年,中国自行车年产量8000多万辆,中国自行车社会保有量近4亿辆。但是自行车过程中安全系数仍有待提高。

【作品功能】
ThuAugust-202208046705..png
自行车行车安全除了个人良好的行驶习惯,而各种辅助装备更能帮助我们提升安全性。增加警示灯、方向灯,而今天这设计将安全更升一级,也更科技化。
1、“安全眼”自行车安全系统由把手按钮和后置摄像头、环型方向灯组成
2、主控使用开源硬件“行空板”,通过连接把手按钮和后置摄像头,可实现一键查看摄像头的实时后方视频,无需回头,如此更安全。
3、可通过人工智能算法判断是否有物体靠近,如汽车,会通过行空板上蜂鸣器提醒驾驶者,并让环型闪烁提醒后方来车。
4、通过按钮可控制转向灯闪烁,提醒后方来车、行人注意。

【制作元器件与材料】
ThuAugust-202208045851..png
行空板
行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学。


ThuAugust-202208042657..png
ThuAugust-202208043872..png

电路连接图
ThuAugust-202208047888..png
实物图】
ThuAugust-202208049995..png
制作过程】
1.行空板底座
ThuAugust-202208048912..png

ThuAugust-202208042402..png

保护行空板背面电子元器件
2.安装行空板
ThuAugust-202208049653..png

ThuAugust-202208045067..png

行空板安装在车把正中间,方便查看采集的后面图像。
3.安装按钮
ThuAugust-202208043718..png

ThuAugust-202208042431..png

按钮安装在车把上,左转向与右转向按钮与左右车把对应。
4.安装摄像头与灯环
ThuAugust-202208049490..png

ThuAugust-202208045862..png

摄像头与灯环安装在自行车车座后
5.安装电源
ThuAugust-202208041645..png

6.装置整体图
ThuAugust-202208041123..png

ThuAugust-202208044682..png
7.安装过程
ThuAugust-202208042161..png

ThuAugust-202208044983..png

ThuAugust-202208048275..png

ThuAugust-202208044647..png

【技术实现过程】
1.Google Teachable Machine
Google Teachable MachineGoogle Teachable Machine是Google免费的无代码深度学习模型创建网络平台。使用该平台你可以构建模型来对图像,音频甚至姿势进行分类。完成上述操作后,你可以下载经过训练的模型并将其用于你的应用程序。你可以使用Tensorflow或PyTorch之类的框架来构建自定义的卷积神经网络,或者如果你想要一种简单的无代码方式进行此操作,则可以使用 Google Teachable Machine
https://teachablemachine.withgoogle.com/)平台为你完成相同的操作。
国内可通过英荔 AI 训练平台:
https://train.aimaker.space/train/image
2.通过英荔 AI 训练平台中训练识别车辆的模型
ThuAugust-202208044219..png

ThuAugust-202208046248..png

ThuAugust-202208043257..png

ThuAugust-202208046237..png

训练好的模型,下载到电脑中“keras_model.h5”,放到程序所在目录下。
3.加载模型

  1. import numpy as np
  2. import cv2
  3. from pinpong.extension.unihiker import *
  4. from pinpong.board import Board,Pin
  5. import tensorflow.keras
  6. model = tensorflow.keras.models.load_model('keras_model.h5')
  7. labels=['car','background']
  8. font= cv2.FONT_HERSHEY_SIMPLEX
  9. u_gui=GUI()
  10. Board().begin()
  11. p_p23_in=Pin(Pin.P23, Pin.IN)
  12. cap = cv2.VideoCapture(0)
  13.        if p_p23_in.read_digital()==True:
  14.             cap = cv2.VideoCapture(0)
  15.             success, image = cap.read()   
  16.             if success == False:
  17.                      print("Ignoring empty camera frame.")
  18.                      continue


  19.         image = cv2.flip(image,1)
  20.         img = cv2.resize(image,(224,224))
  21.         img = np.array(img,dtype=np.float32)
  22.         img = np.expand_dims(img,axis=0)
  23.         img = img/255
  24.         prediction = model.predict(img)
  25.         predicted_class = labels[np.argmax(prediction)]
  26.         cv2.putText(image, predicted_class, (123,456), font, 2, (0,255,0), 3)
  27.         if predicted_class=='car':
  28.              cv2.putText(image,'car', (123,456), font, 2, (0,255,0), 3)
  29.         if predicted_class=="background":
  30.              cv2.putText(image,'background', (123,456), font, 2, (0,255,0), 3)
  31.   if cv2.waitKey(1) & 0xFF == ord('q'):
  32.     break
  33. cap.release()


复制代码
4.测试环形灯代码

ThuAugust-202208049255..png


  1. # MindPlus
  2. # Python
  3. from pinpong.extension.unihiker import *
  4. from pinpong.board import Board,Pin
  5. from pinpong.board import NeoPixel
  6. import time


  7. Board().begin()
  8. p_p24_out=Pin(Pin.P24, Pin.OUT)

  9. np1 = NeoPixel(p_p24_out,24)
  10. index = 0

  11. while True:
  12.     np1.range_color(0,11,0xFF0000)
  13.     np1.range_color(12,23,0x000000)
  14.    
  15.     time.sleep(1)
  16.     np1.range_color(0,11,0x000000)
  17.     np1.range_color(12,23,0xFF0000)
  18.   
  19.     time.sleep(1)
  20.     np1.rainbow(0,23,0,0x0022FF)
  21.     time.sleep(1)
  22.     for i in range(100):
  23.       np1.rotate(1)
  24.       time.sleep(0.1)

复制代码

5.按钮亮灯代码
左转向按钮、左转向灯
ThuAugust-202208049538..png

ThuAugust-202208043923..png

右转向按钮、右转向灯
ThuAugust-202208046598..png

ThuAugust-202208049184..png


  1. import cv2

  2. from pinpong.board import Board,Pin
  3. from pinpong.board import NeoPixel
  4. import time
  5. from unihiker import GUI

  6. bs=0


  7. Board().begin()
  8. p_p24_out=Pin(Pin.P24, Pin.OUT)

  9. np1 = NeoPixel(p_p24_out,24)
  10. np1.clear()
  11. p_p21_in=Pin(Pin.P21, Pin.IN)
  12. p_p22_in=Pin(Pin.P22, Pin.IN)

  13. currenttime1=time.time()
  14. currenttime2=time.time()
  15. color1=0xFF0000
  16. color2=0xFF0000

  17. bs1=0
  18. bs2=0
  19. bs3=0
  20. bs4=0
  21. u_gui=GUI()

  22. while True:
  23.    
  24.     if p_p21_in.read_digital()==True and p_p22_in.read_digital()==False:
  25.         if time.time()-currenttime1>0.2:
  26.            currenttime1=time.time()
  27.            if color1==0x000000:
  28.               color1=0xFF0000
  29.            else:
  30.               color1=0x000000
  31.            np1.range_color(0,11,color1)
  32.         bs3=1
  33.     elif bs3==1:
  34.         bs3=0
  35.         np1.range_color(0,11,0x000000 )
  36.     if p_p22_in.read_digital()==True and p_p21_in.read_digital()==False:
  37.        if time.time()-currenttime2>0.2:
  38.            currenttime2=time.time()
  39.            if color2==0x000000:
  40.               color2=0xFF0000
  41.            else:
  42.               color2=0x000000
  43.            np1.range_color(12,23,color2)
  44.        bs4=1
  45.     elif bs4==1:
  46.         bs4=0
  47.         np1.range_color(12,23,0x000000)
  48.     if p_p22_in.read_digital()==True and


复制代码
6.按钮显示后方图像 ThuAugust-202208049298..png

ThuAugust-202208047702..png



  1. import cv2
  2. from pinpong.board import Board,Pin
  3. from pinpong.board import NeoPixel
  4. import time
  5. from unihiker import GUI
  6. bs=0
  7. #False:不旋转屏幕(竖屏显示,上下会有白边)
  8. #True:旋转屏幕(横屏显示)
  9. screen_rotation = True
  10. cap = cv2.VideoCapture(0)
  11. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  #设置摄像头图像宽度
  12. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度
  13. cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)     #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
  14. cv2.namedWindow('camera',cv2.WND_PROP_FULLSCREEN)    #窗口全屏
  15. cv2.setWindowProperty('camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)   #窗口全屏
  16. Board().begin()
  17. p_p24_out=Pin(Pin.P24, Pin.OUT)
  18. np1 = NeoPixel(p_p24_out,24)
  19. np1.clear()
  20. p_p21_in=Pin(Pin.P21, Pin.IN)
  21. p_p22_in=Pin(Pin.P22, Pin.IN)
  22. currenttime1=time.time()
  23. currenttime2=time.time()
  24. color1=0xFF0000
  25. color2=0xFF0000
  26. bs1=0
  27. bs2=0
  28. bs3=0
  29. bs4=0
  30. u_gui=GUI()

  31. while True:
  32.    
  33.     if p_p22_in.read_digital()==True and p_p21_in.read_digital()==True:
  34.      bs1=0
  35.      success, img = cap.read()
  36.      if not success:
  37.         print("Ignoring empty camera frame.")
  38.         continue
  39.      if bs2==0:
  40.          bs2=1
  41.          cv2.namedWindow('camera',cv2.WND_PROP_FULLSCREEN)    #窗口全屏
  42.          cv2.setWindowProperty('camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)   #窗口全屏
  43.      if screen_rotation: #是否要旋转屏幕
  44.         img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) #旋转屏幕
  45.      cv2.imshow('camera',img)
  46.      print("camera")
  47.     else:
  48.      if bs1==0:
  49.        print("1")
  50.        cv2.destroyAllWindows()
  51.        sz=u_gui.draw_clock(x=120,y=100,r=50,color="#0000FF")
  52.        bs2=0
  53.        bs1=1
  54.      else:
  55.        pass
  56. cap.release()
  57. cv2.destroyAllWindow()

复制代码
【演示视频】


【制作反思】

1、本项目使用了自已训练的模型,来识别后方车辆,但由于行空板的算力有限,识别速度慢,识别时屏幕显示的画面有些延迟。但识别准确率较高。

2、行空板只进行了简单保护,因可以遇到雨天骑车,可能会出现行空板短路现象。所以需日后制作保护装置,防雨水短路。

3、本项目使用热熔胶、束带固定装置,拆装方便,但存在易丢失问题。

ThuAugust-202208046997..png
ThuAugust-202208042456..png

Forgotten  版主

发表于 2022-8-5 14:21:40

高级
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail