example.benchmark_GUI_window のソースコード

"""顔認証におけるベンチマークコード例.

Summary:
    このエグザンプルコードでは、GUIウィンドウを作成したときの顔認証ベンチマークを取得する方法を学びます。
    このベンチマークテストを行うには開発用パッケージを追加インストールする必要があります。
    具体的にはrequirements_dev.txtをインストールしてください。

    .. code-block:: bash

        pip install -r requirements_dev.txt

    起動後、自動的にベンチマーク結果がブラウザ表示されます。
    終了するには、このエグザンプルが実行されているターミナル(またはコンソール)で「Ctrl + C」を押してください。

Example:
    .. code-block:: bash

        python3 example/benchmark_GUI_window.py

Result:
    .. image:: ../docs/img/benchmark_GUI_window.png
        :scale: 50%
        :alt: benchmark_GUI_window

    .. image:: ../docs/img/benchmark_GUI.png
        :scale: 50%
        :alt: benchmark_GUI

Source code:
    `benchmark_GUI_window.py <https://github.com/yKesamaru/FACE01_DEV/blob/master/example/benchmark_GUI_window.py>`_
"""
# Operate directory: Common to all examples
import os.path
import sys

dir: str = os.path.dirname(__file__)
parent_dir, _ = os.path.split(dir)
sys.path.append(parent_dir)

import cProfile as pr
import subprocess
import tkinter as tk
from tkinter import ttk
from typing import Dict

import cv2
from PIL import Image, ImageTk  # tkinterで画像を扱うために必要

from face01lib.Calc import Cal
from face01lib.Core import Core
from face01lib.Initialize import Initialize
from face01lib.logger import Logger

# Initialize
CONFIG: Dict = Initialize('DISPLAY_GUI', 'info').initialize()
# Set up logger
logger = Logger(CONFIG['log_level']).logger(__file__, CONFIG['RootDir'])
"""Initialize and Setup logger.
When coding a program that uses FACE01, code `initialize` and `logger` first.
This will read the configuration file `config.ini` and log errors etc.
"""


[ドキュメント] def main(exec_times: int = 50) -> None: """Make GUI window and benchmark on your own browser. Args: exec_times (int, optional): Number of frames for process. Defaults to 50 times. Returns: None """ # Create tkinter window root = tk.Tk() root.title('FACE01 EXAMPLE') root.geometry("800x600") # ウィンドウサイズの設定 root.iconphoto(False, tk.PhotoImage(file="assets/images/g1320.png")) # Create tkinter widgets display_label = ttk.Label(root) display_label.pack(padx=10, pady=10, expand=True) gen = Core().common_process(CONFIG) # Specify START point START: float = Cal.Measure_processing_time_forward() # Repeat 'exec_times' times for i in range(0, exec_times): # Call __next__() from the generator object frame_datas_array = gen.__next__() # Process events root.update_idletasks() root.update() for frame_datas in frame_datas_array: for person_data in frame_datas['person_data_list']: if not person_data['name'] == 'Unknown': print( person_data['name'], "\n", "\t", "similarity\t\t", person_data['percentage_and_symbol'], "\n", "\t", "coordinate\t\t", person_data['location'], "\n", "\t", "time\t\t\t", person_data['date'], "\n", "\t", "output\t\t\t", person_data['pict'], "\n", "-------\n" ) else: print("Unknown person", "\n", "------\n" ) img = cv2.cvtColor(frame_datas['img'], cv2.COLOR_BGR2RGB) img = Image.fromarray(img) imgtk = ImageTk.PhotoImage(image=img) display_label.config(image=imgtk) display_label.image = imgtk # 参照を保持するために必要 # Close the tkinter window root.destroy() END = Cal.Measure_processing_time_backward() print(f'Total processing time: {round(Cal.Measure_processing_time(START, END), 3)}[seconds]') print(f'Per frame: {round(Cal.Measure_processing_time(START, END) / (exec_times), 3)}[seconds]')
if __name__ == '__main__': pr.run('main(exec_times = 300)', 'restats') subprocess.run(["snakeviz", "restats"])