顔認証システムを評価する方法

マイナンバーカードのような顔認識ソフトを評価する方法

## 次の形で定義する関数を評価する

evaluate(img_camera,img_card)

入力
>img_camaera: カメラで撮影した画像データ 
>img_card: カード内に保管された画像データ

出力
>True: カメラとカードの人物は同一
>False: カメラとカードの人物は異なる

## 比較に使う関数

	1) evaluate00
		常に、False を返す

	2) evaluate01
		10回に1回は True を返し、9回は、False を返す

	3) evaluate02
		10回に2回は True を返し、8回は、False を返す

	4) evaluate03
		10回に3回は True を返し、7回は、False を返す

	5) evaluate04
		10回に4回は True を返し、6回は、False を返す

	6) evaluate05
		10回に5回は True を返し、5回は、False を返す

	7) evaluate06
		10回に6回は True を返し、4回は、False を返す

	8) evaluate07
		10回に7回は True を返し、3回は、False を返す

	9) evaluate08
		10回に8回は True を返し、2回は、False を返す

	10) evaluate09
		10回に9回は True を返し、1回は、False を返す

	11) evaluate10
		常に、True を返す

## 関数

```py:evaluate.py
# ---------------------------------------------------------------------
#   evaluate.py
#
#                                       Aug/31/2023
# ---------------------------------------------------------------------
import random
#
# ---------------------------------------------------------------------
def evaluate00(img_camaera,img_card):
    return False
#
# ---------------------------------------------------------------------
def evaluate01(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 1):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate02(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 2):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate03(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 3):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate04(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 4):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate05(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 5):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate06(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 6):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate07(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 7):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate08(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 8):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate09(img_camaera,img_card):
    rvalue = False
    aa = random.randint(1, 10)
    if (aa <= 9):
        rvalue = True
    return rvalue
#
# ---------------------------------------------------------------------
def evaluate10(img_camaera,img_card):
    return True
#
# ---------------------------------------------------------------------
```

## テストプログラム

```py:test00.py
#! /usr/bin/python
#
#   test00.py
#
#                           Aug/31/2023
# ---------------------------------------------------------------------
from PIL import Image
from evaluate import evaluate00
from evaluate import evaluate01
from evaluate import evaluate02
from evaluate import evaluate03
from evaluate import evaluate04
from evaluate import evaluate05
from evaluate import evaluate06
from evaluate import evaluate07
from evaluate import evaluate08
from evaluate import evaluate09
from evaluate import evaluate10
# ---------------------------------------------------------------------

file_camera = "camera.png"
file_card = "card.png"

img_camaera = Image.open(file_camera)
img_card = Image.open(file_card)

print(evaluate00(img_camaera,img_card))
print(evaluate01(img_camaera,img_card))
print(evaluate02(img_camaera,img_card))
print(evaluate03(img_camaera,img_card))
print(evaluate04(img_camaera,img_card))
print(evaluate05(img_camaera,img_card))
print(evaluate06(img_camaera,img_card))
print(evaluate07(img_camaera,img_card))
print(evaluate08(img_camaera,img_card))
print(evaluate09(img_camaera,img_card))
print(evaluate10(img_camaera,img_card))

# ---------------------------------------------------------------------
```

実行結果

```text
$ ./test00.py 
False
False
False
False
False
True
False
True
False
True
True
```

## テスト方法

11個のプログラムと、評価対象のプログラムで、
カメラ画像と、保存された画像の組み合わせを変えてテストを行う。

例えば、10人の協力者が、それぞれのマイナンバーカード相当のデータを持ち込むと、
10 x 10 で、100回のテストを行い。その正当率で評価する。