Esempio n. 1
0
    private void Start()
    {
        m_Error = new Error.ErrorResponse();
        m_PersonCreatedSuccess = new PersonCreateSuccess.PersonCreateSuccessResponse();
        m_TrainingStatus       = new Training.TrainingStatus();
        m_ListOfPersonsInGroup = new List <PersonInGroup.Person>();

        m_AzureManager = GetComponent <AzureManager>();
        m_ApiKey       = m_AzureManager.GetApiKey();
        m_Endpoint     = m_AzureManager.GetEndpoint();
    }
Esempio n. 2
0
    public static IEnumerator CreatePersonInGroup(string endpoint, string apiKey, string personGroupId, string name, string userData,
                                                  System.Action <bool> result, System.Action <PersonCreateSuccess.PersonCreateSuccessResponse> success)
    {
        string request = endpoint + "/persongroups/" + personGroupId + "/persons";

        PersonGroupData data = new PersonGroupData();

        data.name     = name;
        data.userData = userData;

        string dataJson = JsonUtility.ToJson(data);

        var www = new UnityWebRequest(request, "POST");

        byte[] bodyRaw = Encoding.UTF8.GetBytes(dataJson);
        www.uploadHandler   = (UploadHandler) new UploadHandlerRaw(bodyRaw);
        www.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
        www.SetRequestHeader("Content-Type", "application/json");
        www.SetRequestHeader("Ocp-Apim-Subscription-Key", apiKey);

        yield return(www.SendWebRequest());

        Debug.Log("Status Code: " + www.responseCode);

        if (www.isNetworkError)
        {
            Debug.Log(" Error: " + www.error);
            result(false);
        }
        else
        {
            if (!string.IsNullOrEmpty(www.error))
            {
                Debug.Log(www.error);
                result(false);
            }
            else
            {
                PersonCreateSuccess.PersonCreateSuccessResponse successValue = JsonUtility.FromJson <PersonCreateSuccess.PersonCreateSuccessResponse>(www.downloadHandler.text);
                result(true);
                success(successValue);
            }
        }
    }
Esempio n. 3
0
    IEnumerator CreatePersonInPersonGroup(string personGroupId, string personName, string birthday)
    {
        yield return(RequestManager.CreatePersonInGroup(
                         m_AzureManager.GetEndpoint(),
                         m_AzureManager.GetApiKey(),
                         personGroupId,
                         personName,
                         birthday,
                         value => personId = value));

        m_PersonCreateSuccessResponse = JsonUtility.FromJson <PersonCreateSuccess.PersonCreateSuccessResponse>(personId);
        personId = m_PersonCreateSuccessResponse.personId;

        if (personId.Equals("null"))
        {
            SetStatusText("CreatePerson 失敗しました。入力を確認し、もう一度お試しください。");
        }
        else
        {
            m_WebcamManager.SetPersonId(personId);
        }
    }
