[RESOLU][DB-AL] Prise de photo/Enregistrement/Impression

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

[RESOLU][DB-AL] Prise de photo/Enregistrement/Impression

Message par Master_Bruce_ » 04 Oct 2017 18:09

Bonjour à tous,
Si je reviens encore vers vous aujourd'hui c'est simplement parce que je fais face à un petit problème.

Je suis en train de réaliser une sorte d'interface Unity qui permettrait de :
  • Prendre des photos avec une webCam
  • D'enregistrer ces mêmes photos dans un dossier de mon PC
  • D'imprimer ces mêmes photos

Aujourd'hui j'arrive à intégrer une webCamTexture à ma scène afin de visualiser le rendu de ma Camera.
Cependant je bloque au niveau de l'enregistrement de mes photos.
Unity me dit que ma variable de type WebCamTexture n'est assigné à aucun élément et que je dois l'assigner via l'inspector mais je ne sais pas à quoi l'assigner. J'ai essayer de créer un Empty GameObject mais le problème persiste :(

Voici mon code actuel :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class WebCam : MonoBehaviour
{
    public RawImage display;
    public WebCamTexture tex;

    private string _SavePath = "C:/_WebcamSnaps/";

    void Start()
    {
        if (WebCamTexture.devices.Length < 0)
        {
            Debug.Log("No camera detected");
        }
        else
        {
            Debug.Log("Camera detected");
            WebCamDevice device = WebCamTexture.devices[0];
            tex = new WebCamTexture(device.name);
            display.material.mainTexture = tex;
            tex.Play();
        }
    }

    public void TakeSnapshot()
    {      
            Debug.Log("Silence, ça tourne !");
            for(int _captureCounter = 0; _captureCounter < 3; _captureCounter++)
            {
                    Debug.Log("Et de " + _captureCounter.ToString()+1);
                    Texture2D snap = new Texture2D(tex.width, tex.height);
                    snap.SetPixels(tex.GetPixels());
                    snap.Apply();
                    System.IO.File.WriteAllBytes(_SavePath + _captureCounter.ToString() + ".png", snap.EncodeToPNG());
           }
    }
}
Je sais que ce genre de forum sont là pour apporter des réponses mais j'aimerai plutôt avoir une indication pour que je puisse avancer de moi même.
J'apporterai ma propre solution une fois que j'aurai résolu mon problème !

En vous remerciant !

MBruce :)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par boubouk50 » 05 Oct 2017 09:25

Salut,

La Texture2D snap que tu crées n'est pas appliquée à un gameObject de la scène, je pense que c'est cela qu'Unity n'aime pas. Alors, après pourquoi... Fais une recherche sur le net avec le retour console d'Unity, si d'autres ont eu ce souci, peut-être trouveras-tu une explication.
Par contre, la mainTexture de display est disponible.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par Master_Bruce_ » 05 Oct 2017 15:12

Merci de ton retour,
Très bien je vais faire quelques tests.

Je posterai une solution une fois que j'en aurait trouvé une. Je ferai de même avec mon projet une fois finis..
On sait jamais, si ça intéresse quelqu'un...

Je reviens vite !! :)

MBruce

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par Master_Bruce_ » 11 Oct 2017 17:07

Bonjour à tous,
Je reviens vers vous suite à mon problème.
Il semblerai que ce soit résolu mais je fais face à un nouveau problème, classique.. :

"NullReferenceException: Object reference not set to an instance of an object"

Et oui encore un !

L'objet considéré serait donc vide.. mais je ne vois pas comment c'est possible.
Voici mon code :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;

public class webCamModule : MonoBehaviour
{
    public RawImage display;
    private WebCamTexture wct;
    public string _savePath = "C:/snapShot";
    public Texture2D photo;

    // Use this for initialization
    void Start()
    {
        WebCamDevice device = WebCamTexture.devices[1];
        WebCamTexture wct = new WebCamTexture(device.name);
        display.texture = wct;
        display.material.mainTexture = wct;
        wct.Play();
      
    }


// Update is called once per frame
void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            TakeSnap();
        }
        
    }

    public void TakeSnap() {

        


        Texture2D photo = new Texture2D(wct.width, wct.height);
        photo.SetPixels(wct.GetPixels());
        photo.Apply();

        byte[] bytes = photo.EncodeToPNG();
        //Write out the PNG. Of course you have to substitute your_path for something sensible
        File.WriteAllBytes(_savePath + "photo.png", bytes);

    }

}
Je ne vois pas comment l'objet Texture2D photo pourrait-il être vie, de même pour l'objet webCamTexture wct !

Je m'en remet à vous chère communauté..

MBruce

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par boubouk50 » 11 Oct 2017 17:28

Quel objet est vide?
Si wct l'est, c’est qu'au Start () il ne trouve pas la caméra. Tu ne testes pas si la caméra est trouvée, donc source d'erreur.
Quant à photo, il en est dépendant. Mais si wct n'est pas vide, alors là, ça devient un peu plus bizarre.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par Master_Bruce_ » 11 Oct 2017 17:41

Merci de ton retour !
Le soucis est que wct n'est pas vide puisque lorsque je lance mon Game et bah j'ai bien le rendu de caméra !
C'est à n'y rien comprendre !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par boubouk50 » 12 Oct 2017 09:45

Fais des tests.
Mets un Debug.log (var) à chaque ligne et vois quelle ligne ne te renvoie pas ce qu'il faut.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Master_Bruce_
Messages : 18
Inscription : 02 Oct 2017 14:51

Re: [DB-AL] Prise de photo/Enregistrement/Impression

Message par Master_Bruce_ » 23 Oct 2017 12:00

Bonjour à tous,
Il y a quelque jour de cela j'ai finalement réussi à implémenter la prise de photo, l'enregistrement et l'impression !!
Voici quelques pistes pour ceux qui aimeraient réaliser ce petit projet :
  • Pour la prise de photo je vous invite à utiliser la classe Texture2D avec les méthode SetPixels et GetPixels accompagné d'un tableau de bytes à utiliser astucieusement !
  • Enregistrez votre photo avec l'une des méthodes de la classe System.IO.Files
  • Pour l'impression c'est plus délicat, Windows ne possède pas de librairie permettant de lancer une impression un bash, je vous laisse trouver une solution alternative
Bon courage à tous !

MBruce

PS : Sujet Résolu ;)

Répondre

Revenir vers « Scripting »