public static Dictionary <string, List <SatyamTaskTableEntry> > OrganizeMTurkTasksByGUID()
        {
            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();

            //get all the MTURK related entries in the task Table
            List <SatyamTaskTableEntry> mturkEntries = new List <SatyamTaskTableEntry>();

            foreach (string taskTemplate in TaskConstants.MTurkTaskTemplates)
            {
                List <SatyamTaskTableEntry> entries = taskDB.getAllEntriesByJobtemplateType(taskTemplate);
                mturkEntries.AddRange(entries);
            }
            taskDB.close();

            if (mturkEntries.Count == 0) //there is nothing to do!!
            {
                return(null);
            }

            //Group them by jobguids since each job can have many tasks
            Dictionary <string, List <SatyamTaskTableEntry> > TasksByGUID = new Dictionary <string, List <SatyamTaskTableEntry> >();

            foreach (SatyamTaskTableEntry entry in mturkEntries)
            {
                string guid = entry.JobGUID;
                if (!TasksByGUID.ContainsKey(entry.JobGUID))
                {
                    TasksByGUID.Add(entry.JobGUID, new List <SatyamTaskTableEntry>());
                }
                TasksByGUID[guid].Add(entry);
            }
            return(TasksByGUID);
        }
Example #2
0
        public static void PopulateTasksIntoTaskTable(SatyamJobSubmissionsTableAccessEntry job)
        {
            List <SatyamTask> tasks = generate(job);

            if (tasks == null)
            {
                return;
            }

            SatyamTaskTableAccess dbAccess = new SatyamTaskTableAccess();

            foreach (SatyamTask task in tasks)
            {
                String   JobTemplateType = job.JobTemplateType;
                String   UserID          = job.UserID;
                String   JobGUID         = job.JobGUID;
                String   JsonString      = JSonUtils.ConvertObjectToJSon <SatyamTask>(task);
                DateTime SubmitTime      = job.JobSubmitTime;
                double   price           = task.jobEntry.amazonHITInformation.Price;
                dbAccess.AddEntry(JobTemplateType, UserID, JobGUID, JsonString, SubmitTime, price);
            }
            dbAccess.close();

            // add the total task number to job submission table
            SatyamJobSubmissionsTableAccess jobDB = new SatyamJobSubmissionsTableAccess();

            jobDB.UpdateEntryProgress(job.JobGUID, tasks.Count.ToString());
            jobDB.close();
        }
        //remove all tasks that have already been aggregated from the task table
        public static void PurgeAllAggregatedTasks()
        {
            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
            //List<int> IDList = taskDB.getAllIDs();
            List <SatyamTaskTableEntry> taskList = taskDB.getAllEntries();

            SatyamAggregatedResultsTableAccess aggDB = new SatyamAggregatedResultsTableAccess();
            List <int> AggIDList = aggDB.getAllTaskIDs();

            //List<SatyamAggregatedResultsTableEntry> aggEntreis = aggDB.getAllEntries();

            foreach (SatyamTaskTableEntry t in taskList)
            {
                int id = t.ID;
                if (!AggIDList.Contains(id))
                {
                    continue;
                }

                //int LatestNumberAggregated = aggDB.getLatestNoResultsAggregatedByTaskID(id);
                //int MinResults = TaskConstants.getMinResultsByTemplate(t.JobTemplateType);

                //if(LatestNumberAggregated >= MinResults)
                //{
                taskDB.DeleteEntry(id);
                //}
            }
            aggDB.close();
            taskDB.close();
        }
Example #4
0
        //ready to Launched status change happens by the AmazonHITTableManager


        //Completed tasks are removed from the TaskTable
        //Thus, we check if tasks are still pernding
        //if not tasks for a GUID are pending its deemed as complete
        //then save the results and chnage status to completed
        public static void processLaunchedJobs()
        {
            SatyamJobSubmissionsTableAccess jobDB = new SatyamJobSubmissionsTableAccess();
            List <string> guidList  = jobDB.getAllJobGUIDSByStatus(JobStatus.launched);
            List <string> readyList = jobDB.getAllJobGUIDSByStatus(JobStatus.ready);

            guidList.AddRange(readyList);


            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();

            foreach (String GUID in guidList)
            {
                if (GUID == "SINGLE_OBJECT_LABLING_DEMO")
                {
                    continue;
                }
                List <int> IDList = taskDB.getAllIDsByGUID(GUID);
                if (IDList.Count == 0)
                {
                    SatyamSaveResults.SaveByGUIDRequester(GUID);
                    SatyamSaveResults.SaveByGUIDSatyam(GUID);
                    SatyamSaveAggregatedResult.SaveByGUIDRequester(GUID);
                    SatyamSaveAggregatedResult.SaveByGUIDSatyam(GUID);
                    jobDB.UpdateEntryStatus(GUID, JobStatus.completed);
                }
            }

            jobDB.close();
            taskDB.close();
        }
