Поскольку объекты инициализируются с одинаковыми аргументами, в этой точке предполагается, что xapi и yapi идентичны с поведенческой точки зрения. Правильно ли мое предположение?
С самого начала я ничего не могу найти, чтобы оспорить это предположение.
Исследование исходного кода.
Следующие параметры очищаются или сбрасываются (если хотите):
При вызове Сброс () вызывается следующее:
01402 void TessBaseAPI::Clear() {
01403 if (thresholder_ != NULL)
01404 thresholder_->Clear();
01405 ClearResults();
01406 }
Вызов thresholder_->Clear();
уничтожает пиксель (если не ноль)
00044 // Destroy the Pix if there is one, freeing memory.
00045 void ImageThresholder::Clear() {
00046 if (pix_ != NULL) {
00047 pixDestroy(&pix_);
00048 pix_ = NULL;
00049 }
00050 image_data_ = NULL;
00051 }
Для Очистить результаты , как показано ниже.
01641 void TessBaseAPI::ClearResults() {
01642 if (tesseract_ != NULL) {
01643 tesseract_->Clear();
01644 }
01645 if (page_res_ != NULL) {
01646 delete page_res_;
01647 page_res_ = NULL;
01648 }
01649 recognition_done_ = false;
01650 if (block_list_ == NULL)
01651 block_list_ = new BLOCK_LIST;
01652 else
01653 block_list_->clear();
01654 if (paragraph_models_ != NULL) {
01655 paragraph_models_->delete_data_pointers();
01656 delete paragraph_models_;
01657 paragraph_models_ = NULL;
01658 }
01659 }
Результаты страницы, черный список устанавливаются на ноль, а соответствующие флаги сбрасываются.
tesseract _-> Clear () выпускает следующее:
00413 void Tesseract::Clear() {
00414 pixDestroy(&pix_binary_);
00415 pixDestroy(&cube_binary_);
00416 pixDestroy(&pix_grey_);
00417 pixDestroy(&scaled_color_);
00418 deskew_ = FCOORD(1.0f, 0.0f);
00419 reskew_ = FCOORD(1.0f, 0.0f);
00420 splitter_.Clear();
00421 scaled_factor_ = -1;
00422 ResetFeaturesHaveBeenExtracted();
00423 for (int i = 0; i < sub_langs_.size(); ++i)
00424 sub_langs_[i]->Clear();
00425 }
Обращает на себя внимание,
SetVariable не влияет на значения инициализации:
Работает только для переменных не-init (переменные init должны передаваться в Init ()).
00143 bool TessBaseAPI::SetVariable(const char* name, const char* value) {
00144 if (tesseract_ == NULL) tesseract_ = new Tesseract;
00145 return ParamUtils::SetParam(name, value, SET_PARAM_CONSTRAINT_NON_INIT_ONLY,
00146 tesseract_->params());
00147 }
После вызова Clear () можно ли использовать xapi и yapi взаимозаменяемо?
Нет. Конечно, нет, если вы использовали порог.
Можно ли сказать, что Clear () на самом деле является функцией сброса?
Не в смысле восстановления его в исходное состояние. Это изменит некоторые значения исходного объекта на ноль. Это сохранит основную работу таких параметров, как const char * datapath, const char * language, OcrEngineMode oem,
. Кажется, это способ освободить память, не стирая объект. Встроить"без фактической освобождения каких-либо данных распознавания, которые потребовали бы много времени для перезагрузки.".
После вызова Clear () вызовите либо SetImage , либо TesseractRect перед использованием функций Recognition или Get *.
Clear не будет избавляться от SetVariables, они будут сброшены к значениям по умолчанию только после уничтожения объекта путем вызова End ().
Глядя на класс TessbaseApi () , вы можете увидеть, что вы инициализируете, и какое из этих значений будет сброшено с помощью Clear ().
00091 TessBaseAPI::TessBaseAPI()
00092 : tesseract_(NULL),
00093 osd_tesseract_(NULL),
00094 equ_detect_(NULL),
00095 // Thresholder is initialized to NULL here, but will be set before use by:
00096 // A constructor of a derived API, SetThresholder(), or
00097 // created implicitly when used in InternalSetImage.
00098 thresholder_(NULL),
00099 paragraph_models_(NULL),
00100 block_list_(NULL),
00101 page_res_(NULL),
00102 input_file_(NULL),
00103 output_file_(NULL),
00104 datapath_(NULL),
00105 language_(NULL),
00106 last_oem_requested_(OEM_DEFAULT),
00107 recognition_done_(false),
00108 truth_cb_(NULL),
00109 rect_left_(0), rect_top_(0), rect_width_(0), rect_height_(0),
00110 image_width_(0), image_height_(0) {
00111 }
Учитывая, что базовый конструктор для класса:
(datapath, language, OEM_DEFAULT, NULL, 0, NULL, NULL, false);
Эти три параметра всегда необходимы, что имеет смысл .
Если путь к данным, OcrEngineMode или язык изменились - начните снова.
Обратите внимание, что поле language_ хранит последний запрошенный язык, который был успешно инициализирован, а tesseract _-> lang хранит фактически используемый язык. Они отличаются только в том случае, если запрашиваемый язык был NULL, и в этом случае для tesseract _-> lang установлено значение по умолчанию ("eng") для Tesseract.