improve engine reload system
This commit is contained in:
parent
cd0caed325
commit
a4d297fc33
66
alpr_api.py
66
alpr_api.py
@ -22,8 +22,24 @@ information. The server is created using Flask and the ultimateALPR SDK is used
|
||||
See the README.md file for more information on how to run this script.
|
||||
"""
|
||||
|
||||
# Defines the default JSON configuration. More information at https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html
|
||||
# Defines the default JSON configuration. More information at
|
||||
# https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html
|
||||
JSON_CONFIG = {
|
||||
"assets_folder": os.path.join(bundle_dir, "assets"), # don't change this
|
||||
|
||||
"charset": "latin",
|
||||
"car_noplate_detect_enabled": False,
|
||||
"ienv_enabled": False,
|
||||
"openvino_enabled": True,
|
||||
"openvino_device": "CPU",
|
||||
"npu_enabled": False,
|
||||
"klass_lpci_enabled": False,
|
||||
"klass_vcr_enabled": False,
|
||||
"klass_vmmr_enabled": False,
|
||||
"klass_vbsr_enabled": False,
|
||||
"license_token_file": "",
|
||||
"license_token_data": "",
|
||||
|
||||
"debug_level": "info",
|
||||
"debug_write_input_image_enabled": False,
|
||||
"debug_internal_data_path": ".",
|
||||
@ -55,34 +71,36 @@ IMAGE_TYPES_MAPPING = {
|
||||
'L': ultimateAlprSdk.ULTALPR_SDK_IMAGE_TYPE_Y
|
||||
}
|
||||
|
||||
config = json.dumps(JSON_CONFIG)
|
||||
|
||||
def load_engine():
|
||||
JSON_CONFIG["assets_folder"] = os.path.join(bundle_dir, "assets")
|
||||
JSON_CONFIG.update({
|
||||
"charset": "latin",
|
||||
"car_noplate_detect_enabled": False,
|
||||
"ienv_enabled": False,
|
||||
"openvino_enabled": True,
|
||||
"openvino_device": "CPU",
|
||||
"npu_enabled": False,
|
||||
"klass_lpci_enabled": False,
|
||||
"klass_vcr_enabled": False,
|
||||
"klass_vmmr_enabled": False,
|
||||
"klass_vbsr_enabled": False,
|
||||
"license_token_file": "",
|
||||
"license_token_data": ""
|
||||
})
|
||||
|
||||
result = ultimateAlprSdk.UltAlprSdkEngine_init(json.dumps(JSON_CONFIG))
|
||||
if not result.isOK():
|
||||
raise RuntimeError("Init failed: %s" % result.phrase())
|
||||
def start_backend_loop():
|
||||
global counter
|
||||
load_engine()
|
||||
|
||||
# loop for about an hour or 3000 requests then reload the engine (fix for trial license)
|
||||
while counter < 3000 and time.time() - boot_time < 60 * 60:
|
||||
# every 120 sec
|
||||
if int(time.time()) % 120 == 0:
|
||||
if not is_engine_loaded():
|
||||
unload_engine() # just in case
|
||||
load_engine()
|
||||
|
||||
# restart engine every 3000 requests or every 6 hours
|
||||
while counter < 3000 or time.time() - boot_time < 6 * 60 * 60:
|
||||
sleep(1)
|
||||
|
||||
unload_engine()
|
||||
load_engine()
|
||||
start_backend_loop()
|
||||
|
||||
|
||||
def is_engine_loaded():
|
||||
# hacky way to check if the engine is loaded cause the SDK doesn't provide a method for it
|
||||
return ultimateAlprSdk.UltAlprSdkEngine_requestRuntimeLicenseKey().isOK()
|
||||
|
||||
|
||||
def load_engine():
|
||||
result = ultimateAlprSdk.UltAlprSdkEngine_init(config)
|
||||
if not result.isOK():
|
||||
raise RuntimeError("Init failed: %s" % result.phrase())
|
||||
|
||||
|
||||
def unload_engine():
|
||||
@ -264,7 +282,7 @@ def find_best_plate_with_split(image: Image, grid_size: int = None, wanted_cells
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
engine = threading.Thread(target=load_engine, daemon=True)
|
||||
engine = threading.Thread(target=start_backend_loop, daemon=True)
|
||||
engine.start()
|
||||
|
||||
app = create_rest_server_flask()
|
||||
|
Loading…
Reference in New Issue
Block a user