Example #5
0
        public static void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, TraceWriter log)
        {
            DateTime start = DateTime.Now;
            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
            List <int>            IDList = taskDB.getAllIDs();

            taskDB.close();

            SatyamAggregatedResultsTableAccess aggDB = new SatyamAggregatedResultsTableAccess();
            List <int> AggIDList = aggDB.getAllTaskIDs();

            aggDB.close();

            foreach (int id in IDList)
            {
                if (AggIDList.Contains(id))
                {
                    taskDB = new SatyamTaskTableAccess();
                    taskDB.DeleteEntry(id);
                    taskDB.close();
                    if ((DateTime.Now - start).TotalSeconds > 280)
                    {
                        break;
                    }
                }
            }
        }
        private bool getNewRandomJob()
        {
            double price   = 0;
            bool   success = Double.TryParse(Hidden_Price.Value, out price);

            if (!success)
            {
                price = 0;
            }
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = null;

            if (SubmitButton.Enabled == true)
            {
                //entry = taskTableDB.getMinimumTriedEntryByTemplateAndPrice(TaskConstants.Counting_Image_MTurk, price);

                entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                                                                                         TaskConstants.Counting_Image_MTurk, price);
            }
            else
            {
                entry = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Counting_Image_MTurk);
            }

            if (entry != null)
            {
                taskTableDB.IncrementDoneScore(entry.ID);
                SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
                string     uri  = task.SatyamURI;
                DisplayImage.ImageUrl = uri;

                SatyamJob jobDefinitionEntry   = task.jobEntry;
                ObjectCountingSubmittedJob job = JSonUtils.ConvertJSonToObject <ObjectCountingSubmittedJob>(jobDefinitionEntry.JobParameters);
                ObjectNameLabel.Text     = job.ObjectName;
                ObjectNameLabel1.Text    = job.ObjectName;
                Hidden_TasksPerJob.Value = jobDefinitionEntry.TasksPerJob.ToString();

                if (job.Description != "")
                {
                    DescriptionPanel.Visible = true;
                    DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
                }

                Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
                Hidden_PageLoadTime.Value    = DateTime.Now.ToString();
                NoLabeled.Text = Hidden_NoImagesDone.Value;
                taskTableDB.close();
                return(true);
            }
            else
            {
                taskTableDB.close();
                return(false);
            }
        }
        public static void UpdateResultNumber(int taskID)
        {
            SatyamResultsTableAccess       resultdb = new SatyamResultsTableAccess();
            List <SatyamResultsTableEntry> res      = resultdb.getEntriesByTaskID(taskID);

            resultdb.close();
            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();

            taskDB.UpdateResultNumber(taskID, res.Count);
            taskDB.close();
        }
        //public static void PurgeAllAggregatedTasks()
        //{
        //    SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
        //    List<int> IDList = taskDB.getAllIDs();

        //    SatyamAggregatedResultsTableAccess aggDB = new SatyamAggregatedResultsTableAccess();
        //    List<int> AggIDList = aggDB.getAllTaskIDs();

        //    foreach (int id in IDList)
        //    {
        //        if (AggIDList.Contains(id))
        //        {
        //            taskDB.DeleteEntry(id);
        //        }
        //    }
        //    aggDB.close();
        //    taskDB.close();
        //}
        public static void UpdateResultNumber()
        {
            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
            List <int>            IDList = taskDB.getAllIDs();

            taskDB.close();

            foreach (int id in IDList)
            {
                UpdateResultNumber(id);
            }
        }
Example #9
0
        //protected void Page_Unload(object sender, EventArgs e)
        //{
        //    if (!DoneFlag)
        //    {
        //        SatyamTaskTableEntry taskEntry = JSonUtils.ConvertJSonToObject<SatyamTaskTableEntry>(Hidden_TaskEntryString.Value);
        //        if (taskEntry == null) return;
        //        // Decrement the DoneScore, releasing token after latest results are saved.
        //        SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
        //        taskTableDB.DecrementDoneScore(taskEntry.ID);
        //        taskTableDB.close();
        //    }
        //}

        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            DateTime SubmitTime   = DateTime.Now;
            DateTime PageLoadTime = Convert.ToDateTime(Hidden_PageLoadTime.Value);

            SatyamTaskTableEntry taskEntry = JSonUtils.ConvertJSonToObject <SatyamTaskTableEntry>(Hidden_TaskEntryString.Value);

            SatyamResult result = new SatyamResult();

            result.TaskParametersString = taskEntry.TaskParametersString;
            result.TaskStartTime        = PageLoadTime;
            result.TaskEndTime          = SubmitTime;
            result.TaskTableEntryID     = taskEntry.ID;

            AmazonTaskResultInfo amazonInfo = new AmazonTaskResultInfo();

            amazonInfo.AssignmentID = "";
            amazonInfo.WorkerID     = "";
            amazonInfo.HITID        = "";

            result.amazonInfo   = amazonInfo;
            result.TaskResult   = Hidden_Result.Value;
            result.PrevResultID = Convert.ToInt32(Hidden_PrevResultID.Value);

            string resultString = JSonUtils.ConvertObjectToJSon <SatyamResult>(result);

            SatyamResultsTableAccess resultdb = new SatyamResultsTableAccess();

            resultdb.AddEntry(taskEntry.JobTemplateType, taskEntry.UserID, taskEntry.JobGUID, resultString, taskEntry.ID, PageLoadTime, SubmitTime);
            resultdb.close();

            SatyamTaskTableManagement.UpdateResultNumber(taskEntry.ID);

            // Decrement the DoneScore, releasing token after latest results are saved.
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();

            //taskTableDB.DecrementDoneScore(taskEntry.ID);
            taskTableDB.UpdateDoneScore(taskEntry.ID, 0);
            taskTableDB.close();

            //DoneFlag = true;

            //bool NotDone = getNewRandomJob();
            //if (NotDone == false)
            //{
            Response.Redirect("AllJobsDone.aspx");
            //}
        }
