Je ne connais absolument pas l'ensemble de fonctionnalités plus complexes d'Unity3D et je suis curieux de savoir s'il a la capacité de prendre une photo puis de la manipuler. Plus précisément, je souhaite que l'utilisateur prenne un selfie, puis les trace autour de son visage pour créer un fichier PNG qui serait ensuite mappé sur un modèle.
Je sais que la correspondance des visages sur un modèle est simple, mais je me demande si j'ai besoin d'écrire la fonctionnalité de photo/gravure dans l'application Chrome, ou si tout peut être fait à partir de Unity. Je n'ai pas besoin d'un tutoriel sur la façon de le faire, je demande simplement si c'est quelque chose qui est possible.
Oui, c'est possible Vous voudrez regarder la fonctionnalité WebCamTexture .
Vous créez une WebCamTexture et appelez sa fonction Play () qui démarre la caméra. WebCamTexture, comme toute texture, vous permet d'obtenir les pixels via un appel GetPixels (). Cela vous permet de prendre un instantané quand vous le souhaitez, et vous pouvez l'enregistrer dans une Texture2D. Un appel à EncodeToPNG () et une écriture ultérieure dans un fichier devraient vous y amener.
Notez que le code ci-dessous est une rédaction rapide basée sur la documentation. Je ne l'ai pas testé. Vous devrez peut-être sélectionner le bon périphérique s'il en existe plusieurs.
using UnityEngine;
using System.Collections;
using System.IO;
public class WebCamPhotoCamera : MonoBehaviour
{
WebCamTexture webCamTexture;
void Start()
{
webCamTexture = new WebCamTexture();
renderer.material.mainTexture = webCamTexture;
webCamTexture.Play();
}
void TakePhoto()
{
// NOTE - you almost certainly have to do this here:
yield return new WaitForEndOfFrame();
// it's a rare case where the Unity doco is pretty clear,
// http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
// be sure to scroll down to the SECOND long example on that doco page
Texture2D photo = new Texture2D(webCamTexture.width, webCamTexture.height);
photo.SetPixels(webCamTexture.GetPixels());
photo.Apply();
//Encode to a PNG
byte[] bytes = photo.EncodeToPNG();
//Write out the PNG. Of course you have to substitute your_path for something sensible
File.WriteAllBytes(your_path + "photo.png", bytes);
}
}
Pour ceux qui essaient d’obtenir un rendu en direct de la caméra, voici comment j’ai réussi à le faire. Tout d'abord, j'ai édité la réponse de Bart pour que la texture soit assignée sur Mise à jour plutôt que sur Démarrer:
void Start()
{
webCamTexture = new WebCamTexture();
webCamTexture.Play();
}
void Update()
{
GetComponent<RawImage>().texture = webCamTexture;
}
Ensuite, j'ai attaché le script à un GameObject avec un composant RawImage. Vous pouvez facilement en créer un par clic droit -> Interface utilisateur -> RawImage dans la hiérarchie de l'éditeur Unity (cela nécessite Unity 4.6 et versions ultérieures). En cours d'exécution, vous devriez voir un flux en direct de la caméra. Au moment de la rédaction de ce document, Unity 5 prend en charge l’utilisation des webcams dans l’édition personnelle gratuite de Unity 5.
J'espère que cela aidera tous ceux qui recherchent un bon moyen de capturer des flux vidéo en direct dans Unity.
C'est possible. Je vous recommande vivement de consulter WebcamTexture Unity API . Il a quelques fonctions utiles:
La réponse de Bart nécessite une modification. J'ai utilisé son code et l'image que je devenais noire. La modification requise est que nous devons Convertir TakePhoto en coroutine et ajouter
yield return new WaitForEndOfFrame();
au début de Coroutine. (Courtsey @fafase) Pour plus de détails, voir http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
Vous pouvez également vous référer à
Prendre une photo en utilisant la webcam donne une sortie en noir [Unity3D]
Oui, vous pouvez. J'ai créé Android Native Camera plugin qui permet d'ouvrir la caméra de votre appareil Android, de capturer une image, d'enregistrer une vidéo et de l'enregistrer à l'emplacement souhaité de votre appareil avec seulement quelques lignes de code.
Un plugin est disponible pour ce type de fonctionnalité, appelé Camera Capture Kit - https://www.assetstore.unity3d.com/fr/#!/content/56673 et, bien que la fonctionnalité fournie s'adresse au mobile qu'il contient. une démonstration de l’utilisation de la WebCamTexture pour prendre une image fixe.