private void FindHandPositionOnImage(Matrix4x4 camera2WorkdMatrix, Matrix4x4 projectionMatrix, int height, int width) { int x = 0, y = 0; if (CoordinateTransfer.WorldPos2ImagePos(_handPlotObj.transform.position, projectionMatrix, camera2WorkdMatrix, height, width, ref x, ref y)) { Debug.Log($"handPosition on image : {x}, {y}"); } }
/// <summary> /// 5秒ごとに発火される /// 5秒ごとにカロリーと食事の位置を認識するので、その情報を表示する。 /// 表示するとき、前のフレームに残っている連中と比較して、距離が5cm以内なら同じ食事と判断して、食事の表示を書き換える。 /// 前のフレームに残っている /// </summary> public void TakePhoto() { Vector3 cameraPos = CameraCache.Main.transform.position; _colorCameraObject?.TakePhoto(async(camera2WorkdMatrix, projectionMatrix, imageRawdata, height, width) => { //ここでカメラから実際のオブジェクトの対応を取る。 List <FoodData> foodDataList = await _objectDetector.DetectObject(imageRawdata, height, width); foodDataList = FoodData.CalculateCenterPosition(foodDataList); var currentWorldSpaceFoodData = new List <WorldSpaceFoodData>(4); //FindHandPositionOnImage(camera2WorkdMatrix, projectionMatrix, height,width); //今画面に映っている食事の位置が取得できたやつらを保存。 foreach (var foodData in foodDataList) { //var outはUnityがコンパイルしてくれないので。世知辛い。 Vector3 foodCenterPosOnWorldCordinate; //中心に対応があったら端の4点も対応を取って if (CoordinateTransfer.ImagePos2WorldPos(foodData.CenterX, foodData.CenterY, height, width, projectionMatrix, camera2WorkdMatrix, cameraPos, out foodCenterPosOnWorldCordinate)) { Vector3 topLeft, topRight, bottomLeft, bottomRight; CoordinateTransfer.ImagePos2WorldPos(foodData.Left, foodData.Top, height, width, projectionMatrix, camera2WorkdMatrix, cameraPos, out topLeft); CoordinateTransfer.ImagePos2WorldPos(foodData.Right, foodData.Top, height, width, projectionMatrix, camera2WorkdMatrix, cameraPos, out topRight); CoordinateTransfer.ImagePos2WorldPos(foodData.Left, foodData.Bottom, height, width, projectionMatrix, camera2WorkdMatrix, cameraPos, out bottomLeft); CoordinateTransfer.ImagePos2WorldPos(foodData.Right, foodData.Bottom, height, width, projectionMatrix, camera2WorkdMatrix, cameraPos, out bottomRight); currentWorldSpaceFoodData.Add(new WorldSpaceFoodData(foodData, foodCenterPosOnWorldCordinate, topLeft, topRight, bottomLeft, bottomRight)); } } _foodDataViewManager.ReDrawFoodData(currentWorldSpaceFoodData); }); //_depthCameraObject?.TakePhoto(async (camera2WorkdMatrix, projectionMatrix, imageRawdata, height, width) => //{ // await _objectDetector.DetectObject(imageRawdata, height, width); //}); }