Example #10
0
        private bool getNewRandomJob()
        {
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Segmentation_Image);

            taskTableDB.close();

            if (entry == null)
            {
                return(false);
            }

            taskTableDB = new SatyamTaskTableAccess();
            taskTableDB.IncrementDoneScore(entry.ID);
            taskTableDB.close();

            SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
            string     uri  = task.SatyamURI;

            TheImage.ImageUrl = uri;

            SatyamJob jobDefinitionEntry      = task.jobEntry;
            ImageSegmentationSubmittedJob job = JSonUtils.ConvertJSonToObject <ImageSegmentationSubmittedJob>(jobDefinitionEntry.JobParameters);

            List <string> categories = job.Categories;

            CategorySelection_RadioButtonList.Items.Clear();
            for (int i = 0; i < categories.Count; i++)
            {
                ListItem l = new ListItem(categories[i]);
                CategorySelection_RadioButtonList.Items.Add(l);
            }

            if (job.Description != "")
            {
                DescriptionPanel.Visible = true;
                DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
            }

            Hidden_BoundaryLines.Value = JSonUtils.ConvertObjectToJSon(job.BoundaryLines);

            Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
            Hidden_PageLoadTime.Value    = DateTime.Now.ToString();

            return(true);
        }
        public static void AdjustTasksByGUID(string guid, double price)
        {
            SatyamTaskTableAccess       taskDB  = new SatyamTaskTableAccess();
            List <SatyamTaskTableEntry> entries = taskDB.getAllEntriesByGUID(guid);

            taskDB.ClearByJobGUID(guid);

            /// update the price and the taskparam...
            foreach (SatyamTaskTableEntry entry in entries)
            {
                int        taskID = entry.ID;
                SatyamTask task   = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
                task.jobEntry.amazonHITInformation.Price = price;
                string newTaskParams = JSonUtils.ConvertObjectToJSon(task);

                taskDB.AddEntryWithSpecificID(taskID, entry.JobTemplateType, entry.UserID, entry.JobGUID, newTaskParams, entry.JobSubmitTime, price);
            }
            taskDB.close();
        }
Example #12
0
        private void populateRows()
        {
            SatyamJobSubmissionsTableAccess             dbaccess = new SatyamJobSubmissionsTableAccess();
            List <SatyamJobSubmissionsTableAccessEntry> entries  = dbaccess.getAllEntriesByUserID(UserId);

            dbaccess.close();
            List <TableRow> rows    = new List <TableRow>();
            int             maxShow = 10;

            for (int i = entries.Count - 1; i >= Math.Max(0, entries.Count - 1 - maxShow); i--)
            {
                TableRow row = new TableRow();
                row.JobGUID         = entries[i].JobGUID;
                row.JobTemplateType = entries[i].JobTemplateType;
                row.JobSubmitTime   = entries[i].JobSubmitTime.ToLocalTime().ToString();
                row.JobStatus       = entries[i].JobStatus;
                SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
                int remainingTasks           = taskDB.getTasksCountByGUID(row.JobGUID);
                taskDB.close();

                row.TaskPending = remainingTasks.ToString();
                if (entries[i].JobProgress == "")
                {
                    row.JobProgress = "1";
                }
                else
                {
                    row.JobProgress = (1 - (double)remainingTasks / Convert.ToDouble(entries[i].JobProgress)).ToString("0.000");
                }


                int totalResults, totalAggregated;
                row.ApprovalRate    = SatyamResultsAnalysis.getPaymentRateByGUID(row.JobGUID, out totalResults, out totalAggregated).ToString("0.000");
                row.TotalResults    = totalResults.ToString();
                row.TotalAggregated = totalAggregated.ToString();

                rows.Add(row);
            }

            rpt.DataSource = rows;
            rpt.DataBind();
        }
        private bool getNewRandomJob()
        {
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Counting_Video);

            if (entry != null)
            {
                taskTableDB.IncrementDoneScore(entry.ID);
                SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
                string     uri  = task.SatyamURI;
                Hidden_VideoURL.Value = uri;

                SatyamJob jobDefinitionEntry   = task.jobEntry;
                ObjectCountingSubmittedJob job = JSonUtils.ConvertJSonToObject <ObjectCountingSubmittedJob>(jobDefinitionEntry.JobParameters);
                ObjectNameLabel.Text  = job.ObjectName;
                ObjectNameLabel1.Text = job.ObjectName;

                if (job.Description != "")
                {
                    DescriptionPanel.Visible = true;
                    DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
                }

                CountTextBox.Text = "";

                Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
                Hidden_PageLoadTime.Value    = DateTime.Now.ToString();

                taskTableDB.close();
                return(true);
            }
            else
            {
                taskTableDB.close();
                return(false);
            }
        }
        private bool getNewRandomJob()
        {
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Tracking);

            if (entry != null)
            {
                taskTableDB.IncrementDoneScore(entry.ID);
                SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);

                SatyamJobStorageAccountAccess satyamStorage = new SatyamJobStorageAccountAccess();
                List <string> ImageURLs = satyamStorage.getURLListOfSubDirectoryByURL(task.SatyamURI);
                //string urls = "";
                //for (int i=0;i<ImageURLs.Count;i++)
                //{
                //    urls += ImageURLs[i];
                //    if (i == ImageURLs.Count - 1) break;
                //    urls += ',';
                //}
                Hidden_ImageURLList.Value = ObjectsToStrings.ListString(ImageURLs, ',');

                SatyamJob jobDefinitionEntry        = task.jobEntry;
                MultiObjectTrackingSubmittedJob job = JSonUtils.ConvertJSonToObject <MultiObjectTrackingSubmittedJob>(jobDefinitionEntry.JobParameters);

                Dictionary <string, List <string> > subcategories = job.Categories;
                List <string> categories = subcategories.Keys.ToList();
                //CategorySelection_RakdioButtonList.Items.Clear();
                for (int i = 0; i < categories.Count; i++)
                {
                    ListItem l = new ListItem(categories[i]);
                    //CategorySelection_RadioButtonList.Items.Add(l);
                }

                if (job.Description != "")
                {
                    //DescriptionPanel.Visible = true;
                    //DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
                }
                //Hidden_BoundaryLines.Value = JSonUtils.ConvertObjectToJSon(job.BoundaryLines);


                Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
                Hidden_PageLoadTime.Value    = DateTime.Now.ToString();


                // pass parameters from old template
                Slug_Hidden.Value          = "null";
                Start_Hidden.Value         = "0";
                Stop_Hidden.Value          = (ImageURLs.Count - 1).ToString();
                Skip_Hidden.Value          = "0";
                PerObject_Hidden.Value     = "0.1";
                Completion_Hidden.Value    = "0.5";
                BlowRadius_Hidden.Value    = "0";
                JobId_Hidden.Value         = "1";
                LabelString_Hidden.Value   = ObjectsToStrings.ListString(categories.ToList(), ',');
                Attributes_Hidden.Value    = ObjectsToStrings.DictionaryStringListString(subcategories, ',', ':', '_');
                Training_Hidden.Value      = "0";
                fps_Hidden.Value           = job.FrameRate.ToString();
                Hidden_ChunkDuration.Value = job.ChunkDuration.ToString();

                var web = new WebClient();
                System.Drawing.Image x = System.Drawing.Image.FromStream(web.OpenRead(ImageURLs[0]));
                ImageWidth_Hidden.Value  = x.Width.ToString();
                ImageHeight_Hidden.Value = x.Height.ToString();

                // image boundary for now
                //string[] region = new string[] { "0-0-1242-0-1242-375-0-375-0-0" };
                string[] region = new string[] { "0-0-" + x.Width + "-0-" + x.Width + "-" + x.Height + "-0-" + x.Height + "-0-0" };
                RegionString_Hidden.Value = ObjectsToStrings.ListString(region, ',');


                taskTableDB.close();
                return(true);
            }
            else
            {
                taskTableDB.close();
                return(false);
            }
        }
