@@ -155,8 +155,16 @@ class TesseractPool{
155155 std::vector<TesseractAPI*> m_idle;
156156};
157157
158- SpinLock ocr_pool_lock;
159- std::map<Language, TesseractPool> ocr_pool;
158+ struct OcrGlobals {
159+ SpinLock ocr_pool_lock;
160+ std::map<Language, TesseractPool> ocr_pool;
161+
162+ static OcrGlobals& instance (){
163+ static OcrGlobals globals;
164+ return globals;
165+ }
166+ };
167+
160168
161169
162170std::string ocr_read (Language language, const ImageViewRGB32& image){
@@ -167,9 +175,12 @@ std::string ocr_read(Language language, const ImageViewRGB32& image){
167175 throw InternalProgramError (nullptr , PA_CURRENT_FUNCTION, " Attempted to call OCR without a language." );
168176 }
169177
178+ OcrGlobals& globals = OcrGlobals::instance ();
179+ std::map<Language, TesseractPool>& ocr_pool = globals.ocr_pool ;
180+
170181 std::map<Language, TesseractPool>::iterator iter;
171182 {
172- WriteSpinLock lg (ocr_pool_lock, " ocr_read()" );
183+ WriteSpinLock lg (globals. ocr_pool_lock , " ocr_read()" );
173184 iter = ocr_pool.find (language);
174185 if (iter == ocr_pool.end ()){
175186 iter = ocr_pool.emplace (language, language).first ;
@@ -182,9 +193,12 @@ void ensure_instances(Language language, size_t instances){
182193 throw InternalProgramError (nullptr , PA_CURRENT_FUNCTION, " Attempted to call OCR without a language." );
183194 }
184195
196+ OcrGlobals& globals = OcrGlobals::instance ();
197+ std::map<Language, TesseractPool>& ocr_pool = globals.ocr_pool ;
198+
185199 std::map<Language, TesseractPool>::iterator iter;
186200 {
187- WriteSpinLock lg (ocr_pool_lock, " ocr_read()" );
201+ WriteSpinLock lg (globals. ocr_pool_lock , " ocr_read()" );
188202 iter = ocr_pool.find (language);
189203 if (iter == ocr_pool.end ()){
190204 iter = ocr_pool.emplace (language, language).first ;
0 commit comments