所以我把我所有的编程知识放在一起,开始编写一个python代码,该代码与opencv一起使用,应该在我的旧任天堂ds上执行一个操作
我想做的是,首先获得更多关于Raspberry Pi项目的知识,然后构建一个搜索神奇宝贝的设备
听起来可能很傻,但有点背景: “闪亮的神奇宝贝”和普通的一样,只是颜色不同。除此之外别无他途,你可以寻找一个,有些人有耐心去做。我不想,但我还是想自己打猎。 在我试图报道的游戏中,一个人出现的几率是1/8192,所以他们非常罕见。 有一些视频尝试并成功地做到了这一点,但没有关于如何自动完成的指南。opencv上也有一些视频帮助我实现了这一点
幸运的是,你可以开始游戏,遇到神奇宝贝,只需按下A按钮就可以看到它的颜色。如果它不是你想要的颜色,程序应该执行“软重置”,基本上用特定的按钮组合(开始、选择、L和R)重新启动游戏,并继续检查循环。如果颜色不是普通怪物的颜色,它应该停止并等待人工输入,这意味着它是闪亮的
按钮是通过硬焊接电线发出3.3V信号来按下的,因此旧的ds单元不得不受到影响
我注意到,如果您不同时按下所有按钮,则另一个按钮不会干扰游戏本身。 所以我确保电源被传送到启动和选择,R被录音。通过伺服电机触发复位按下L。 为了注意颜色,我使用了OpenCV
现在,我的代码可能会一团糟:
import RPi.GPIO as GPIO
import time
import cv2
import numpy as np
cap = cv2.VideoCapture(0) #Start Camera
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
servo1 = GPIO.PWM(13, 50)
GPIO.setup(11, GPIO.OUT)
while True:
_, frame = cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Press A again and again
GPIO.output(11, 1)
time.sleep(0.5)
GPIO.output(11, 0)
# Define my Pokemon
low_green = np.array([31, 31, 72])
high_green = np.array([65, 253, 168])
green_mask = cv2.inRange(hsv_frame, low_green, high_green)
#Define Giratina (the one I'm hunting for)
low_red = np.array([166, 72, 127])
high_red = np.array([178, 180, 245])
red_mask = cv2.inRange(hsv_frame, low_red, high_red)
cv2.imshow("Frame", frame)
cv2.imshow("Cherry", green_mask)
cv2.imshow("Giratina", red_mask)
#Show masks and camera
if cv2.countNonZero(green_mask) > 20000 and cv2.countNonZero(green_mask) < 30000 and cv2.countNonZero(red_mask) > 1500 and cv2.countNonZero(red_mask) < 5000 :
#If my mon is present and Giratina is normal
# Just this one servo is enough to press the button to softreset
servo1.start(0)
servo1.ChangeDutyCycle(8.9)
time.sleep(0.5)
servo1.ChangeDutyCycle(2)
time.sleep(0.5)
servo1.ChangeDutyCycle(0)
servo1.stop()
print("No Shiny! Soft Resetting")
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
servo1.stop()
GPIO.cleanup()
print("End of the hunt!")
颜色识别的数字无关紧要,因为一旦我将设备放在一个盒子中以获得一致的照明效果,我就会手动添加它们
什么有效
A按钮是按计划按下的,这里没问题。 if语句似乎也会触发并启动伺服
那有什么问题
伺服似乎触发,但只有一次。 它具有相同的照明和条件,但在执行重置后,它不会再次触发。这可能是一个非常大胆的错误,但我不能单独指出。 此外,有时按下按钮伺服似乎只是重新启动我的Pi,但并不总是。 我认为这可能与按钮“A”和伺服同时被控制有关,这对Pi来说太多了,但这不应该是if语句不可能的吗? 其他按钮(开始,选择不是录音的按钮)由完全不同的电源供电,因此希望它们不会干扰按钮“a”和伺服
提前谢谢,我希望我已经描述了我的问题有点能力。祝你过得愉快
目前没有回答
相关问题 更多 >
编程相关推荐