Example #15
0
        public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, TraceWriter log)
        {
            DateTime start   = DateTime.Now;
            bool     logging = false;

            if (logging)
            {
                log.Info($"DisposalDispatch executed at: {DateTime.Now}");
            }


            SatyamAmazonHITTableAccess hitDB = new SatyamAmazonHITTableAccess();
            // first try and remove all the expired entries
            List <SatyamAmazonHITTableAccessEntry> expiredHitEntries = hitDB.getAllEntriesByStatus(HitStatus.expired);

            hitDB.close();
            /// dispatch into the queue
            SatyamDispatchStorageAccountAccess satyamQueue = new SatyamDispatchStorageAccountAccess();

            foreach (SatyamAmazonHITTableAccessEntry expiredEntry in expiredHitEntries)
            {
                if (logging)
                {
                    log.Info($"Dispatching Disposal for {expiredEntry.HITID}");
                }
                string queueName = "hit-disposal";
                string m         = JSonUtils.ConvertObjectToJSon(expiredEntry);
                satyamQueue.Enqueue(queueName, m);

                if ((DateTime.Now - start).TotalSeconds > 280)
                {
                    return;
                }
            }

            hitDB = new SatyamAmazonHITTableAccess();
            List <SatyamAmazonHITTableAccessEntry> hitEntriesPending   = hitDB.getAllEntriesByStatus(HitStatus.pending);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesSubmitted = hitDB.getAllEntriesByStatus(HitStatus.submitted);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesAccepted  = hitDB.getAllEntriesByStatus(HitStatus.accepted);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesRejected  = hitDB.getAllEntriesByStatus(HitStatus.rejected);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesTaken     = hitDB.getAllEntriesByStatus(HitStatus.taken);
            //hitDB.close();

            List <SatyamAmazonHITTableAccessEntry> hitEntries = new List <SatyamAmazonHITTableAccessEntry>();

            hitEntries.AddRange(hitEntriesPending);
            hitEntries.AddRange(hitEntriesSubmitted);
            hitEntries.AddRange(hitEntriesAccepted);
            hitEntries.AddRange(hitEntriesRejected);
            hitEntries.AddRange(hitEntriesTaken);


            if (hitEntries.Count == 0)
            {
                return;
            }

            //Group them by jobguids since each job can have many tasks
            Dictionary <string, List <SatyamAmazonHITTableAccessEntry> > HITSByGUID = new Dictionary <string, List <SatyamAmazonHITTableAccessEntry> >();

            foreach (SatyamAmazonHITTableAccessEntry hitEntry in hitEntries)
            {
                if (hitEntry.EntryExpired())
                {
                    //hitDB = new SatyamAmazonHITTableAccess();
                    hitDB.UpdateStatus(hitEntry.ID, HitStatus.expired);
                    //hitDB.close();
                }

                string guid = hitEntry.JobGUID;
                if (!HITSByGUID.ContainsKey(hitEntry.JobGUID))
                {
                    HITSByGUID.Add(hitEntry.JobGUID, new List <SatyamAmazonHITTableAccessEntry>());
                }
                HITSByGUID[guid].Add(hitEntry);

                if ((DateTime.Now - start).TotalSeconds > 280)
                {
                    break;
                }
            }
            hitDB.close();

            //now check if this guid has any entries in the task table
            List <string> guids = HITSByGUID.Keys.ToList();



            foreach (string guid in guids)
            {
                SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();
                int noTasks = taskDB.getTasksCountByGUID(guid);
                taskDB.close();
                if (noTasks == 0)//remove these additional HITS from the system
                {
                    List <SatyamAmazonHITTableAccessEntry> hitEntriesToBeRemoved = HITSByGUID[guid];
                    foreach (SatyamAmazonHITTableAccessEntry hitEntryToBeRemoved in hitEntriesToBeRemoved)
                    {
                        if (logging)
                        {
                            log.Info($"Dispatching Disposal for {hitEntryToBeRemoved.HITID}");
                        }
                        string queueName = "hit-disposal";
                        string m         = JSonUtils.ConvertObjectToJSon(hitEntryToBeRemoved);
                        satyamQueue.Enqueue(queueName, m);
                        if ((DateTime.Now - start).TotalSeconds > 280)
                        {
                            break;
                        }
                    }
                }
                if ((DateTime.Now - start).TotalSeconds > 280)
                {
                    break;
                }
            }



            if (logging)
            {
                log.Info($"DisposalDispatch finished at: {DateTime.Now}");
            }
        }
        private bool getNewRandomJob()
        {
            double price   = 0;
            bool   success = Double.TryParse(Hidden_Price.Value, out price);

            if (!success)
            {
                price = 0;
            }
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = null;

            if (SubmitButton.Enabled == true)
            {
                //entry = taskTableDB.getMinimumTriedEntryByTemplateAndPrice("SINGLE_OBJECT_LABLING_MTURK", price);
                entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                                                                                         TaskConstants.Classification_Video_MTurk, price);
            }
            else
            {
                entry = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Classification_Video_MTurk);
            }
            if (entry != null)
            {
                taskTableDB.IncrementDoneScore(entry.ID);


                SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
                string     uri  = task.SatyamURI;
                Hidden_VideoURL.Value = uri;

                SatyamJob jobDefinitionEntry         = task.jobEntry;
                SingleObjectLabelingSubmittedJob job = JSonUtils.ConvertJSonToObject <SingleObjectLabelingSubmittedJob>(jobDefinitionEntry.JobParameters);
                List <string> categories             = job.Categories;
                CategorySelection_RadioButtonList.Items.Clear();
                for (int i = 0; i < categories.Count; i++)
                {
                    ListItem l = new ListItem(categories[i]);
                    CategorySelection_RadioButtonList.Items.Add(l);
                }

                if (job.Description != "")
                {
                    DescriptionPanel.Visible = true;
                    DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
                    //DescriptionLabel.Text = job.Description;
                }

                Hidden_TasksPerJob.Value = jobDefinitionEntry.TasksPerJob.ToString();

                Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
                Hidden_PageLoadTime.Value    = DateTime.Now.ToString();
                NoLabeled.Text = Hidden_NoImagesDone.Value;
                taskTableDB.close();
                return(true);
            }
            else
            {
                taskTableDB.close();
                return(false);
            }
        }
        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            DateTime SubmitTime   = DateTime.Now;
            DateTime PageLoadTime = Convert.ToDateTime(Hidden_PageLoadTime.Value);

            SatyamTaskTableEntry taskEntry = JSonUtils.ConvertJSonToObject <SatyamTaskTableEntry>(Hidden_TaskEntryString.Value);

            SatyamResult result = new SatyamResult();

            result.TaskParametersString = taskEntry.TaskParametersString;
            result.TaskStartTime        = PageLoadTime;
            result.TaskEndTime          = SubmitTime;
            result.TaskTableEntryID     = taskEntry.ID;

            AmazonTaskResultInfo amazonInfo = new AmazonTaskResultInfo();

            amazonInfo.AssignmentID = Hidden_AmazonAssignmentID.Value;
            amazonInfo.WorkerID     = Hidden_AmazonWorkerID.Value;
            amazonInfo.HITID        = Hidden_HITID.Value;
            amazonInfo.PricePerHIT  = Convert.ToDouble(Hidden_Price.Value);

            result.amazonInfo   = amazonInfo;
            result.TaskResult   = Hidden_Result.Value;
            result.PrevResultID = Convert.ToInt32(Hidden_PrevResultID.Value);

            string resultString = JSonUtils.ConvertObjectToJSon <SatyamResult>(result);

            SatyamResultsTableAccess resultdb = new SatyamResultsTableAccess();

            resultdb.AddEntry(taskEntry.JobTemplateType, taskEntry.UserID, taskEntry.JobGUID, resultString, taskEntry.ID, PageLoadTime, SubmitTime);
            resultdb.close();

            SatyamTaskTableManagement.UpdateResultNumber(taskEntry.ID);

            // Decrement the DoneScore, releasing token after latest results are saved.
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();

            //taskTableDB.DecrementDoneScore(taskEntry.ID);
            taskTableDB.UpdateDoneScore(taskEntry.ID, 0);
            taskTableDB.close();

            int noDone = Convert.ToInt32(Hidden_NoImagesDone.Value);

            noDone++;
            Hidden_NoImagesDone.Value = noDone.ToString();

            int noTasksPerJob = Convert.ToInt32(Hidden_TasksPerJob.Value);

            bool NotDone = false;

            //if (noDone < noTasksPerJob)
            //{
            //    NotDone = getNewRandomJob();
            //}
            if (NotDone == false)
            {
                if (!Testing)
                {
                    SatyamAmazonHITTableAccess HITdb = new SatyamAmazonHITTableAccess();
                    string HITID = result.amazonInfo.HITID;
                    HITdb.UpdateStatusByHITID(HITID, HitStatus.submitted);
                    HITdb.close();
                    AmazonMTurkNotification.submitAmazonTurkHit(result.amazonInfo.AssignmentID, result.amazonInfo.WorkerID, false);
                }

                Response.Redirect("MTurkTaskDonePage.aspx");
            }
        }
        private bool getNewRandomJob()
        {
            double price   = 0;
            bool   success = Double.TryParse(Hidden_Price.Value, out price);

            if (!success)
            {
                price = 0;
            }
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = null;

            //Thread.Sleep(5000);
            int maxDoneScore = TaskConstants.MULTI_OBJECT_LOCALIZATION_AND_LABLING_MAX_DONE_SCORE;

            if (SubmitButton.Enabled == true)
            {
                //entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                //    TaskConstants.Detection_Image_MTurk, price);
                entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPriceAndMaxDoneScore(Hidden_AmazonWorkerID.Value,
                                                                                                        TaskConstants.Detection_Image_MTurk, price, MaxDoneScore: maxDoneScore);
            }
            else
            {
                //entry = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Detection_Image_MTurk);
                entry = taskTableDB.getMinimumTriedEntryByTemplateAndMaxDoneScore(TaskConstants.Detection_Image_MTurk, MaxDoneScore: maxDoneScore);
            }

            if (entry == null)
            {
                taskTableDB.close();
                return(false);
            }
            //doneScore = entry.DoneScore;
            //taskTableDB.IncrementDoneScore(entry.ID);
            taskTableDB.close();

            SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
            string     uri  = task.SatyamURI;

            DisplayImage.ImageUrl = uri;

            SatyamJob jobDefinitionEntry = task.jobEntry;
            MultiObjectLocalizationAndLabelingSubmittedJob job = JSonUtils.ConvertJSonToObject <MultiObjectLocalizationAndLabelingSubmittedJob>(jobDefinitionEntry.JobParameters);

            List <string> categories = job.Categories;

            CategorySelection_RadioButtonList.Items.Clear();
            for (int i = 0; i < categories.Count; i++)
            {
                ListItem l = new ListItem(categories[i]);
                CategorySelection_RadioButtonList.Items.Add(l);
            }

            if (job.Description != "")
            {
                DescriptionPanel.Visible = true;
                DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
            }

            Hidden_BoundaryLines.Value = JSonUtils.ConvertObjectToJSon(job.BoundaryLines);

            Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
            Hidden_PageLoadTime.Value    = DateTime.Now.ToString();
            NoLabeled.Text           = Hidden_NoImagesDone.Value;
            Hidden_TasksPerJob.Value = jobDefinitionEntry.TasksPerJob.ToString();

            /////////////////////////////////Load Previous Turker Results
            //MultiObjectLocalizationAndLabelingResult res = LoadLatestTurkerResult(entry);

            ///////////////////////////////Load Previous Aggregation Results
            MultiObjectLocalizationAndLabelingResult res = LoadLatestProgressiveAggregationResult(entry);

            //TFServing Backend
            if (res == null && TFServingBackend)
            {
                res = LoadTFServingResult(entry);
                Hidden_PrevResultID.Value = "-1"; // means TF
            }

            if (res == null)
            {
                Hidden_PrevResults.Value  = "[]";
                Hidden_PrevResultID.Value = 0.ToString();
            }
            else
            {
                string prevBoxes = JSonUtils.ConvertObjectToJSon(res.objects);
                Hidden_ImageHeight.Value = res.imageHeight.ToString();
                Hidden_ImageWidth.Value  = res.imageWidth.ToString();
                Hidden_PrevResults.Value = prevBoxes;
            }
            return(true);
        }
