Forbid interrupt when initializing

This commit is contained in:
2018-06-30 10:54:40 +02:00
parent 21cdfafc80
commit 9230b1728f
3 changed files with 38 additions and 21 deletions

View File

@@ -4,7 +4,7 @@ from time import time, sleep
from math import cos, pi
from .striker import Striker
from .utils import read_config
from .utils import read_config, InterruptDelayed
@@ -59,12 +59,13 @@ if __name__ == '__main__':
try: # Hit Ctrl-C to stop, cleanup and exit
cfg = read_config()
striker = Striker(
nao_ip=cfg['ip'], nao_port=cfg['port'],
res=cfg['res'], ball_hsv=cfg['ball'],
goal_hsv=cfg['goal'], field_hsv=cfg['field'],
ball_min_radius=cfg['ball_min_radius'],
)
with InterruptDelayed():
striker = Striker(
nao_ip=cfg['ip'], nao_port=cfg['port'],
res=cfg['res'], ball_hsv=cfg['ball'],
goal_hsv=cfg['goal'], field_hsv=cfg['field'],
ball_min_radius=cfg['ball_min_radius'],
)
state = 'init'
init_soll = 0.0

View File

@@ -8,7 +8,7 @@ import cv2
from .imagereaders import VideoReader, NaoImageReader, PictureReader
from .finders import GoalFinder, BallFinder, FieldFinder
from .utils import read_config, imresize, hsv_mask
from .utils import read_config, imresize, hsv_mask, InterruptDelayed
class Colorpicker(object):
@@ -203,18 +203,19 @@ if __name__ == '__main__':
if args.input_config:
cp.load(args.input_config, args.target)
if args.video_file:
rdr = VideoReader(args.video_file, loop=True)
elif args.image_file:
rdr = PictureReader(args.image_file)
elif args.nao_ip:
rdr = NaoImageReader(
args.nao_ip,
cam_id=args.nao_cam,
res=args.nao_res
)
else:
rdr = VideoReader(0)
with InterruptDelayed():
if args.video_file:
rdr = VideoReader(args.video_file, loop=True)
elif args.image_file:
rdr = PictureReader(args.image_file)
elif args.nao_ip:
rdr = NaoImageReader(
args.nao_ip,
cam_id=args.nao_cam,
res=args.nao_res
)
else:
rdr = VideoReader(0)
try:
if args.still:

View File

@@ -2,9 +2,9 @@ from __future__ import division
import os
import json
import signal
import cv2
import numpy as np
HERE = os.path.dirname(os.path.realpath(__file__))
@@ -40,3 +40,18 @@ def hsv_mask(hsv, hsv_lower, hsv_upper):
return cv2.add(mask_l, mask_u)
else:
return cv2.inRange(hsv, tuple(hsv_lower), tuple(hsv_upper))
class InterruptDelayed(object):
def __enter__(self):
self.signal_received = False
self.old_handler = signal.signal(signal.SIGINT, self.handler)
def handler(self, sig, frame):
self.signal_received = (sig, frame)
print('SIGINT received. Delaying KeyboardInterrupt.')
def __exit__(self, type, value, traceback):
signal.signal(signal.SIGINT, self.old_handler)
if self.signal_received:
self.old_handler(*self.signal_received)