├── lib ├── __init__.py ├── mm │ ├── __init__.py │ ├── config.py │ └── facerecognition.py ├── common │ ├── __init__.py │ ├── picam.py │ ├── commonconfig.py │ ├── webcam.py │ └── face.py └── tools │ ├── __init__.py │ ├── train.py │ ├── config.py │ └── capture.py ├── .gitignore ├── translations ├── zh.json ├── de.json ├── en.json ├── nl.json ├── sv.json ├── id.json ├── es.json └── fr.json ├── training_data └── negative │ ├── s1 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s2 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s3 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s4 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s5 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s6 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s7 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s8 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s9 │ ├── 1.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ ├── 9.pgm │ └── 10.pgm │ ├── s10 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s11 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s12 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s13 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s14 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s15 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s16 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s17 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s18 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s19 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s20 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s21 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s22 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s23 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s24 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s25 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s26 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s27 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s28 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s29 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s30 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s31 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s32 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s33 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s34 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s35 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s36 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s37 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s38 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s39 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ ├── s40 │ ├── 1.pgm │ ├── 10.pgm │ ├── 2.pgm │ ├── 3.pgm │ ├── 4.pgm │ ├── 5.pgm │ ├── 6.pgm │ ├── 7.pgm │ ├── 8.pgm │ └── 9.pgm │ └── README.md ├── tools.train.py ├── package.json ├── LICENSE ├── tools.capture.py ├── node_helper.js ├── MMM-Facial-Recognition-OCV3.js ├── tools.facerecognition.py └── README.md /lib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/mm/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/tools/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | training.xml 3 | *~ 4 | node_modules/**/* 5 | -------------------------------------------------------------------------------- /translations/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "你好 %person, 很高興看到你!", 3 | "title": "臉部識別", 4 | "stranger": "陌生人" 5 | } 6 | -------------------------------------------------------------------------------- /training_data/negative/s1/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s1/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s1/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s10/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s10/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s11/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s11/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s12/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s12/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s13/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s13/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s14/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s14/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s15/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s15/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s16/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s16/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s17/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s17/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s18/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s18/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s19/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s19/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s2/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s2/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s20/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s20/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s21/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s21/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s22/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s22/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s23/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s23/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s24/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s24/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s25/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s25/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s26/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s26/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s27/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s27/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s28/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s28/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s29/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s29/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s3/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s3/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s30/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s30/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s31/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s31/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s32/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s32/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s33/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s33/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s34/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s34/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s35/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s35/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s36/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s36/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s37/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s37/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s38/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s38/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s39/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s39/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s4/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s4/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/1.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/1.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/2.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/2.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/3.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/3.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/4.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/4.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/5.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/5.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/6.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/7.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/7.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/8.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/8.pgm -------------------------------------------------------------------------------- /training_data/negative/s40/9.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s40/9.pgm -------------------------------------------------------------------------------- /training_data/negative/s5/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s5/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s6/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s6/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s7/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s7/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s8/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s8/10.pgm -------------------------------------------------------------------------------- /training_data/negative/s9/10.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normyx/MMM-Facial-Recognition-OCV3/HEAD/training_data/negative/s9/10.pgm -------------------------------------------------------------------------------- /translations/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Hallo %person, schön dich zu sehen!", 3 | "title": "Gesichtserkennung", 4 | "stranger": "Fremder" 5 | } 6 | -------------------------------------------------------------------------------- /translations/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Hello %person, nice to meet you!", 3 | "title": "Facial-Recognition", 4 | "stranger": "stranger" 5 | } 6 | -------------------------------------------------------------------------------- /translations/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Hallo %person, goed je te zien!", 3 | "title": "Gezichtsherkenning", 4 | "stranger": "vreemde" 5 | } 6 | -------------------------------------------------------------------------------- /translations/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Hej %person, trevligt att träffas!", 3 | "title": "Ansiktsigenkänning", 4 | "stranger": "Besökare" 5 | } 6 | -------------------------------------------------------------------------------- /translations/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Halo %person, senang bertemu Anda!", 3 | "title": "Pengenalan Wajah", 4 | "stranger": "orang asing" 5 | } 6 | -------------------------------------------------------------------------------- /translations/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Hola %person, ¡que bueno verte de nuevo!", 3 | "title": "Facial-Recognition", 4 | "stranger": "desconocido" 5 | } 6 | -------------------------------------------------------------------------------- /translations/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "Bonjour %person, ravi de vous rencontrer !", 3 | "title": "Reconnaissance Faciale", 4 | "stranger": "Etranger" 5 | } 6 | -------------------------------------------------------------------------------- /tools.train.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | 10 | from lib.tools.train import ToolsTrain 11 | 12 | 13 | if __name__ == '__main__': 14 | ToolsTrain().train() 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Magic-Mirror-Module-Facial-Recognition-OCV3", 3 | "version": "2.0.0", 4 | "description": "Facial recognition and module swapping for the Magic Mirror. Based on the work made : https://github.com/paviro/MMM-Facial-Recognition", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/paviro/MMM-Facial-Recognition" 8 | }, 9 | "keywords": [ 10 | "magic mirror", 11 | "smart mirror", 12 | "Facial recognition", 13 | "module" 14 | ], 15 | "author": "Mathieu Goulène", 16 | "contributors": "https://github.com/normyx/MMM-Facial-Recognition-OCV3/graphs/contributors", 17 | "license": "MIT", 18 | "bugs": { 19 | "url": "https://github.com/normyx/MMM-Facial-Recognition-OCV3/issues" 20 | }, 21 | "homepage": "https://github.com/normyx/MMM-Facial-Recognition-OCV3", 22 | "dependencies": { 23 | "python-shell": "^0.4.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Mathieu Goulène 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /tools.capture.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | from lib.tools.capture import ToolsCapture 10 | from lib.tools.config import ToolsConfig 11 | 12 | # to install builtins run `pip install future` 13 | from builtins import input 14 | 15 | 16 | print("What do you want to do?") 17 | print("[1] Capture training images from webcam") 18 | print("[2] Convert '*.jpg' pictures from other cameras to training images") 19 | choice = int(input("--> ")) 20 | print("") 21 | print("Enter the name of the person you want to capture or convert images for.") 22 | capName = str(input("--> ")) 23 | capture = ToolsCapture(capName) 24 | print("Images will be placed in " + ToolsConfig.TRAINING_DIR + capName) 25 | 26 | if choice == 1: 27 | print("") 28 | print('-' * 20) 29 | print("Starting process...") 30 | print("") 31 | capture.capture() 32 | else: 33 | print("") 34 | print("Please enter path to images or drag and drop folder into terminal") 35 | rawDir = str(input("--> ")) 36 | print("") 37 | print('-' * 20) 38 | print("Starting process...") 39 | print("") 40 | capture.convert(rawDir) 41 | -------------------------------------------------------------------------------- /training_data/negative/README.md: -------------------------------------------------------------------------------- 1 | The ORL face database 2 | --------------------- 3 | 4 | This directory contains a set of faces taken between April 1992 and 5 | April 1994 at the Olivetti Research Laboratory in Cambridge, UK. 6 | 7 | There are 10 different images of 40 distinct subjects. For some of the 8 | subjects, the images were taken at different times, varying lighting 9 | slightly, facial expressions (open/closed eyes, smiling/non-smiling) 10 | and facial details (glasses/no-glasses). All the images are taken 11 | against a dark homogeneous background and the subjects are in 12 | up-right, frontal position (with tolerance for some side movement). 13 | 14 | The files are in PGM format and can be conveniently viewed using the 'xv' 15 | program. The size of each image is 92x112, 8-bit grey levels. The images 16 | are organised in 40 directories (one for each subject) named as: 17 | 18 | sX 19 | 20 | where X indicates the subject number (between 1 and 40). In each directory 21 | there are 10 different images of the selected subject named as: 22 | 23 | Y.pgm 24 | 25 | where Y indicates which image for the specific subject (between 1 and 10). 26 | 27 | When using these images, please give credit to Olivetti Research Laboratory. 28 | A convenient reference is the face recognition work which uses some of 29 | these images: 30 | 31 | F. Samaria and A. Harter 32 | "Parameterisation of a stochastic model for human face identification" 33 | 2nd IEEE Workshop on Applications of Computer Vision 34 | December 1994, Sarasota (Florida). 35 | 36 | The paper is available via anonymous ftp from quince.cam-orl.co.uk and is 37 | stored in pub/users/fs/IEEE_workshop.ps.Z 38 | 39 | If you have any question, please email Ferdinando Samaria: fs@cam-orl.co.uk 40 | -------------------------------------------------------------------------------- /node_helper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const NodeHelper = require('node_helper'); 3 | 4 | const PythonShell = require('python-shell'); 5 | var pythonStarted = false 6 | 7 | module.exports = NodeHelper.create({ 8 | 9 | python_start: function () { 10 | const self = this; 11 | const pyshell = new PythonShell('modules/' + this.name + '/lib/mm/facerecognition.py', { mode: 'json', args: [JSON.stringify(this.config)]}); 12 | 13 | pyshell.on('message', function (message) { 14 | 15 | if (message.hasOwnProperty('status')){ 16 | console.log("[" + self.name + "] " + message.status); 17 | } 18 | if (message.hasOwnProperty('login')){ 19 | console.log("[" + self.name + "] " + "User " + self.config.users[message.login.user - 1] + " with confidence " + message.login.confidence + " logged in."); 20 | self.sendSocketNotification('user', {action: "login", user: message.login.user - 1, confidence: message.login.confidence}); 21 | } 22 | if (message.hasOwnProperty('logout')){ 23 | console.log("[" + self.name + "] " + "User " + self.config.users[message.logout.user - 1] + " logged out."); 24 | self.sendSocketNotification('user', {action: "logout", user: message.logout.user - 1}); 25 | } 26 | }); 27 | 28 | pyshell.end(function (err) { 29 | if (err) throw err; 30 | console.log("[" + self.name + "] " + 'finished running...'); 31 | }); 32 | }, 33 | 34 | // Subclass socketNotificationReceived received. 35 | socketNotificationReceived: function(notification, payload) { 36 | if(notification === 'CONFIG') { 37 | this.config = payload 38 | if(!pythonStarted) { 39 | pythonStarted = true; 40 | this.python_start(); 41 | }; 42 | }; 43 | } 44 | 45 | }); 46 | -------------------------------------------------------------------------------- /lib/common/picam.py: -------------------------------------------------------------------------------- 1 | """Raspberry Pi Face Recognition Treasure Box 2 | Pi Camera OpenCV Capture Device 3 | Copyright 2013 Tony DiCola 4 | 5 | Pi camera device capture class for OpenCV. This class allows you to capture a 6 | single image from the pi camera as an OpenCV image. 7 | """ 8 | import io 9 | import cv2 10 | import numpy as np 11 | import picamera 12 | import threading 13 | 14 | from threading import Thread 15 | 16 | class OpenCVCapture(Thread): 17 | def __init__(self, preview=False): 18 | Thread.__init__(self) 19 | self.buffer = io.BytesIO() 20 | self.lock = threading.Lock() 21 | self.running = True 22 | self.preview = preview 23 | 24 | def run(self): 25 | with picamera.PiCamera() as camera: 26 | camera.resolution = (620, 540) 27 | if self.preview: 28 | camera.start_preview(fullscreen=False, window = (100, 20, 620, 540)) 29 | stream = io.BytesIO() 30 | for stream in camera.capture_continuous(stream, format='jpeg', use_video_port=True): 31 | self.lock.acquire() 32 | try: 33 | # swap the stream for the buffer 34 | temp = stream 35 | stream = self.buffer 36 | self.buffer = temp 37 | stream.truncate() 38 | stream.seek(0) 39 | finally: 40 | self.lock.release() 41 | if self.running is False: 42 | break 43 | if self.preview: 44 | camera.stop_preview() 45 | 46 | 47 | def read(self): 48 | """Read a single frame from the camera and return the data as an OpenCV 49 | image (which is a numpy array). 50 | """ 51 | self.lock.acquire() 52 | try: 53 | # Construct a numpy array from the stream 54 | data = np.fromstring(self.buffer.getvalue(), dtype=np.uint8) 55 | image = cv2.imdecode(data, 1) 56 | finally: 57 | self.lock.release() 58 | return image 59 | 60 | def stop(self): 61 | self.running = False 62 | self.join() 63 | -------------------------------------------------------------------------------- /lib/common/commonconfig.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | import os 10 | import sys 11 | import platform 12 | import cv2 13 | from face import FaceDetection 14 | 15 | 16 | class CommonConfig: 17 | 18 | HAAR_FACES = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/resources/haarcascade_frontalface.xml' 19 | HAAR_EYES = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/resources/haarcascade_eye.xml' 20 | HAAR_SCALE_FACTOR = 1.05 21 | HAAR_MIN_NEIGHBORS_FACE = 4 # 4 or 3 trainer/tester used different values. 22 | HAAR_MIN_NEIGHBORS_EYES = 2 23 | HAAR_MIN_SIZE_FACE = (30, 30) 24 | HAAR_MIN_SIZE_EYES = (20, 20) 25 | 26 | 27 | 28 | (CV_MAJOR_VER, CV_MINOR_VER, mv1) = cv2.__version__.split(".") 29 | 30 | # Size (in pixels) to resize images for training and prediction. 31 | # Don't change this unless you also change the size of the training images. 32 | FACE_WIDTH = 92 33 | FACE_HEIGHT = 112 34 | 35 | @classmethod 36 | def getFaceFactor(cls): 37 | return (cls.FACE_HEIGHT / float(cls.FACE_WIDTH)) 38 | 39 | @classmethod 40 | def isCV3(cls): 41 | if cls.CV_MAJOR_VER == '3': 42 | return True 43 | else: 44 | return False 45 | 46 | @classmethod 47 | def model(cls, thresh): 48 | # set the choosen algorithm 49 | model = None 50 | if cls.isCV3(): 51 | model = cv2.face.LBPHFaceRecognizer_create(threshold=thresh) 52 | else: 53 | print("FATAL: OpenCV Major Version must be 3") 54 | os._exit(1) 55 | return model 56 | 57 | @classmethod 58 | def getFaceAndEyesDetection(cls): 59 | return FaceDetection(cls.HAAR_SCALE_FACTOR, 60 | cls.HAAR_MIN_NEIGHBORS_FACE, 61 | cls.HAAR_MIN_SIZE_FACE, 62 | cls.HAAR_FACES, 63 | cls.HAAR_MIN_NEIGHBORS_EYES, 64 | cls.HAAR_MIN_SIZE_EYES, 65 | cls.HAAR_EYES) 66 | @classmethod 67 | def getFaceDetection(cls): 68 | return FaceDetection(cls.HAAR_SCALE_FACTOR, 69 | cls.HAAR_MIN_NEIGHBORS_FACE, 70 | cls.HAAR_MIN_SIZE_FACE, 71 | cls.HAAR_FACES) 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /lib/common/webcam.py: -------------------------------------------------------------------------------- 1 | """Raspberry Pi Face Recognition Treasure Box 2 | Webcam OpenCV Camera Capture Device 3 | Copyright 2013 Tony DiCola 4 | 5 | Webcam device capture class using OpenCV. This class allows you to capture a 6 | single image from the webcam, as if it were a snapshot camera. 7 | 8 | This isn't used by the treasure box code out of the box, but is useful to have 9 | if running the code on a PC where only a webcam is available. The interface is 10 | the same as the picam.py capture class so it can be used in the box.py code 11 | without any changes. 12 | """ 13 | import threading 14 | import time 15 | import cv2 16 | 17 | # Rate at which the webcam will be polled for new images. 18 | CAPTURE_HZ = 30.0 19 | 20 | 21 | class OpenCVCapture(object): 22 | def __init__(self, device_id=0): 23 | """Create an OpenCV capture object associated with the provided webcam 24 | device ID. 25 | """ 26 | # Open the camera. 27 | self._camera = cv2.VideoCapture(device_id) 28 | # self._camera.set(3,160) 29 | #self._camera.set(4,120) 30 | if not self._camera.isOpened(): 31 | self._camera.open() 32 | # Start a thread to continuously capture frames. 33 | # This must be done because different layers of buffering in the webcam 34 | # and OS drivers will cause you to retrieve old frames if they aren't 35 | # continuously read. 36 | self._capture_frame = None 37 | # Use a lock to prevent access concurrent access to the camera. 38 | self._capture_lock = threading.Lock() 39 | self._capture_thread = threading.Thread(target=self._grab_frames) 40 | self._capture_thread.daemon = True 41 | self._capture_thread.start() 42 | 43 | def _grab_frames(self): 44 | while True: 45 | retval, frame = self._camera.read() 46 | with self._capture_lock: 47 | self._capture_frame = None 48 | if retval: 49 | self._capture_frame = frame 50 | time.sleep(1.0 / CAPTURE_HZ) 51 | 52 | def read(self): 53 | """Read a single frame from the camera and return the data as an OpenCV 54 | image (which is a numpy array). 55 | """ 56 | frame = None 57 | with self._capture_lock: 58 | frame = self._capture_frame 59 | # If there are problems, keep retrying until an image can be read. 60 | while frame is None: 61 | time.sleep(0) 62 | with self._capture_lock: 63 | frame = self._capture_frame 64 | # Return the capture image data. 65 | return frame 66 | 67 | def stop(self): 68 | print '{"status":"Terminating..."}' 69 | -------------------------------------------------------------------------------- /lib/mm/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding: utf8 3 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | import os 10 | import json 11 | import sys 12 | import platform 13 | sys.path.append((os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/common/')) 14 | from commonconfig import CommonConfig 15 | from face import FaceDetection 16 | 17 | 18 | class MMConfig (CommonConfig): 19 | 20 | CONFIG_DATA = json.loads(sys.argv[1]); 21 | THRESHOLD_ATTR = 'threshold' 22 | USE_USB_CAM_ATTR = 'useUSBCam' 23 | TRAINING_FILE_ATTR = 'trainingFile' 24 | INTERVAL_ATTR = 'interval' 25 | LOGOUT_DELAY_ATTR = 'logoutDelay' 26 | USERS_ATTR = 'users' 27 | DEFAULT_CLASS_ATTR = 'defaultClass' 28 | EVERYONE_CLASS_ATTR = 'everyoneClass' 29 | WELCOME_MESSAGE_ATTR = 'welcomeMessage' 30 | 31 | @classmethod 32 | def toNode(cls, type, message): 33 | print(json.dumps({type: message})) 34 | sys.stdout.flush() 35 | @classmethod 36 | def getTrainingFile(cls): 37 | return cls.get(cls.TRAINING_FILE_ATTR) 38 | @classmethod 39 | def getInterval(cls): 40 | return cls.get(cls.INTERVAL_ATTR) 41 | @classmethod 42 | def getLogoutDelay(cls): 43 | return cls.get(cls.LOGOUT_DELAY_ATTR) 44 | @classmethod 45 | def getUsers(cls): 46 | return cls.get(cls.USERS_ATTR) 47 | @classmethod 48 | def getDefaultClass(cls): 49 | return cls.get(cls.DEFAULT_CLASS_ATTR) 50 | @classmethod 51 | def getEveryoneClass(cls): 52 | return cls.get(cls.EVERYONE_CLASS_ATTR) 53 | @classmethod 54 | def getWelcomeMessage(cls): 55 | return cls.get(cls.WELCOME_MESSAGE_ATTR) 56 | 57 | @classmethod 58 | def getUseUSBCam(cls): 59 | return cls.get(cls.USE_USB_CAM_ATTR) 60 | 61 | @classmethod 62 | def getThreshold(cls): 63 | return cls.get(cls.THRESHOLD_ATTR) 64 | 65 | 66 | @classmethod 67 | def get(cls,key): 68 | return cls.CONFIG_DATA[key] 69 | 70 | @classmethod 71 | def getCamera(cls): 72 | cls.toNode("status", "-" * 20) 73 | try: 74 | if cls.get("useUSBCam") == False: 75 | import picam 76 | cls.toNode("status", "PiCam loaded...") 77 | cam = picam.OpenCVCapture() 78 | cam.start() 79 | return cam 80 | else: 81 | raise Exception 82 | except Exception: 83 | import webcam 84 | cls.toNode("status", "Webcam loaded...") 85 | return webcam.OpenCVCapture(device_id=0) 86 | cls.toNode("status", "-" * 20) 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /lib/tools/train.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | 10 | # to install builtins run `pip install future` 11 | from builtins import input 12 | 13 | import cv2 14 | import numpy as np 15 | import os 16 | 17 | from lib.tools.config import ToolsConfig 18 | from lib.common.face import FaceDetection 19 | 20 | class ToolsTrain: 21 | def __init__(self): 22 | 23 | self.face = ToolsConfig.getFaceDetection() 24 | 25 | def prepareImage(self, filename): 26 | """Read an image as grayscale and resize it to the appropriate size for 27 | training the face recognition model. 28 | """ 29 | return self.face.resize(cv2.imread(filename, cv2.IMREAD_GRAYSCALE),ToolsConfig.FACE_WIDTH, ToolsConfig.FACE_HEIGHT) 30 | 31 | 32 | def train(self): 33 | print("Reading training images...") 34 | print('-' * 20) 35 | faces = [] 36 | labels = [] 37 | imageDirsWithLabel = [[0, "negative"]] 38 | imageDirs = os.listdir(ToolsConfig.TRAINING_DIR) 39 | imageDirs = [x for x in imageDirs if not x.startswith('.') and not x.startswith('negative')] 40 | pos_count = 0 41 | 42 | for i in range(len(imageDirs)): 43 | print("Assign label " + str(i + 1) + " to " + imageDirs[i]) 44 | imageDirsWithLabel.append([i + 1, imageDirs[i]]) 45 | print('-' * 20) 46 | print('') 47 | 48 | # Für jedes Label/Namen Paar: 49 | # for every label/name pair: 50 | for j in range(0, len(imageDirsWithLabel)): 51 | # Label zu den Labels hinzufügen / Bilder zu den Gesichtern 52 | for filename in ToolsConfig.walkFiles(ToolsConfig.TRAINING_DIR + str(imageDirsWithLabel[j][1]), '*.pgm'): 53 | faces.append(self.prepareImage(filename)) 54 | labels.append(imageDirsWithLabel[j][0]) 55 | if imageDirsWithLabel[j][0] != 0: 56 | pos_count += 1 57 | 58 | # Print statistic on how many pictures per person we have collected 59 | print('Read ' + str(pos_count) + ' positive images and ' + str(labels.count(0)) + ' negative images.') 60 | print('') 61 | for j in range(1, max(labels) + 1): 62 | print(str(labels.count(j)) + " images from subject " + imageDirs[j - 1]) 63 | 64 | # Train model 65 | print('-' * 20) 66 | print('') 67 | print('Training model with threshold {0}' 68 | .format(ToolsConfig.POSITIVE_THRESHOLD)) 69 | model = ToolsConfig.model() 70 | 71 | model.train(np.asarray(faces), np.asarray(labels)) 72 | 73 | # Save model results 74 | model.write(ToolsConfig.TRAINING_FILE) 75 | print('Training data saved to', ToolsConfig.TRAINING_FILE) 76 | print('') 77 | print("Please add or update (if you added new people not just new images) " + str(imageDirs) + " inside config.js (mirror module) or config.py (model tester). You can change the names to whatever you want, just keep the same order and you'll be fine.") 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /lib/tools/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | import os 10 | import sys 11 | sys.path.append((os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/common/')) 12 | from commonconfig import CommonConfig 13 | from face import FaceDetection 14 | import platform 15 | import cv2 16 | import fnmatch 17 | 18 | import glob 19 | 20 | 21 | 22 | class ToolsConfig (CommonConfig): 23 | # File to save and load face recognizer model. 24 | TRAINING_FILE = 'training.xml' 25 | TRAINING_DIR = './training_data/' 26 | POSITIVE_THRESHOLD=80 27 | 28 | # The name of the person to be captured 29 | captureName = '' 30 | 31 | 32 | USERS = ["User1", "User2", "User3", "User4", "User5", "User6", "User7", "User8", "User9", "User10"] 33 | 34 | if ('FACE_USERS' in os.environ): 35 | u = os.environ['FACE_USERS'] 36 | USERS = u.split(',') 37 | print(USERS) 38 | else: 39 | # NOTE: Substitute your own user names here. These are just 40 | # placeholders, and you will get errors if your training.xml file 41 | # has more than 10 user classes. 42 | print('Remember to set the name list environment variable FACE_USERS') 43 | 44 | 45 | 46 | 47 | 48 | def __init__(self, capName=None): 49 | self.captureName = capName 50 | 51 | 52 | def createCaptureDirIfNotExisting(self): 53 | capturePath = self.getCapturePath() 54 | if not os.path.exists(capturePath): os.makedirs(capturePath) 55 | 56 | def getCapturePath(self): 57 | return ToolsConfig.TRAINING_DIR + self.captureName 58 | 59 | def getCapturedFiles(self, pattern): 60 | return os.path.join(self.getCapturePath(), pattern) 61 | 62 | def getNewCaptureFile(self): 63 | self.createCaptureDirIfNotExisting() 64 | files = sorted(glob.glob(self.getCapturedFiles('[0-9][0-9][0-9].pgm'))) 65 | count = 0 66 | if len(files) > 0: 67 | # Grab the count from the last filename. 68 | count = int(files[-1][-7:-4]) + 1 69 | return self.getCapturedFiles('%03d.pgm' % count), count 70 | 71 | 72 | 73 | @classmethod 74 | def walkFiles(cls, directory, match='*'): 75 | """Generator function to iterate through all files in a directory 76 | recursively which match the given filename match parameter. 77 | """ 78 | for root, dirs, files in os.walk(directory): 79 | for filename in fnmatch.filter(files, match): 80 | yield os.path.join(root, filename) 81 | 82 | 83 | @classmethod 84 | def getCamera(cls): 85 | try: 86 | import picam 87 | print("Loading PiCamera") 88 | capture = picam.OpenCVCapture(True) 89 | print("PiCamera loaded") 90 | capture.start() 91 | return capture 92 | except Exception as e: 93 | print(e) 94 | import webcam 95 | return webcam.OpenCVCapture(device_id=0) 96 | 97 | @classmethod 98 | def model(cls): 99 | return CommonConfig.model(cls.POSITIVE_THRESHOLD) 100 | 101 | @classmethod 102 | def userLabel(cls,i): 103 | """ Generate the user lable. Lables are 1 indexed. 104 | """ 105 | i = i - 1 106 | if i < 0 or i > len(ToolsConfig.USERS): 107 | return "User" + str(int(i)) 108 | return ToolsConfig.USERS[i] 109 | -------------------------------------------------------------------------------- /MMM-Facial-Recognition-OCV3.js: -------------------------------------------------------------------------------- 1 | /* global Module */ 2 | 3 | /* Magic Mirror 4 | * Module: MMM-Facial-Recognition-OC3 5 | * 6 | * By Mathieu Goulène - Based on work made by Paul-Vincent Roll 7 | * MIT Licensed. 8 | */ 9 | 10 | Module.register('MMM-Facial-Recognition-OCV3',{ 11 | 12 | defaults: { 13 | // Threshold for the confidence of a recognized face before it's considered a 14 | // positive match. Confidence values below this threshold will be considered 15 | // a positive match because the lower the confidence value, or distance, the 16 | // more confident the algorithm is that the face was correctly detected. 17 | threshold: 50, 18 | // force the use of a usb webcam on raspberry pi (on other platforms this is always true automatically) 19 | useUSBCam: false, 20 | // Path to your training xml 21 | trainingFile: 'modules/MMM-Facial-Recognition-OCV3/training.xml', 22 | // recognition intervall in seconds (smaller number = faster but CPU intens!) 23 | interval: 2, 24 | // Logout delay after last recognition so that a user does not get instantly logged out if he turns away from the mirror for a few seconds 25 | logoutDelay: 15, 26 | // Array with usernames (copy and paste from training script) 27 | users: [], 28 | //Module set used for strangers and if no user is detected 29 | defaultClass: "default", 30 | //Set of modules which should be shown for every user 31 | everyoneClass: "everyone", 32 | // Boolean to toggle welcomeMessage 33 | welcomeMessage: true 34 | }, 35 | 36 | // Define required translations. 37 | getTranslations: function() { 38 | return { 39 | en: "translations/en.json", 40 | de: "translations/de.json", 41 | es: "translations/es.json", 42 | zh: "translations/zh.json", 43 | nl: "translations/nl.json", 44 | sv: "translations/sv.json", 45 | fr: "translations/fr.json", 46 | id: "translations/id.json" 47 | }; 48 | }, 49 | 50 | login_user: function () { 51 | 52 | var self = this; 53 | 54 | MM.getModules().withClass(this.config.defaultClass).exceptWithClass(this.config.everyoneClass).enumerate(function(module) { 55 | module.hide(1000, function() { 56 | Log.log(module.name + ' is hidden.'); 57 | }, {lockString: self.identifier}); 58 | }); 59 | 60 | MM.getModules().withClass(this.current_user).enumerate(function(module) { 61 | module.show(1000, function() { 62 | Log.log(module.name + ' is shown.'); 63 | }, {lockString: self.identifier}); 64 | }); 65 | 66 | this.sendNotification("CURRENT_USER", this.current_user); 67 | }, 68 | logout_user: function () { 69 | 70 | var self = this; 71 | 72 | MM.getModules().withClass(this.current_user).enumerate(function(module) { 73 | module.hide(1000, function() { 74 | Log.log(module.name + ' is hidden.'); 75 | }, {lockString: self.identifier}); 76 | }); 77 | 78 | MM.getModules().withClass(this.config.defaultClass).exceptWithClass(this.config.everyoneClass).enumerate(function(module) { 79 | module.show(1000, function() { 80 | Log.log(module.name + ' is shown.'); 81 | }, {lockString: self.identifier}); 82 | }); 83 | 84 | this.sendNotification("CURRENT_USER", "None"); 85 | }, 86 | 87 | // Override socket notification handler. 88 | socketNotificationReceived: function(notification, payload) { 89 | if (payload.action == "login"){ 90 | if (this.current_user_id != payload.user){ 91 | this.logout_user() 92 | } 93 | if (payload.user == -1){ 94 | this.current_user = this.translate("stranger") 95 | this.current_user_id = payload.user; 96 | } 97 | else{ 98 | this.current_user = this.config.users[payload.user]; 99 | this.current_user_id = payload.user; 100 | this.login_user() 101 | } 102 | 103 | if (this.config.welcomeMessage) { 104 | this.sendNotification("SHOW_ALERT", {type: "notification", message: this.translate("message").replace("%person", this.current_user), title: this.translate("title")}); 105 | } 106 | } 107 | else if (payload.action == "logout"){ 108 | this.logout_user() 109 | this.current_user = null; 110 | } 111 | }, 112 | 113 | notificationReceived: function(notification, payload, sender) { 114 | if (notification === 'DOM_OBJECTS_CREATED') { 115 | var self = this; 116 | MM.getModules().exceptWithClass("default").enumerate(function(module) { 117 | module.hide(1000, function() { 118 | Log.log('Module is hidden.'); 119 | }, {lockString: self.identifier}); 120 | }); 121 | } 122 | }, 123 | 124 | start: function() { 125 | this.current_user = null; 126 | this.sendSocketNotification('CONFIG', this.config); 127 | Log.info('Starting module: ' + this.name); 128 | } 129 | 130 | }); 131 | -------------------------------------------------------------------------------- /tools.facerecognition.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf8 3 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2018 Mathieu Goulène (MIT License) 7 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 8 | """ 9 | import cv2 # OpenCV Library 10 | from lib.common.face import FaceDetection 11 | from lib.tools.config import ToolsConfig 12 | import time 13 | import os 14 | import signal 15 | import sys 16 | 17 | model = ToolsConfig.model() 18 | face = ToolsConfig.getFaceAndEyesDetection() 19 | camera = ToolsConfig.getCamera() 20 | 21 | print('Loading training data...') 22 | model.read("training.xml") 23 | print('Training data loaded!') 24 | 25 | 26 | def clean_shutdown(signum, frame): 27 | """Release camera and close windows 28 | """ 29 | camera.stop() 30 | cv2.destroyAllWindows() 31 | sys.exit(0) 32 | 33 | 34 | signal.signal(signal.SIGINT, clean_shutdown) 35 | signal.signal(signal.SIGTERM, clean_shutdown) 36 | signal.signal(signal.SIGSEGV, clean_shutdown) 37 | 38 | # Loadking the training data should give enough time to 39 | # warm up the picamera. If not, uncomment the following 40 | # line 41 | # time.sleep(1) 42 | 43 | while True: 44 | # camera video feed 45 | frame = camera.read() 46 | 47 | image = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) 48 | 49 | faces = face.detect_faces(image) 50 | 51 | if faces is not None: 52 | for i in range(0, len(faces)): 53 | if faces[i] is None: 54 | print("Bad face object None") 55 | continue 56 | if len(faces[i]) != 4: 57 | print("Bad face object {0}".format(faces[i])) 58 | continue 59 | x, y, w, h = faces[i] 60 | # x and y coordinates of the face 61 | x_face = x 62 | y_face = y 63 | crop = face.crop(image, x, y, w, h,int(ToolsConfig.getFaceFactor() * w)) 64 | 65 | # confidence the lower the stronger the match 66 | 67 | label, confidence = model.predict(crop) 68 | 69 | match = "None" 70 | match = "None" 71 | label_str = "None" 72 | if (label != -1 and label != 0): 73 | label_str = ToolsConfig.userLabel(label) 74 | print(confidence) 75 | # the closer confidence is to zer the stronger the match 76 | if confidence < 0.6 * ToolsConfig.POSITIVE_THRESHOLD: 77 | label_str = 'Strong:' + label_str 78 | elif confidence < ToolsConfig.POSITIVE_THRESHOLD: 79 | label_str = 'Weak:' + label_str 80 | elif confidence < 1.5 * ToolsConfig.POSITIVE_THRESHOLD: 81 | label_str = "Guess: " + label_str 82 | else: 83 | lavel_str = "Unknown" 84 | 85 | print(label_str) 86 | 87 | # face rectable 88 | cv2.rectangle(frame, (x, y), (x + w, y + h), 255) 89 | # height 90 | cv2.putText(frame, 91 | str(int(h)), 92 | (x + w, y + h + 15), 93 | cv2.FONT_HERSHEY_SIMPLEX, 94 | 0.5, 95 | (255, 255, 255), 96 | 1) 97 | # label user 98 | cv2.putText(frame, 99 | label_str, 100 | (x - 3, y - 8), 101 | cv2.FONT_HERSHEY_SIMPLEX, 102 | 1.5, 103 | (255, 255, 255), 104 | 1) 105 | # confidence 106 | cv2.putText(frame, 107 | str(int(confidence)), 108 | (x - 2, y + h + 15), 109 | cv2.FONT_HERSHEY_SIMPLEX, 110 | 0.5, 111 | (255, 255, 255), 112 | 1) 113 | if h > 250: 114 | # If person is close enough, mark the eyes 115 | eyes = face.detect_eyes(crop) 116 | for i in range(0, len(eyes)): 117 | x, y, w, h = eyes[i] 118 | cv2.rectangle(frame, 119 | (x + x_face, y + y_face - 30), 120 | (x + x_face + w + 10, y + y_face + h - 40), 121 | (94, 255, 0)) 122 | cv2.putText(frame, "Eye " + str(i), 123 | (x + x_face, y + y_face - 5), 124 | cv2.FONT_HERSHEY_SIMPLEX, 125 | 0.5, 126 | (255, 255, 255), 127 | 1) 128 | 129 | if ('DISPLAY' in os.environ): 130 | # Display Image 131 | cv2.imshow('Facial recognition', frame) 132 | if cv2.waitKey(1) == ord('q'): 133 | break 134 | else: 135 | print('No windowing system, writing face.jpg image') 136 | camera.stop() 137 | break 138 | 139 | 140 | clean_shutdown() 141 | -------------------------------------------------------------------------------- /lib/tools/capture.py: -------------------------------------------------------------------------------- 1 | # coding: utf8 2 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2018 Mathieu Goulène (MIT License) 6 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 7 | """ 8 | from __future__ import division 9 | # need to run `pip install future` for builtins (python 2 & 3 compatibility) 10 | from builtins import input 11 | 12 | import os 13 | import sys 14 | import re 15 | 16 | import cv2 17 | sys.path.append((os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/common/')) 18 | 19 | from config import ToolsConfig 20 | from face import FaceDetection 21 | 22 | class ToolsCapture: 23 | def __init__(self, capName=None): 24 | self.face = ToolsConfig.getFaceDetection() 25 | self.captureName = capName 26 | 27 | 28 | 29 | def capture(self): 30 | toolsConfig = ToolsConfig(self.captureName) 31 | camera = toolsConfig.getCamera() 32 | print('Capturing positive training images.') 33 | print('Press enter to capture an image.') 34 | print('Press Ctrl-C to quit.') 35 | while True: 36 | try: 37 | input() 38 | print('Capturing image...') 39 | image = camera.read() 40 | # Convert image to grayscale. 41 | image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) 42 | # Get coordinates of single face in captured image. 43 | result = self.face.detect_single(image) 44 | if result is None: 45 | print('Could not detect single face!' 46 | + ' Check the image in capture.pgm' 47 | + ' to see what was captured and try' 48 | + ' again with only one face visible.') 49 | continue 50 | x, y, w, h = result 51 | # Crop image as close as possible to desired face aspect ratio. 52 | # Might be smaller if face is near edge of image. 53 | crop = self.face.crop(image, x, y, w, h,int(ToolsConfig.getFaceFactor() * w)) 54 | # Save image to file. 55 | filename, count = toolsConfig.getNewCaptureFile() 56 | cv2.imwrite(filename, crop) 57 | print('Found face and wrote training image', filename) 58 | except KeyboardInterrupt: 59 | camera.stop() 60 | break 61 | 62 | 63 | def convert(self, rawDir): 64 | toolsConfig = ToolsConfig(self.captureName) 65 | filename, count = toolsConfig.getNewCaptureFile() 66 | 67 | for filename in ToolsConfig.walkFiles(rawDir, '*'): 68 | if not re.match('.+\.(jpg|jpeg)$', filename, re.IGNORECASE): 69 | print("file {0} does not have the correct file extention." 70 | .format(filename)) 71 | continue 72 | print("processing {0}".format(filename)) 73 | image = cv2.imread(filename) 74 | height, width, channels = image.shape 75 | image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) 76 | # TODO: check for multiple faces and warn 77 | # Get coordinates of single face in captured image. 78 | result = self.face.detect_single(image) 79 | if result is None: 80 | if (height + width > 800): 81 | # it's a big image resize it and try again 82 | mult = 0.5 83 | print('Resizing from ({0},{1}) -> ({2},{3})' 84 | .format(height, width, 85 | int(mult*height), int(mult*width))) 86 | image2 = cv2.resize(image, None, fx=mult, fy=mult) 87 | result = self.face.detect_single(image2) 88 | if result is None: 89 | mult = 0.25 90 | print('Resizing from ({0},{1}) -> ({2},{3})' 91 | .format(height, width, 92 | int(mult*height), int(mult*width))) 93 | image2 = cv2.resize(image, None, fx=mult, fy=mult) 94 | result = self.face.detect_single(image2) 95 | if result is not None: 96 | print('It worked, found a face in resized image!') 97 | image = image2 98 | if result is None: 99 | print('No face found') 100 | continue 101 | x, y, w, h = result 102 | # Crop image as close as possible to desired face aspect ratio. 103 | # Might be smaller if face is near edge of image. 104 | crop = self.face.crop(image, x, y, w, h,int(ToolsConfig.getFaceFactor() * w)) 105 | # Save image to file. 106 | toFilename = os.path.join(ToolsConfig.TRAINING_DIR, 107 | self.captureName, '%03d.pgm' % count) 108 | cv2.imwrite(toFilename, crop) 109 | print('Found face and wrote training image', toFilename) 110 | count += 1 111 | -------------------------------------------------------------------------------- /lib/common/face.py: -------------------------------------------------------------------------------- 1 | # coding: utf8 2 | """MMM-Facial-Recognition-OCV3 - MagicMirror Module 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2018 Mathieu Goulène (MIT License) 6 | Based on work by Paul-Vincent Roll (Copyright 2016) (MIT License) 7 | """ 8 | 9 | import cv2 10 | import sys 11 | 12 | 13 | class FaceDetection: 14 | 'Face Detection Class' 15 | def __init__(self, 16 | haar_scale_factor, 17 | haar_min_neighbors_face, 18 | haar_min_size_face, 19 | haar_faces_file=None, 20 | haar_min_neighbors_eyes=None, 21 | haar_min_size_eyes=None, 22 | haar_eyes_file=None) : 23 | self.haar_scale_factor = haar_scale_factor 24 | self.haar_min_neighbors_face = haar_min_neighbors_face 25 | self.haar_min_size_face = haar_min_size_face 26 | self.haar_faces_file = haar_min_size_face 27 | self.haar_min_neighbors_eyes = haar_min_neighbors_eyes 28 | self.haar_min_size_eyes = haar_min_size_eyes 29 | self.haar_eyes_file = haar_eyes_file 30 | if haar_faces_file is not None : self.haar_faces = cv2.CascadeClassifier(haar_faces_file) 31 | if haar_eyes_file is not None : self.haar_eyes = cv2.CascadeClassifier(haar_eyes_file) 32 | 33 | def detect_single(self, image): 34 | """Return bounds (x, y, width, height) of detected face in grayscale image. 35 | If no face or more than one face are detected, None is returned. 36 | """ 37 | faces = self.haar_faces.detectMultiScale(image, 38 | scaleFactor=self.haar_scale_factor, 39 | minNeighbors=self.haar_min_neighbors_face, 40 | minSize=self.haar_min_size_face, 41 | flags=cv2.CASCADE_SCALE_IMAGE) 42 | if len(faces) != 1: 43 | return None 44 | return faces[0] 45 | 46 | def detect_faces(self, image): 47 | """Return bounds (x, y, width, height) of detected face in grayscale image. 48 | return all faces found in the image 49 | """ 50 | faces = self.haar_faces.detectMultiScale(image, 51 | scaleFactor=self.haar_scale_factor, 52 | minNeighbors=self.haar_min_neighbors_face, 53 | minSize=self.haar_min_size_face, 54 | flags=cv2.CASCADE_SCALE_IMAGE) 55 | return faces 56 | 57 | def detect_eyes(self, image): 58 | eyes = self.haar_eyes.detectMultiScale(image, 59 | scaleFactor=self.haar_scale_factor, 60 | minNeighbors=self.haar_min_neighbors_eyes, 61 | minSize=self.haar_min_size_eyes, 62 | flags=cv2.CASCADE_SCALE_IMAGE) 63 | return eyes 64 | 65 | 66 | def eyes_to_face(self, eyes): 67 | """Return bounds (x, y, width, height) of estimated face location based 68 | on the location of a pair of eyes. 69 | TODO: Sort through multiple eyes (> 2) to find pairs and detect multiple 70 | faces. 71 | """ 72 | if (len(eyes) != 2): 73 | print("Don't know what to do with {0} eye(s).".format(len(eyes))) 74 | for eye in eyes: 75 | print('{0:4d} {1:4d} {2:3d} {3:3d}' 76 | .format(eye[0], eye[1], eye[2], eye[3])) 77 | return None 78 | x0, y0, w0, h0 = eyes[0] 79 | x1, y1, w1, h1 = eyes[1] 80 | # compute centered coordinates for the eyes and face 81 | cx0 = x0 + int(0.5*w0) 82 | cx1 = x1 + int(0.5*w1) 83 | cy0 = y0 + int(0.5*h0) 84 | cy1 = y1 + int(0.5*h1) 85 | left_cx = min(cx0, cx1) 86 | right_cx = max(cx0, cx1) 87 | x_face_center = int((left_cx + right_cx)/2) 88 | y_face_center = int((cy0 + cy1)/2) 89 | eye_width = right_cx - left_cx 90 | # eye_width is about 2/5 the total face width 91 | # and 2/6 the total height 92 | w = int(5 * eye_width / 2) 93 | h = int(3 * eye_width) 94 | x = max(0, x_face_center - int(1.25 * eye_width)) 95 | y = max(0, y_face_center - int(1.5 * eye_width)) 96 | return [[x, y, w, h]] 97 | 98 | 99 | def crop(self, image, x, y, w, h, crop_height): 100 | """Crop box defined by x, y (upper left corner) and w, h (width and height) 101 | to an image with the same aspect ratio as the face training data. Might 102 | return a smaller crop if the box is near the edge of the image. 103 | """ 104 | midy = y + h / 2 105 | y1 = int(max(0, midy - crop_height / 2)) 106 | y2 = int(min(image.shape[0] - 1, midy + crop_height / 2)) 107 | return image[y1:y2, x:x + w] 108 | 109 | 110 | def resize(self, image, face_width, face_height): 111 | """Resize a face image to the proper size for training and detection. 112 | """ 113 | return cv2.resize(image, (face_width, face_height), interpolation=cv2.INTER_LANCZOS4) 114 | -------------------------------------------------------------------------------- /lib/mm/facerecognition.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding: utf8 3 | """MMM-Facial-Recognition - MagicMirror Module 4 | Face Recognition Script 5 | The MIT License (MIT) 6 | 7 | Copyright (c) 2016 Paul-Vincent Roll (MIT License) 8 | Based on work by Tony DiCola (Copyright 2013) (MIT License) 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | """ 16 | 17 | import sys 18 | import os 19 | sys.path.append((os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))+ '/common/')) 20 | import time 21 | from face import FaceDetection 22 | import cv2 23 | from config import MMConfig 24 | import signal 25 | 26 | 27 | 28 | MMConfig.toNode("status", "Facerecognition started...") 29 | 30 | # Setup variables 31 | current_user = None 32 | last_match = None 33 | detection_active = True 34 | login_timestamp = time.time() 35 | same_user_detected_in_row = 0 36 | 37 | # Load training data into model 38 | MMConfig.toNode("status", 'Loading training data...') 39 | 40 | # load the model 41 | model = cv2.face.LBPHFaceRecognizer_create(threshold=MMConfig.getThreshold()) 42 | 43 | # Load training file specified in config.js 44 | model.read(MMConfig.getTrainingFile()) 45 | MMConfig.toNode("status", 'Training data loaded!') 46 | 47 | # get camera 48 | camera = MMConfig.getCamera() 49 | 50 | def shutdown(self, signum): 51 | MMConfig.toNode("status", 'Shutdown: Cleaning up camera...') 52 | camera.stop() 53 | quit() 54 | 55 | signal.signal(signal.SIGINT, shutdown) 56 | 57 | # sleep for a second to let the camera warm up 58 | time.sleep(1) 59 | 60 | face = MMConfig.getFaceDetection() 61 | 62 | # Main Loop 63 | while True: 64 | # Sleep for x seconds specified in module config 65 | time.sleep(MMConfig.getInterval()) 66 | # if detecion is true, will be used to disable detection if you use a PIR sensor and no motion is detected 67 | if detection_active is True: 68 | # Get image 69 | image = camera.read() 70 | # Convert image to grayscale. 71 | image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) 72 | # Get coordinates of single face in captured image. 73 | result = face.detect_single(image) 74 | # No face found, logout user? 75 | if result is None: 76 | # if last detection exceeds timeout and there is someone logged in -> logout! 77 | if (current_user is not None and time.time() - login_timestamp > MMConfig.getLogoutDelay()): 78 | # callback logout to node helper 79 | MMConfig.toNode("logout", {"user": current_user}) 80 | same_user_detected_in_row = 0 81 | current_user = None 82 | continue 83 | # Set x,y coordinates, height and width from face detection result 84 | x, y, w, h = result 85 | # Crop image on face. If algorithm is not LBPH also resize because in all other algorithms image resolution has to be the same as training image resolution. 86 | crop = face.crop(image, x, y, w, h,int(MMConfig.getFaceFactor() * w)) 87 | # Test face against model. 88 | label, confidence = model.predict(crop) 89 | # We have a match if the label is not "-1" which equals unknown because of exceeded threshold and is not "0" which are negtive training images (see training folder). 90 | if (label != -1 and label != 0): 91 | # Set login time 92 | login_timestamp = time.time() 93 | # Routine to count how many times the same user is detected 94 | if (label == last_match and same_user_detected_in_row < 2): 95 | # if same user as last time increment same_user_detected_in_row +1 96 | same_user_detected_in_row += 1 97 | if label != last_match: 98 | # if the user is diffrent reset same_user_detected_in_row back to 0 99 | same_user_detected_in_row = 0 100 | # A user only gets logged in if he is predicted twice in a row minimizing prediction errors. 101 | if (label != current_user and same_user_detected_in_row > 1): 102 | current_user = label 103 | # Callback current user to node helper 104 | MMConfig.toNode("login", {"user": label, "confidence": str(confidence)}) 105 | # set last_match to current prediction 106 | last_match = label 107 | # if label is -1 or 0, current_user is not already set to unknown and last prediction match was at least 5 seconds ago 108 | # (to prevent unknown detection of a known user if he moves for example and can't be detected correctly) 109 | elif (current_user != 0 and time.time() - login_timestamp > 5): 110 | # Set login time 111 | login_timestamp = time.time() 112 | # set current_user to unknown 113 | current_user = 0 114 | # callback to node helper 115 | MMConfig.toNode("login", {"user": current_user, "confidence": None}) 116 | else: 117 | continue 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # MMM-Facial-Recognition-OCV3 3 | This module is a facial recognition module (detection + recognition) for [MagicMirror²](https://magicmirror.builders/). 4 | This module is mainly inspired by the one developped by [paviro](https://github.com/paviro) : [MMM-Facial-Recognition](https:https://github.com/paviro/MMM-Facial-Recognition). 5 | [TOC] 6 | # Introduction 7 | This module uses the [OpenCV](https://opencv.org/) library and is only compatible with the v3 (only tested with the version 3.3 and the rest of the description is based on this version. Some adaptions will probably be needed to support other version). 8 | It has been adapted to : 9 | * Be able to support the v3.3.0 OpenCV version (the paviro one did not) 10 | * Merge the 2 projects [MMM-Facial-Recognition](https://github.com/paviro/MMM-Facial-Recognition) (MagicMirror module) and [MMM-Facial-Recognition-Tools](https://github.com/paviro/MMM-Facial-Recognition-Tools) (tools to capture and train the model) into one project 11 | * Mutualize some code and move some of into Classes 12 | * Explain the way to build and install OpenCV 3.3.0 (required, the version is not available into a repository) 13 | * Remove the Fisher and Eigen Algorithm that did not work well for Raspberry. Only LBPH Algorithm is usable. 14 | 15 | Get this module with the command line : 16 | ```shell= 17 | cd ~/MagicMirror/modules/ 18 | git clone https://github.com/normyx/MMM-Facial-Recognition-OCV3.git 19 | ``` 20 | # Prepare the module 21 | This section explain the way to prepare the module, by installing the dependencies and train the model. 22 | ## Building OpenCV 23 | This is the most time consuming part, because the OpenCV library need to be build by the raspberry (it may take 2 hours). 24 | This section is a mix of 2 great articles found[^first][^second]. 25 | ### Configuring the Raspberry 26 | First, install and update all the elements before compiling : 27 | ```shell= 28 | sudo apt-get update 29 | sudo apt-get upgrade 30 | sudo rpi-update 31 | sudo reboot 32 | sudo apt-get install build-essential git cmake pkg-config 33 | sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev 34 | sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev 35 | sudo apt-get install libxvidcore-dev libx264-dev 36 | sudo apt-get install libgtk2.0-dev 37 | sudo apt-get install libatlas-base-dev gfortran 38 | cd ~ 39 | git clone https://github.com/Itseez/opencv.git 40 | cd opencv 41 | git checkout 3.3.0 42 | cd ~ 43 | git clone https://github.com/Itseez/opencv_contrib.git 44 | cd opencv_contrib 45 | git checkout 3.3.0 46 | ``` 47 | ### Build OpenCV 48 | This section may take long ... 49 | First get pip cross version : 50 | ```shell= 51 | wget https://bootstrap.pypa.io/get-pip.py 52 | ``` 53 | Two Python alternatives to build OpenCV : v2.7 or v3.0 54 | > If using **Python v2.7** : 55 | ```shell= 56 | sudo apt-get install python2.7-dev 57 | sudo python get-pip.py 58 | ``` 59 | > If using **Python v3.0** : 60 | ```shell= 61 | sudo apt-get install python3-dev 62 | sudo python3 get-pip.py 63 | ``` 64 | Before you start the compile process, you should increase your swap space size. This enables OpenCV to compile with all four cores of the Raspberry PI without the compile hanging due to memory problems. 65 | Open your `/etc/dphys-swapfile` and then edit the `CONF_SWAPSIZE` variable: 66 | ```shell= 67 | # set size to absolute value, leaving empty (default) then uses computed value 68 | # you most likely don't want this, unless you have an special disk situation 69 | # CONF_SWAPSIZE=100 70 | CONF_SWAPSIZE=1024 71 | ``` 72 | To activate the new swap space, restart the swap service: 73 | ```shell= 74 | sudo /etc/init.d/dphys-swapfile stop 75 | sudo /etc/init.d/dphys-swapfile start 76 | ``` 77 | *It is possible to burn out the Raspberry Pi microSD card because flash memory has a limited number of writes until the card won’t work. It is highly recommended that you change this setting back to the default when you are done compiling and testing the install.* 78 | 79 | And then, build OpenCV : 80 | ```shell= 81 | pip install numpy 82 | cd ~/opencv 83 | mkdir build 84 | cd build 85 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ 86 | -D CMAKE_INSTALL_PREFIX=/usr/local \ 87 | -D INSTALL_C_EXAMPLES=OFF \ 88 | -D INSTALL_PYTHON_EXAMPLES=ON \ 89 | -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ 90 | -D BUILD_EXAMPLES=ON .. 91 | make -j4 92 | sudo make install 93 | sudo ldconfig 94 | ``` 95 | After a long time, OpenCV is built and installed 96 | ## Install the dependencies 97 | Go back to the MMM-Facial-Recognition-OCV3 modules directory : 98 | ```shell= 99 | cd ~/MagicMirror/modules/MMM-Facial-Recognition-OCV3 100 | ``` 101 | Install the need dependencies by running the command : 102 | ```shell= 103 | npm install 104 | ``` 105 | If you will run the different tools with Python 2.7, install the cross-compatible features with : 106 | ```shell= 107 | pip install future 108 | ``` 109 | ## Capture and Train the model 110 | 111 | 112 | ### Capturing training images 113 | 1. Run `python tools.capture.py`. 114 | 1. Decide whether you want to capture images from your picam or convert existing .jpg images. 115 | 1. Enter the name of the person you are about to capture. Images will be stored in a folder named after the captured person in `training_data/`. 116 | 1. Follow screen instructions. 117 | ### Training model 118 | 1. Make sure you have captured all your images. 119 | 1. Run `python tools.train.py`. The script will automatically scan the directory `training_data/` for your images. 120 | 1. Wait. You will end up with a training.xml file in the current directory. 121 | 1. Copy down the `['name1', 'name2','name3']` part because you will later need it for setting up your mirror's face recognition and to test your face recognition model. 122 | ### Test your trained model 123 | 1. Make sure your training.xml from running train.py is in this directory 124 | 1. Specify your user labels in the environment with 125 | ```shell= 126 | export FACE_USERS=name1,name2,name3 127 | ``` 128 | 3. Run `python tools.facerecognition.py` to test your trained model. 129 | 130 | # Setup the module 131 | To setup the module in MagicMirror², add the following script int the `config.js` file in the `config/` MagicMirror² directory (Modify the script regarding the Algorithm, file location, ...). 132 | ```javascript 133 | { 134 | module: 'MMM-Facial-Recognition-OCV3', 135 | config: { 136 | // Threshold for the confidence of a recognized face before it's considered a 137 | // positive match. Confidence values below this threshold will be considered 138 | // a positive match because the lower the confidence value, or distance, the 139 | // more confident the algorithm is that the face was correctly detected. 140 | threshold: 80, 141 | // force the use of a usb webcam on raspberry pi (on other platforms this is always true automatically) 142 | useUSBCam: false, 143 | // Path to your training xml 144 | trainingFile: '/home/pi/MagicMirror/modules/MMM-Facial-Recognition-OCV3/training.xml', 145 | // recognition intervall in seconds (smaller number = faster but CPU intens!) 146 | interval: 2, 147 | // Logout delay after last recognition so that a user does not get instantly logged out if he turns away from the mirror for a few seconds 148 | logoutDelay: 15, 149 | // Array with usernames (copy and paste from training script) 150 | users: [], 151 | //Module set used for strangers and if no user is detected 152 | defaultClass: "default", 153 | //Set of modules which should be shown for every user 154 | everyoneClass: "everyone", 155 | // Boolean to toggle welcomeMessage 156 | welcomeMessage: true 157 | } 158 | } 159 | ``` 160 | In order for this module to do anything useful you have to assign custom classes to your modules. The class default (if you don't change it) is shown if no user is detected or a stranger. The class everyone (if you don't change it) is shown for all users. To specify modules for a certain user, use their name as classname. 161 | ```shell 162 | { 163 | module: 'example_module', 164 | position: 'top_left', 165 | //Set your classes here seperated by a space. 166 | //Shown for all users 167 | classes: 'default everyone' 168 | }, 169 | { 170 | module: 'example_module2', 171 | position: 'top_left', 172 | //Only shown for name1 173 | classes: 'name1' 174 | } 175 | ``` 176 | # TODO 177 | * Test with WebCam 178 | [^first]: [Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi](https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/) give a complete and very detailed explaination to build OpenCV 3, but based on python work environment. The choice here is to build and install the library deeply in the raspberry system. 179 | [^second]: [How to easily install OpenCV 3+ on Raspberry Pi 2/3 in Raspbian ? (without using virtual environments)](http://pythonopencv.com/how-to-easily-install-opencv-3-on-raspberry-pi-23-in-raspbian-without-using-virtual-environments/) More synthetic but is adapted to be able to manage memory issues during compilation. 180 | --------------------------------------------------------------------------------