実現したいこと
pythonでonnxモデルファイルをOpenVINOのIRモデルファイルへ変換するコードをnuitkaでexe化したいです。
nuitka以外のツールでも良くて、openvinoのモデル変換コードをexe化できれば問題ありません。pyintallerでも試しましたが、同様のエラーが発生しました。
◯仕様・条件
・pythonでopenvino変換コードをexe化する。変換の仕方にこだわりはない。
・ファイルを移動すれば、pythonが入っていないオフラインのpcでも実行できる
発生している問題・分からないこと
pythonのコードでは実行できているのですが、nuitkaでexe化するとエラーが発生します。
exeを実行すると、モデル変換ov.convert_modelのところで
[ ERROR ] Cannot recognize input model.
というエラーが発生しました。
nuitkaで変換する際はvenv仮想環境で実行している。pythonのバージョンは3.10.11です。
python -m venv env_test
pip install openvino==2024.4.0 nuitka onnx
python -m nuitka test.py --standalone
で変換しました。
エラーメッセージ
error
1[ ERROR ] Cannot recognize input model.
該当のソースコード
python
1import openvino as ov 2import onnx 3 4def get_onnx_input_shape(onnx_model_path): 5 """ 6 Get the input shape of an ONNX model. 7 8 Parameters: 9 onnx_model_path (str): Path to the ONNX model file. 10 11 Returns: 12 dict: A dictionary with input names as keys and their shapes as values. 13 """ 14 # Load the ONNX model 15 model = onnx.load(onnx_model_path) 16 17 # Parse the model graph 18 input_shapes = {} 19 for input_tensor in model.graph.input: 20 # Extract the input name 21 input_name = input_tensor.name 22 23 # Extract the tensor type and shape 24 tensor_type = input_tensor.type.tensor_type 25 shape = [] 26 for dim in tensor_type.shape.dim: 27 # Handle dynamic shapes (unknown dimensions) 28 shape.append(dim.dim_value if dim.dim_value > 0 else None) 29 30 input_shapes[input_name] = shape 31 32 return list(input_shapes.keys())[0] 33 34def main(): 35 try: 36 # ov.convert_model returns an openvino.runtime.Model object 37 ONNX_NLP_MODEL_PATH = r"onnxファイルのパス" 38 MODEL_DIRECTORY_PATH = r"保存先パス" 39 print(ONNX_NLP_MODEL_PATH) 40 41 input = get_onnx_input_shape(ONNX_NLP_MODEL_PATH) 42 ov_model = ov.convert_model(ONNX_NLP_MODEL_PATH, input=str(input), verbose=True) 43 ov.save_model(ov_model, MODEL_DIRECTORY_PATH + "\\" +"result.xml") 44 print("OK") 45 except : 46 print("error") 47 input("enter") 48 49if __name__ == "__main__": 50 main()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
nuitkaの変換コマンドで--standaloneを抜いた
python -m nuitka test.py
で変換したあと、python.dllをコピーしてくると実行できました。
ただ、これでは他のPCでは実行できないので没にしました。
補足
特になし

あなたの回答
tips
プレビュー