/// <summary>
        /// Pull training photos from a SharePoint list and add them as a dictionary to be used for training purposess.
        /// </summary>
        /// <returns>Dictionary organized by person key of each person with their photos attached.</returns>
        public Dictionary<string, PhotoPerson> getTrainingPhotos()
        {
            Dictionary<string, PhotoPerson> trainingPhotos = new Dictionary<string, PhotoPerson>();

            using (ClientContext context = Login(SharePointURL))
            {
                try
                {
                    var list = context.Web.GetList(TrainingListURL);
                    var query = CamlQuery.CreateAllItemsQuery();

                    var result = list.GetItems(query);
                    ListItemCollection items = list.GetItems(query);
                    context.Load(items, includes => includes.Include(
                        i => i[TrainingPersonIdColumn],
                        i => i[TrainingFileColumn],
                        i => i[TrainingIdColumn]));

                    //now you get the data
                    context.ExecuteQuery();

                    //here you have list items, but not their content (files). To download file
                    //you'll have to do something like this:

                    foreach (ListItem item in items)
                    {
                        PhotoPerson person = null;
                        if (item[TrainingPersonIdColumn] != null)
                        {
                            string fullName = (string)item[TrainingPersonIdColumn];
                            // look for existing person
                            if (trainingPhotos.ContainsKey(fullName))
                            {
                                person = trainingPhotos[fullName];
                            }
                            else
                            {
                                person = new PhotoPerson();
                                person.Name = fullName;
                                person.ID = item.Id;
                            }

                            //get the URL of the file you want:
                            var fileRef = item[TrainingFileColumn];

                            //get the file contents:
                            FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, fileRef.ToString());

                            using (var memory = new MemoryStream())
                            {
                                byte[] buffer = new byte[1024 * 64];
                                int nread = 0;
                                while ((nread = fileInfo.Stream.Read(buffer, 0, buffer.Length)) > 0)
                                {
                                    memory.Write(buffer, 0, nread);
                                }
                                memory.Seek(0, SeekOrigin.Begin);
                                Photo photo = new Photo();
                                photo.ID = item.Id.ToString();
                                photo.Image = memory.ToArray();
                                person.Photos.Add(photo);
                            }

                            trainingPhotos.Add(fullName, person);

                        }

                    }

                }
                catch (Exception e)
                {
                    throw;
                }
            }
            return trainingPhotos;
        }
        /// <summary>
        /// Used for OCR tagger - pulls a generic list of photos with IDs.
        /// </summary>
        /// <returns>List of photos</returns>
        public List<Photo> getPhotosToTag()
        {
            List<Photo> photos = new List<Photo>();

            using (ClientContext context = Login(SharePointURL))
            {
                try
                {
                    var list = context.Web.GetList(PhotosToTagURL);
                    var query = CamlQuery.CreateAllItemsQuery();

                    var result = list.GetItems(query);
                    ListItemCollection items = list.GetItems(query);
                    context.Load(items, includes => includes.Include(
                        i => i[PhotoFileColumn],
                        i => i[PhotoIdColumn]));

                    //now you get the data
                    context.ExecuteQuery();

                    //here you have list items, but not their content (files). To download file
                    //you'll have to do something like this:

                    foreach (ListItem item in items)
                    {
                        Photo photo = new Photo();

                        //get the URL of the file you want:
                        var fileRef = item[PhotoFileColumn];

                        //get the file contents:
                        FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, fileRef.ToString());

                        using (var memory = new MemoryStream())
                        {
                            byte[] buffer = new byte[1024 * 64];
                            int nread = 0;
                            while ((nread = fileInfo.Stream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                memory.Write(buffer, 0, nread);
                            }
                            memory.Seek(0, SeekOrigin.Begin);

                            photo.ID = item.Id.ToString();
                            photo.Image = memory.ToArray();
                            photos.Add(photo);
                        }

                    }

                }
                catch (Exception e)
                {
                    throw;
                }
            }

            return photos;
        }