私はハンドジェスチャ認識に基づいたアルゴリズムに取り組んでいます。このアルゴリズムは、Winformで見つかったC#スクリプトで実行されます。私のゲームでウェブカメラを通して手のジェスチャーの検出を行うのに必要な技術と同じ。私は自分のゲームスクリプトでアルゴリズムを使用しようとしましたが、アルゴリズムを使用してイメージをキャプチャできませんでした。以下は私が現在取り組んでいるコードです。私は、Motion.netのフレームワークを使って動き検出のアイデアを実装しています。ビットマップイメージは常にnullを返します。しかし、winformで同じアルゴリズムを使用すると、変更されたすべてのフレームでイメージがキャプチャされます。 PhotoCaptureを統一して使用するテクニックがあることは知っていますが、どのフレームでどのように実行時にそれを使用するのか分かりません。すべての指導は高く評価されます。ありがとう!イメージを1つ1つのフレームでキャプチャします。3d
OpenCamera.csこれらのライブラリは常にheavelyウィンドウの一種であるsystem.drawingライブラリに依存して(私は現時点でに返信することはできませんよ)コメントで述べたように
using AForge.GestureRecognition;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using UnityEngine;
using System.Drawing.Design;
using UnityEngine.VR.WSA.WebCam;
using System.Linq;
using System;
public class OpenCamera : MonoBehaviour {
// statistics length
private const int statLength = 15;
Bitmap image;
PhotoCapture photoCaptureObject = null;
Texture2D targetTexture = null;
// current statistics index
private int statIndex = 0;
// ready statistics values
private int statReady = 0;
// statistics array
private int[] statCount = new int[statLength];
private GesturesRecognizerFromVideo gesturesRecognizer = new GesturesRecognizerFromVideo();
private Gesture gesture = new Gesture();
private int gestureShowTime = 0;
// Use this for initialization
void Start()
{
WebCamTexture webcamTexture = new WebCamTexture();
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = webcamTexture;
webcamTexture.Play();
}
// Update is called once per frame
void Update()
{
gesturesRecognizer.ProcessFrame(ref image);
// check if we need to draw gesture information on top of image
if (gestureShowTime > 0)
{
if ((gesture.LeftHand == HandPosition.NotRaised) || (gesture.RightHand != HandPosition.NotRaised))
{
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
string text = string.Format("Left = " + gesture.LeftHand + "\nRight = " + gesture.RightHand);
System.Drawing.Font drawFont = new System.Drawing.Font("Courier", 13, System.Drawing.FontStyle.Bold);
SolidBrush drawBrush = new SolidBrush(System.Drawing.Color.Blue);
g.DrawString(text, drawFont, drawBrush, new PointF(0, 5));
drawFont.Dispose();
drawBrush.Dispose();
g.Dispose();
}
gestureShowTime--;
}
}
}
Unityで 'System.Drawing'を使うのは無駄です。それを使用する必要がある場合、Unityを使用することさえしないでください。これはUnityを使用する主要な理由、つまり「移植性」を取り除くためです。 Unity + OpenGLを使うことをお勧めします。 – Programmer
現行のフレームワーク、すなわち、apos.netは私に手ジェスチャー認識の実際の使用を提供します。 OpenGLフレームワークを使用した場合、aForge.netのような利点がありますか? – user100020
aForgeは大きく 'System.Drawing'に依存しています。 Unityを使用すると、あなたのアプリはWindows上でのみ動作するため、あなたはWPFまたはWindowsフォームを使用して使用します。私がOpenGLを言ったとき、私は実際OpenCVを意味しました。それはタイプミスでした。 C#ラッパーを作成するか、[OpenCVプラグイン](https://www.assetstore.unity3d.com/en/#!/content/21088)を購入することを検討するには、C++を知っている必要があります。時間を節約し、あらゆるタイプの画像処理を実行できます。 – Programmer