Video recording!

This commit is contained in:
2018-06-29 18:51:18 +02:00
parent e50c2f973d
commit e37bb67b40
3 changed files with 25 additions and 71 deletions

View File

@@ -16,10 +16,12 @@ class NaoImageReader(object):
3: (960, 1280) 3: (960, 1280)
} }
def __init__(self, ip, port=9559, res=1, fps=30, cam_id=0): def __init__(self, ip, port=9559, res=1, fps=30, cam_id=0, video_file=None):
ip = bytes(ip) ip = bytes(ip)
self.res_id = res self.res_id = res
self.recording = []
self.res = self.RESOLUTIONS[res] self.res = self.RESOLUTIONS[res]
self.video_file = video_file
self.cam_id=cam_id self.cam_id=cam_id
self.fps = fps self.fps = fps
self.vd = ALProxy('ALVideoDevice', ip, port) self.vd = ALProxy('ALVideoDevice', ip, port)
@@ -46,15 +48,25 @@ class NaoImageReader(object):
raise RuntimeError(self.sub + " couldn't capture") raise RuntimeError(self.sub + " couldn't capture")
else: else:
height, width = self.res height, width = self.res
return np.frombuffer(result[6], dtype=np.uint8).reshape( frame = np.frombuffer(result[6], dtype=np.uint8).reshape(
height, width, 3 height, width, 3
) )
if self.video_file is not None:
self.recording.append(frame)
return frame
def close(self): def close(self):
self.vd.unsubscribe(self.sub) self.vd.unsubscribe(self.sub)
if self.video_file is not None:
vf = cv2.VideoWriter(self.video_file,
cv2.cv.FOURCC('X', 'V', 'I', 'D'),
5,
(self.res[1], self.res[0]))
for frame in self.recording:
vf.write(frame)
def restart(self): def restart(self):
self.close() self.vd.unsubscribe(self.sub)
self.sub = self.vd.subscribeCamera( self.sub = self.vd.subscribeCamera(
self.sub, self.cam_id, self.res_id, 13, self.fps self.sub, self.cam_id, self.res_id, 13, self.fps
) )

View File