Esempio n. 4
0
    // Start is called before the first frame update
    IEnumerator Start()
    {
        if (ENV_KEY.Equals("None"))
        {
            Debug.LogError("No environment variable key is defined. Stopping.");
            yield break;
        }

        GetApiKey();

        // Check if the person group ID already exists
        bool requestSucceded = false;

        yield return(RequestManager.GetPersonGroup(ENDPOINT, API_KEY, m_PersonGroupId, value => requestSucceded = value));

        if (requestSucceded)
        {
            Debug.Log("Person group ID exists");

            // Check if the target person is already created. We only need one person for this demo.
            List <PersonInGroup.Person> personList = new List <PersonInGroup.Person>();
            yield return(RequestManager.GetPersonListInGroup(ENDPOINT, API_KEY, m_PersonGroupId, res => m_PersonListInGroupNotEmpty = res, value => personList = value));

            if (personList.Count > 0 && personList[0].personId != null)
            {
                // Check if the target person exists in the list
                bool personFound = false;
                for (int i = 0; i < personList.Count; i++)
                {
                    Debug.Log("name : " + personList[i].name);
                    if (personList[i].name.Equals(m_PersonInGroup))
                    {
                        personFound = true;
                    }
                }

                if (!personFound)
                {
                    yield break;
                }

                string id = personList[0].personId;
                Debug.Log("Person found in group with person Id : " + id);

                // Get training status of the person group
                Training.TrainingStatus trainingSuccess = new Training.TrainingStatus();
                Error.ErrorResponse     resError        = new Error.ErrorResponse();
                bool trained = false;
                yield return(RequestManager.GetPersonGroupTrainingStatus(ENDPOINT, API_KEY, m_PersonGroupId, res => trained = res, err => resError = err, value => trainingSuccess = value));

                // If not trained the add images and detect faces
                if (!trained && resError.error.code != null && resError.error.code.Equals("PersonGroupNotTrained"))
                {
                    // Get all images in the specified folder and detect the faces rectangles in them.
                    string[] imageFiles = Directory.GetFiles(m_ImageFolderPath, "*.jpg");
                    for (int i = 0; i < imageFiles.Length; i++)
                    {
                        bool faceFound = false;
                        List <FacesBasic.FacesDetectionResponse> face = new List <FacesBasic.FacesDetectionResponse>();
                        byte[]    imageByte = File.ReadAllBytes(m_ImageFolderPath + "/me" + (i + 1) + ".jpg");
                        Texture2D img       = new Texture2D(1, 1);
                        img.LoadImage(imageByte);
                        yield return(RequestManager.DetectFaces(ENDPOINT, API_KEY, img, res => faceFound = res, value => face = value));

                        // Register the images to the person in person group
                        if (face[0].rect != null)
                        {
                            // Add face to person in group
                            string    faceRect        = "targetFace=" + face[0].rect.left + "," + face[0].rect.top + "," + face[0].rect.width + "," + face[0].rect.height;
                            string    addFaceResponse = "Unknown";
                            bool      addFaceSuccess  = false;
                            byte[]    imgByte         = File.ReadAllBytes(m_ImageFolderPath + "/me" + (i + 1) + ".jpg");
                            Texture2D curImg          = new Texture2D(1, 1);
                            curImg.LoadImage(imgByte);
                            yield return(RequestManager.AddFaceToPersonInGroup(ENDPOINT, API_KEY, m_PersonGroupId, id, curImg, faceRect, res => addFaceSuccess = res, value => addFaceResponse = value));

                            Debug.Log(addFaceResponse);
                        }
                    }


                    string trainPersonGroupResult = "Unknown";
                    bool   trainingResult         = false;
                    yield return(RequestManager.TrainPersonGroup(ENDPOINT, API_KEY, m_PersonGroupId, res => trainingResult = res, value => trainPersonGroupResult = value));

                    if (trainingResult)
                    {
                        Debug.Log("Training success. Stop and restart app to try identification.");
                    }
                }
                else if (trainingSuccess.status.Equals("succeeded"))
                // Person Group is already trained
                {
                    Debug.Log("PersonGroup is already trained");
                    // Try to detect face in test image
                    string[] testImageFiles = Directory.GetFiles(m_TestImagepath, "*.jpg");

                    for (int i = 0; i < testImageFiles.Length; i++)
                    {
                        Debug.Log(testImageFiles[i]);
                        // Detect faces in the test image
                        bool faceFound = false;
                        List <FacesBasic.FacesDetectionResponse> face = new List <FacesBasic.FacesDetectionResponse>();
                        byte[]    testImgByte = File.ReadAllBytes(testImageFiles[i]);
                        Texture2D testImg     = new Texture2D(1, 1);
                        testImg.LoadImage(testImgByte);
                        yield return(RequestManager.DetectFaces(ENDPOINT, API_KEY, testImg, res => faceFound = res, value => face = value));

                        // Identify faces in the test image
                        bool identified = false;
                        List <IdentifiedFaces.IdentifiedFacesResponse> facesList = new List <IdentifiedFaces.IdentifiedFacesResponse>();
                        string errors = "";
                        yield return(RequestManager.Identify(ENDPOINT, API_KEY, m_PersonGroupId, face.ToArray(), res => identified = res, err => errors = err, value => facesList = value));

                        if (identified)
                        {
                            Debug.Log(facesList);
                        }
                    }
                }
            }
            else
            {
                Debug.Log("Person not found");
                PersonCreateSuccess.PersonCreateSuccessResponse successResponse = new PersonCreateSuccess.PersonCreateSuccessResponse();
                bool createdPerson = false;
                yield return(RequestManager.CreatePersonInGroup(ENDPOINT, API_KEY, m_PersonGroupId, m_PersonInGroup, "First person", res => createdPerson = res, value => successResponse = value));

                if (createdPerson)
                {
                    Debug.Log("Successfully created Person in Group. Stop and restart app to try identification");
                }
                else
                {
                    Debug.Log("Failed to create Person in Group");
                }
            }
        }
        else
        {
            Debug.Log("Person group ID does not exist. Creating Person Group");
            bool createSucceded = false;
            yield return(RequestManager.CreatePersonGroup(ENDPOINT, API_KEY, m_PersonGroupId, "ShinMisato", "Visitors who came to our Shin Misato theme park", value => createSucceded = value));

            if (createSucceded)
            {
                Debug.Log("Successfully created Person Group. Stop and restart app to try performing identification");
            }
            else
            {
                Debug.Log("Failed to create Person Group. Something went wrong. Please debug.");
            }
        }
    }
Esempio n. 5
0
    public IEnumerator CreatePersonInGroup(string personGroup, string name, string userData)
    {
        yield return(RequestManager.CreatePersonInGroup(m_Endpoint, m_ApiKey, personGroup, name, userData, value => personCreated = value, success => m_PersonCreatedSuccess = success));

        if (personCreated && OnPersonCreated != null)
        {
            OnPersonCreated.Invoke(m_PersonCreatedSuccess.personId);
        }
    }