diff --git a/TestsProject/TestsProject.xcodeproj/project.pbxproj b/TestsProject/TestsProject.xcodeproj/project.pbxproj index fd042e80..57551ee2 100644 --- a/TestsProject/TestsProject.xcodeproj/project.pbxproj +++ b/TestsProject/TestsProject.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 41184B591A3EFD41007F5923 /* tessdata in Resources */ = {isa = PBXBuildFile; fileRef = 41184B551A3EFCAD007F5923 /* tessdata */; }; 412E9EAB1A44316C007DDAA5 /* well_scaned_page.png in Resources */ = {isa = PBXBuildFile; fileRef = 412E9EAA1A44316C007DDAA5 /* well_scaned_page.png */; }; 412E9EAD1A45872A007DDAA5 /* image_sample_bl.png in Resources */ = {isa = PBXBuildFile; fileRef = 412E9EAC1A45872A007DDAA5 /* image_sample_bl.png */; }; + 4141211E1A4B1E3900583ED4 /* image_blank.png in Resources */ = {isa = PBXBuildFile; fileRef = 4141211D1A4B1E3900583ED4 /* image_blank.png */; }; 41C68DAF1A41825500848AE1 /* UIImage+G8Equal.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C68DAE1A41825500848AE1 /* UIImage+G8Equal.m */; }; 41C68DB31A41849100848AE1 /* image_sample.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 41C68DB21A41849100848AE1 /* image_sample.jpg */; }; 41C68DB51A41854600848AE1 /* image_sample_tr.png in Resources */ = {isa = PBXBuildFile; fileRef = 41C68DB41A41854600848AE1 /* image_sample_tr.png */; }; @@ -60,6 +61,7 @@ 41184B551A3EFCAD007F5923 /* tessdata */ = {isa = PBXFileReference; lastKnownFileType = folder; name = tessdata; path = TestsProjectTests/tessdata; sourceTree = SOURCE_ROOT; }; 412E9EAA1A44316C007DDAA5 /* well_scaned_page.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = well_scaned_page.png; sourceTree = ""; }; 412E9EAC1A45872A007DDAA5 /* image_sample_bl.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image_sample_bl.png; sourceTree = ""; }; + 4141211D1A4B1E3900583ED4 /* image_blank.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image_blank.png; sourceTree = ""; }; 41C68DAD1A41825500848AE1 /* UIImage+G8Equal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+G8Equal.h"; sourceTree = ""; }; 41C68DAE1A41825500848AE1 /* UIImage+G8Equal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+G8Equal.m"; sourceTree = ""; }; 41C68DB21A41849100848AE1 /* image_sample.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image_sample.jpg; sourceTree = ""; }; @@ -175,6 +177,7 @@ 41C68DB21A41849100848AE1 /* image_sample.jpg */, 41C68DB41A41854600848AE1 /* image_sample_tr.png */, 412E9EAC1A45872A007DDAA5 /* image_sample_bl.png */, + 4141211D1A4B1E3900583ED4 /* image_blank.png */, ); name = Images; sourceTree = ""; @@ -274,6 +277,7 @@ 41C68DB31A41849100848AE1 /* image_sample.jpg in Resources */, 4115B96C1A3EF8E90004EC0A /* Images.xcassets in Resources */, 4115B9851A3EF9920004EC0A /* Launch Screen.xib in Resources */, + 4141211E1A4B1E3900583ED4 /* image_blank.png in Resources */, 41C68DB51A41854600848AE1 /* image_sample_tr.png in Resources */, 41184B591A3EFD41007F5923 /* tessdata in Resources */, 412E9EAD1A45872A007DDAA5 /* image_sample_bl.png in Resources */, diff --git a/TestsProject/TestsProject/image_blank.png b/TestsProject/TestsProject/image_blank.png new file mode 100644 index 00000000..a2c275a2 Binary files /dev/null and b/TestsProject/TestsProject/image_blank.png differ diff --git a/TestsProject/TestsProject/image_sample_tr.png b/TestsProject/TestsProject/image_sample_tr.png index 63e8bff8..0cfc9749 100644 Binary files a/TestsProject/TestsProject/image_sample_tr.png and b/TestsProject/TestsProject/image_sample_tr.png differ diff --git a/TestsProject/TestsProjectTests/RecognitionTests.m b/TestsProject/TestsProjectTests/RecognitionTests.m index c68ad332..bc148da3 100644 --- a/TestsProject/TestsProjectTests/RecognitionTests.m +++ b/TestsProject/TestsProjectTests/RecognitionTests.m @@ -21,28 +21,20 @@ __block G8Tesseract *tesseract; -let(image, ^id{ - return [UIImage imageNamed:@"image_sample.jpg"]; -}); - -let(engineMode, ^id{ - return theValue(G8OCREngineModeTesseractOnly); -}); - -let(pageSegmentationMode, ^id{ - return theValue(G8PageSegmentationModeAutoOnly); -}); - -let(charWhitelist, ^id{ - return @"0123456789"; -}); - -let(waitDeadline, ^id{ - return @(6.0); -}); - -let(maxExpectedRecognitionTime, ^id{ - return @(5.0); +__block G8OCREngineMode engineMode = G8OCREngineModeTesseractOnly; +__block G8PageSegmentationMode pageSegmentationMode = G8PageSegmentationModeAuto; +__block NSString *charWhitelist = @"0123456789"; +__block NSTimeInterval waitDeadline = 5.0; +__block NSTimeInterval maxExpectedRecognitionTime = 5.0; +__block UIImage *image = nil; + +beforeEach(^{ + engineMode = G8OCREngineModeTesseractOnly; + pageSegmentationMode = G8PageSegmentationModeAuto; + charWhitelist = @"0123456789"; + waitDeadline = 5.0; + maxExpectedRecognitionTime = 5.0; + image = nil; }); #pragma mark - Helpers @@ -60,11 +52,11 @@ void (^setupTesseract)() = ^{ tesseract.language = kG8Languages; - tesseract.engineMode = [engineMode integerValue]; - tesseract.pageSegmentationMode = [pageSegmentationMode integerValue]; + tesseract.engineMode = engineMode; + tesseract.pageSegmentationMode = pageSegmentationMode; tesseract.charWhitelist = charWhitelist; - tesseract.maximumRecognitionTime = [waitDeadline floatValue]; + tesseract.maximumRecognitionTime = waitDeadline; tesseract.image = [image g8_blackAndWhite]; }; @@ -79,7 +71,7 @@ isDone = YES; }); - wait([maxExpectedRecognitionTime floatValue], ^{ + wait(maxExpectedRecognitionTime, ^{ return (BOOL)(isDone == NO); }); @@ -102,7 +94,7 @@ NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation:operation]; - wait([maxExpectedRecognitionTime floatValue], ^{ + wait(maxExpectedRecognitionTime, ^{ return (BOOL)(isDone == NO); }); @@ -113,7 +105,8 @@ UIImage *(^thresholdedImageForImage)(UIImage *) = ^(UIImage *sourceImage) { G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:kG8Languages]; - tesseract.image = image; + + tesseract.image = [image g8_blackAndWhite]; return tesseract.thresholdedImage; }; @@ -122,16 +115,10 @@ describe(@"Simple image", ^{ - let(image, ^id{ - return [UIImage imageNamed:@"image_sample.jpg"]; - }); - - let(waitDeadline, ^id{ - return @(1.0); - }); - - let(maxExpectedRecognitionTime, ^id{ - return @(1.2); + beforeEach(^{ + image = [UIImage imageNamed:@"image_sample.jpg"]; + waitDeadline = 1.0; + maxExpectedRecognitionTime = 1.2; }); it(@"Should recognize sync", ^{ @@ -206,20 +193,11 @@ describe(@"Well scaned page", ^{ - let(image, ^id{ - return [UIImage imageNamed:@"well_scaned_page"]; - }); - - let(charWhitelist, ^id{ - return @""; - }); - - let(waitDeadline, ^id{ - return @(10.0); - }); - - let(maxExpectedRecognitionTime, ^id{ - return @(9.0); + beforeEach(^{ + image = [UIImage imageNamed:@"well_scaned_page"]; + charWhitelist = @""; + waitDeadline = 10.0; + maxExpectedRecognitionTime = 9.0; }); it(@"Should recognize", ^{ @@ -239,45 +217,30 @@ [[theValue([onceThresholded g8_isEqualToImage:twiceThresholded]) should] beYes]; }); - describe(@"OSD", ^{ - - let(pageSegmentationMode, ^id{ - return theValue(G8PageSegmentationModeAutoOSD); - }); - - it(@"Should analyze layout", ^{ - [[theBlock(recognizeImageUsingOperation) shouldNot] raise]; + it(@"Should analyze layout", ^{ + pageSegmentationMode = G8PageSegmentationModeAutoOSD; - CGFloat deskewAngle = tesseract.deskewAngle; - [[theValue(ABS(deskewAngle)) should] beGreaterThan:theValue(FLT_EPSILON)]; + [[theBlock(recognizeImageUsingOperation) shouldNot] raise]; - [[theValue(tesseract.orientation) should] equal:theValue(G8OrientationPageUp)]; - [[theValue(tesseract.writingDirection) should] equal:theValue(G8WritingDirectionLeftToRight)]; - [[theValue(tesseract.textlineOrder) should] equal:theValue(G8TextlineOrderTopToBottom)]; - }); + CGFloat deskewAngle = tesseract.deskewAngle; + [[theValue(ABS(deskewAngle)) should] beGreaterThan:theValue(FLT_EPSILON)]; + [[theValue(tesseract.orientation) should] equal:theValue(G8OrientationPageUp)]; + [[theValue(tesseract.writingDirection) should] equal:theValue(G8WritingDirectionLeftToRight)]; + [[theValue(tesseract.textlineOrder) should] equal:theValue(G8TextlineOrderTopToBottom)]; }); - describe(@"Deadline", ^{ - - let(waitDeadline, ^id{ - return @(2.0); - }); - - let(maxExpectedRecognitionTime, ^id{ - return @(3.0); - }); - - it(@"Should break", ^{ - [[theBlock(recognizeImageUsingOperation) shouldNot] raise]; + it(@"Should break by deadline", ^{ + waitDeadline = 2.0; + maxExpectedRecognitionTime = 3.0; - [[tesseract shouldNot] beNil]; - NSString *recognizedText = tesseract.recognizedText; - [[recognizedText should] containString:@"Foreword"]; - [[recognizedText shouldNot] containString:@"Mathematcs"]; - [[[[tesseract confidencesByIteratorLevel:G8PageIteratorLevelWord] should] haveAtLeast:10] items]; - }); + [[theBlock(recognizeImageUsingOperation) shouldNot] raise]; + [[tesseract shouldNot] beNil]; + NSString *recognizedText = tesseract.recognizedText; + [[recognizedText should] containString:@"Foreword"]; + [[recognizedText shouldNot] containString:@"Mathematcs"]; + [[[[tesseract confidencesByIteratorLevel:G8PageIteratorLevelWord] should] haveAtLeast:10] items]; }); });