0

我正在尝试使用 NAO 的前置摄像头将捕获的 640x480 RGB 图像保存到我的计算机。我正在使用 python 和 PIL 来做到这一点。不幸的是,无论我为 Image.save()- 方法的参数使用什么图像类型或路径,图像都不会保存在我的计算机上。但是,使用 PIL 创建的图像包含有效的 RGB 信息。这是我来自 choregraphe 的代码示例:

import Image

def onInput_onStart(self):
    cam_input = ALProxy("ALVideoDevice")
    nameId = cam_input.subscribeCamera("Test_Cam", 1, 2, 13, 20)

    image = cam_input.getImageRemote(nameId) #captures an image
    w = image[0] #get the image width
    h = image[1] #get the image height
    pixel_array = image[6] #contains the image data

    result = Image.fromstring("RGB", (w, h), pixel_array)
    #the following line doesnt work
    result.save("C:\Users\Claudia\Desktop\NAO\Bilder\test.png", "PNG")

    cam_input.releaseImage(nameId)
    cam_input.unsubscribe(nameId)
    pass

非常感谢您提前提供的帮助!- 一个沮丧的学生

4

3 回答 3

1

在评论中,您说代码是从 choregraphe 粘贴的,所以我猜您使用 choregraphe 启动它。如果是这样,则将代码注入您的机器人然后启动。

所以你的图像被保存到 NAO 硬盘,我猜你的机器人没有一个名为:“C:\Users\Claudia\Desktop\NAO\Bilder\test.png”的文件夹。

因此,将路径更改为“/home/nao/test.png”,启动您的代码,然后使用 putty 登录到您的 NAO 或使用 winscp 浏览文件夹(因为看起来您正在使用 Windows)。

你应该看到你的图像文件。

于 2017-05-31T22:03:54.560 回答
0

为了让您的代码正确运行,它需要正确缩进。您的代码应如下所示:

import Image

def onInput_onStart(self):
    cam_input = ALProxy("ALVideoDevice")
    nameId = cam_input.subscribeCamera("Test_Cam", 1, 2, 13, 20)

    image = cam_input.getImageRemote(nameId) #captures an image
    w = image[0] #get the image width
    h = image[1] #get the image height
    pixel_array = image[6] #contains the image data

    ...

确保缩进def onInput_onStart(self):方法内的所有内容。

于 2017-05-31T10:21:47.910 回答
0

很抱歉回复晚了,但它可能对某人有帮助。你应该用naoqi试试。这是检索图像的文档 http://doc.aldebaran.com/2-4/dev/python/examples/vision/get_image.html

原始代码对我不起作用,所以我做了一些 tweeks。

parser = argparse.ArgumentParser()
parser.add_argument("--ip", type=str, default="nao.local.",
                    help="Robot IP address. On robot or Local Naoqi: use 
                    'nao.local.'.")
parser.add_argument("--port", type=int, default=9559,
                    help="Naoqi port number")
args = parser.parse_args()
session = qi.Session()
try:
    session.connect("tcp://" + args.ip + ":" + str(args.port))
except RuntimeError:
    pass
"""
First get an image, then show it on the screen with PIL.
"""
# Get the service ALVideoDevice.
video_service = session.service("ALVideoDevice")
resolution = 2    # VGA
colorSpace = 11   # RGB
videoClient = video_service.subscribe("python_client",0,3,13,1)
t0 = time.time()
# Get a camera image.
# image[6] contains the image data passed as an array of ASCII chars.
naoImage = video_service.getImageRemote(videoClient)
t1 = time.time()
# Time the image transfer.
print ("acquisition delay ", t1 - t0)
#video_service.unsubscribe(videoClient)

# Now we work with the image returned and save it as a PNG  using ImageDraw
# package.
# Get the image size and pixel array.
imageWidth = naoImage[0]
imageHeight = naoImage[1]
array = naoImage[6]
image_string = str(bytearray(array))
# Create a PIL Image from our pixel array.
im = Image.fromstring("RGB", (imageWidth, imageHeight), image_string)
# Save the image.
im.save("C:\\Users\\Lenovo\\Desktop\\PROJEKTI\\python2- 
        connect4\\camImage.png", "PNG")

小心使用 Python 2.7。代码在您的计算机上运行,​​而不是在 NAO 机器人上运行!

于 2022-02-02T13:59:10.683 回答