arskrald/AR-3/Assets/python_test.cs

313 lines
8.6 KiB
C#
Raw Normal View History

2019-04-17 15:23:27 +00:00
using System;
using System.Collections.Generic;
2019-04-23 10:53:37 +00:00
using System.Diagnostics;
using System.IO;
using OpenCVForUnity.CoreModule;
2019-04-17 15:23:27 +00:00
using UnityEngine;
using Vuforia;
using Newtonsoft.Json;
2019-04-25 16:00:05 +00:00
using RestSharp;
2019-04-17 15:23:27 +00:00
using OpenCVForUnity.Calib3dModule;
using OpenCVForUnity.ImgprocModule;
2019-04-23 10:53:37 +00:00
using OpenCVForUnity.ImgcodecsModule;
2019-04-25 16:00:05 +00:00
using System.Collections;
2019-04-23 10:53:37 +00:00
public class HomographyAndState
2019-04-17 15:23:27 +00:00
{
2019-04-23 10:53:37 +00:00
public List<List<float>> homography { get; set; }
public List<List<int>> board { get; set; }
2019-04-17 15:23:27 +00:00
}
2019-04-23 10:53:37 +00:00
2019-04-17 15:23:27 +00:00
public class python_test : MonoBehaviour
{
2019-05-09 13:42:16 +00:00
public GameObject FbxBishop;
public GameObject FbxKing;
public GameObject FbxKnight;
public GameObject FbxPawn;
public GameObject FbxQueen;
public GameObject FbxRook;
2019-05-09 14:29:16 +00:00
public List<GameObject> pieces;
2019-04-17 15:23:27 +00:00
Mat camImageMat;
Texture2D outputTexture;
int baselineWidth = 1500;
int baselineHeight = 1500;
Mat loadedImage;
2019-04-29 12:16:20 +00:00
Mat loadedImage_pls;
2019-04-23 10:53:37 +00:00
GameObject rue;
bool displayWarped = false;
double rueX = 0.51;
double rueY = 0.71;
2019-04-25 16:00:05 +00:00
Mat camImgCopy;
2019-04-23 10:53:37 +00:00
2019-04-25 16:00:05 +00:00
WebCamTexture _webcamtex;
Mat camMatFromTexture;
2019-04-23 10:53:37 +00:00
2019-04-25 16:00:05 +00:00
Process process;
ProcessStartInfo start = new ProcessStartInfo();
Texture2D _TextureFromCamera;
2019-04-17 15:23:27 +00:00
2019-04-29 12:16:20 +00:00
bool displayLoaded = false;
2019-05-09 14:29:16 +00:00
GameObject quad;
Renderer quadRend;
2019-04-25 16:00:05 +00:00
RestClient restClient;
2019-04-17 15:23:27 +00:00
2019-05-09 13:42:16 +00:00
Dictionary<int, GameObject> intToPiece = new Dictionary<int, GameObject>();
2019-05-09 16:30:15 +00:00
GameObject transObject;
2019-05-09 13:42:16 +00:00
List<List<int>> boardState;
2019-04-29 12:16:20 +00:00
2019-05-09 13:42:16 +00:00
GameObject baseObject;
2019-04-29 12:16:20 +00:00
2019-04-25 16:00:05 +00:00
int viewMarked = 0;
//StreamWriter sw;
//StreamReader sr;
2019-04-23 10:53:37 +00:00
2019-04-17 15:23:27 +00:00
2019-04-25 16:00:05 +00:00
// Start is called before the first frame update
void Start()
2019-04-23 10:53:37 +00:00
{
2019-05-09 13:42:16 +00:00
baseObject = GameObject.Find("base_object");
2019-05-09 14:29:16 +00:00
quad = GameObject.Find("Quad");
quadRend = quad.GetComponent<Renderer>();
2019-05-09 16:30:15 +00:00
transObject = GameObject.Find("fuck");
2019-05-09 14:29:16 +00:00
2019-04-17 15:23:27 +00:00
2019-05-09 13:42:16 +00:00
boardState = new List<List<int>>() {
new List<int>() {0, 1, 2, 4, 3, 2, 1, 0},
new List<int>() {5, 5, 5, 5, 5, 5, 5, 5},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
new List<int>() {6, 6, 6, 6, 6, 6, 6, 6},
2019-04-29 12:16:20 +00:00
2019-05-09 13:42:16 +00:00
};
2019-04-29 12:16:20 +00:00
2019-05-09 13:42:16 +00:00
loadedImage_pls = Imgcodecs.imread("/Users/alexandermunch-hansen/projects/chess_stuff/advancedskrald/whole_boards/boards_for_empty/board_1554288882.301468_rank_8.png");
2019-04-25 16:00:05 +00:00
2019-04-29 12:16:20 +00:00
2019-05-09 13:42:16 +00:00
intToPiece.Add(0, FbxRook);
intToPiece.Add(1, FbxKnight);
intToPiece.Add(2, FbxBishop);
intToPiece.Add(3, FbxKing);
intToPiece.Add(4, FbxQueen);
intToPiece.Add(5, FbxPawn);
2019-04-25 16:00:05 +00:00
camMatFromTexture = new Mat(1080, 1920, CvType.CV_8UC3);
_TextureFromCamera = new Texture2D(1920, 1080);
2019-04-29 12:16:20 +00:00
2019-04-25 16:00:05 +00:00
restClient = new RestClient("http://localhost:5000");
2019-04-17 15:23:27 +00:00
2019-04-25 16:00:05 +00:00
//process = Process.Start(start);
//sw = new StreamWriter(process.StandardInput.BaseStream, System.Text.Encoding.Default, 1024, true);
//sr = new StreamReader(process.StandardOutput.BaseStream, System.Text.Encoding.Default, true, 1024, true);
2019-04-17 15:23:27 +00:00
2019-05-09 13:42:16 +00:00
_webcamtex = new WebCamTexture("HD Pro Webcam C920 #3", 1920, 1080);
2019-05-09 14:29:16 +00:00
_webcamtex.Play();
//DoStuff();
baseObject.SetActive(false);
2019-04-17 15:23:27 +00:00
}
2019-04-25 16:00:05 +00:00
string runCmd(Mat image)
{
var buffer = new MatOfByte();
OpenCVForUnity.ImgcodecsModule.Imgcodecs.imencode(".png", image, buffer);
string base64 = Convert.ToBase64String(buffer.toArray());
String json = $"{{\"img\": \"{base64}\"}}";
RestRequest request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddParameter("application/json", json, ParameterType.RequestBody);
var response = restClient.Execute(request);
2019-04-29 12:16:20 +00:00
print(response.Content);
2019-04-25 16:00:05 +00:00
return response.Content;
}
/*
using (StreamWriter writer = process.StandardInput)
{
writer.WriteLine(base64);
}
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadLine();
return (string)result;
2019-05-09 14:29:16 +00:00
}*/
void DoStuff()
{
Vector3 bp = baseObject.transform.position;
foreach (GameObject piece in pieces)
{
Destroy(piece);
}
pieces.Clear();
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
int intPiece = boardState[j][i];
if (intPiece == 6)
{
continue;
}
GameObject fbx = intToPiece[intPiece];
GameObject piece = Instantiate(fbx);
piece.transform.localScale = baseObject.transform.localScale;
piece.transform.position = new Vector3((float)(bp.x + i * 0.04),
bp.y,
(float)(bp.z + j * 0.04));
pieces.Add(piece);
}
}
2019-05-09 16:30:15 +00:00
var transMat = (Material)Resources.Load("trans_mat", typeof(Material));
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
int intPiece = boardState[7-j][i];
if (intPiece == 6 || boardState[j][i] != 6)
{
continue;
}
GameObject piece = Instantiate(transObject);
piece.transform.position = new Vector3((float)(bp.x + i * 0.04),
bp.y,
(float)(bp.z + j * 0.04));
pieces.Add(piece);
}
}
2019-05-09 14:29:16 +00:00
}
2019-04-25 16:00:05 +00:00
2019-04-17 15:23:27 +00:00
// Update is called once per frame
void Update()
2019-04-23 10:53:37 +00:00
{
2019-04-29 12:16:20 +00:00
if (displayLoaded)
{
camMatFromTexture = loadedImage_pls.clone();
}
2019-04-25 16:00:05 +00:00
Image camImg = CameraDevice.Instance.GetCameraImage(Image.PIXEL_FORMAT.RGBA8888);
Mat textMat = null;
2019-04-17 15:23:27 +00:00
if (camImg != null)
2019-04-25 16:00:05 +00:00
{
_TextureFromCamera.SetPixels(_webcamtex.GetPixels());
_TextureFromCamera.Apply();
//byte[] bytes = _TextureFromCamera.EncodeToPNG();
//string filePath = "SavedScreen1.png";
//File.WriteAllBytes(filePath, bytes);
2019-04-29 12:16:20 +00:00
if (!displayLoaded)
{
OpenCVForUnity.UnityUtils.Utils.texture2DToMat(_TextureFromCamera, camMatFromTexture);
}
2019-04-25 16:00:05 +00:00
/*
2019-04-23 10:53:37 +00:00
if (camImageMat == null)
{
camImageMat = new Mat(camImg.Height, camImg.Width, CvType.CV_8UC4);
}
2019-04-17 15:23:27 +00:00
camImageMat.put(0, 0, camImg.Pixels);
2019-04-25 16:00:05 +00:00
*/
if (Input.GetKeyDown(KeyCode.A))
2019-04-17 15:23:27 +00:00
{
2019-04-25 16:00:05 +00:00
viewMarked = 0;
} else if (Input.GetKeyDown(KeyCode.S))
{
viewMarked = 1;
2019-04-29 12:16:20 +00:00
} else if (Input.GetKeyDown(KeyCode.D))
{
displayLoaded = true;
} else if (Input.GetKeyDown(KeyCode.F))
{
displayLoaded = false;
2019-04-25 16:00:05 +00:00
}
if (Input.GetKeyDown("space"))
{
2019-04-29 12:16:20 +00:00
//ScreenCapture.CaptureScreenshot("plspls.png");
2019-04-25 16:00:05 +00:00
2019-04-29 12:16:20 +00:00
// TODO: Set this back again
2019-04-17 15:23:27 +00:00
2019-04-29 12:16:20 +00:00
if (!displayLoaded)
{
loadedImage = camMatFromTexture.clone();
}
else
{
loadedImage = loadedImage_pls.clone();
}
//camMatFromTexture = loadedImage.clone();
2019-05-09 13:42:16 +00:00
var pls = runCmd(camMatFromTexture);
2019-04-23 10:53:37 +00:00
HomographyAndState homographyAndState = JsonConvert.DeserializeObject<HomographyAndState>(pls);
2019-05-09 13:42:16 +00:00
boardState = homographyAndState.board;
2019-05-09 14:29:16 +00:00
DoStuff();
2019-04-23 11:32:57 +00:00
2019-04-25 16:00:05 +00:00
// MatDisplay.DisplayMat(loadedImage, MatDisplaySettings.FULL_BACKGROUND);
//process.Close();
//process = Process.Start(start);
2019-04-23 10:53:37 +00:00
}
2019-04-25 16:00:05 +00:00
if (viewMarked == 0)
2019-05-09 14:29:16 +00:00
{
//MatDisplay.DisplayMat(camMatFromTexture, MatDisplaySettings.FULL_BACKGROUND);
quadRend.sharedMaterial.mainTexture = _TextureFromCamera;
2019-04-25 16:00:05 +00:00
2019-05-09 14:29:16 +00:00
}
else if (viewMarked == 1)
2019-05-09 13:42:16 +00:00
{
2019-04-25 16:00:05 +00:00
MatDisplay.DisplayMat(loadedImage, MatDisplaySettings.FULL_BACKGROUND);
}
2019-04-17 15:23:27 +00:00
}
2019-04-23 10:53:37 +00:00
}
2019-04-17 15:23:27 +00:00
}