📜  在Python中使用手部检测进行汽车驾驶

📅  最后修改于: 2022-05-13 01:55:29.175000             🧑  作者: Mango

在Python中使用手部检测进行汽车驾驶

在这个项目中,我们将演示如何通过检测方向盘上的手势来驾驶汽车。假设要求是这样的——

  • 如果驾驶员想启动汽车,请将双手放在方向盘上。
  • 如果有人没有手放在方向盘上,这意味着汽车的刹车将缓慢地应用。
  • 如果检测到一只手放在方向盘上,这意味着出于安全目的,他/她可以将汽车驾驶到一定的极限。
  • 如果有人双手放在方向盘上,这意味着他/她可以以任何速度驾驶,因为根据我们的系统,您是安全的,并且可以用双手安全地操作汽车。

对于这个项目,我们需要导入两个Python库,即OpenCVnumpy 。如何安装这两个库。

1) pip install opencv-python
2) pip install numpy

下面是实现:

代码#1:

import cv2
import numpy as np
  
cap = cv2.VideoCapture(0)
hand_cascade = cv2.CascadeClassifier('hand.xml')

解释 :
我们已经导入了两个名为opencvnumpy的库。然后在下一行中,我们使用 opencv 的函数VideoCapture(0)并将参数作为 0 传递,因为您的笔记本电脑网络摄像头支持端口 0 来使用摄像头。现在,使用函数CascadeClassifier('hand.xml')并将 xml 文件作为参数传递。将hand.xml文件存储在与Python文件相同的目录中。代码#2:

count = 0
  
while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    hands = hand_cascade.detectMultiScale(gray, 1.5, 2)
    contour = hands
    contour = np.array(contour)
  
    if count==0:
  
        if len(contour)==2:
            cv2.putText(img=frame, text='Your engine started',
                        org=(int(100 / 2 - 20), int(100 / 2)),
                        fontFace=cv2.FONT_HERSHEY_DUPLEX, 
                        fontScale=1, color=(0, 255, 0))
                          
            for (x, y, w, h) in hands:
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            count += 1
  
    if count>0:
  
        if len(contour)>=2:
            cv2.putText(img=frame, text='You can take your car on long drive',
                        org=(int(100 / 2 - 20), int(100 / 2)),
                        fontFace=cv2.FONT_HERSHEY_DUPLEX, 
                        fontScale=1, color=(255, 0, 0))
                          
            for (x, y, w, h) in hands:
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
              
  
        elif len(contour)==1:
            cv2.putText(img=frame, text='You can speed upto 80km/h',
                        org=(int(100 / 2 - 20), int(100 / 2)),
                        fontFace=cv2.FONT_HERSHEY_DUPLEX, 
                        fontScale=1, color=(0, 255, 0))
                          
            for (x, y, w, h) in hands:
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
  
        elif len(contour)==0:
            cv2.putText(img=frame, text='Brake is applied slowly',
                        org=(int(100 / 2 - 20), int(100 / 2)),
                        fontFace=cv2.FONT_HERSHEY_DUPLEX, 
                        fontScale=1, color=(0, 0, 255))
  
        count += 1
  
cv2.imshow('Driver_frame', frame)
k = cv2.waitKey(30) & 0xff
if k == 27:
    break

输出 :


解释 :
在此代码部分中,我们使用可以帮助我们启动汽车引擎的计数器,在汽车启动后,我们使用方向盘上的轮廓计数。


项目的 GitHub 链接 –点击这里