人机交互摄像头识别石头剪刀布python源代码
时间: 2023-08-07 22:06:35 浏览: 166
以下是一个简单的人机交互摄像头识别石头剪刀布的Python源代码:
```python
import cv2
import random
# 读取摄像头
cap = cv2.VideoCapture(0)
# 定义手势分类器
hand_classifier = cv2.CascadeClassifier("hand.xml")
# 定义石头剪刀布的手势列表
hand_gestures = ["rock", "paper", "scissors"]
while True:
# 读取摄像头帧
ret, frame = cap.read()
# 转换为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测手势
hands = hand_classifier.detectMultiScale(gray, 1.3, 5)
# 遍历每个检测到的手势
for (x, y, w, h) in hands:
# 在检测到的手势周围画一个矩形框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 识别手势
if w > h:
gesture = "scissors"
elif h > w:
gesture = "rock"
else:
gesture = "paper"
# 显示识别出的手势
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, gesture, (x, y - 10), font, 1, (0, 0, 255), 2, cv2.LINE_AA)
# 计算机随机选择手势
computer_gesture = random.choice(hand_gestures)
# 显示计算机选择的手势
cv2.putText(frame, computer_gesture, (50, 50), font, 1, (255, 0, 0), 2, cv2.LINE_AA)
# 判断胜负关系
if gesture == computer_gesture:
result = "Tie"
elif (gesture == "rock" and computer_gesture == "scissors") or \
(gesture == "paper" and computer_gesture == "rock") or \
(gesture == "scissors" and computer_gesture == "paper"):
result = "You Win!"
else:
result = "Computer Wins!"
# 显示胜负结果
cv2.putText(frame, result, (50, 100), font, 1, (0, 255, 255), 2, cv2.LINE_AA)
# 显示摄像头帧
cv2.imshow("Rock Paper Scissors", frame)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
说明:
1. 首先我们导入了OpenCV库,以及一个随机模块。
2. 然后读取摄像头,定义手势分类器(我们可以使用Haar级联分类器或者深度学习模型来进行手势识别),以及石头剪刀布的手势列表。
3. 在一个无限循环中,我们读取摄像头帧,将其转换为灰度图,并使用手势分类器检测手势。
4. 对于每个检测到的手势,我们在其周围画一个矩形框,并识别出手势。
5. 然后计算机随机选择手势,并显示计算机选择的手势。
6. 接下来判断胜负关系,并显示胜负结果。
7. 最后显示摄像头帧,并在按下q键时退出程序。
注意:这是一个简单的示例代码,实际中需要根据实际情况进行调整和优化。
阅读全文