Re: How to stop/cancel OCR process?

1,291 views
Skip to first unread message

patrickq

unread,
Sep 2, 2012, 7:03:09 AM9/2/12
to tesser...@googlegroups.com
I think the crux of the problem is your attempt to stop the OCR thread at a random spot in its execution yet expect the state of the Tesseract instance to be consistent. You are right to want to delete the instance otherwise you would have a memory leak but it looks like you can't do that after stopping the OCR thread abnormally. In our own iPhone app (ScanBizCards) what we do in that case is to let the OCR thread finish its work in the background even though its results will be ignored and not shown to the user. The downside is mostly that if the user starts a new scan right after aborting one we delay the start of the new scan until the previous (aborted) scan finishes.

On Monday, August 27, 2012 6:43:35 AM UTC-4, fulberto100 wrote:
hi,
im using tesseract on my iPhone app.

i want to stop/cancel the ocr process. is there a way to do it?
i wrote in backPressed method:
tesseract->Clear();
tesseract->End();

but when the ocr starts and i hit the back button, it crashes, cos it is still OCRing.

here is my iOS code:

- (void)processOcrAt:(UIImage *)image
{
   
[self setTesseractImage:image];

   
//char* utf8Text = tesseract->GetUTF8Text();
   
//[self performSelector:@selector(ocrProcessingFinished:) withObject:[NSString stringWithUTF8String:utf8Text]];
   
//dispatch_queue_t queue = dispatch_queue_create("com.awesome", 0);

    main
= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async
(main, ^{
        tesseract
->Recognize(NULL);
       
char* utf8Text = tesseract->GetUTF8Text();
       
[self performSelectorOnMainThread:@selector(ocrProcessingFinished:)
                               withObject
:[NSString stringWithUTF8String:utf8Text]
                               waitUntilDone
:NO];
       
delete [] utf8Text;
   
});


}

-(IBAction)backPressed:(id)sender{
    dispatch_release
(main);
    tesseract
->Clear();
   
//tesseract->End();

   
delete tesseract;
    tesseract
= nil;
   
delete pixels;
   
[self.navigationController popViewControllerAnimated:YES];
}

shah dipen

unread,
Sep 2, 2012, 5:46:32 AM9/2/12
to tesser...@googlegroups.com

I don't have any perticular idea about tesseract. But as per my knowledge in programming that should be possible. You can create new thread for tesseract engine and can stop or dispose that thread on some event like click of cancel button.

On 2 Sep 2012 15:11, "fulberto100" <sor...@gmail.com> wrote:
is it impossible to stop/cancel the OCRing?
--
You received this message because you are subscribed to the Google
Groups "tesseract-ocr" group.
To post to this group, send email to tesser...@googlegroups.com
To unsubscribe from this group, send email to
tesseract-oc...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/tesseract-ocr?hl=en

patrickq

unread,
Sep 2, 2012, 8:09:43 AM9/2/12
to tesser...@googlegroups.com
I don't think so: the C++ code in Tesseract will consume memory from the same heap as any other parts of the app so if you just kill the OCR thread nothing will automatically release that memory and you just created a memory leak - a large one too considering you are working on a large image.

shah dipen

unread,
Sep 2, 2012, 8:12:10 AM9/2/12
to tesser...@googlegroups.com

Thanks for information.

Nahar Singh

unread,
Sep 5, 2016, 10:55:53 AM9/5/16
to tesseract-ocr, dipen0...@gmail.com

I have written a program for monitoring and cancelling tesseract progress of OCRing at link !

Program written in C++ and takes image as input and output as hOCR file. Two threads are used to progress for demonstrate the functionality of tesseract progress monitoring; i have set 70% progress where tesseract processing cancelled.


Reply all
Reply to author
Forward
0 new messages