Example #19
0
        private bool getNewRandomJob()
        {
            double price   = 0;
            bool   success = Double.TryParse(Hidden_Price.Value, out price);

            if (!success)
            {
                price = 0;
            }
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = null;

            if (Submit_Button.Enabled == true)
            {
                //entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                //    TaskConstants.TrackletLabeling_MTurk, price);
                entry = taskTableDB.getTopKNewEntryForWorkerIDByTemplateAndPrice(50, Hidden_AmazonWorkerID.Value,
                                                                                 TaskConstants.TrackletLabeling_MTurk, price);
            }
            else
            {
                entry = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.TrackletLabeling_MTurk);
            }

            taskTableDB.close();


            if (entry == null)
            {
                return(false);
            }
            taskTableDB = new SatyamTaskTableAccess();
            taskTableDB.IncrementDoneScore(entry.ID);
            taskTableDB.close();

            SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);

            SatyamJobStorageAccountAccess satyamStorage = new SatyamJobStorageAccountAccess();

            string        videoDir  = URIUtilities.localDirectoryFullPathFromURI(task.SatyamURI);
            List <string> ImageURLs = satyamStorage.getURLListOfSpecificExtensionUnderSubDirectoryByURI(videoDir, new List <string>()
            {
                "jpg"
            });

            string annotationFilePath = task.SatyamURI;

            //string urls = "";
            //for (int i=0;i<ImageURLs.Count;i++)
            //{
            //    urls += ImageURLs[i];
            //    if (i == ImageURLs.Count - 1) break;
            //    urls += ',';
            //}
            Hidden_ImageURLList.Value = ObjectsToStrings.ListString(ImageURLs, ',');

            SatyamJob jobDefinitionEntry        = task.jobEntry;
            MultiObjectTrackingSubmittedJob job = JSonUtils.ConvertJSonToObject <MultiObjectTrackingSubmittedJob>(jobDefinitionEntry.JobParameters);

            Dictionary <string, List <string> > subcategories = job.Categories;
            List <string> categories = subcategories.Keys.ToList();

            //CategorySelection_RakdioButtonList.Items.Clear();
            for (int i = 0; i < categories.Count; i++)
            {
                ListItem l = new ListItem(categories[i]);
                //CategorySelection_RadioButtonList.Items.Add(l);
            }

            if (job.Description != "")
            {
                //DescriptionPanel.Visible = true;
                //DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
            }
            //Hidden_BoundaryLines.Value = JSonUtils.ConvertObjectToJSon(job.BoundaryLines);


            Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
            Hidden_PageLoadTime.Value    = DateTime.Now.ToString();


            // pass parameters from old template
            Slug_Hidden.Value          = "null";
            Start_Hidden.Value         = "0";
            Stop_Hidden.Value          = (ImageURLs.Count - 1).ToString();
            Skip_Hidden.Value          = "0";
            PerObject_Hidden.Value     = "0.1";
            Completion_Hidden.Value    = "0.5";
            BlowRadius_Hidden.Value    = "0";
            JobId_Hidden.Value         = "1";
            LabelString_Hidden.Value   = ObjectsToStrings.ListString(categories.ToList(), ',');
            Attributes_Hidden.Value    = ObjectsToStrings.DictionaryStringListString(subcategories, ',', ':', '_');
            Training_Hidden.Value      = "0";
            fps_Hidden.Value           = job.FrameRate.ToString();
            Hidden_ChunkDuration.Value = job.ChunkDuration.ToString();

            var web = new WebClient();

            System.Drawing.Image x = System.Drawing.Image.FromStream(web.OpenRead(ImageURLs[0]));
            ImageWidth_Hidden.Value  = x.Width.ToString();
            ImageHeight_Hidden.Value = x.Height.ToString();

            // image boundary for now
            //string[] region = new string[] { "0-0-1242-0-1242-375-0-375-0-0" };
            string[] region = new string[] { "0-0-" + x.Width + "-0-" + x.Width + "-" + x.Height + "-0-" + x.Height + "-0-0" };
            RegionString_Hidden.Value = ObjectsToStrings.ListString(region, ',');

            // temp test
            List <VATIC_Tracklet> prevTracesTemp = new List <VATIC_Tracklet>();

            WebClient     client = new WebClient();
            Stream        stream = client.OpenRead(annotationFilePath);
            StreamReader  reader = new StreamReader(stream);
            List <string> trace  = new List <string>();

            while (reader.Peek() >= 0)
            {
                string content = reader.ReadLine();
                trace.Add(content);
            }


            Dictionary <string, VATIC_Tracklet> tracklets = VATIC_Tracklet.ReadTrackletsFromVIRAT(trace);

            foreach (string id in tracklets.Keys)
            {
                //string output = JSonUtils.ConvertObjectToJSon(tracklets[id]);
                prevTracesTemp.Add(tracklets[id]);
            }
            string output = JSonUtils.ConvertObjectToJSon(prevTracesTemp);

            PreviousTrackString_Hidden.Value = output;

            return(true);
        }
        //makes sure that unneccesary HITS- those jobs that are completed are removed
        //go to HIT Table check if there any pending HITS for which the jobGUID does exist in the taskTable
        public static void ClearHITSFromAmazon()
        {
            int succCount = 0;
            int failCount = 0;
            SatyamAmazonHITTableAccess hitDB = new SatyamAmazonHITTableAccess();
            //first try and remove all the expired entries
            List <SatyamAmazonHITTableAccessEntry> expiredHitEntries = hitDB.getAllEntriesByStatus(HitStatus.expired);
            AmazonMTurkHIT hit = new AmazonMTurkHIT();

            foreach (SatyamAmazonHITTableAccessEntry expiredEntry in expiredHitEntries)
            {
                //hit.setAccount(expiredEntry.AmazonAccessKeyID, expiredEntry.AmazonSecretAccessKeyID, false);
                //if (hit.DeleteHIT(expiredEntry.HITID))
                //{
                //    hitDB.DeleteEntry(expiredEntry.ID);
                //}
                bool succ = SafeDeleteHit(expiredEntry);
                if (succ)
                {
                    succCount++;
                }
                else
                {
                    failCount++;
                }
                Console.WriteLine("Succ: {0}, Fail: {1}", succCount, failCount);
            }


            List <SatyamAmazonHITTableAccessEntry> hitEntriesPending   = hitDB.getAllEntriesByStatus(HitStatus.pending);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesSubmitted = hitDB.getAllEntriesByStatus(HitStatus.submitted);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesAccepted  = hitDB.getAllEntriesByStatus(HitStatus.accepted);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesRejected  = hitDB.getAllEntriesByStatus(HitStatus.rejected);
            List <SatyamAmazonHITTableAccessEntry> hitEntriesTaken     = hitDB.getAllEntriesByStatus(HitStatus.taken);

            List <SatyamAmazonHITTableAccessEntry> hitEntries = new List <SatyamAmazonHITTableAccessEntry>();

            hitEntries.AddRange(hitEntriesPending);
            hitEntries.AddRange(hitEntriesSubmitted);
            hitEntries.AddRange(hitEntriesAccepted);
            hitEntries.AddRange(hitEntriesRejected);
            hitEntries.AddRange(hitEntriesTaken);

            hitDB.close();

            if (hitEntries.Count == 0)
            {
                return;
            }

            //Group them by jobguids since each job can have many tasks
            Dictionary <string, List <SatyamAmazonHITTableAccessEntry> > HITSByGUID = new Dictionary <string, List <SatyamAmazonHITTableAccessEntry> >();

            foreach (SatyamAmazonHITTableAccessEntry hitEntry in hitEntries)
            {
                // if launched for too long, auto expire
                if (hitEntry.EntryExpired())
                {
                    hitDB = new SatyamAmazonHITTableAccess();
                    hitDB.UpdateStatus(hitEntry.ID, HitStatus.expired);
                    hitDB.close();
                }

                // categorize by guid
                string guid = hitEntry.JobGUID;
                if (!HITSByGUID.ContainsKey(hitEntry.JobGUID))
                {
                    HITSByGUID.Add(hitEntry.JobGUID, new List <SatyamAmazonHITTableAccessEntry>());
                }
                HITSByGUID[guid].Add(hitEntry);
            }

            //now check if this guid has any entries in the task table
            List <string> guids = HITSByGUID.Keys.ToList();

            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();

            foreach (string guid in guids)
            {
                int noTasks = taskDB.getTasksCountByGUID(guid);
                if (noTasks == 0)//remove these additional HITS from the system
                {
                    List <SatyamAmazonHITTableAccessEntry> hitEntriesToBeRemoved = HITSByGUID[guid];
                    hit = new AmazonMTurkHIT();
                    hit.setAccount(hitEntriesToBeRemoved[0].AmazonAccessKeyID, hitEntriesToBeRemoved[0].AmazonSecretAccessKeyID, false);
                    foreach (SatyamAmazonHITTableAccessEntry hitEntryToBeRemoved in hitEntriesToBeRemoved)
                    {
                        //if (!hit.DeleteHIT(hitEntryToBeRemoved.HITID))
                        //{
                        //    try
                        //    {
                        //        hit.expireHIT(hitEntryToBeRemoved.HITID);
                        //    }
                        //    catch
                        //    {
                        //        Console.WriteLine("HIT already expired?");
                        //    }
                        //    hitDB = new SatyamAmazonHITTableAccess();
                        //    hitDB.UpdateStatus(hitEntryToBeRemoved.ID, HitStatus.expired);
                        //    hitDB.close();
                        //}
                        //else
                        //{
                        //    hitDB = new SatyamAmazonHITTableAccess();
                        //    hitDB.DeleteEntry(hitEntryToBeRemoved.ID);
                        //    hitDB.close();
                        //}
                        bool succ = SafeDeleteHit(hitEntryToBeRemoved);
                        if (succ)
                        {
                            succCount++;
                        }
                        else
                        {
                            failCount++;
                            //TODO: auto decide pay or reject
                        }
                        Console.WriteLine("Succ: {0}, Fail: {1}", succCount, failCount);
                    }
                }
            }
            taskDB.close();
        }
