43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import sys
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from botty_next.vision.fixtures import load_screenshot
|
|
from botty_next.vision.ocr import preprocess_for_ocr, run_tesseract_ocr, save_ocr_preprocess_debug
|
|
|
|
|
|
def test_preprocess_for_ocr_returns_thresholded_image() -> None:
|
|
image = load_screenshot("sample_scene.ppm")
|
|
|
|
processed = preprocess_for_ocr(image)
|
|
|
|
assert processed.ndim == 2
|
|
assert processed.shape == (16, 16)
|
|
|
|
|
|
def test_save_ocr_preprocess_debug(tmp_path) -> None:
|
|
image = load_screenshot("sample_scene.ppm")
|
|
|
|
output = save_ocr_preprocess_debug(image, tmp_path / "ocr.png")
|
|
|
|
assert output.exists()
|
|
|
|
|
|
def test_run_tesseract_ocr_uses_pytesseract_adapter(monkeypatch) -> None:
|
|
fake = SimpleNamespace(
|
|
Output=SimpleNamespace(DICT="dict"),
|
|
pytesseract=SimpleNamespace(tesseract_cmd=None),
|
|
image_to_string=lambda *_args, **_kwargs: "Short Sword\n",
|
|
image_to_data=lambda *_args, **_kwargs: {"conf": ["95", "-1", "85"]},
|
|
)
|
|
monkeypatch.setitem(sys.modules, "pytesseract", fake)
|
|
|
|
image = load_screenshot("sample_scene.ppm")
|
|
result = run_tesseract_ocr(image, tesseract_cmd="C:/Tesseract/tesseract.exe")
|
|
|
|
assert result.text == "Short Sword"
|
|
assert result.confidence == pytest.approx(0.9)
|
|
assert result.debug["backend"] == "pytesseract"
|
|
assert fake.pytesseract.tesseract_cmd == "C:/Tesseract/tesseract.exe"
|