我正在尝试做两件事:
- 从相机中检索 84 x 84 x 3 像素阵列
- 将此数组发送到可以显示的 python 脚本
我坚持使用 1),所以目前我只是将字节数组写入 txt 文件,然后在 python 中打开文件。然而,我不断得到这张图片,这让我相信字节数组实际上并没有被像素数据正确实例化。[ ]
1
这是 C# 统一代码:
using System.IO;
using UnityEngine;
using MLAgents.Sensors;
// using UnityEngine.CoreModule;
public class TrainingAgent : Agent, IPrefab
{
public Camera cam;
private RenderTexture renderTexture;
public int bytesPerPixel;
private byte[] rawByteData;
private Texture2D texture2D;
private Rect rect;
public override void Initialize()
{
renderTexture = new RenderTexture(84, 84, 24);
rawByteData = new byte[84 * 84 * bytesPerPixel];
texture2D = new Texture2D(84, 84, TextureFormat.RGB24, false);
rect = new Rect(0, 0, 84, 84);
cam.targetTexture = renderTexture;
}
public override void CollectObservations(VectorSensor sensor)
{
run_cmd();
}
private void run_cmd()
{
cam.Render();
// Read pixels to texture
RenderTexture.active = renderTexture;
texture2D.ReadPixels(rect, 0, 0);
Array.Copy(texture2D.GetRawTextureData(), rawByteData, rawByteData.Length);
File.WriteAllBytes("/Path/to/byte/array/Foo.txt", rawByteData); // Requires System.IO
}
}
这是python代码:
from PIL import Image
import numpy as np
fh = open('/Path/to/byte/array/foo.txt', 'rb')
ba = bytearray(fh.read())
data = np.array(list(ba)).reshape(84,84,3)
img = Image.fromarray(data, 'RGB')
img.show()
任何帮助将不胜感激,因为我不知道哪里出错了,而且我的调试尝试似乎是徒劳的。