From cc8589d750a6c5f562dfec946b4d7991ae38833a Mon Sep 17 00:00:00 2001 From: Pavel Lutskov Date: Fri, 1 Jun 2018 20:11:56 +0200 Subject: [PATCH] Extended colorpicker to read pictures also Some minor refactoring on photo capturing script, also. --- scripts/colorpicker.py | 8 +++++- scripts/imagereaders.py | 18 ++++++++++++- scripts/photo_capture.py | 58 +++++++++++----------------------------- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/scripts/colorpicker.py b/scripts/colorpicker.py index 68e380f..39eb37b 100644 --- a/scripts/colorpicker.py +++ b/scripts/colorpicker.py @@ -3,7 +3,7 @@ from __future__ import print_function import json import argparse import cv2 -from imagereaders import VideoReader, NaoImageReader +from imagereaders import VideoReader, NaoImageReader, PictureReader # import imutils class Colorpicker(object): @@ -89,6 +89,10 @@ if __name__ == '__main__': '--video-file', help='video file to use' ) + parser.add_argument( + '--image-file', + help='image to use' + ) parser.add_argument( '--still', help='only take one image from video stream', @@ -110,6 +114,8 @@ if __name__ == '__main__': cp.load(args.input_config) 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, diff --git a/scripts/imagereaders.py b/scripts/imagereaders.py index e944a13..0fce45f 100644 --- a/scripts/imagereaders.py +++ b/scripts/imagereaders.py @@ -1,6 +1,9 @@ import numpy as np import cv2 -from naoqi import ALProxy +try: + from naoqi import ALProxy +except: + ALProxy = None class NaoImageReader(object): @@ -54,3 +57,16 @@ class VideoReader(object): def close(self): self.cap.release() + + +class PictureReader(object): + "Dummy class for maybe convenience." + + def __init__(self, filename): + self.frame = cv2.imread(filename) + + def get_frame(self): + return self.frame.copy() + + def close(self): + pass diff --git a/scripts/photo_capture.py b/scripts/photo_capture.py index d99a979..4f06fe9 100644 --- a/scripts/photo_capture.py +++ b/scripts/photo_capture.py @@ -1,50 +1,22 @@ -import numpy as np import cv2 -from naoqi import ALProxy from datetime import datetime +from imagereaders import NaoImageReader +import argparse -nao_ip = '192.168.0.11' -nao_port = 9559 -res = (3, (960, 1280)) # NAOQi code and acutal resolution -fps = 1 -# get NAOqi module proxy - -# select camer -# 0: Top -# 1: Bottom -camera=0 - -videoDevice = ALProxy('ALVideoDevice', nao_ip, nao_port) -subscriber = videoDevice.subscribeCamera( - "tester", camera, res[0], 13, fps -) -# create image -image = np.zeros((res[1][0], res[1][1], 3), np.uint8) - -for k in range(1): - - result = videoDevice.getImageRemote(subscriber) - videoDevice.releaseImage(subscriber) +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--res', type=int, choices=(1, 2, 3), + default=3) + parser.add_argument('--cam-id', type=int, choices=(0, 1), + default=0) + args = parser.parse_args() + video = NaoImageReader('192.168.0.11', res=args.res, cam_id=args.cam_id, + fps=1) + frame = video.get_frame() + video.close() now = datetime.now().strftime('%Y%m%d%H%M%S') - if result == None: - print 'cannot capture.' - elif result[6] == None: - print 'no image data string.' - else: - values = map(ord, list(result[6])) - i = 0 - for y in range(res[1][0]): - for x in range(res[1][1]): - image.itemset((y, x, 0), values[i + 0]) - image.itemset((y, x, 1), values[i + 1]) - image.itemset((y, x, 2), values[i + 2]) - i += 3 - if camera==0: - cv2.imwrite('top' + now + '.jpg', image) - else: - cv2.imwrite('bottom' + now + '.jpg',image) - -videoDevice.unsubscribe(subscriber) + prefix = 'bottom' if args.cam_id else 'bottom' + cv2.imwrite(prefix + now + '.jpg', frame)