嗨,大家好我不知道这是否可能,因为我缺乏知识,我想停止一个功能(def home():)运行一个球跟踪并使用相机而不使用键盘,因为我将没有访问权限键盘运行时。当我点击我的Android应用程序中的一个按钮时,我有另一个调用该函数的脚本,当我调用另一个函数时它不会停止
这是调用该函数的脚本
import apptopi <<=====this is the imported script which has the function
from socket import *
from time import ctime
import RPi.GPIO as GPIO
Servomotor.setup()
ctrCmd = ['Track','StopTracking']
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print 'Waiting for connection'
tcpCliSock,addr = tcpSerSock.accept()
print '...connected from :', addr
try:
while True:
data = ''
data = tcpCliSock.recv(BUFSIZE)
if not data:
break
if data == ctrCmd[0]: <== calls the function Track
apptopi.Track()
print 'Tracking '
if data == ctrCmd[1]: <== in this i want to stop the track function
apptopi.Stop()
print 'Stop Tracking '
except KeyboardInterrupt:
Servomotor.close()
GPIO.cleanup()
tcpSerSock.close();
这是我想要在我的应用程序中点击按钮时停止的代码
def Track():
for image in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
#grab the raw NumPy array representing the image, then initialize the timestamp and occupied/unoccupied text
frame = image.array
frame=cv2.flip(frame,1)
global centre_x
global centre_y
centre_x=0.
centre_y=0.
hsv1 = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask_red=segment_colour(frame) #masking red the frame
loct,area=find_blob(mask_red)
x,y,w,h=loct
#distance coming from front ultrasonic sensor
distanceC = sonar(GPIO_TRIGGER2,GPIO_ECHO2)
#distance coming from right ultrasonic sensor
distanceR = sonar(GPIO_TRIGGER3,GPIO_ECHO3)
#distance coming from left ultrasonic sensor
distanceL = sonar(GPIO_TRIGGER1,GPIO_ECHO1)
if (w*h) < 10:
found=0
else:
found=1
simg2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
centre_x=x+((w)/2)
centre_y=y+((h)/2)
cv2.circle(frame,(int(centre_x),int(centre_y)),3,(0,110,255),-1)
centre_x-=80
centre_y=6--centre_y
print centre_x,centre_y
initial=400
flag=0
GPIO.output(LED_PIN,GPIO.LOW)
if(found==0):
#if the ball is not found and the last time it sees ball in which direction, it will start to rotate in that direction
if flag==0:
rightturn()
time.sleep(0.05)
else:
leftturn()
time.sleep(0.05)
stop()
time.sleep(0.0125)
elif(found==1):
if(area<initial):
if(distanceC<10):
#if ball is too far but it detects something in front of it,then it avoid it and reaches the ball.
if distanceR>=8:
rightturn()
time.sleep(0.00625)
stop()
time.sleep(0.0125)
forward()
time.sleep(0.00625)
stop()
time.sleep(0.0125)
#while found==0:
leftturn()
time.sleep(0.00625)
elif distanceL>=8:
leftturn()
time.sleep(0.00625)
stop()
time.sleep(0.0125)
forward()
time.sleep(0.00625)
stop()
time.sleep(0.0125)
rightturn()
time.sleep(0.00625)
stop()
time.sleep(0.0125)
else:
stop()
time.sleep(0.01)
else:
#otherwise it move forward
forward()
time.sleep(0.00625)
elif(area>=initial):
initial2=6700
if(area<initial2):
if(distanceC>10):
#it brings coordinates of ball to center of camera's imaginary axis.
if(centre_x<=-20 or centre_x>=20):
if(centre_x<0):
flag=0
rightturn()
time.sleep(0.025)
elif(centre_x>0):
flag=1
leftturn()
time.sleep(0.025)
forward()
time.sleep(0.00003125)
stop()
time.sleep(0.00625)
else:
stop()
time.sleep(0.01)
else:
#if it founds the ball and it is too close it lights up the led.
GPIO.output(LED_PIN,GPIO.HIGH)
time.sleep(0.1)
stop()
time.sleep(0.1)
#cv2.imshow("draw",frame)
rawCapture.truncate(0) # clear the stream in preparation for the next frame
if(cv2.waitKey(1) & 0xff == ord('q')): <<== i will be dont have the acces to keyboard when it runs and i want to change it
break
GPIO.cleanup()
真的需要你的帮助我们的防守是从现在开始的3天,我将非常感激,提前谢谢你
答案 0 :(得分:0)
将Track函数转换为线程,然后启动要启动Track函数的线程,并停止要停止它的线程。