Source code for rktransformers.utils.env_utils

# Copyright 2025 Emmanuel Cortes. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Utilities for environment detection"""

import contextlib
import importlib.util
import os
import re
import subprocess


[docs] def get_rktransformers_version() -> str: """Get the installed rk-transformers version.""" from rktransformers import __version__ return __version__
[docs] def get_librknnrt_version() -> str: """Read librknnrt library version""" with contextlib.suppress(Exception): output = subprocess.check_output( ["sh", "-c", 'strings /usr/lib/librknnrt.so | grep "librknnrt version:"'], stderr=subprocess.DEVNULL, ) ver = output.decode("utf-8").strip() ver = ver.replace("librknnrt version: ", "") return re.sub(r"\s*\(.*\)$", "", ver) return "Not Detected"
[docs] def get_rockchip_board() -> str: """Read Rockchip board name from device tree. Returns: str: Rockchip board name, or "Not Detected". """ paths = ["/proc/device-tree/model", "/sys/firmware/devicetree/base/model"] for p in paths: if os.path.exists(p): with contextlib.suppress(Exception): with open(p, "rb") as f: data = f.read().rstrip(b"\x00") model = data.decode("ascii", errors="ignore").strip() if model: return model return "Not Detected"
[docs] def get_rknn_toolkit_version() -> str: """Read rknn-toolkit2 or rknn-toolkit-lite2 version Returns: str: Version string of the installed RKNN toolkit, or "Not Installed". """ try: from importlib.metadata import PackageNotFoundError, version except ImportError: return "Unknown (importlib.metadata not available)" # Check for rknn-toolkit2 try: ver = version("rknn-toolkit2") return f"rknn-toolkit2=={ver}" except PackageNotFoundError: pass # Check for rknn-toolkit-lite2 try: ver = version("rknn-toolkit-lite2") return f"rknn-toolkit-lite2=={ver}" except PackageNotFoundError: pass # Fallback to checking imports if package metadata is missing if importlib.util.find_spec("rknn.api"): return "rknn-toolkit2 (version not found)" elif importlib.util.find_spec("rknnlite.api"): return "rknn-toolkit-lite2 (version not found)" return "Not Installed"
[docs] def get_edge_host_platform() -> str | None: """Detect the edge device host platform by reading `/proc/device-tree/compatible`. Returns: str | None: Lowercase platform identifier if detected, otherwise None. """ try: with open("/proc/device-tree/compatible") as file: # Compatible devices taken from rknn.api.RKNN.init_runtime source code. compatible = file.read().lower() if "rk3588" in compatible: return "rk3588" if "rk3576" in compatible: return "rk3576" if "rk3568" in compatible: return "rk3568" if "rk3566" in compatible: return "rk3566" if "rk3562" in compatible: return "rk3562" except OSError: pass return None
[docs] def is_rockchip_platform() -> bool: """Returns True if the current platform is a Rockchip device.""" return get_edge_host_platform() is not None