example.make_npKnown_for_subdirs のソースコード

"""npKnown.npzファイルを指定したディレクトリとそのサブディレクトリごとに作成するスクリプト.

Summary:
    このスクリプトは、ユーザーが指定したディレクトリとそのサブディレクトリ内にある顔画像ファイルに対して
    512次元特徴量データを用いたnpKnown.npzファイルを生成します。
    選択されたディレクトリ以下の各サブディレクトリについて、npKnown.npzファイルが既に存在する場合はスキップし、
    存在しない場合にのみ新たに作成します。

Requirements:
    - ttkbootstrap
    - face01lib.load_preset_image

Usage:
    ターミナルで以下のコマンドを実行してスクリプトを起動します。

    ```bash
    python3 example/make_npKnown_for_subdirs.py
    ```

Example:
    実行後、ディレクトリ選択ダイアログが表示され、処理対象のディレクトリを選択できます。
    選択したディレクトリ内のサブディレクトリごとにnpKnown.npzファイルが作成されます。

.. image:: ../assets/images/one_point_L.png
    :width: 70%
    :alt: one point

ディレクトリを再帰的に捜査してnpKnown.npzを作成します⭐️''

.. image:: ../assets/images/npKnown.png
    :width: 50%
    :alt: npKnown.npz



Source code:
    `make_npKnown_for_subdirs.py <https://github.com/yKesamaru/FACE01_DEV/blob/master/example/make_npKnown_for_subdirs.py>`__
"""

import os
import sys
from tkinter import filedialog

import ttkbootstrap as ttk

# 現在のディレクトリを設定
dir: str = os.path.dirname(__file__)
parent_dir, _ = os.path.split(dir)
sys.path.append(parent_dir)
from face01lib.load_preset_image import LoadPresetImage


[ドキュメント] def select_directory(): """ ディレクトリ選択ダイアログを表示し、ユーザーが選択したディレクトリのパスを返します。 Returns: str: 選択されたディレクトリのパス。選択されなかった場合は空文字列を返します。 """ root = ttk.Window(themename="minty") root.withdraw() # ウィンドウを非表示にする selected_directory = filedialog.askdirectory( title="ディレクトリを選択。`assets/data/a`を選択してみましょう。", initialdir=os.getcwd()) root.destroy() # ウィンドウを破棄する return selected_directory
[ドキュメント] def create_npz_for_all_subdirs(root_dir, load_preset_image_obj): """ 指定したディレクトリ以下のすべてのサブディレクトリに対して、 npKnown.npzファイルを作成します。 Args: root_dir (str): ルートディレクトリのパス。 load_preset_image_obj (LoadPresetImage): 画像読み込み用のオブジェクト。 """ for dirpath, dirnames, filenames in os.walk(root_dir): npz_file_path = os.path.join(dirpath, 'npKnown.npz') # npKnown.npz ファイルが存在する場合は処理をスキップ if os.path.exists(npz_file_path): print(f"{npz_file_path} は既に存在します。処理をスキップします。") continue # ディレクトリ内に画像ファイルが存在するか確認 image_files = [file for file in filenames if file.lower().endswith('.png')] if image_files: print(f"{npz_file_path} を作成します...") load_preset_image_obj.load_preset_image( deep_learning_model=1, RootDir=dirpath, # npKnown.npzを作成するディレクトリ preset_face_imagesDir=dirpath # 顔画像が格納されているディレクトリ ) print(f"{npz_file_path} を作成しました。") else: print(f"{dirpath} に画像ファイルが見つかりませんでした。処理をスキップします。")
if __name__ == '__main__': load_preset_image_obj = LoadPresetImage() # ダイアログを表示してディレクトリを選択 root_dir = select_directory() if not root_dir: print("ディレクトリが選択されませんでした。プログラムを終了します。") sys.exit() # サブディレクトリごとにnpKnown.npzを作成 create_npz_for_all_subdirs(root_dir, load_preset_image_obj)