private async Task Scrap(int index) { SetStatus("Scraping Images..."); Size minSize = new Size(Settings.Default.MinWidth, Settings.Default.MinHeight); ImageScraper.GetImageURLs(urls[index].URL, async(imgUrl, size) => { if (imgUrl == null) { SetStatus("Idle"); return; } if ((size.Width > 0 && size.Width < minSize.Width) || (size.Height > 0 && size.Height < minSize.Height)) { return; } ImageWrapper iw; if (!Cache.Lookup(imgUrl, out iw)) { iw = new ImageWrapper(imgUrl); iw.RecommendationMade += recMade; Cache.Stash(imgUrl, iw); } await iw.RetrieveLabels(); await iw.RetrieveMatches(); urls[index].AddChild(iw); }); }
public void AddChild(ImageWrapper w) { if (children == null) { children = new BindingList <ImageWrapper>(); } children.Add(w); ChildrenUpdated?.Invoke(this); }
private async Task SetSelectedURL(int index) { if (index < urls.Count) { selectedUrlIndex = index; urlGrid.Enabled = imgList.Enabled = false; string url = urls[index].URL; if (urls[index].GetChildren() == null && HttpHelper.IsImage(url)) { ImageWrapper iw; if (!Cache.Lookup(url, out iw)) { SetStatus("Scraping Image..."); iw = new ImageWrapper(url); Cache.Stash(url, iw); SetStatus("Idle"); } else { SetStatus("Cache hit!"); } urls[index].AddChild(iw); iw.RecommendationMade += recMade; await iw.RetrieveLabels(); } else { if (urls[index].GetChildren() == null) { await Scrap(index); } else { imgList.DataSource = urls[index].GetChildren(); await SetSelectedImg(0); } } imgList.DataSource = urls[index].GetChildren(); urlGrid.Enabled = imgList.Enabled = true; } }
private string GetFileName(string path, List <IWMatch> matches, ImageWrapper original) { string[] files = Directory.GetFiles(path); List <string> taken = new List <string>(); taken.AddRange(matches.Select(iw => iw.FilePrefix)); string name = string.Join("_", original.GetLabels().Take(2).Select(x => x.Label)); if (!taken.Contains(name)) { return(name); } int i = 1; while (taken.Contains(name + "(" + i + ")")) { i++; } return(name + "(" + i + ")"); }
public async Task RetrieveMatches() { while (retrievingLabels) { ; } if (retrievingSimilar || labels == null) { return; } retrievingSimilar = true; var list = new List <string>(); list.AddRange(labels.Select(l => l.Label)); bool skip = false; var flist = new List <string>(); foreach (string fl in FileLabels.Split(' ').Take(Settings.Default.FileNameLabels)) { foreach (string label in list) { if (label.Contains(fl)) { skip = true; break; } } if (skip) { break; } flist.Add(fl); } if (!skip) { list.AddRange(flist); } await ImageLookup.GetSimilar(list.ToArray(), async (imgUrl, size) => { if (imgUrl == null) { similarRetrieved = true; if (Labeler.CurrentLabeler.CanRecommend) { var thread = new Thread(() => { var r = Labeler.GetRecommended(img, matches.Take(Settings.Default.RecCap).Select(i => i.GetFullImage()).ToArray()).Result; SetSelectedMatch(r); RecommendationMade?.Invoke(this); }); thread.Start(); } retrievingSimilar = false; return; } //if (size.Width < Settings.Default.MinWidth && size.Height < Settings.Default.MinHeight) return; ImageWrapper iw; if (!Cache.Lookup(imgUrl, out iw)) { iw = new ImageWrapper(imgUrl); Cache.Stash(imgUrl, iw); } matches.Add(iw); SimilarFound?.Invoke(this); }); }