Spaces:
Sleeping
Sleeping
File size: 1,326 Bytes
aa4419a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | """Install pinned, checksum-verified Chinese OCR models while building the image."""
import hashlib
from pathlib import Path
import re
import subprocess
import urllib.request
REVISION = 'e12c65a915945e4c28e237a9b52bc4a8f39a0cec'
MODELS = {
'chi_sim': '4fef2d1306c8e87616d4d3e4c6c67faf5d44be3342290cf8f2f0f6e3aa7e735b',
'chi_tra': '1aa60488574cafa69486d919284f079ca9b68fcc7f6ad8dc1ff1b318dfd97028',
}
def install():
result = subprocess.run(['tesseract', '--list-langs'], capture_output=True, text=True, check=True)
match = re.search(r'in "([^"]+)"', result.stdout + result.stderr)
if not match or not Path(match[1]).is_dir():
raise RuntimeError('Cannot locate the installed Tesseract data directory.')
directory = Path(match[1])
for language, expected in MODELS.items():
url = f'https://raw.githubusercontent.com/tesseract-ocr/tessdata_best/{REVISION}/{language}.traineddata'
with urllib.request.urlopen(url, timeout=60) as stream:
data = stream.read()
if hashlib.sha256(data).hexdigest() != expected:
raise RuntimeError(f'{language}: model checksum mismatch')
(directory / (language + '.traineddata')).write_bytes(data)
print(f'Installed verified {language} model at {REVISION}')
if __name__ == '__main__':
install()
|