ios टेसरेक्ट ओसीआर आईओएस छवि प्रारूप



objective-c uiimage (1)

मैंने पाठ को स्कैन करने के लिए टेसेरैक्ट ओसीआर आईओएस का इस्तेमाल किया है, और मुझे परियोजना में शामिल फोटो के साथ काम करने के लिए मिल गया है।

लेकिन जब इसे UIImagePickerController से UIImage पास करते हैं, तो यह काम नहीं करता है। मैं इस साधारण परीक्षण की स्थापना की है:

  1. पिकर से मूल छवि ले लीजिए, और इसे टेसरेक्ट में फ़ीड: काम नहीं करता।
  2. जेपीईजी के रूप में UIImage को बचाएं, इसे ऐप कंटेनर से कॉपी करें, इसे परियोजना में शामिल करें और इसे टेरेसरेट में फ़ीड करें: काम नहीं करता है
  3. फ़ोटोशॉप में सहेजे गए UIImage खोलें, और इसे फिर से सहेजें (डिफ़ॉल्ट JPEG गुणवत्ता 12 सेटिंग्स के साथ कोई भी परिवर्तन नहीं)। इसे परियोजना में शामिल करें इसे छिटपुट करने के लिए फ़ीड करें: वर्क्स?!?

टेसरेक्ट मूल में लाइनों की सही मात्रा को पहचानती है, लेकिन कचरा के रूप में (मैंने कई उदाहरण परीक्षणों का परीक्षण किया है) फ़ोटोशॉप में एक बार सहेजे जाने पर छवि को अच्छी मान्यता दर होती है।

मैं यह नहीं समझ सकता कि मूल UIImage में क्या गलत है, जो कि फ़ोटोशॉप किसी तरह ठीक करता है कृपया सहायता कीजिए!

ये चित्र हैं:

टेसरेक्ट के लिए छवियों को खिलाने के लिए कोड:

- (void)recognizeWithImage:(UIImage *)image {
    G8RecognitionOperation *operation = [[G8RecognitionOperation alloc] initWithLanguage:@"dan"];
    operation.tesseract.image = image;
    self.imageView.image = image;
    operation.recognitionCompleteBlock = ^(G8Tesseract *recognizedTesseract) {
        NSLog(@"Result:\n%@", [recognizedTesseract recognizedText]);
    };
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:operation];
}

कैमरे से छवि प्राप्त करने के लिए यहां कोड दिया गया है:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self dismissViewControllerAnimated:YES completion:nil];
    UIImage *originalImage = info[UIImagePickerControllerOriginalImage];

    NSData *dataForJPEGFile = UIImageJPEGRepresentation(originalImage, 1.0);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [paths[0] stringByAppendingPathComponent:@"temp_ocr_image_orig.jpg"];
    [dataForJPEGFile writeToFile:filePath atomically:YES];

    [self recognizeWithImage:originalImage];
}

और दो छवि फ़ाइलों का परीक्षण:

[self recognizeWithImage:[UIImage imageNamed:@"temp_ocr_image_orig.jpg"]];
[self recognizeWithImage:[UIImage imageNamed:@"temp_ocr_image_photoshopped.jpg"]];

image orientation दोनों छवियों के लिए अलग-अलग है। जब आप छवियों को इंजन में लोड करते हैं: आपके मामले में दोनों छवियों को इंजन के विभिन्न झुकाव के साथ छवियों के रूप में उत्पादित किया जाता है:

यहां बताया गया है कि वे इंजिन के सामने कैसे दिखते हैं:

मूल छवि:

फ़ोटोशॉप छवि:

यदि आप बारीकी से देखते हैं, तो ये दोनों अलग तरीके से प्रस्तुत किए जाते हैं। मेरा मानना ​​है कि UIImageJPEGRepresentation crazy कुछ कर रहा है या जब आप container को image लिख रहे हैं, तो छवि अलग-अलग अभिविन्यास में आती है।

आपको छवि के अभिविन्यास को संशोधित करने की आवश्यकता है जिसे आप पिकर या आपके कंटेनर से प्राप्त करते हैं।

मैंने फ़ोटोशॉप छवि के रूप में सही अभिविन्यास प्राप्त करने के लिए कुछ संयोजन किए:

                                                   //image is the original image
UIImage *imageToDisplay =[UIImage imageWithCGImage:[image CGImage]
                    scale:1.0
              orientation: UIImageOrientationRight];

UIImage *newImage=  [UIImage imageWithCGImage:[imageToDisplay CGImage]
                     scale:1.0
              orientation: UIImageOrientationDown];


UIImage *newImage2=  [UIImage imageWithCGImage:[newImage CGImage]
                                        scale:1.0
                                  orientation: UIImageOrientationLeft];

//Now I get the correct orientation

// Set the image on which Tesseract should perform recognition
operation.tesseract.image = newImage2 ;

और उम्मीद है कि अब आप ओसीआर से टेक्स्ट प्राप्त कर सकते हैं।

आपको कोड की एक पंक्ति में सही अभिविन्यास प्राप्त करने का प्रयास करना चाहिए। मैंने यहां 3 घूर्णन का इस्तेमाल किया है।





tesseract