|
|
|
|
|
import ctypes |
|
|
from ctypes import c_int64, c_char_p, POINTER, byref |
|
|
import time |
|
|
import sys |
|
|
import os |
|
|
|
|
|
DLL_DIR = r"c:\Users\MattyMroz\Desktop\PROJECTS\ONEOCR\ocr_data" |
|
|
MODEL_PATH = os.path.join(DLL_DIR, "oneocr.onemodel") |
|
|
KEY = b'kj)TGtrK>f]b[Piow.gU+nC@s""""""4' |
|
|
|
|
|
|
|
|
kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) |
|
|
kernel32.SetDllDirectoryW(DLL_DIR) |
|
|
dll = ctypes.WinDLL(os.path.join(DLL_DIR, "oneocr.dll")) |
|
|
|
|
|
|
|
|
dll.CreateOcrInitOptions.argtypes = [POINTER(c_int64)] |
|
|
dll.CreateOcrInitOptions.restype = c_int64 |
|
|
dll.OcrInitOptionsSetUseModelDelayLoad.argtypes = [c_int64, ctypes.c_char] |
|
|
dll.OcrInitOptionsSetUseModelDelayLoad.restype = c_int64 |
|
|
dll.CreateOcrPipeline.argtypes = [c_char_p, c_char_p, c_int64, POINTER(c_int64)] |
|
|
dll.CreateOcrPipeline.restype = c_int64 |
|
|
|
|
|
|
|
|
init_options = c_int64() |
|
|
ret = dll.CreateOcrInitOptions(byref(init_options)) |
|
|
print(f"LOADER: CreateOcrInitOptions -> {ret}", flush=True) |
|
|
assert ret == 0 |
|
|
|
|
|
ret = dll.OcrInitOptionsSetUseModelDelayLoad(init_options, 0) |
|
|
print(f"LOADER: SetUseModelDelayLoad -> {ret}", flush=True) |
|
|
assert ret == 0 |
|
|
|
|
|
|
|
|
pipeline = c_int64() |
|
|
model_buf = ctypes.create_string_buffer(MODEL_PATH.encode()) |
|
|
key_buf = ctypes.create_string_buffer(KEY) |
|
|
|
|
|
print("LOADER: Creating OCR pipeline (triggers decryption)...", flush=True) |
|
|
ret = dll.CreateOcrPipeline(model_buf, key_buf, init_options, byref(pipeline)) |
|
|
print(f"LOADER: CreateOcrPipeline returned {ret}, pipeline={pipeline.value}", flush=True) |
|
|
|
|
|
if ret != 0: |
|
|
print(f"LOADER: ERROR - return code {ret}", flush=True) |
|
|
sys.exit(1) |
|
|
|
|
|
print("LOADER: Pipeline created successfully! Waiting...", flush=True) |
|
|
time.sleep(5) |
|
|
print("LOADER: Done.", flush=True) |
|
|
|