/// <summary> /// Выделение текста на единичном кадре видеопотока /// </summary> /// <param name="videoFrame">Кадр видео</param> /// <returns>true</returns> public Task<bool> DetectText(GreyVideoFrame videoFrame, int threadsNumber) { try { if (videoFrame == null || videoFrame.Frame == null) throw new ArgumentNullException("Null frame in DetectText"); return Task.Run(() => { if (videoFrame.NeedProcess) { EdgeDetectionFilter sobel = new SobelFilter(); GradientFilter gradientFiler = new SimpleGradientFilter(); SmoothingFilter gauss = null; //new GaussFilter(this.GaussFilterSize, this.GaussFilterSigma); SmoothingFilter gaussForCanny = null; SWTTextDetection sWTTextDetection = null; if (ParametersUndefined(videoFrame)) { if (this.UseAdaptiveSmoothing) gaussForCanny = new AdaptiveGaussFilter(this.GaussFilterSigma); else gaussForCanny = new GaussFilter(this.GaussFilterSize, this.GaussFilterSigma); gauss = new GaussFilter(this.GaussFilterSize, this.GaussFilterSigma); CannyEdgeDetection canny = new CannyEdgeDetection(gaussForCanny, sobel, this.CannyLowTreshold, this.CannyHighTreshold); sWTTextDetection = new SWTTextDetection(canny, gauss, gradientFiler, this.VarienceAverageSWRation, this.AspectRatio, this.DiamiterSWRatio, this.BbPixelsNumberMinRatio, this.BbPixelsNumberMaxRatio, this.ImageRegionHeightRationMin, this.ImageRegionWidthRatioMin, this.PairsHeightRatio, this.PairsIntensityRatio, this.PairsSWRatio, this.PairsWidthDistanceSqrRatio, this.PairsOccupationRatio, this.MinLettersNumberInTextRegion, this.MergeByDirectionAndChainEnds); } else { if (videoFrame.UseAdaptiveSmoothing) gaussForCanny = new AdaptiveGaussFilter(videoFrame.GaussFilterSigma); else gaussForCanny = new GaussFilter(videoFrame.GaussFilterSize, videoFrame.GaussFilterSigma); gauss = new GaussFilter(videoFrame.GaussFilterSize, videoFrame.GaussFilterSigma); CannyEdgeDetection canny = new CannyEdgeDetection(gaussForCanny, sobel, videoFrame.CannyLowTreshold, videoFrame.CannyHighTreshold); sWTTextDetection = new SWTTextDetection(canny, gauss, gradientFiler, videoFrame.VarienceAverageSWRation, videoFrame.AspectRatio, videoFrame.DiamiterSWRatio, videoFrame.BbPixelsNumberMinRatio, videoFrame.BbPixelsNumberMaxRatio, videoFrame.ImageRegionHeightRationMin, videoFrame.ImageRegionWidthRatioMin, videoFrame.PairsHeightRatio, videoFrame.PairsIntensityRatio, videoFrame.PairsSWRatio, videoFrame.PairsWidthDistanceSqrRatio, videoFrame.PairsOccupationRatio, videoFrame.MinLettersNumberInTextRegion, videoFrame.MergeByDirectionAndChainEnds); } sWTTextDetection.DetectText(videoFrame.Frame, threadsNumber); } return true; }); } catch (Exception exception) { throw exception; } }
/// <summary> /// Выделение текста на кд\лючевых кадрах видеоролика /// </summary> /// <param name="video">Видеоролик</param> /// <returns>true</returns> public Task<bool> DetectText(GreyVideo video, int threadsNumber) { try { if (video == null) throw new ArgumentNullException("Null video in DetectText"); if (video.Frames == null) throw new ArgumentNullException("Null video frames in DetectText"); return Task.Run(() => { for (int i = 0; i < video.Frames.Count; i++) if (video.Frames[i].NeedProcess) { EdgeDetectionFilter sobel = new SobelFilter(); SmoothingFilter gauss = new GaussFilter(this.GaussFilterSize, this.GaussFilterSigma); GradientFilter gradientFiler = new SimpleGradientFilter(); CannyEdgeDetection canny = new CannyEdgeDetection(gauss, sobel, this.CannyLowTreshold, this.CannyHighTreshold); SWTTextDetection SWTTextDetection = new SWTTextDetection(canny, null, gradientFiler, this.VarienceAverageSWRation, this.AspectRatio, this.DiamiterSWRatio, this.BbPixelsNumberMinRatio, this.BbPixelsNumberMaxRatio, this.ImageRegionHeightRationMin, this.ImageRegionWidthRatioMin, this.PairsHeightRatio, this.PairsIntensityRatio, this.PairsSWRatio, this.PairsWidthDistanceSqrRatio, this.PairsOccupationRatio, this.MinLettersNumberInTextRegion, this.MergeByDirectionAndChainEnds); SWTTextDetection.DetectText(video.Frames[i].Frame, threadsNumber); } return true; }); } catch (Exception exception) { throw exception; } }
public void TestGaussFilter1() { //arrange GreyImage image = new GreyImage(5, 5); image.Pixels[0, 0].Color.Data = 50; image.Pixels[0, 1].Color.Data = 125; image.Pixels[0, 2].Color.Data = 22; image.Pixels[0, 3].Color.Data = 11; image.Pixels[0, 4].Color.Data = 104; image.Pixels[1, 0].Color.Data = 12; image.Pixels[1, 1].Color.Data = 17; image.Pixels[1, 2].Color.Data = 187; image.Pixels[1, 3].Color.Data = 0; image.Pixels[1, 4].Color.Data = 15; image.Pixels[2, 0].Color.Data = 201; image.Pixels[2, 1].Color.Data = 100; image.Pixels[2, 2].Color.Data = 45; image.Pixels[2, 3].Color.Data = 91; image.Pixels[2, 4].Color.Data = 17; image.Pixels[3, 0].Color.Data = 100; image.Pixels[3, 1].Color.Data = 15; image.Pixels[3, 2].Color.Data = 18; image.Pixels[3, 3].Color.Data = 205; image.Pixels[3, 4].Color.Data = 194; image.Pixels[4, 0].Color.Data = 0; image.Pixels[4, 1].Color.Data = 134; image.Pixels[4, 2].Color.Data = 45; image.Pixels[4, 3].Color.Data = 94; image.Pixels[4, 4].Color.Data = 112; GreyImage patternImage = new GreyImage(5, 5); patternImage.Pixels[0, 0].Color.Data = 50; patternImage.Pixels[0, 1].Color.Data = 125; patternImage.Pixels[0, 2].Color.Data = 22; patternImage.Pixels[0, 3].Color.Data = 11; patternImage.Pixels[0, 4].Color.Data = 104; patternImage.Pixels[1, 0].Color.Data = 12; patternImage.Pixels[1, 1].Color.Data = 17; patternImage.Pixels[1, 2].Color.Data = 187; patternImage.Pixels[1, 3].Color.Data = 0; patternImage.Pixels[1, 4].Color.Data = 15; patternImage.Pixels[2, 0].Color.Data = 201; patternImage.Pixels[2, 1].Color.Data = 100; patternImage.Pixels[2, 2].Color.Data = 77; // changed elem patternImage.Pixels[2, 3].Color.Data = 91; patternImage.Pixels[2, 4].Color.Data = 17; patternImage.Pixels[3, 0].Color.Data = 100; patternImage.Pixels[3, 1].Color.Data = 15; patternImage.Pixels[3, 2].Color.Data = 18; patternImage.Pixels[3, 3].Color.Data = 205; patternImage.Pixels[3, 4].Color.Data = 194; patternImage.Pixels[4, 0].Color.Data = 0; patternImage.Pixels[4, 1].Color.Data = 134; patternImage.Pixels[4, 2].Color.Data = 45; patternImage.Pixels[4, 3].Color.Data = 94; patternImage.Pixels[4, 4].Color.Data = 112; SmoothingFilter gaussFilter = new GaussFilter(5, 1.4); //act gaussFilter.Apply(image); //assert Assert.IsTrue(image.IsEqual(patternImage)); }
public void TestGaussFilter2() { //arrange GreyImage image = new GreyImage(5, 3); SmoothingFilter gaussFilter = new GaussFilter(5, 1.4); //act gaussFilter.Apply(image); }
public void TestGaussFilter5() { //arrange GreyImage image = new GreyImage(10, 7); image.Pixels[0, 0].Color.Data = 50; image.Pixels[0, 1].Color.Data = 125; image.Pixels[0, 2].Color.Data = 22; image.Pixels[0, 3].Color.Data = 110; image.Pixels[0, 4].Color.Data = 104; image.Pixels[0, 5].Color.Data = 11; image.Pixels[0, 6].Color.Data = 104; image.Pixels[0, 7].Color.Data = 111; image.Pixels[0, 8].Color.Data = 104; image.Pixels[0, 9].Color.Data = 248; image.Pixels[1, 0].Color.Data = 122; image.Pixels[1, 1].Color.Data = 17; image.Pixels[1, 2].Color.Data = 187; image.Pixels[1, 3].Color.Data = 0; image.Pixels[1, 4].Color.Data = 158; image.Pixels[1, 5].Color.Data = 12; image.Pixels[1, 6].Color.Data = 174; image.Pixels[1, 7].Color.Data = 187; image.Pixels[1, 8].Color.Data = 230; image.Pixels[1, 9].Color.Data = 152; image.Pixels[2, 0].Color.Data = 201; image.Pixels[2, 1].Color.Data = 100; image.Pixels[2, 2].Color.Data = 45; image.Pixels[2, 3].Color.Data = 91; image.Pixels[2, 4].Color.Data = 17; image.Pixels[2, 5].Color.Data = 201; image.Pixels[2, 6].Color.Data = 101; image.Pixels[2, 7].Color.Data = 145; image.Pixels[2, 8].Color.Data = 191; image.Pixels[2, 9].Color.Data = 178; image.Pixels[3, 0].Color.Data = 100; image.Pixels[3, 1].Color.Data = 15; image.Pixels[3, 2].Color.Data = 18; image.Pixels[3, 3].Color.Data = 205; image.Pixels[3, 4].Color.Data = 194; image.Pixels[3, 5].Color.Data = 140; image.Pixels[3, 6].Color.Data = 131; image.Pixels[3, 7].Color.Data = 18; image.Pixels[3, 8].Color.Data = 201; image.Pixels[3, 9].Color.Data = 194; image.Pixels[4, 0].Color.Data = 0; image.Pixels[4, 1].Color.Data = 134; image.Pixels[4, 2].Color.Data = 45; image.Pixels[4, 3].Color.Data = 94; image.Pixels[4, 4].Color.Data = 196; image.Pixels[4, 5].Color.Data = 0; image.Pixels[4, 6].Color.Data = 134; image.Pixels[4, 7].Color.Data = 134; image.Pixels[4, 8].Color.Data = 94; image.Pixels[4, 9].Color.Data = 110; image.Pixels[5, 0].Color.Data = 100; image.Pixels[5, 1].Color.Data = 132; image.Pixels[5, 2].Color.Data = 220; image.Pixels[5, 3].Color.Data = 13; image.Pixels[5, 4].Color.Data = 0; image.Pixels[5, 5].Color.Data = 0; image.Pixels[5, 6].Color.Data = 48; image.Pixels[5, 7].Color.Data = 154; image.Pixels[5, 8].Color.Data = 11; image.Pixels[5, 9].Color.Data = 111; image.Pixels[6, 0].Color.Data = 89; image.Pixels[6, 1].Color.Data = 34; image.Pixels[6, 2].Color.Data = 132; image.Pixels[6, 3].Color.Data = 58; image.Pixels[6, 4].Color.Data = 96; image.Pixels[6, 5].Color.Data = 97; image.Pixels[6, 6].Color.Data = 0; image.Pixels[6, 7].Color.Data = 57; image.Pixels[6, 8].Color.Data = 57; image.Pixels[6, 9].Color.Data = 200; GreyImage patternImage = new GreyImage(10, 7); patternImage.Pixels[0, 0].Color.Data = 50; patternImage.Pixels[0, 1].Color.Data = 125; patternImage.Pixels[0, 2].Color.Data = 22; patternImage.Pixels[0, 3].Color.Data = 110; patternImage.Pixels[0, 4].Color.Data = 104; patternImage.Pixels[0, 5].Color.Data = 11; patternImage.Pixels[0, 6].Color.Data = 104; patternImage.Pixels[0, 7].Color.Data = 111; patternImage.Pixels[0, 8].Color.Data = 104; patternImage.Pixels[0, 9].Color.Data = 248; patternImage.Pixels[1, 0].Color.Data = 122; patternImage.Pixels[1, 1].Color.Data = 17; patternImage.Pixels[1, 2].Color.Data = 187; patternImage.Pixels[1, 3].Color.Data = 0; patternImage.Pixels[1, 4].Color.Data = 158; patternImage.Pixels[1, 5].Color.Data = 12; patternImage.Pixels[1, 6].Color.Data = 174; patternImage.Pixels[1, 7].Color.Data = 187; patternImage.Pixels[1, 8].Color.Data = 230; patternImage.Pixels[1, 9].Color.Data = 152; patternImage.Pixels[2, 0].Color.Data = 201; patternImage.Pixels[2, 1].Color.Data = 100; patternImage.Pixels[2, 2].Color.Data = 87; patternImage.Pixels[2, 3].Color.Data = 93; patternImage.Pixels[2, 4].Color.Data = 106; patternImage.Pixels[2, 5].Color.Data = 113; patternImage.Pixels[2, 6].Color.Data = 125; patternImage.Pixels[2, 7].Color.Data = 140; patternImage.Pixels[2, 8].Color.Data = 191; patternImage.Pixels[2, 9].Color.Data = 178; patternImage.Pixels[3, 0].Color.Data = 100; patternImage.Pixels[3, 1].Color.Data = 15; patternImage.Pixels[3, 2].Color.Data = 90; patternImage.Pixels[3, 3].Color.Data = 98; patternImage.Pixels[3, 4].Color.Data = 108; patternImage.Pixels[3, 5].Color.Data = 111; patternImage.Pixels[3, 6].Color.Data = 115; patternImage.Pixels[3, 7].Color.Data = 125; patternImage.Pixels[3, 8].Color.Data = 201; patternImage.Pixels[3, 9].Color.Data = 194; patternImage.Pixels[4, 0].Color.Data = 0; patternImage.Pixels[4, 1].Color.Data = 134; patternImage.Pixels[4, 2].Color.Data = 93; patternImage.Pixels[4, 3].Color.Data = 96; patternImage.Pixels[4, 4].Color.Data = 94; patternImage.Pixels[4, 5].Color.Data = 92; patternImage.Pixels[4, 6].Color.Data = 93; patternImage.Pixels[4, 7].Color.Data = 103; patternImage.Pixels[4, 8].Color.Data = 94; patternImage.Pixels[4, 9].Color.Data = 110; patternImage.Pixels[5, 0].Color.Data = 100; patternImage.Pixels[5, 1].Color.Data = 132; patternImage.Pixels[5, 2].Color.Data = 220; patternImage.Pixels[5, 3].Color.Data = 13; patternImage.Pixels[5, 4].Color.Data = 0; patternImage.Pixels[5, 5].Color.Data = 0; patternImage.Pixels[5, 6].Color.Data = 48; patternImage.Pixels[5, 7].Color.Data = 154; patternImage.Pixels[5, 8].Color.Data = 11; patternImage.Pixels[5, 9].Color.Data = 111; patternImage.Pixels[6, 0].Color.Data = 89; patternImage.Pixels[6, 1].Color.Data = 34; patternImage.Pixels[6, 2].Color.Data = 132; patternImage.Pixels[6, 3].Color.Data = 58; patternImage.Pixels[6, 4].Color.Data = 96; patternImage.Pixels[6, 5].Color.Data = 97; patternImage.Pixels[6, 6].Color.Data = 0; patternImage.Pixels[6, 7].Color.Data = 57; patternImage.Pixels[6, 8].Color.Data = 57; patternImage.Pixels[6, 9].Color.Data = 200; GaussFilter gaussFilter = new GaussFilter(5, 1.4); //act image = gaussFilter.Apply(image, 4); //assert Assert.IsTrue(image.IsEqual(patternImage)); }