example.detect_eye_blink のソースコード

"""まばたきを検出するコード例.

Summary:
    このエグザンプルでは、目の瞬き検出を扱うコード例を示します。

Example:
    .. code-block:: bash

        python3 example/detect_eye_blink.py

Note:
    このコードを実行する際、入力されるソースには必ず1人だけのものを選ばなくてはいけません。
    複数人を対象とすることはできません。

.. image:: ../assets/images/2024-08-27_20-02.png
    :width: 100%
    :alt: eye blink

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

注目すべきは瞬きの検出が1行で済んでいるところです!⭐️''

.. code-block:: python

    blink_detected: bool = self.spoof.detect_eye_blinks(self.current_frame_datas_array, CONFIG)

Source code:
    `detect_eye_blink.py <https://github.com/yKesamaru/FACE01_DEV/blob/master/example/detect_eye_blink.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 tkinter as tk
from tkinter import Button, Label
from typing import Dict

import cv2
from PIL import Image, ImageTk

from face01lib.Core import Core
from face01lib.Initialize import Initialize
from face01lib.logger import Logger
from face01lib.spoof import Spoof

# Operate directory: Common to all examples
dir: str = os.path.dirname(__file__)
parent_dir, _ = os.path.split(dir)
sys.path.append(parent_dir)


[ドキュメント] class App: def __init__(self, root, exec_times=50): self.root = root self.exec_times = exec_times self.root.title('FACE01 example with EfficientNetV2 ArcFace model') # Window icon self.root.iconphoto(True, tk.PhotoImage(file="assets/images/g1320.png")) # Label for displaying image self.display = Label(root) self.display.pack() # Terminate button self.terminate_button = Button(root, text='terminate', command=self.terminate, width=50) self.terminate_button.pack(pady=10) # 画像表示用のインスタンス変数 self.img_tk = None self.current_frame_datas_array = None # 現在のフレームデータを保持するための変数 # ジェネレータを作成 self.gen = Core().common_process(CONFIG) # Spoofオブジェクトを作成 self.spoof = Spoof() # GUIを更新する self.update_image()
[ドキュメント] def update_image(self): self.current_frame_datas_array = self.gen.__next__() blink_detected: bool = self.spoof.detect_eye_blinks(self.current_frame_datas_array, CONFIG) for frame_datas in self.current_frame_datas_array: if blink_detected: # logger.info('Blink') print('BLINK') img = Image.fromarray(cv2.cvtColor(frame_datas['img'], cv2.COLOR_BGR2RGB)) self.img_tk = ImageTk.PhotoImage(image=img) # 画像をインスタンス変数に保持 self.display.config(image=self.img_tk) # 100ミリ秒ごとにウィンドウを更新 self.root.after(100, self.update_image)
[ドキュメント] def terminate(self): self.root.quit()
if __name__ == '__main__': # Initialize CONFIG: Dict = Initialize('DETECT_EYE_BLINKS').initialize() # Set up logger logger = Logger(CONFIG['log_level']).logger(__file__, CONFIG['RootDir']) root = tk.Tk() app = App(root, exec_times=200) root.mainloop()