@@ -15,24 +15,25 @@ from naoqi import ALProxy
class Striker(object): class Striker(object):
VIDEO_FOLDER = '/home/nao/recordings/'
def __init__(self, nao_ip, nao_port, res, ball_hsv, goal_hsv, field_hsv, def __init__(self, nao_ip, nao_port, res, ball_hsv, goal_hsv, field_hsv,
ball_min_radius): ball_min_radius):
self.run_id = strftime('%Y%m%d%H%M%S') self.run_id = strftime('%Y%m%d%H%M%S')
self.mover = NaoMover(nao_ip=nao_ip, nao_port=nao_port) self.mover = NaoMover(nao_ip=nao_ip, nao_port=nao_port)
self.mover.stand_up() self.mover.stand_up()
self.upper_camera = NaoImageReader(nao_ip, port=nao_port, res=res, self.upper_camera = NaoImageReader(
fps=30, cam_id=0) nao_ip, port=nao_port, res=res, fps=30, cam_id=0,
self.lower_camera = NaoImageReader(nao_ip, port=nao_port, res=res, video_file='cam0_' + self.run_id + '.mpg'
fps=30, cam_id=1) )
self.lower_camera = NaoImageReader(
nao_ip, port=nao_port, res=res, fps=30, cam_id=1,
video_file='cam1_' + self.run_id + '.mpg'
)
self.ball_finder = BallFinder(tuple(ball_hsv[0]), tuple(ball_hsv[1]), self.ball_finder = BallFinder(tuple(ball_hsv[0]), tuple(ball_hsv[1]),
ball_min_radius) ball_min_radius)
self.field_finder = FieldFinder(tuple(field_hsv[0]), self.field_finder = FieldFinder(tuple(field_hsv[0]),
tuple(field_hsv[1])) tuple(field_hsv[1]))
self.goal_finder = GoalFinder(tuple(goal_hsv[0]), tuple(goal_hsv[1])) self.goal_finder = GoalFinder(tuple(goal_hsv[0]), tuple(goal_hsv[1]))
self.speaker = ALProxy('ALTextToSpeech', bytes(nao_ip), nao_port) self.speaker = ALProxy('ALTextToSpeech', bytes(nao_ip), nao_port)
self.recorder = ALProxy('ALVideoRecorder', bytes(nao_ip), nao_port)
self.is_over = False self.is_over = False
@@ -52,17 +53,6 @@ class Striker(object):
self.speaker.say(self.speach_queue.pop()) self.speaker.say(self.speach_queue.pop())
sleep(0.1) sleep(0.1)
def start_record(self, cam_id):
if self.recorder.isRecording():
print('Already recording. Please stop first')
return
self.recorder.setCameraID(cam_id)
self.recorder.startRecording(self.VIDEO_FOLDER,
'cam' + str(cam_id) + self.run_id)
def stop_record(self):
self.recorder.stopRecording()
def speak(self, text): def speak(self, text):
self.speach_queue.appendleft(text) self.speach_queue.appendleft(text)
@@ -317,8 +307,6 @@ class Striker(object):
self.is_over = True self.is_over = True
if self.tts_thread.isAlive(): if self.tts_thread.isAlive():
self.tts_thread.join() self.tts_thread.join()
if self.recorder.isRecording():
self.stop_record()
self.upper_camera.close() self.upper_camera.close()
self.lower_camera.close() self.lower_camera.close()
self.mover.stop_moving() self.mover.stop_moving()
@@ -418,7 +406,6 @@ if __name__ == '__main__':
print('State:', state) print('State:', state)
if state == 'init': if state == 'init':
striker.start_record(0)
striker.mover.set_head_angles(0, 0) striker.mover.set_head_angles(0, 0)
striker.ball_tracking(tol=0.05) striker.ball_tracking(tol=0.05)
# goal_center = striker.goal_search() # goal_center = striker.goal_search()
@@ -430,8 +417,8 @@ if __name__ == '__main__':
# start ball approach when ball is visible # start ball approach when ball is visible
print('Soll angle') print('Soll angle')
striker.ball_tracking(tol=0.05) striker.ball_tracking(tol=0.05)
break # break
# state = 'ball_approach' state = 'align'
elif state == 'ball_approach': elif state == 'ball_approach':
# bil = striker.get_ball_angles_from_camera( # bil = striker.get_ball_angles_from_camera(
@@ -463,8 +450,6 @@ if __name__ == '__main__':
state = 'tracking' state = 'tracking'
elif state == 'align': elif state == 'align':
striker.stop_record()
striker.start_record(1)
striker.mover.set_head_angles(0, 0.25, 0.3) striker.mover.set_head_angles(0, 0.25, 0.3)
sleep(0.5) sleep(0.5)
try: try:

View File

@@ -1,43 +0,0 @@
# This test demonstrates how to use the ALVideoRecorder module.
# Note that you might not have this module depending on your distribution
import os
import sys
import time
from naoqi import ALProxy
# Replace this with your robot's IP address
IP = "192.168.0.11"
PORT = 9559
# Create a proxy to ALVideoRecorder
try:
videoRecorderProxy = ALProxy("ALVideoRecorder", IP, PORT)
except Exception, e:
print "Error when creating ALVideoRecorder proxy:"
print str(e)
exit(1)
videoRecorderProxy.setFrameRate(30.0)
videoRecorderProxy.setResolution(2) # Set resolution to VGA (640 x 480)
videoRecorderProxy.setCameraID(0)
# storage folder of the recording and the file name
videoRecorderProxy.startRecording("/home/nao/recordings/cameras", "camera1")
print "Video record started."
try:
# set recording duration
while True:
pass
finally:
videoInfo = videoRecorderProxy.stopRecording()
#print "Video was saved on the robot: ", videoInfo[1]
#print "Total number of frames: ", videoInfo[0]