Example #21
0
        // If the results were not good enough, or aggregation method changed, retargeted, users might want to reopen the job
        // All we need to do: (IN STRICT ORDER)

        //      clear all results back to inconclusive,
        //      remove all aggregated results
        //      restore the task table as it was for the guid,
        //      change the job status back to launched, and
        // WARNING:
        //      for safety, this has to be run atomically synchronously, without any parallel process. for now.
        public static void reopenJobForMoreResults(string guid)
        {
            SatyamJobSubmissionsTableAccess      jobDB    = new SatyamJobSubmissionsTableAccess();
            SatyamJobSubmissionsTableAccessEntry jobEntry = jobDB.getEntryByJobGIUD(guid);

            jobDB.close();

            if (jobEntry.JobStatus != JobStatus.completed)
            {
                Console.WriteLine("Job not completed yet!");
                return;
            }

            SatyamAggregatedResultsTableAccess aggResultDB = new SatyamAggregatedResultsTableAccess();
            bool delSuccess = aggResultDB.DeleteEntriesByGUID(guid);

            aggResultDB.close();
            if (!delSuccess)
            {
                Console.WriteLine("Delete Agg Result DB Failed");
                return;
            }

            SatyamResultsTableAccess resultDB = new SatyamResultsTableAccess();

            if (!resultDB.UpdateStatusByGUID(guid, ResultStatus.inconclusive))
            {
                Console.WriteLine("Update Result DB Failed");
                //resultDB.close();
                //return;
            }


            List <SatyamResultsTableEntry> results = resultDB.getEntriesByGUID(guid);

            resultDB.close();
            Dictionary <int, SatyamTask> taskParamsByTaskID = new Dictionary <int, SatyamTask>();

            foreach (SatyamResultsTableEntry result in results)
            {
                if (taskParamsByTaskID.ContainsKey(result.SatyamTaskTableEntryID))
                {
                    continue;
                }

                SatyamResult satyamRes = JSonUtils.ConvertJSonToObject <SatyamResult>(result.ResultString);
                SatyamTask   task      = JSonUtils.ConvertJSonToObject <SatyamTask>(satyamRes.TaskParametersString);
                taskParamsByTaskID.Add(result.SatyamTaskTableEntryID, task);
            }

            SatyamTaskTableAccess taskDB = new SatyamTaskTableAccess();

            foreach (int taskID in taskParamsByTaskID.Keys)
            {
                SatyamTask task = taskParamsByTaskID[taskID];
                SatyamJob  job  = task.jobEntry;
                bool       suc  = taskDB.AddEntryWithSpecificID(taskID, job.JobTemplateType, job.UserID, job.JobGUIDString, JSonUtils.ConvertObjectToJSon(task),
                                                                job.JobSubmitTime, job.amazonHITInformation.Price);
                if (!suc)
                {
                    Console.WriteLine("Update Task Table Failed");
                    taskDB.close();
                    return;
                }
            }
            taskDB.close();

            jobDB = new SatyamJobSubmissionsTableAccess();
            bool success = jobDB.UpdateEntryStatus(guid, JobStatus.launched);

            jobDB.close();
            if (!success)
            {
                Console.WriteLine("Update Job Entry Failed");
                return;
            }
        }
        private bool getNewRandomJob()
        {
            double price   = 0;
            bool   success = Double.TryParse(Hidden_Price.Value, out price);

            if (!success)
            {
                price = 0;
            }
            SatyamTaskTableAccess taskTableDB = new SatyamTaskTableAccess();
            SatyamTaskTableEntry  entry       = null;

            //Thread.Sleep(5000);

            if (SubmitButton.Enabled == true)
            {
                //entry = taskTableDB.getMinimumTriedEntryByTemplateAndPrice(TaskConstants.Detection_Image_MTurk, price);
                //entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                //    TaskConstants.Detection_Image_MTurk, price, doneScore);
                entry = taskTableDB.getMinimumTriedNewEntryForWorkerIDByTemplateAndPrice(Hidden_AmazonWorkerID.Value,
                                                                                         TaskConstants.Segmentation_Image_MTurk, price);
            }
            else
            {
                entry = taskTableDB.getMinimumTriedEntryByTemplate(TaskConstants.Segmentation_Image_MTurk);
            }
            taskTableDB.close();

            if (entry == null)
            {
                return(false);
            }

            taskTableDB = new SatyamTaskTableAccess();
            taskTableDB.IncrementDoneScore(entry.ID);
            taskTableDB.close();

            SatyamTask task = JSonUtils.ConvertJSonToObject <SatyamTask>(entry.TaskParametersString);
            string     uri  = task.SatyamURI;

            TheImage.ImageUrl = uri;

            SatyamJob jobDefinitionEntry      = task.jobEntry;
            ImageSegmentationSubmittedJob job = JSonUtils.ConvertJSonToObject <ImageSegmentationSubmittedJob>(jobDefinitionEntry.JobParameters);

            List <string> categories = job.Categories;

            CategorySelection_RadioButtonList.Items.Clear();
            for (int i = 0; i < categories.Count; i++)
            {
                ListItem l = new ListItem(categories[i]);
                CategorySelection_RadioButtonList.Items.Add(l);
            }

            if (job.Description != "")
            {
                DescriptionPanel.Visible = true;
                DescriptionTextPanel.Controls.Add(new LiteralControl(job.Description));
            }

            Hidden_BoundaryLines.Value = JSonUtils.ConvertObjectToJSon(job.BoundaryLines);

            Hidden_TaskEntryString.Value = JSonUtils.ConvertObjectToJSon <SatyamTaskTableEntry>(entry);
            Hidden_PageLoadTime.Value    = DateTime.Now.ToString();

            return(true);
        }