Claude commited on
Commit
57311b9
·
1 Parent(s): 5d7e317

chore: track *.traineddata via LFS + Gill Sans font->model mapping

Browse files
.gitattributes CHANGED
@@ -34,3 +34,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  smoke_signal/tessdata/gill_sans_infant.traineddata.otf filter=lfs diff=lfs merge=lfs -text
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  smoke_signal/tessdata/gill_sans_infant.traineddata.otf filter=lfs diff=lfs merge=lfs -text
37
+ *.traineddata filter=lfs diff=lfs merge=lfs -text
38
+ *.otf filter=lfs diff=lfs merge=lfs -text
smoke_signal/scripts/font_library.py CHANGED
@@ -275,6 +275,16 @@ def register_font_model(
275
  return {"ok": True, "font_name": font_name, "tesseract_model": model}
276
 
277
 
 
 
 
 
 
 
 
 
 
 
278
  def resolve_tesseract_lang(font_name: Optional[str]) -> str:
279
  """
280
  Return best tesseract language/model to use for this font.
@@ -283,6 +293,13 @@ def resolve_tesseract_lang(font_name: Optional[str]) -> str:
283
  if not font_name:
284
  return "eng"
285
 
 
 
 
 
 
 
 
286
  registry = _load_registry()
287
  entry = registry.get(font_name, {})
288
  candidates = []
 
275
  return {"ok": True, "font_name": font_name, "tesseract_model": model}
276
 
277
 
278
+ # Static font name → model name mapping.
279
+ # Handles cases where the slug doesn't match the traineddata filename.
280
+ FONT_MODEL_MAP: dict[str, str] = {
281
+ "gill sans infant": "gill_sans_infant",
282
+ "gill sans": "gill_sans_infant", # MixFont may return either name
283
+ "gill sans mt": "gill_sans_infant",
284
+ "gillsans": "gill_sans_infant",
285
+ }
286
+
287
+
288
  def resolve_tesseract_lang(font_name: Optional[str]) -> str:
289
  """
290
  Return best tesseract language/model to use for this font.
 
293
  if not font_name:
294
  return "eng"
295
 
296
+ # Check static map first
297
+ mapped = FONT_MODEL_MAP.get(font_name.lower().strip())
298
+ if mapped:
299
+ tess_dirs = [TESSDATA_DIR, REPO_TESSDATA_DIR]
300
+ if any((d / f"{mapped}.traineddata").exists() for d in tess_dirs):
301
+ return mapped
302
+
303
  registry = _load_registry()
304
  entry = registry.get(font_name, {})
305
  candidates = []