├── .clang_format.hook ├── .gitignore ├── .pre-commit-config.yaml ├── LICENSE ├── MANIFEST.in ├── README.md ├── README_ch.md ├── README_en.md ├── SourceHanSansCN-Medium.otf ├── __init__.py ├── demo └── friends │ ├── gallery │ ├── Chandler │ │ ├── Chandler00001.png │ │ ├── Chandler00002.png │ │ ├── Chandler00003.png │ │ ├── Chandler00004.png │ │ ├── Chandler00005.png │ │ ├── Chandler00006.png │ │ ├── Chandler00007.png │ │ ├── Chandler00008.png │ │ ├── Chandler00009.png │ │ ├── Chandler00010.png │ │ ├── Chandler00011.png │ │ ├── Chandler00012.png │ │ ├── Chandler00013.png │ │ ├── Chandler00014.png │ │ ├── Chandler00015.png │ │ ├── Chandler00016.png │ │ ├── Chandler00017.png │ │ ├── Chandler00018.png │ │ ├── Chandler00019.png │ │ ├── Chandler00020.png │ │ ├── Chandler00021.png │ │ ├── Chandler00022.png │ │ ├── Chandler00023.png │ │ ├── Chandler00024.png │ │ ├── Chandler00025.png │ │ ├── Chandler00026.png │ │ ├── Chandler00027.png │ │ ├── Chandler00028.png │ │ ├── Chandler00029.png │ │ ├── Chandler00030.png │ │ ├── Chandler00031.png │ │ ├── Chandler00032.png │ │ ├── Chandler00033.png │ │ ├── Chandler00034.png │ │ ├── Chandler00035.jpeg │ │ ├── Chandler00036.jpg │ │ ├── Chandler00037.jpg │ │ ├── Chandler00038.jpg │ │ ├── Chandler00039.jpg │ │ ├── Chandler00040.jpg │ │ └── Chandler00041.jpg │ ├── Joey │ │ ├── Joey00001.jpg │ │ ├── Joey00002.png │ │ ├── Joey00003.png │ │ ├── Joey00004.png │ │ ├── Joey00005.png │ │ ├── Joey00006.png │ │ ├── Joey00007.png │ │ ├── Joey00008.png │ │ ├── Joey00009.png │ │ ├── Joey00010.png │ │ ├── Joey00011.png │ │ ├── Joey00012.png │ │ ├── Joey00013.png │ │ ├── Joey00014.png │ │ ├── Joey00015.png │ │ ├── Joey00016.png │ │ ├── Joey00017.png │ │ ├── Joey00018.png │ │ ├── Joey00019.png │ │ ├── Joey00020.png │ │ ├── Joey00021.png │ │ ├── Joey00022.png │ │ ├── Joey00023.png │ │ ├── Joey00024.png │ │ ├── Joey00025.png │ │ ├── Joey00026.png │ │ ├── Joey00027.png │ │ ├── Joey00028.png │ │ ├── Joey00029.png │ │ ├── Joey00030.jpg │ │ ├── Joey00031.jpg │ │ ├── Joey00032.png │ │ ├── Joey00033.png │ │ ├── Joey00034.jpeg │ │ ├── Joey00035.png │ │ ├── Joey00036.jpg │ │ ├── Joey00037.jpeg │ │ ├── Joey00038.jpg │ │ ├── Joey00039.jpg │ │ ├── Joey00040.png │ │ ├── Joey00041.png │ │ ├── Joey00042.png │ │ ├── Joey00043.png │ │ └── Joey00044.png │ ├── Monica │ │ ├── Monica00001.png │ │ ├── Monica00002.png │ │ ├── Monica00003.png │ │ ├── Monica00004.png │ │ ├── Monica00005.png │ │ ├── Monica00006.png │ │ ├── Monica00007.png │ │ ├── Monica00008.png │ │ ├── Monica00009.png │ │ ├── Monica00010.png │ │ ├── Monica00011.png │ │ ├── Monica00012.png │ │ ├── Monica00013.png │ │ ├── Monica00014.png │ │ ├── Monica00015.png │ │ ├── Monica00016.png │ │ ├── Monica00017.png │ │ ├── Monica00018.png │ │ ├── Monica00019.png │ │ ├── Monica00020.png │ │ ├── Monica00021.png │ │ ├── Monica00022.png │ │ ├── Monica00023.png │ │ ├── Monica00024.png │ │ ├── Monica00025.png │ │ ├── Monica00026.png │ │ ├── Monica00027.png │ │ ├── Monica00028.png │ │ ├── Monica00029.png │ │ ├── Monica00030.png │ │ ├── Monica00031.png │ │ ├── Monica00032.jpg │ │ ├── Monica00033.jpg │ │ ├── Monica00034.jpg │ │ ├── Monica00035.jpg │ │ ├── Monica00036.jpg │ │ ├── Monica00037.jpg │ │ ├── Monica00038.jpg │ │ ├── Monica00039.jpg │ │ ├── Monica00040.jpg │ │ └── Monica00041.jpg │ ├── Phoebe │ │ ├── Phoebe00001.jpg │ │ ├── Phoebe00002.jpg │ │ ├── Phoebe00003.jpg │ │ ├── Phoebe00004.jpg │ │ ├── Phoebe00005.jpg │ │ ├── Phoebe00006.jpg │ │ ├── Phoebe00007.jpg │ │ ├── Phoebe00008.jpg │ │ ├── Phoebe00009.jpg │ │ ├── Phoebe00010.jpg │ │ ├── Phoebe00011.jpg │ │ ├── Phoebe00012.jpg │ │ ├── Phoebe00013.jpg │ │ ├── Phoebe00014.png │ │ ├── Phoebe00015.png │ │ ├── Phoebe00016.png │ │ ├── Phoebe00017.png │ │ ├── Phoebe00018.png │ │ ├── Phoebe00019.png │ │ ├── Phoebe00020.png │ │ ├── Phoebe00021.png │ │ ├── Phoebe00022.png │ │ ├── Phoebe00023.png │ │ ├── Phoebe00024.png │ │ ├── Phoebe00025.png │ │ ├── Phoebe00026.png │ │ ├── Phoebe00027.png │ │ ├── Phoebe00028.png │ │ ├── Phoebe00029.png │ │ ├── Phoebe00030.png │ │ ├── Phoebe00031.png │ │ ├── Phoebe00032.png │ │ ├── Phoebe00033.png │ │ ├── Phoebe00034.png │ │ ├── Phoebe00035.png │ │ ├── Phoebe00036.png │ │ ├── Phoebe00037.png │ │ ├── Phoebe00038.png │ │ ├── Phoebe00039.png │ │ └── Phoebe00040.png │ ├── Rachel │ │ ├── Rachel00001.png │ │ ├── Rachel00002.png │ │ ├── Rachel00003.png │ │ ├── Rachel00004.png │ │ ├── Rachel00005.png │ │ ├── Rachel00006.png │ │ ├── Rachel00007.png │ │ ├── Rachel00008.png │ │ ├── Rachel00009.jpg │ │ ├── Rachel00010.png │ │ ├── Rachel00011.jpg │ │ ├── Rachel00012.jpg │ │ ├── Rachel00013.jpg │ │ ├── Rachel00014.jpg │ │ ├── Rachel00015.jpg │ │ ├── Rachel00016.jpg │ │ ├── Rachel00017.jpg │ │ ├── Rachel00018.jpg │ │ ├── Rachel00019.jpg │ │ ├── Rachel00020.jpg │ │ ├── Rachel00021.jpg │ │ ├── Rachel00022.jpg │ │ ├── Rachel00023.jpg │ │ ├── Rachel00024.jpg │ │ ├── Rachel00025.jpg │ │ ├── Rachel00026.jpg │ │ ├── Rachel00027.jpg │ │ ├── Rachel00028.jpg │ │ ├── Rachel00029.jpg │ │ ├── Rachel00030.jpg │ │ ├── Rachel00031.jpg │ │ ├── Rachel00032.jpg │ │ ├── Rachel00033.jpg │ │ ├── Rachel00034.jpg │ │ ├── Rachel00035.jpg │ │ ├── Rachel00036.jpg │ │ ├── Rachel00037.jpg │ │ ├── Rachel00038.jpg │ │ └── Rachel00039.jpg │ ├── Ross │ │ ├── Ross00001.jpg │ │ ├── Ross00002.png │ │ ├── Ross00003.png │ │ ├── Ross00004.jpg │ │ ├── Ross00005.png │ │ ├── Ross00006.png │ │ ├── Ross00007.png │ │ ├── Ross00008.png │ │ ├── Ross00009.jpg │ │ ├── Ross00010.jpg │ │ ├── Ross00011.jpg │ │ ├── Ross00012.jpg │ │ ├── Ross00013.jpg │ │ ├── Ross00014.png │ │ ├── Ross00015.jpg │ │ ├── Ross00016.jpg │ │ ├── Ross00017.jpg │ │ ├── Ross00018.jpg │ │ ├── Ross00019.jpg │ │ ├── Ross00020.jpg │ │ ├── Ross00021.jpg │ │ ├── Ross00022.jpg │ │ ├── Ross00023.jpg │ │ ├── Ross00024.jpg │ │ ├── Ross00025.jpg │ │ ├── Ross00026.jpg │ │ ├── Ross00027.jpg │ │ ├── Ross00028.jpg │ │ ├── Ross00029.jpg │ │ ├── Ross00030.jpg │ │ ├── Ross00031.jpg │ │ ├── Ross00032.jpg │ │ ├── Ross00033.jpg │ │ ├── Ross00034.jpg │ │ ├── Ross00035.jpg │ │ ├── Ross00036.jpg │ │ ├── Ross00037.jpg │ │ ├── Ross00038.jpg │ │ ├── Ross00039.jpg │ │ └── Ross00040.jpg │ └── label.txt │ ├── index.bin │ ├── output │ ├── friends1.jpg │ ├── friends2.jpg │ ├── friends3.jpg │ └── friends4.jpg │ └── query │ ├── Rachel.png │ ├── friends1.jpg │ └── friends2.jpg ├── insightface_paddle.py ├── qq_group.jpeg ├── requirements.txt └── setup.py /.clang_format.hook: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | readonly VERSION="3.8" 5 | 6 | version=$(clang-format -version) 7 | 8 | if ! [[ $version == *"$VERSION"* ]]; then 9 | echo "clang-format version check failed." 10 | echo "a version contains '$VERSION' is needed, but get '$version'" 11 | echo "you can install the right version, and make an soft-link to '\$PATH' env" 12 | exit -1 13 | fi 14 | 15 | clang-format $@ 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | 103 | .DS_Store 104 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | - repo: https://github.com/PaddlePaddle/mirrors-yapf.git 2 | sha: 0d79c0c469bab64f7229c9aca2b1186ef47f0e37 3 | hooks: 4 | - id: yapf 5 | files: \.py$ 6 | - repo: https://github.com/pre-commit/pre-commit-hooks 7 | sha: a11d9314b22d8f8c7556443875b731ef05965464 8 | hooks: 9 | - id: check-merge-conflict 10 | - id: check-symlinks 11 | - id: detect-private-key 12 | files: (?!.*paddle)^.*$ 13 | - id: end-of-file-fixer 14 | files: \.md$ 15 | - id: trailing-whitespace 16 | files: \.md$ 17 | - repo: https://github.com/Lucas-C/pre-commit-hooks 18 | sha: v1.0.1 19 | hooks: 20 | - id: forbid-crlf 21 | files: \.md$ 22 | - id: remove-crlf 23 | files: \.md$ 24 | - id: forbid-tabs 25 | files: \.md$ 26 | - id: remove-tabs 27 | files: \.md$ 28 | - repo: local 29 | hooks: 30 | - id: clang-format 31 | name: clang-format 32 | description: Format files with ClangFormat 33 | entry: bash .clang_format.hook -i 34 | language: system 35 | files: \.(c|cc|cxx|cpp|cu|h|hpp|hxx|cuh|proto)$ 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include README_en.md 3 | include requirements.txt 4 | include SourceHanSansCN-Medium.otf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | README_en.md -------------------------------------------------------------------------------- /README_ch.md: -------------------------------------------------------------------------------- 1 | 简体中文 | [English](README_en.md) 2 | 3 | ------------------------------------------------------------------------------------------ 4 | 5 |

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | 16 | # InsightFace Paddle 17 | 18 | ## 目录 19 | 20 | * [1. 介绍](#1) 21 | * [1.1 总览](#1.1) 22 | * [1.2 模型benchmark](#1.2) 23 | * [1.3 可视化结果展示](#1.3) 24 | * [1.4 欢迎加入深度学习技术交流群](#1.4) 25 | * [2. 安装](#2) 26 | * [3. 快速开始](#3) 27 | * [3.1 命令行](#3.1) 28 | * [3.2 Python](#3.2) 29 | 30 | 31 | 32 | ## 1. 介绍 33 | 34 | 35 | 36 | ### 1.1 总览 37 | `InsightFacePaddle`是基于PaddlePaddle实现的,开源深度人脸检测、识别工具。`InsightFacePaddle`目前提供了三个预训练模型,包括用于人脸检测的 `BlazeFace`、用于人脸识别的 `ArcFace` 和 `MobileFace`。 38 | 39 | - 本部分内容为Whl包预测部署部分。 40 | - 人脸识别相关内容可以参考:[人脸识别](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_cn.md)。 41 | - 人脸检测相关内容可以参考:[基于BlazeFace的人脸检测](https://github.com/deepinsight/insightface/blob/master/detection/blazeface_paddle/README_cn.md)。 42 | 43 | Note: 44 | 45 | * 在此非常感谢 [GuoQuanhao](https://github.com/GuoQuanhao) 基于PaddlePaddle复现了 [Arcface的基线模型](https://github.com/GuoQuanhao/arcface-Paddle)。 46 | * 本项目仅用于快速体验人脸检测与识别全流程,如果希望获得更高的精度,建议使用精度更高的模型。 47 | 48 | 49 | 50 | ### 1.2 模型benchmark 51 | 52 | 在人脸检测任务中,在WiderFace数据集上,BlazeFace的速度与精度指标信息如下。 53 | 54 | | 模型结构 | 模型大小 | WiderFace精度 | CPU 耗时 | GPU 耗时 | 55 | | :-------------------------: | :-----: | :-----: | :--------: | :--------: | 56 | | BlazeFace-FPN-SSH-Paddle | 0.65MB | 0.9187/0.8979/0.8168 | 31.7ms | 5.6ms | 57 | | RetinaFace | 1.68MB | -/-/0.825 | 182.0ms | 17.4ms | 58 | 59 | 在人脸识别任务中,基于MS1M训练集,模型指标在lfw、cfp_fp、agedb30上的精度指标以及CPU、GPU的预测耗时如下。 60 | 61 | | 模型结构 | lfw | cfp_fp | agedb30 | CPU 耗时 | GPU 耗时 | 62 | | :-------------------------: | :-----: | :------: | :-------: | :-------: | :--------: | 63 | | MobileFaceNet-Paddle | 0.9945 | 0.9343 | 0.9613 | 4.3ms | 2.3ms | 64 | | MobileFaceNet-mxnet | 0.9950 | 0.8894 | 0.9591 | 7.3ms | 4.7ms | 65 | 66 | 67 | **测试环境:** 68 | * CPU: Intel(R) Xeon(R) Gold 6184 CPU @ 2.40GHz 69 | * GPU: a single NVIDIA Tesla V100 70 | 71 | **注:** `RetinaFace`的性能数据是使用脚本[test.py](https://github.com/deepinsight/insightface/blob/master/detection/retinaface/test.py)测试得到,这里将`RetinaFace`的image shape修改为`640x480`进行测试。`MobileFaceNet-mxnet`的性能数据是使用脚本:[verification.py](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_mxnet/verification.py)测试得到。 72 | 73 | 74 | 75 | 76 | ### 1.3 可视化结果展示 77 | 78 | 基于 `InsightFacePaddle` 的预测结果,示例如下,更多示例结果请参考 [示例](./demo/friends/output/)。 79 | 80 | 81 |
82 | 83 |
84 | 85 | 86 | 87 | ### 1.4 欢迎加入深度学习技术交流群 88 | 89 | QQ扫描二维码加入交流群(群号:`705899115`)。 90 | 91 |
92 | 93 |
94 | 95 | 96 | 97 | ## 2. 安装 98 | 1. 安装 PaddlePaddle 99 | 100 | `InsightFacePaddle` 需要使用 PaddlePaddle 2.1 及以上版本,可以参考以下步骤安装。 101 | 102 | ```bash 103 | # for GPU 104 | pip3 install paddlepaddle-gpu 105 | 106 | # for CPU 107 | pip3 install paddlepaddle 108 | ``` 109 | 关于安装 PaddlePaddle 的更多信息,请参考 [PaddlePaddle](https://www.paddlepaddle.org.cn/)。 110 | 111 | 2. 安装 requirements 112 | 113 | `InsightFacePaddle` 的依赖在 `requirements.txt` 中,你可以参考以下步骤安装依赖包。 114 | 115 | ```bash 116 | pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple 117 | ``` 118 | 119 | 3. 安装 `InsightFacePaddle` 120 | 121 | * [建议] 你可以使用 `pip` 工具从 `pypi` 安装最新版本的 `InsightFacePaddle`。 122 | 123 | ```bash 124 | pip3 install --upgrade insightface-paddle 125 | ``` 126 | 127 | * 你也可以自己构建并安装,请参考以下步骤。 128 | 129 | ```bash 130 | cd ./InsightFacePaddle 131 | python3 setup.py bdist_wheel 132 | pip3 install dist/* 133 | ``` 134 | 135 | 136 | 137 | ## 3. 快速开始 138 | 139 | `InsightFacePaddle` 提供 `命令行(Command Line)` 和 `Python接口` 两种使用方式。 140 | 141 | 142 | 143 | ### 3.1 命令行 144 | 145 | 在命令行中使用 `InsightFacePaddle`。 146 | 147 | #### 3.1.1 获取参数信息 148 | 149 | 你可以通过以下命令获取参数信息。 150 | 151 | ```bash 152 | insightfacepaddle -h 153 | ``` 154 | 155 | `InsightFacePaddle` 的参数及其解释如下: 156 | | 参数名(args) | 类型(type) | 默认值(default) | 说明(help) | 157 | | ---- | ---- | ---- | ---- | 158 | | det_model | str | BlazeFace | 检测模型名称,或本地模型文件所在目录,该目录下需包含 `inference.pdmodel`、`inference.pdiparams` 和 `inference.pdiparams.info` 三个文件。 | 159 | | rec_model | str | MobileFace | 识别模型名称,或本地模型文件所在目录,该目录下需包含 `inference.pdmodel`、`inference.pdiparams` 和 `inference.pdiparams.info` 三个文件。 | 160 | | use_gpu | bool | True | 是否使用 `GPU` 进行预测,默认为 `True`。 | 161 | | enable_mkldnn | bool | False | 是否开启 `MKLDNN` 进行预测,当 `--use_gpu` 为 `False` 且 `--enable_mkldnn` 为 `True` 时该参数有效,默认值为 `False`。 | 162 | | cpu_threads | int | 1 | CPU 预测时开启的线程数量,当 `--use_gpu` 为 `False` 时该参数有效,默认值为 `1`。 | 163 | | input | str | - | 要预测的视频文件或图像文件的路径,或包含图像文件的目录。 | 164 | | output | str | - | 保存预测结果的目录。| 165 | | det | bool | False | 是否进行检测。 | 166 | | det_thresh | float | 0.8 | 检测后处理的阈值,默认值为`0.8`。 | 167 | | rec | bool | False | 是否进行识别。 | 168 | | index | str | - | 索引文件的路径。 | 169 | | cdd_num | int | 5 | 识别中检索阶段的候选数量,默认值为`5`。 | 170 | | rec_thresh | float | 0.45 | 识别中的检索阈值,由于剔除相似度过低的候选项。默认值为`0.45`。 | 171 | | max_batch_size | int | 1 | 识别中 batch_size 上限,默认值为`1`。 | 172 | | build_index | str | - | 要构建的索引文件路径。 | 173 | | img_dir | str | - | 用于构建索引的图像文件目录。 | 174 | | label | str | - | 用于构建索引的标签文件路径。 | 175 | 176 | 177 | #### 3.1.2 构建索引 178 | 179 | 如果使用识别功能,则在开始预测之前,必须先构建索引文件,命令如下。 180 | 181 | ```bash 182 | insightfacepaddle --build_index ./demo/friends/index.bin --img_dir ./demo/friends/gallery --label ./demo/friends/gallery/label.txt 183 | ``` 184 | 185 | 用于构建索引的数据示例如下: 186 |
187 | 188 |
189 | 190 | #### 3.1.3 预测 191 | 192 | 1. 仅检测 193 | 194 | * Image(s) 195 | 196 | 使用下图进行测试: 197 |
198 | 199 |
200 | 201 | 预测命令如下: 202 | ```bash 203 | insightfacepaddle --det --input ./demo/friends/query/friends1.jpg --output ./output 204 | ``` 205 | 206 | 检测结果图位于路径 `./output` 下: 207 |
208 | 209 |
210 | 211 | * Video 212 | ```bash 213 | insightfacepaddle --det --input ./demo/friends/query/friends.mp4 --output ./output 214 | ``` 215 | 216 | 2. 仅识别 217 | 218 | * Image(s) 219 | 220 | 使用下图进行测试: 221 |
222 | 223 |
224 | 225 | 预测命令如下: 226 | ```bash 227 | insightfacepaddle --rec --index ./demo/friends/index.bin --input ./demo/friends/query/Rachel.png 228 | ``` 229 | 检测结果输出在终端中: 230 | ```bash 231 | INFO:root:File: Rachel.png, predict label(s): ['Rachel'] 232 | ``` 233 | 234 | 3. 检测+识别系统串联 235 | 236 | * Image(s) 237 | 238 | 使用下图进行测试: 239 |
240 | 241 |
242 | 243 | 预测命令如下: 244 | ```bash 245 | insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends2.jpg --output ./output 246 | ``` 247 | 248 | 检测结果图位于路径 `./output` 下: 249 |
250 | 251 |
252 | 253 | * Video 254 | ```bash 255 | insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends.mp4 --output ./output 256 | ``` 257 | 258 | 259 | 260 | ### 3.2 Python 261 | 262 | 同样可以在 Python 中使用 `InsightFacePaddle`。首先导入 `InsightFacePaddle`,因为 `InsightFacePaddle` 使用 `logging` 控制日志输入,因此需要导入 `logging`。 263 | 264 | ```python 265 | import insightface_paddle as face 266 | import logging 267 | logging.basicConfig(level=logging.INFO) 268 | ``` 269 | 270 | #### 3.2.1 获取参数信息 271 | 272 | ```python 273 | parser = face.parser() 274 | parser.print_help() 275 | ``` 276 | 277 | #### 3.2.2 构建索引 278 | 279 | ```python 280 | parser = face.parser() 281 | args = parser.parse_args() 282 | args.build_index = "./demo/friends/index.bin" 283 | args.img_dir = "./demo/friends/gallery" 284 | args.label = "./demo/friends/gallery/label.txt" 285 | predictor = face.InsightFace(args) 286 | predictor.build_index() 287 | ``` 288 | 289 | #### 3.2.3 预测 290 | 291 | 1. 仅检测 292 | 293 | * Image(s) 294 | ```python 295 | parser = face.parser() 296 | args = parser.parse_args() 297 | 298 | args.det = True 299 | args.output = "./output" 300 | input_path = "./demo/friends/query/friends1.jpg" 301 | 302 | predictor = face.InsightFace(args) 303 | res = predictor.predict(input_path) 304 | print(next(res)) 305 | ``` 306 | 307 | * NumPy 308 | ```python 309 | import cv2 310 | 311 | parser = face.parser() 312 | args = parser.parse_args() 313 | 314 | args.det = True 315 | args.output = "./output" 316 | path = "./demo/friends/query/friends1.jpg" 317 | img = cv2.imread(path)[:, :, ::-1] 318 | 319 | predictor = face.InsightFace(args) 320 | res = predictor.predict(img) 321 | print(next(res)) 322 | ``` 323 | 324 | * Video 325 | ```python 326 | parser = face.parser() 327 | args = parser.parse_args() 328 | 329 | args.det = True 330 | args.output = "./output" 331 | input_path = "./demo/friends/query/friends.mp4" 332 | 333 | predictor = face.InsightFace(args) 334 | res = predictor.predict(input_path) 335 | for _ in res: 336 | print(_) 337 | ``` 338 | 339 | 2. 仅识别 340 | 341 | * Image(s) 342 | ```python 343 | parser = face.parser() 344 | args = parser.parse_args() 345 | 346 | args.rec = True 347 | args.index = "./demo/friends/index.bin" 348 | input_path = "./demo/friends/query/Rachel.png" 349 | 350 | predictor = face.InsightFace(args) 351 | res = predictor.predict(input_path, print_info=True) 352 | next(res) 353 | ``` 354 | 355 | * NumPy 356 | ```python 357 | import cv2 358 | 359 | parser = face.parser() 360 | args = parser.parse_args() 361 | 362 | args.rec = True 363 | args.index = "./demo/friends/index.bin" 364 | path = "./demo/friends/query/Rachel.png" 365 | img = cv2.imread(path)[:, :, ::-1] 366 | 367 | predictor = face.InsightFace(args) 368 | res = predictor.predict(img, print_info=True) 369 | next(res) 370 | ``` 371 | 372 | 3. 检测+识别系统串联 373 | 374 | * Image(s) 375 | ```python 376 | parser = face.parser() 377 | args = parser.parse_args() 378 | 379 | args.det = True 380 | args.rec = True 381 | args.index = "./demo/friends/index.bin" 382 | args.output = "./output" 383 | input_path = "./demo/friends/query/friends2.jpg" 384 | 385 | predictor = face.InsightFace(args) 386 | res = predictor.predict(input_path, print_info=True) 387 | next(res) 388 | ``` 389 | 390 | * NumPy 391 | ```python 392 | import cv2 393 | 394 | parser = face.parser() 395 | args = parser.parse_args() 396 | 397 | args.det = True 398 | args.rec = True 399 | args.index = "./demo/friends/index.bin" 400 | args.output = "./output" 401 | path = "./demo/friends/query/friends2.jpg" 402 | img = cv2.imread(path)[:, :, ::-1] 403 | 404 | predictor = face.InsightFace(args) 405 | res = predictor.predict(img, print_info=True) 406 | next(res) 407 | ``` 408 | 409 | * Video 410 | ```python 411 | parser = face.parser() 412 | args = parser.parse_args() 413 | 414 | args.det = True 415 | args.rec = True 416 | args.index = "./demo/friends/index.bin" 417 | args.output = "./output" 418 | input_path = "./demo/friends/query/friends.mp4" 419 | 420 | predictor = face.InsightFace(args) 421 | res = predictor.predict(input_path, print_info=True) 422 | for _ in res: 423 | pass 424 | ``` 425 | -------------------------------------------------------------------------------- /README_en.md: -------------------------------------------------------------------------------- 1 | [简体中文](README_ch.md) | English 2 | 3 | ------------------------------------------------------------------------------------------ 4 | 5 |

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | 16 | # InsightFace Paddle 17 | 18 | ## 1. Introduction 19 | 20 | ### 1.1 Overview 21 | 22 | `InsightFacePaddle` is an open source deep face detection and recognition toolkit, powered by PaddlePaddle. `InsightFacePaddle` provide three related pretrained models now, include `BlazeFace` for face detection, `ArcFace` and `MobileFace` for face recognition. 23 | 24 | 25 | - This tutorial is mainly about Whl package inference using `PaddleInfernence`. 26 | - For face recognition task, please refer to: [Face recognition tuturial](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_en.md). 27 | - For face detection task, please refer to: [Face detection tuturial](https://github.com/deepinsight/insightface/blob/master/detection/blazeface_paddle/README_en.md). 28 | 29 | 30 | ### 1.2 Benchmark 31 | 32 | For face detection task, on WiderFace dataset, the following table shows mAP, speed and time cost for BlazeFace. 33 | 34 | | Model structure | Model size | WiderFace mAP | CPU time cost | GPU time cost | 35 | | :-------------------------: | :-----: | :-----: | :--------: | :--------: | 36 | | BlazeFace-FPN-SSH-Paddle | 0.65MB | 0.9187/0.8979/0.8168 | 31.7ms | 5.6ms | 37 | | RetinaFace | 1.68MB | -/-/0.825 | 182.0ms | 17.4ms | 38 | 39 | 40 | For face recognition task, on MSAM dataset, the following table shows precision, speed and time cost for MobileFaceNet. 41 | 42 | 43 | | Model structure | lfw | cfp_fp | agedb30 | CPU time cost | GPU time cost | 44 | | :-------------------------: | :-----: | :------: | :-------: | :-------: | :--------: | 45 | | MobileFaceNet-Paddle | 0.9945 | 0.9343 | 0.9613 | 4.3ms | 2.3ms | 46 | | MobileFaceNet-mxnet | 0.9950 | 0.8894 | 0.9591 | 7.3ms | 4.7ms | 47 | 48 | 49 | **Benchmark environment:** 50 | * CPU: Intel(R) Xeon(R) Gold 6184 CPU @ 2.40GHz 51 | * GPU: a single NVIDIA Tesla V100 52 | 53 | 54 | **Note:** Performance of `RetinaFace` is tested using script [test.py](https://github.com/deepinsight/insightface/blob/master/detection/retinaface/test.py). The image shape is modified to `640x480` here. Performance of `MobileFaceNet-mxnet` is tested using script [verification.py](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_mxnet/verification.py). 55 | 56 | 57 | ### 1.3 Visualization 58 | 59 | One example result predicted by `InsightFacePaddle` is as follow. Please refer to the [Demo](./demo/friends/output/) for more. 60 | 61 |
62 | 63 |
64 | 65 | 66 | ### 1.4 Community 67 | 68 | Scan the QR code below with your QQ (QQ group number: `705899115`) to discuss more about deep learning together. 69 | 70 |
71 | 72 |
73 | 74 | 75 | ## 2. Installation 76 | 1. Install PaddlePaddle 77 | 78 | PaddlePaddle 2.1 or later is required for `InsightFacePaddle`. You can use the following steps to install PaddlePaddle. 79 | 80 | ```bash 81 | # for GPU 82 | pip3 install paddlepaddle-gpu 83 | 84 | # for CPU 85 | pip3 install paddlepaddle 86 | ``` 87 | For more details about installation. please refer to [PaddlePaddle](https://www.paddlepaddle.org.cn/). 88 | 89 | 2. Install requirements 90 | 91 | `InsightFacePaddle` dependencies are listed in `requirements.txt`, you can use the following command to install the dependencies. 92 | 93 | ```bash 94 | pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple 95 | ``` 96 | 97 | 3. Install `InsightFacePaddle` 98 | 99 | * [Recommanded] You can use `pip` to install the lastest version `InsightFacePaddle` from `pypi`. 100 | 101 | ```bash 102 | pip3 install --upgrade insightface-paddle 103 | ``` 104 | 105 | * You can also build whl package and install by following commands. 106 | 107 | ```bash 108 | cd ./InsightFacePaddle 109 | python3 setup.py bdist_wheel 110 | pip3 install dist/* 111 | ``` 112 | 113 | ## 3. Quick Start 114 | 115 | `InsightFacePaddle` support two ways of use, including `Commad Line` and `Python API`. 116 | 117 | ### 3.1 Command Line 118 | 119 | You can use `InsightFacePaddle` in Command Line. 120 | 121 | #### 3.1.1 Get help 122 | 123 | You can get the help about `InsightFacePaddle` by following command. 124 | 125 | ```bash 126 | insightfacepaddle -h 127 | ``` 128 | 129 | The args are as follows: 130 | | args | type | default | help | 131 | | ---- | ---- | ---- | ---- | 132 | | det_model | str | BlazeFace | The detection model. | 133 | | rec_model | str | MobileFace | The recognition model. | 134 | | use_gpu | bool | True | Whether use GPU to predict. Default by `True`. | 135 | | enable_mkldnn | bool | False | Whether use MKLDNN to predict, valid only when `--use_gpu` is `False`. Default by `False`. | 136 | | cpu_threads | int | 1 | The num of threads with CPU, valid only when `--use_gpu` is `False` and `--enable_mkldnn` is `True`. Default by `1`. | 137 | | input | str | - | The path of video to be predicted. Or the path or directory of image file(s) to be predicted. | 138 | | output | str | - | The directory to save prediction result. | 139 | | det | bool | False | Whether to detect. | 140 | | det_thresh | float | 0.8 | The threshold of detection postprocess. Default by `0.8`. | 141 | | rec | bool | False | Whether to recognize. | 142 | | index | str | - | The path of index file. | 143 | | cdd_num | int | 5 | The number of candidates in the recognition retrieval. Default by `5`. | 144 | | rec_thresh | float | 0.45 | The threshold of match in recognition, use to remove candidates with low similarity. Default by `0.45`. | 145 | | max_batch_size | int | 1 | The maxium of batch_size to recognize. Default by `1`. | 146 | | build_index | str | - | The path of index to be build. | 147 | | img_dir | str | - | The img(s) dir used to build index. | 148 | | label | str | - | The label file path used to build index. | 149 | 150 | 151 | #### 3.1.2 Build index 152 | 153 | If use recognition, before start predicting, you have to build the index. 154 | 155 | ```bash 156 | insightfacepaddle --build_index ./demo/friends/index.bin --img_dir ./demo/friends/gallery --label ./demo/friends/gallery/label.txt 157 | ``` 158 | 159 | An example used to build index is as follows: 160 |
161 | 162 |
163 | 164 | #### 3.1.3 Predict 165 | 166 | 1. Detection only 167 | 168 | * Image(s) 169 | 170 | Use the image below to predict: 171 |
172 | 173 |
174 | 175 | The prediction command: 176 | ```bash 177 | insightfacepaddle --det --input ./demo/friends/query/friends1.jpg --output ./output 178 | ``` 179 | 180 | The result is under the directory `./output`: 181 |
182 | 183 |
184 | 185 | * Video 186 | ```bash 187 | insightfacepaddle --det --input ./demo/friends/query/friends.mp4 --output ./output 188 | ``` 189 | 190 | 2. Recognition only 191 | 192 | * Image(s) 193 | 194 | Use the image below to predict: 195 |
196 | 197 |
198 | 199 | The prediction command: 200 | ```bash 201 | insightfacepaddle --rec --index ./demo/friends/index.bin --input ./demo/friends/query/Rachel.png 202 | ``` 203 | 204 | The result is output in the terminal: 205 | ```bash 206 | INFO:root:File: Rachel., predict label(s): ['Rachel'] 207 | ``` 208 | 209 | 3. Detection and recognition 210 | 211 | * Image(s) 212 | 213 | Use the image below to predict: 214 |
215 | 216 |
217 | 218 | The prediction command: 219 | ```bash 220 | insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends2.jpg --output ./output 221 | ``` 222 | 223 | The result is under the directory `./output`: 224 |
225 | 226 |
227 | 228 | * Video 229 | ```bash 230 | insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends.mp4 --output ./output 231 | ``` 232 | 233 | ### 3.2 Python 234 | 235 | You can use `InsightFacePaddle` in Python. First, import `InsightFacePaddle` and `logging` because `InsightFacePaddle` using that to control log. 236 | 237 | ```python 238 | import insightface_paddle as face 239 | import logging 240 | logging.basicConfig(level=logging.INFO) 241 | ``` 242 | 243 | #### 3.2.1 Get help 244 | 245 | ```python 246 | parser = face.parser() 247 | help_info = parser.print_help() 248 | print(help_info) 249 | ``` 250 | 251 | #### 3.2.2 Building index 252 | 253 | ```python 254 | parser = face.parser() 255 | args = parser.parse_args() 256 | args.build_index = "./demo/friends/index.bin" 257 | args.img_dir = "./demo/friends/gallery" 258 | args.label = "./demo/friends/gallery/label.txt" 259 | predictor = face.InsightFace(args) 260 | predictor.build_index() 261 | ``` 262 | 263 | #### 3.2.3 Prediction 264 | 265 | 1. Detection only 266 | 267 | * Image(s) 268 | ```python 269 | parser = face.parser() 270 | args = parser.parse_args() 271 | 272 | args.det = True 273 | args.output = "./output" 274 | input_path = "./demo/friends/query/friends1.jpg" 275 | 276 | predictor = face.InsightFace(args) 277 | res = predictor.predict(input_path) 278 | print(next(res)) 279 | ``` 280 | 281 | * NumPy 282 | ```python 283 | import cv2 284 | 285 | parser = face.parser() 286 | args = parser.parse_args() 287 | 288 | args.det = True 289 | args.output = "./output" 290 | path = "./demo/friends/query/friends1.jpg" 291 | img = cv2.imread(path)[:, :, ::-1] 292 | 293 | predictor = face.InsightFace(args) 294 | res = predictor.predict(img) 295 | print(next(res)) 296 | ``` 297 | 298 | The prediction result saved as `"./output/tmp.png"`. 299 | 300 | * Video 301 | ```python 302 | parser = face.parser() 303 | args = parser.parse_args() 304 | 305 | args.det = True 306 | args.output = "./output" 307 | input_path = "./demo/friends/query/friends.mp4" 308 | 309 | predictor = face.InsightFace(args) 310 | res = predictor.predict(input_path) 311 | for _ in res: 312 | print(_) 313 | ``` 314 | 315 | 2. Recognition only 316 | 317 | * Image(s) 318 | ```python 319 | parser = face.parser() 320 | args = parser.parse_args() 321 | 322 | args.rec = True 323 | args.index = "./demo/friends/index.bin" 324 | input_path = "./demo/friends/query/Rachel.png" 325 | 326 | predictor = face.InsightFace(args) 327 | res = predictor.predict(input_path, print_info=True) 328 | next(res) 329 | ``` 330 | 331 | * NumPy 332 | ```python 333 | import cv2 334 | 335 | parser = face.parser() 336 | args = parser.parse_args() 337 | 338 | args.rec = True 339 | args.index = "./demo/friends/index.bin" 340 | path = "./demo/friends/query/Rachel.png" 341 | img = cv2.imread(path)[:, :, ::-1] 342 | 343 | predictor = face.InsightFace(args) 344 | res = predictor.predict(img, print_info=True) 345 | next(res) 346 | ``` 347 | 348 | 3. Detection and recognition 349 | 350 | * Image(s) 351 | ```python 352 | parser = face.parser() 353 | args = parser.parse_args() 354 | 355 | args.det = True 356 | args.rec = True 357 | args.index = "./demo/friends/index.bin" 358 | args.output = "./output" 359 | input_path = "./demo/friends/query/friends2.jpg" 360 | 361 | predictor = face.InsightFace(args) 362 | res = predictor.predict(input_path, print_info=True) 363 | next(res) 364 | ``` 365 | 366 | * NumPy 367 | ```python 368 | import cv2 369 | 370 | parser = face.parser() 371 | args = parser.parse_args() 372 | 373 | args.det = True 374 | args.rec = True 375 | args.index = "./demo/friends/index.bin" 376 | args.output = "./output" 377 | path = "./demo/friends/query/friends2.jpg" 378 | img = cv2.imread(path)[:, :, ::-1] 379 | 380 | predictor = face.InsightFace(args) 381 | res = predictor.predict(img, print_info=True) 382 | next(res) 383 | ``` 384 | 385 | The prediction result saved as `"./output/tmp.png"`. 386 | 387 | * Video 388 | ```python 389 | parser = face.parser() 390 | args = parser.parse_args() 391 | 392 | args.det = True 393 | args.rec = True 394 | args.index = "./demo/friends/index.bin" 395 | args.output = "./output" 396 | input_path = "./demo/friends/query/friends.mp4" 397 | 398 | predictor = face.InsightFace(args) 399 | res = predictor.predict(input_path, print_info=True) 400 | for _ in res: 401 | pass 402 | ``` 403 | -------------------------------------------------------------------------------- /SourceHanSansCN-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/SourceHanSansCN-Medium.otf -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | __all__ = ['parser', 'InsightFace'] 16 | from .insightface_paddle import InsightFace, parser, main -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00001.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00002.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00003.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00004.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00005.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00006.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00007.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00008.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00009.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00010.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00011.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00012.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00013.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00014.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00015.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00016.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00017.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00018.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00019.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00020.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00021.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00022.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00023.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00024.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00025.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00026.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00027.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00028.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00029.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00030.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00031.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00032.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00033.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00034.png -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00035.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00035.jpeg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00036.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00037.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00038.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00039.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00040.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Chandler/Chandler00041.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Chandler/Chandler00041.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00001.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00002.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00003.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00004.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00005.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00006.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00007.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00008.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00009.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00010.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00011.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00012.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00013.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00014.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00015.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00016.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00017.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00018.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00019.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00020.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00021.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00022.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00023.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00024.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00025.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00026.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00027.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00028.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00029.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00030.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00031.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00032.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00033.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00034.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00034.jpeg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00035.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00036.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00037.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00037.jpeg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00038.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00039.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00040.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00041.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00042.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00043.png -------------------------------------------------------------------------------- /demo/friends/gallery/Joey/Joey00044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Joey/Joey00044.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00001.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00002.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00003.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00004.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00005.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00006.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00007.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00008.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00009.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00010.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00011.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00012.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00013.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00014.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00015.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00016.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00017.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00018.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00019.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00020.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00021.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00022.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00023.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00024.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00025.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00026.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00027.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00028.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00029.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00030.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00031.png -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00032.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00033.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00033.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00034.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00035.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00035.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00036.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00037.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00038.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00039.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00040.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Monica/Monica00041.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Monica/Monica00041.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00001.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00002.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00003.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00004.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00005.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00006.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00007.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00008.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00008.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00009.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00010.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00010.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00011.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00011.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00012.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00012.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00013.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00014.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00015.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00016.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00017.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00018.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00019.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00020.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00021.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00022.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00023.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00024.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00025.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00026.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00027.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00028.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00029.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00030.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00031.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00032.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00033.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00034.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00035.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00036.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00037.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00038.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00039.png -------------------------------------------------------------------------------- /demo/friends/gallery/Phoebe/Phoebe00040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Phoebe/Phoebe00040.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00001.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00002.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00003.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00004.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00005.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00006.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00007.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00008.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00009.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00010.png -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00011.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00011.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00012.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00012.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00013.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00014.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00014.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00015.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00015.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00016.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00017.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00017.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00018.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00018.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00019.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00019.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00020.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00021.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00022.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00022.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00023.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00024.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00025.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00026.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00026.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00027.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00028.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00029.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00030.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00031.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00032.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00033.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00033.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00034.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00035.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00035.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00036.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00037.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00038.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Rachel/Rachel00039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Rachel/Rachel00039.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00001.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00002.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00003.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00004.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00005.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00006.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00007.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00008.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00009.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00010.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00010.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00011.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00011.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00012.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00012.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00013.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00014.png -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00015.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00015.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00016.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00017.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00017.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00018.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00018.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00019.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00019.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00020.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00021.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00022.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00022.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00023.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00024.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00025.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00026.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00026.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00027.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00028.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00029.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00030.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00031.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00032.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00033.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00033.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00034.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00035.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00035.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00036.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00037.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00038.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00039.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/Ross/Ross00040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/gallery/Ross/Ross00040.jpg -------------------------------------------------------------------------------- /demo/friends/gallery/label.txt: -------------------------------------------------------------------------------- 1 | ./Chandler/Chandler00037.jpg Chandler 2 | ./Chandler/Chandler00021.png Chandler 3 | ./Chandler/Chandler00040.jpg Chandler 4 | ./Chandler/Chandler00041.jpg Chandler 5 | ./Chandler/Chandler00004.png Chandler 6 | ./Chandler/Chandler00034.png Chandler 7 | ./Chandler/Chandler00008.png Chandler 8 | ./Chandler/Chandler00033.png Chandler 9 | ./Chandler/Chandler00018.png Chandler 10 | ./Chandler/Chandler00038.jpg Chandler 11 | ./Chandler/Chandler00031.png Chandler 12 | ./Chandler/Chandler00003.png Chandler 13 | ./Chandler/Chandler00036.jpg Chandler 14 | ./Chandler/Chandler00009.png Chandler 15 | ./Chandler/Chandler00024.png Chandler 16 | ./Chandler/Chandler00029.png Chandler 17 | ./Chandler/Chandler00020.png Chandler 18 | ./Chandler/Chandler00016.png Chandler 19 | ./Chandler/Chandler00030.png Chandler 20 | ./Chandler/Chandler00028.png Chandler 21 | ./Chandler/Chandler00014.png Chandler 22 | ./Chandler/Chandler00005.png Chandler 23 | ./Chandler/Chandler00017.png Chandler 24 | ./Chandler/Chandler00039.jpg Chandler 25 | ./Chandler/Chandler00019.png Chandler 26 | ./Chandler/Chandler00025.png Chandler 27 | ./Chandler/Chandler00035.jpeg Chandler 28 | ./Chandler/Chandler00015.png Chandler 29 | ./Chandler/Chandler00032.png Chandler 30 | ./Chandler/Chandler00001.png Chandler 31 | ./Chandler/Chandler00026.png Chandler 32 | ./Chandler/Chandler00027.png Chandler 33 | ./Chandler/Chandler00002.png Chandler 34 | ./Chandler/Chandler00022.png Chandler 35 | ./Chandler/Chandler00012.png Chandler 36 | ./Chandler/Chandler00006.png Chandler 37 | ./Chandler/Chandler00023.png Chandler 38 | ./Chandler/Chandler00011.png Chandler 39 | ./Chandler/Chandler00013.png Chandler 40 | ./Chandler/Chandler00010.png Chandler 41 | ./Chandler/Chandler00007.png Chandler 42 | ./Phoebe/Phoebe00019.png Phoebe 43 | ./Phoebe/Phoebe00028.png Phoebe 44 | ./Phoebe/Phoebe00001.jpg Phoebe 45 | ./Phoebe/Phoebe00010.jpg Phoebe 46 | ./Phoebe/Phoebe00009.jpg Phoebe 47 | ./Phoebe/Phoebe00022.png Phoebe 48 | ./Phoebe/Phoebe00025.png Phoebe 49 | ./Phoebe/Phoebe00020.png Phoebe 50 | ./Phoebe/Phoebe00027.png Phoebe 51 | ./Phoebe/Phoebe00021.png Phoebe 52 | ./Phoebe/Phoebe00004.jpg Phoebe 53 | ./Phoebe/Phoebe00006.jpg Phoebe 54 | ./Phoebe/Phoebe00007.jpg Phoebe 55 | ./Phoebe/Phoebe00038.png Phoebe 56 | ./Phoebe/Phoebe00034.png Phoebe 57 | ./Phoebe/Phoebe00013.jpg Phoebe 58 | ./Phoebe/Phoebe00031.png Phoebe 59 | ./Phoebe/Phoebe00029.png Phoebe 60 | ./Phoebe/Phoebe00008.jpg Phoebe 61 | ./Phoebe/Phoebe00015.png Phoebe 62 | ./Phoebe/Phoebe00040.png Phoebe 63 | ./Phoebe/Phoebe00002.jpg Phoebe 64 | ./Phoebe/Phoebe00026.png Phoebe 65 | ./Phoebe/Phoebe00032.png Phoebe 66 | ./Phoebe/Phoebe00016.png Phoebe 67 | ./Phoebe/Phoebe00005.jpg Phoebe 68 | ./Phoebe/Phoebe00017.png Phoebe 69 | ./Phoebe/Phoebe00035.png Phoebe 70 | ./Phoebe/Phoebe00014.png Phoebe 71 | ./Phoebe/Phoebe00036.png Phoebe 72 | ./Phoebe/Phoebe00011.jpg Phoebe 73 | ./Phoebe/Phoebe00030.png Phoebe 74 | ./Phoebe/Phoebe00023.png Phoebe 75 | ./Phoebe/Phoebe00012.jpg Phoebe 76 | ./Phoebe/Phoebe00039.png Phoebe 77 | ./Phoebe/Phoebe00003.jpg Phoebe 78 | ./Phoebe/Phoebe00033.png Phoebe 79 | ./Phoebe/Phoebe00024.png Phoebe 80 | ./Phoebe/Phoebe00037.png Phoebe 81 | ./Phoebe/Phoebe00018.png Phoebe 82 | ./Rachel/Rachel00001.png Rachel 83 | ./Rachel/Rachel00032.jpg Rachel 84 | ./Rachel/Rachel00002.png Rachel 85 | ./Rachel/Rachel00031.jpg Rachel 86 | ./Rachel/Rachel00018.jpg Rachel 87 | ./Rachel/Rachel00038.jpg Rachel 88 | ./Rachel/Rachel00027.jpg Rachel 89 | ./Rachel/Rachel00019.jpg Rachel 90 | ./Rachel/Rachel00004.png Rachel 91 | ./Rachel/Rachel00003.png Rachel 92 | ./Rachel/Rachel00035.jpg Rachel 93 | ./Rachel/Rachel00017.jpg Rachel 94 | ./Rachel/Rachel00005.png Rachel 95 | ./Rachel/Rachel00037.jpg Rachel 96 | ./Rachel/Rachel00039.jpg Rachel 97 | ./Rachel/Rachel00006.png Rachel 98 | ./Rachel/Rachel00008.png Rachel 99 | ./Rachel/Rachel00030.jpg Rachel 100 | ./Rachel/Rachel00009.jpg Rachel 101 | ./Rachel/Rachel00015.jpg Rachel 102 | ./Rachel/Rachel00022.jpg Rachel 103 | ./Rachel/Rachel00012.jpg Rachel 104 | ./Rachel/Rachel00010.png Rachel 105 | ./Rachel/Rachel00007.png Rachel 106 | ./Rachel/Rachel00013.jpg Rachel 107 | ./Rachel/Rachel00021.jpg Rachel 108 | ./Rachel/Rachel00020.jpg Rachel 109 | ./Rachel/Rachel00014.jpg Rachel 110 | ./Rachel/Rachel00028.jpg Rachel 111 | ./Rachel/Rachel00029.jpg Rachel 112 | ./Rachel/Rachel00034.jpg Rachel 113 | ./Rachel/Rachel00023.jpg Rachel 114 | ./Rachel/Rachel00033.jpg Rachel 115 | ./Rachel/Rachel00011.jpg Rachel 116 | ./Rachel/Rachel00026.jpg Rachel 117 | ./Rachel/Rachel00024.jpg Rachel 118 | ./Rachel/Rachel00016.jpg Rachel 119 | ./Rachel/Rachel00036.jpg Rachel 120 | ./Rachel/Rachel00025.jpg Rachel 121 | ./Monica/Monica00024.png Monica 122 | ./Monica/Monica00039.jpg Monica 123 | ./Monica/Monica00027.png Monica 124 | ./Monica/Monica00001.png Monica 125 | ./Monica/Monica00021.png Monica 126 | ./Monica/Monica00030.png Monica 127 | ./Monica/Monica00003.png Monica 128 | ./Monica/Monica00010.png Monica 129 | ./Monica/Monica00032.jpg Monica 130 | ./Monica/Monica00034.jpg Monica 131 | ./Monica/Monica00011.png Monica 132 | ./Monica/Monica00015.png Monica 133 | ./Monica/Monica00018.png Monica 134 | ./Monica/Monica00038.jpg Monica 135 | ./Monica/Monica00019.png Monica 136 | ./Monica/Monica00009.png Monica 137 | ./Monica/Monica00026.png Monica 138 | ./Monica/Monica00017.png Monica 139 | ./Monica/Monica00013.png Monica 140 | ./Monica/Monica00007.png Monica 141 | ./Monica/Monica00014.png Monica 142 | ./Monica/Monica00035.jpg Monica 143 | ./Monica/Monica00036.jpg Monica 144 | ./Monica/Monica00008.png Monica 145 | ./Monica/Monica00002.png Monica 146 | ./Monica/Monica00006.png Monica 147 | ./Monica/Monica00004.png Monica 148 | ./Monica/Monica00020.png Monica 149 | ./Monica/Monica00033.jpg Monica 150 | ./Monica/Monica00025.png Monica 151 | ./Monica/Monica00040.jpg Monica 152 | ./Monica/Monica00005.png Monica 153 | ./Monica/Monica00041.jpg Monica 154 | ./Monica/Monica00029.png Monica 155 | ./Monica/Monica00028.png Monica 156 | ./Monica/Monica00037.jpg Monica 157 | ./Monica/Monica00016.png Monica 158 | ./Monica/Monica00012.png Monica 159 | ./Monica/Monica00031.png Monica 160 | ./Monica/Monica00023.png Monica 161 | ./Monica/Monica00022.png Monica 162 | ./Joey/Joey00032.png Joey 163 | ./Joey/Joey00024.png Joey 164 | ./Joey/Joey00019.png Joey 165 | ./Joey/Joey00011.png Joey 166 | ./Joey/Joey00006.png Joey 167 | ./Joey/Joey00021.png Joey 168 | ./Joey/Joey00030.jpg Joey 169 | ./Joey/Joey00012.png Joey 170 | ./Joey/Joey00001.jpg Joey 171 | ./Joey/Joey00033.png Joey 172 | ./Joey/Joey00017.png Joey 173 | ./Joey/Joey00013.png Joey 174 | ./Joey/Joey00039.jpg Joey 175 | ./Joey/Joey00034.jpeg Joey 176 | ./Joey/Joey00014.png Joey 177 | ./Joey/Joey00009.png Joey 178 | ./Joey/Joey00027.png Joey 179 | ./Joey/Joey00004.png Joey 180 | ./Joey/Joey00023.png Joey 181 | ./Joey/Joey00029.png Joey 182 | ./Joey/Joey00043.png Joey 183 | ./Joey/Joey00044.png Joey 184 | ./Joey/Joey00010.png Joey 185 | ./Joey/Joey00031.jpg Joey 186 | ./Joey/Joey00016.png Joey 187 | ./Joey/Joey00025.png Joey 188 | ./Joey/Joey00037.jpeg Joey 189 | ./Joey/Joey00002.png Joey 190 | ./Joey/Joey00036.jpg Joey 191 | ./Joey/Joey00026.png Joey 192 | ./Joey/Joey00040.png Joey 193 | ./Joey/Joey00022.png Joey 194 | ./Joey/Joey00028.png Joey 195 | ./Joey/Joey00007.png Joey 196 | ./Joey/Joey00042.png Joey 197 | ./Joey/Joey00018.png Joey 198 | ./Joey/Joey00041.png Joey 199 | ./Joey/Joey00015.png Joey 200 | ./Joey/Joey00005.png Joey 201 | ./Joey/Joey00008.png Joey 202 | ./Joey/Joey00020.png Joey 203 | ./Joey/Joey00003.png Joey 204 | ./Joey/Joey00035.png Joey 205 | ./Joey/Joey00038.jpg Joey 206 | ./Ross/Ross00010.jpg Ross 207 | ./Ross/Ross00005.png Ross 208 | ./Ross/Ross00006.png Ross 209 | ./Ross/Ross00036.jpg Ross 210 | ./Ross/Ross00015.jpg Ross 211 | ./Ross/Ross00018.jpg Ross 212 | ./Ross/Ross00023.jpg Ross 213 | ./Ross/Ross00025.jpg Ross 214 | ./Ross/Ross00008.png Ross 215 | ./Ross/Ross00030.jpg Ross 216 | ./Ross/Ross00033.jpg Ross 217 | ./Ross/Ross00021.jpg Ross 218 | ./Ross/Ross00027.jpg Ross 219 | ./Ross/Ross00013.jpg Ross 220 | ./Ross/Ross00003.png Ross 221 | ./Ross/Ross00037.jpg Ross 222 | ./Ross/Ross00035.jpg Ross 223 | ./Ross/Ross00028.jpg Ross 224 | ./Ross/Ross00011.jpg Ross 225 | ./Ross/Ross00020.jpg Ross 226 | ./Ross/Ross00014.png Ross 227 | ./Ross/Ross00007.png Ross 228 | ./Ross/Ross00012.jpg Ross 229 | ./Ross/Ross00029.jpg Ross 230 | ./Ross/Ross00031.jpg Ross 231 | ./Ross/Ross00026.jpg Ross 232 | ./Ross/Ross00004.jpg Ross 233 | ./Ross/Ross00009.jpg Ross 234 | ./Ross/Ross00032.jpg Ross 235 | ./Ross/Ross00040.jpg Ross 236 | ./Ross/Ross00016.jpg Ross 237 | ./Ross/Ross00022.jpg Ross 238 | ./Ross/Ross00019.jpg Ross 239 | ./Ross/Ross00024.jpg Ross 240 | ./Ross/Ross00001.jpg Ross 241 | ./Ross/Ross00039.jpg Ross 242 | ./Ross/Ross00038.jpg Ross 243 | ./Ross/Ross00017.jpg Ross 244 | ./Ross/Ross00034.jpg Ross 245 | ./Ross/Ross00002.png Ross 246 | -------------------------------------------------------------------------------- /demo/friends/index.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/index.bin -------------------------------------------------------------------------------- /demo/friends/output/friends1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/output/friends1.jpg -------------------------------------------------------------------------------- /demo/friends/output/friends2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/output/friends2.jpg -------------------------------------------------------------------------------- /demo/friends/output/friends3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/output/friends3.jpg -------------------------------------------------------------------------------- /demo/friends/output/friends4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/output/friends4.jpg -------------------------------------------------------------------------------- /demo/friends/query/Rachel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/query/Rachel.png -------------------------------------------------------------------------------- /demo/friends/query/friends1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/query/friends1.jpg -------------------------------------------------------------------------------- /demo/friends/query/friends2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/demo/friends/query/friends2.jpg -------------------------------------------------------------------------------- /insightface_paddle.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | import argparse 17 | import requests 18 | import logging 19 | import imghdr 20 | import pickle 21 | import tarfile 22 | from functools import partial 23 | 24 | import cv2 25 | import numpy as np 26 | from sklearn.metrics.pairwise import cosine_similarity 27 | from tqdm import tqdm 28 | from prettytable import PrettyTable 29 | from PIL import Image, ImageDraw, ImageFont 30 | import paddle 31 | from paddle.inference import Config 32 | from paddle.inference import create_predictor 33 | 34 | __all__ = ["InsightFace", "parser"] 35 | BASE_INFERENCE_MODEL_DIR = os.path.expanduser("~/.insightface/ppmodels/") 36 | BASE_DOWNLOAD_URL = "https://paddle-model-ecology.bj.bcebos.com/model/insight-face/{}.tar" 37 | 38 | 39 | def parser(add_help=True): 40 | def str2bool(v): 41 | return v.lower() in ("true", "t", "1") 42 | 43 | parser = argparse.ArgumentParser(add_help=add_help) 44 | parser.add_argument( 45 | "--det_model", 46 | type=str, 47 | default="BlazeFace", 48 | help="The detection model.") 49 | parser.add_argument( 50 | "--rec_model", 51 | type=str, 52 | default="MobileFace", 53 | help="The recognition model.") 54 | parser.add_argument( 55 | "--use_gpu", 56 | type=str2bool, 57 | default=True, 58 | help="Whether use GPU to predict. Default by True.") 59 | parser.add_argument( 60 | "--enable_mkldnn", 61 | type=str2bool, 62 | default=False, 63 | help="Whether use MKLDNN to predict, valid only when --use_gpu is False. Default by False." 64 | ) 65 | parser.add_argument( 66 | "--cpu_threads", 67 | type=int, 68 | default=1, 69 | help="The num of threads with CPU, valid only when --use_gpu is False. Default by 1." 70 | ) 71 | parser.add_argument( 72 | "--input", 73 | type=str, 74 | help="The path or directory of image(s) or video to be predicted.") 75 | parser.add_argument( 76 | "--output", 77 | type=str, 78 | default="./output/", 79 | help="The directory of prediction result.") 80 | parser.add_argument( 81 | "--det", action="store_true", help="Whether to detect.") 82 | parser.add_argument( 83 | "--det_thresh", 84 | type=float, 85 | default=0.8, 86 | help="The threshold of detection postprocess. Default by 0.8.") 87 | parser.add_argument( 88 | "--rec", action="store_true", help="Whether to recognize.") 89 | parser.add_argument( 90 | "--index", type=str, default=None, help="The path of index file.") 91 | parser.add_argument( 92 | "--cdd_num", 93 | type=int, 94 | default=5, 95 | help="The number of candidates in the recognition retrieval. Default by 5." 96 | ) 97 | parser.add_argument( 98 | "--rec_thresh", 99 | type=float, 100 | default=0.45, 101 | help="The threshold of recognition postprocess. Default by 0.45.") 102 | parser.add_argument( 103 | "--max_batch_size", 104 | type=int, 105 | default=1, 106 | help="The maxium of batch_size to recognize. Default by 1.") 107 | parser.add_argument( 108 | "--build_index", 109 | type=str, 110 | default=None, 111 | help="The path of index to be build.") 112 | parser.add_argument( 113 | "--img_dir", 114 | type=str, 115 | default=None, 116 | help="The img(s) dir used to build index.") 117 | parser.add_argument( 118 | "--label", 119 | type=str, 120 | default=None, 121 | help="The label file path used to build index.") 122 | 123 | return parser 124 | 125 | 126 | def print_config(args): 127 | args = vars(args) 128 | table = PrettyTable(["Param", "Value"]) 129 | for param in args: 130 | table.add_row([param, args[param]]) 131 | width = len(str(table).split("\n")[0]) 132 | print("{}".format("-" * width)) 133 | print("PaddleFace".center(width)) 134 | print(table) 135 | print("Powered by PaddlePaddle!".center(width)) 136 | print("{}".format("-" * width)) 137 | 138 | 139 | def download_with_progressbar(url, save_path): 140 | """Download from url with progressbar. 141 | """ 142 | if os.path.isfile(save_path): 143 | os.remove(save_path) 144 | response = requests.get(url, stream=True) 145 | total_size_in_bytes = int(response.headers.get("content-length", 0)) 146 | block_size = 1024 # 1 Kibibyte 147 | progress_bar = tqdm(total=total_size_in_bytes, unit="iB", unit_scale=True) 148 | with open(save_path, "wb") as file: 149 | for data in response.iter_content(block_size): 150 | progress_bar.update(len(data)) 151 | file.write(data) 152 | progress_bar.close() 153 | if total_size_in_bytes == 0 or progress_bar.n != total_size_in_bytes or not os.path.isfile( 154 | save_path): 155 | raise Exception( 156 | f"Something went wrong while downloading model/image from \"{url}\"" 157 | ) 158 | 159 | 160 | def check_model_file(model): 161 | """Check the model files exist and download and untar when no exist. 162 | """ 163 | model_map = { 164 | "ArcFace": "arcface_iresnet50_v1.0_infer", 165 | "BlazeFace": "blazeface_fpn_ssh_1000e_v1.0_infer", 166 | "MobileFace": "mobileface_v1.0_infer" 167 | } 168 | 169 | if os.path.isdir(model): 170 | model_file_path = os.path.join(model, "inference.pdmodel") 171 | params_file_path = os.path.join(model, "inference.pdiparams") 172 | if not os.path.exists(model_file_path) or not os.path.exists( 173 | params_file_path): 174 | raise Exception( 175 | f"The specifed model directory error. The drectory must include \"inference.pdmodel\" and \"inference.pdiparams\"." 176 | ) 177 | 178 | elif model in model_map: 179 | storage_directory = partial(os.path.join, BASE_INFERENCE_MODEL_DIR, 180 | model) 181 | url = BASE_DOWNLOAD_URL.format(model_map[model]) 182 | 183 | tar_file_name_list = [ 184 | "inference.pdiparams", "inference.pdiparams.info", 185 | "inference.pdmodel" 186 | ] 187 | model_file_path = storage_directory("inference.pdmodel") 188 | params_file_path = storage_directory("inference.pdiparams") 189 | if not os.path.exists(model_file_path) or not os.path.exists( 190 | params_file_path): 191 | tmp_path = storage_directory(url.split("/")[-1]) 192 | logging.info(f"Download {url} to {tmp_path}") 193 | os.makedirs(storage_directory(), exist_ok=True) 194 | download_with_progressbar(url, tmp_path) 195 | with tarfile.open(tmp_path, "r") as tarObj: 196 | for member in tarObj.getmembers(): 197 | filename = None 198 | for tar_file_name in tar_file_name_list: 199 | if tar_file_name in member.name: 200 | filename = tar_file_name 201 | if filename is None: 202 | continue 203 | file = tarObj.extractfile(member) 204 | with open(storage_directory(filename), "wb") as f: 205 | f.write(file.read()) 206 | os.remove(tmp_path) 207 | if not os.path.exists(model_file_path) or not os.path.exists( 208 | params_file_path): 209 | raise Exception( 210 | f"Something went wrong while downloading and unzip the model[{model}] files!" 211 | ) 212 | else: 213 | raise Exception( 214 | f"The specifed model name error. Support \"BlazeFace\" for detection and \"ArcFace\" and \"MobileFace\" for recognition. And support local directory that include model files (\"inference.pdmodel\" and \"inference.pdiparams\")." 215 | ) 216 | 217 | return model_file_path, params_file_path 218 | 219 | 220 | def normalize_image(img, scale=None, mean=None, std=None, order="chw"): 221 | if isinstance(scale, str): 222 | scale = eval(scale) 223 | scale = np.float32(scale if scale is not None else 1.0 / 255.0) 224 | mean = mean if mean is not None else [0.485, 0.456, 0.406] 225 | std = std if std is not None else [0.229, 0.224, 0.225] 226 | 227 | shape = (3, 1, 1) if order == "chw" else (1, 1, 3) 228 | mean = np.array(mean).reshape(shape).astype("float32") 229 | std = np.array(std).reshape(shape).astype("float32") 230 | 231 | if isinstance(img, Image.Image): 232 | img = np.array(img) 233 | 234 | assert isinstance(img, 235 | np.ndarray), "invalid input \"img\" in NormalizeImage" 236 | return (img.astype("float32") * scale - mean) / std 237 | 238 | 239 | def to_CHW_image(img): 240 | if isinstance(img, Image.Image): 241 | img = np.array(img) 242 | return img.transpose((2, 0, 1)) 243 | 244 | 245 | class ColorMap(object): 246 | def __init__(self, num): 247 | super().__init__() 248 | self.get_color_map_list(num) 249 | self.color_map = {} 250 | self.ptr = 0 251 | 252 | def __getitem__(self, key): 253 | return self.color_map[key] 254 | 255 | def update(self, keys): 256 | for key in keys: 257 | if key not in self.color_map: 258 | i = self.ptr % len(self.color_list) 259 | self.color_map[key] = self.color_list[i] 260 | self.ptr += 1 261 | 262 | def get_color_map_list(self, num_classes): 263 | color_map = num_classes * [0, 0, 0] 264 | for i in range(0, num_classes): 265 | j = 0 266 | lab = i 267 | while lab: 268 | color_map[i * 3] |= (((lab >> 0) & 1) << (7 - j)) 269 | color_map[i * 3 + 1] |= (((lab >> 1) & 1) << (7 - j)) 270 | color_map[i * 3 + 2] |= (((lab >> 2) & 1) << (7 - j)) 271 | j += 1 272 | lab >>= 3 273 | self.color_list = [ 274 | color_map[i:i + 3] for i in range(0, len(color_map), 3) 275 | ] 276 | 277 | 278 | class ImageReader(object): 279 | def __init__(self, inputs): 280 | super().__init__() 281 | self.idx = 0 282 | if isinstance(inputs, np.ndarray): 283 | self.image_list = [inputs] 284 | else: 285 | imgtype_list = {"jpg", "bmp", "png", "jpeg", "rgb", "tif", "tiff"} 286 | self.image_list = [] 287 | if os.path.isfile(inputs): 288 | if imghdr.what(inputs) not in imgtype_list: 289 | raise Exception( 290 | f"Error type of input path, only support: {imgtype_list}" 291 | ) 292 | self.image_list.append(inputs) 293 | elif os.path.isdir(inputs): 294 | tmp_file_list = os.listdir(inputs) 295 | warn_tag = False 296 | for file_name in tmp_file_list: 297 | file_path = os.path.join(inputs, file_name) 298 | if not os.path.isfile(file_path): 299 | warn_tag = True 300 | continue 301 | if imghdr.what(file_path) in imgtype_list: 302 | self.image_list.append(file_path) 303 | else: 304 | warn_tag = True 305 | if warn_tag: 306 | logging.warning( 307 | f"The directory of input contine directory or not supported file type, only support: {imgtype_list}" 308 | ) 309 | else: 310 | raise Exception( 311 | f"The file of input path not exist! Please check input: \"{inputs}\"" 312 | ) 313 | 314 | def __iter__(self): 315 | return self 316 | 317 | def __next__(self): 318 | if self.idx >= len(self.image_list): 319 | raise StopIteration 320 | 321 | data = self.image_list[self.idx] 322 | if isinstance(data, np.ndarray): 323 | self.idx += 1 324 | return data, "tmp.png" 325 | path = data 326 | _, file_name = os.path.split(path) 327 | img = cv2.imread(path) 328 | if img is None: 329 | logging.warning(f"Error in reading image: \"{path}\"! Ignored.") 330 | self.idx += 1 331 | return self.__next__() 332 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 333 | self.idx += 1 334 | return img, file_name 335 | 336 | def __len__(self): 337 | return len(self.image_list) 338 | 339 | 340 | class VideoReader(object): 341 | def __init__(self, inputs): 342 | super().__init__() 343 | videotype_list = {"mp4"} 344 | if os.path.splitext(inputs)[-1][1:] not in videotype_list: 345 | raise Exception( 346 | f"The input file is not supported, only support: {videotype_list}" 347 | ) 348 | if not os.path.isfile(inputs): 349 | raise Exception( 350 | f"The file of input path not exist! Please check input: \"{inputs}\"" 351 | ) 352 | self.capture = cv2.VideoCapture(inputs) 353 | self.file_name = os.path.split(inputs)[-1] 354 | 355 | def get_info(self): 356 | info = {} 357 | width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH)) 358 | height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) 359 | fourcc = cv2.VideoWriter_fourcc(* "mp4v") 360 | info["file_name"] = self.file_name 361 | info["fps"] = 30 362 | info["shape"] = (width, height) 363 | info["fourcc"] = cv2.VideoWriter_fourcc(* "mp4v") 364 | return info 365 | 366 | def __iter__(self): 367 | return self 368 | 369 | def __next__(self): 370 | ret, frame = self.capture.read() 371 | if not ret: 372 | raise StopIteration 373 | return frame, self.file_name 374 | 375 | 376 | class ImageWriter(object): 377 | def __init__(self, output_dir): 378 | super().__init__() 379 | if output_dir is None: 380 | raise Exception( 381 | "Please specify the directory of saving prediction results by --output." 382 | ) 383 | if not os.path.exists(output_dir): 384 | os.makedirs(output_dir) 385 | self.output_dir = output_dir 386 | 387 | def write(self, image, file_name): 388 | path = os.path.join(self.output_dir, file_name) 389 | cv2.imwrite(path, cv2.cvtColor(image, cv2.COLOR_RGB2BGR)) 390 | 391 | 392 | class VideoWriter(object): 393 | def __init__(self, output_dir, video_info): 394 | super().__init__() 395 | if output_dir is None: 396 | raise Exception( 397 | "Please specify the directory of saving prediction results by --output." 398 | ) 399 | if not os.path.exists(output_dir): 400 | os.makedirs(output_dir) 401 | output_path = os.path.join(output_dir, video_info["file_name"]) 402 | fourcc = cv2.VideoWriter_fourcc(* "mp4v") 403 | self.writer = cv2.VideoWriter(output_path, video_info["fourcc"], 404 | video_info["fps"], video_info["shape"]) 405 | 406 | def write(self, frame, file_name): 407 | self.writer.write(frame) 408 | 409 | def __del__(self): 410 | if hasattr(self, "writer"): 411 | self.writer.release() 412 | 413 | 414 | class BasePredictor(object): 415 | def __init__(self, predictor_config): 416 | super().__init__() 417 | self.predictor_config = predictor_config 418 | self.predictor, self.input_names, self.output_names = self.load_predictor( 419 | predictor_config["model_file"], predictor_config["params_file"]) 420 | 421 | def load_predictor(self, model_file, params_file): 422 | config = Config(model_file, params_file) 423 | if self.predictor_config["use_gpu"]: 424 | config.enable_use_gpu(200, 0) 425 | config.switch_ir_optim(True) 426 | else: 427 | config.disable_gpu() 428 | config.set_cpu_math_library_num_threads(self.predictor_config[ 429 | "cpu_threads"]) 430 | 431 | if self.predictor_config["enable_mkldnn"]: 432 | try: 433 | # cache 10 different shapes for mkldnn to avoid memory leak 434 | config.set_mkldnn_cache_capacity(10) 435 | config.enable_mkldnn() 436 | except Exception as e: 437 | logging.error( 438 | "The current environment does not support `mkldnn`, so disable mkldnn." 439 | ) 440 | config.disable_glog_info() 441 | config.enable_memory_optim() 442 | # use zero copy 443 | config.switch_use_feed_fetch_ops(False) 444 | predictor = create_predictor(config) 445 | input_names = predictor.get_input_names() 446 | output_names = predictor.get_output_names() 447 | return predictor, input_names, output_names 448 | 449 | def preprocess(self): 450 | raise NotImplementedError 451 | 452 | def postprocess(self): 453 | raise NotImplementedError 454 | 455 | def predict(self, img): 456 | raise NotImplementedError 457 | 458 | 459 | class Detector(BasePredictor): 460 | def __init__(self, det_config, predictor_config): 461 | super().__init__(predictor_config) 462 | self.det_config = det_config 463 | self.target_size = self.det_config["target_size"] 464 | self.thresh = self.det_config["thresh"] 465 | 466 | def preprocess(self, img): 467 | resize_h, resize_w = self.target_size 468 | img_shape = img.shape 469 | img_scale_x = resize_w / img_shape[1] 470 | img_scale_y = resize_h / img_shape[0] 471 | img = cv2.resize( 472 | img, None, None, fx=img_scale_x, fy=img_scale_y, interpolation=1) 473 | img = normalize_image( 474 | img, 475 | scale=1. / 255., 476 | mean=[0.485, 0.456, 0.406], 477 | std=[0.229, 0.224, 0.225], 478 | order="hwc") 479 | img_info = {} 480 | img_info["im_shape"] = np.array( 481 | img.shape[:2], dtype=np.float32)[np.newaxis, :] 482 | img_info["scale_factor"] = np.array( 483 | [img_scale_y, img_scale_x], dtype=np.float32)[np.newaxis, :] 484 | 485 | img = img.transpose((2, 0, 1)).copy() 486 | img_info["image"] = img[np.newaxis, :, :, :] 487 | return img_info 488 | 489 | def postprocess(self, np_boxes): 490 | expect_boxes = (np_boxes[:, 1] > self.thresh) & (np_boxes[:, 0] > -1) 491 | return np_boxes[expect_boxes, :] 492 | 493 | def predict(self, img): 494 | inputs = self.preprocess(img) 495 | for input_name in self.input_names: 496 | input_tensor = self.predictor.get_input_handle(input_name) 497 | input_tensor.copy_from_cpu(inputs[input_name]) 498 | self.predictor.run() 499 | output_tensor = self.predictor.get_output_handle(self.output_names[0]) 500 | np_boxes = output_tensor.copy_to_cpu() 501 | # boxes_num = self.detector.get_output_handle(self.detector_output_names[1]) 502 | # np_boxes_num = boxes_num.copy_to_cpu() 503 | box_list = self.postprocess(np_boxes) 504 | return box_list 505 | 506 | 507 | class Recognizer(BasePredictor): 508 | def __init__(self, rec_config, predictor_config): 509 | super().__init__(predictor_config) 510 | if rec_config["index"] is not None: 511 | if rec_config["build_index"] is not None: 512 | raise Exception( 513 | "Only one of --index and --build_index can be set!") 514 | self.load_index(rec_config["index"]) 515 | elif rec_config["build_index"] is None: 516 | raise Exception("One of --index and --build_index have to be set!") 517 | self.rec_config = rec_config 518 | self.cdd_num = self.rec_config["cdd_num"] 519 | self.thresh = self.rec_config["thresh"] 520 | self.max_batch_size = self.rec_config["max_batch_size"] 521 | 522 | def preprocess(self, img, box_list=None): 523 | img = normalize_image( 524 | img, 525 | scale=1. / 255., 526 | mean=[0.5, 0.5, 0.5], 527 | std=[0.5, 0.5, 0.5], 528 | order="hwc") 529 | if box_list is None: 530 | height, width = img.shape[:2] 531 | box_list = [np.array([0, 0, 0, 0, width, height])] 532 | batch = [] 533 | input_batches = [] 534 | cnt = 0 535 | for idx, box in enumerate(box_list): 536 | box[box < 0] = 0 537 | xmin, ymin, xmax, ymax = list(map(int, box[2:])) 538 | face_img = img[ymin:ymax, xmin:xmax, :] 539 | face_img = cv2.resize(face_img, (112, 112)).transpose( 540 | (2, 0, 1)).copy() 541 | batch.append(face_img) 542 | cnt += 1 543 | if cnt % self.max_batch_size == 0 or (idx + 1) == len(box_list): 544 | input_batches.append(np.array(batch)) 545 | batch = [] 546 | return input_batches 547 | 548 | def postprocess(self): 549 | pass 550 | 551 | def retrieval(self, np_feature): 552 | labels = [] 553 | for feature in np_feature: 554 | similarity = cosine_similarity(self.index_feature, 555 | feature).squeeze() 556 | abs_similarity = np.abs(similarity) 557 | candidate_idx = np.argpartition(abs_similarity, 558 | -self.cdd_num)[-self.cdd_num:] 559 | remove_idx = np.where(abs_similarity[candidate_idx] < self.thresh) 560 | candidate_idx = np.delete(candidate_idx, remove_idx) 561 | candidate_label_list = list(np.array(self.label)[candidate_idx]) 562 | if len(candidate_label_list) == 0: 563 | maxlabel = "unknown" 564 | else: 565 | maxlabel = max(candidate_label_list, 566 | key=candidate_label_list.count) 567 | labels.append(maxlabel) 568 | return labels 569 | 570 | def load_index(self, file_path): 571 | with open(file_path, "rb") as f: 572 | index = pickle.load(f) 573 | self.label = index["label"] 574 | self.index_feature = np.array(index["feature"]).squeeze() 575 | 576 | def predict(self, img, box_list=None): 577 | batch_list = self.preprocess(img, box_list) 578 | feature_list = [] 579 | for batch in batch_list: 580 | for input_name in self.input_names: 581 | input_tensor = self.predictor.get_input_handle(input_name) 582 | input_tensor.copy_from_cpu(batch) 583 | self.predictor.run() 584 | output_tensor = self.predictor.get_output_handle(self.output_names[ 585 | 0]) 586 | np_feature = output_tensor.copy_to_cpu() 587 | feature_list.append(np_feature) 588 | return np.array(feature_list) 589 | 590 | 591 | class InsightFace(object): 592 | def __init__(self, args, print_info=True): 593 | super().__init__() 594 | 595 | self.args = args 596 | 597 | self.font_path = os.path.join( 598 | os.path.abspath(os.path.dirname(__file__)), 599 | "SourceHanSansCN-Medium.otf") 600 | 601 | if print_info: 602 | print_config(args) 603 | 604 | # build index 605 | if args.build_index: 606 | if args.rec or args.det: 607 | warning_str = f"Only one of --rec (or --det) and --build_index can be set!" 608 | raise Exception(warning_str) 609 | if args.img_dir is None or args.label is None: 610 | raise Exception( 611 | "Please specify the --img_dir and --label when build index." 612 | ) 613 | self.init_rec(args) 614 | 615 | # detection 616 | if args.det: 617 | self.init_det(args) 618 | 619 | # recognition 620 | if args.rec: 621 | if not args.index: 622 | warning_str = f"The index file must be specified when recognition! " 623 | if args.det: 624 | logging.warning(warning_str + "Detection only!") 625 | else: 626 | raise Exception(warning_str) 627 | elif not os.path.isfile(args.index): 628 | warning_str = f"The index file not found! Please check path of index: \"{args.index}\". " 629 | if args.det: 630 | logging.warning(warning_str + "Detection only!") 631 | else: 632 | raise Exception(warning_str) 633 | else: 634 | self.init_rec(args) 635 | 636 | if not args.build_index and not args.det and not args.rec: 637 | raise Exception( 638 | "Specify at least the detection(--det) or recognition(--rec) or --build_index!" 639 | ) 640 | 641 | def init_rec(self, args): 642 | rec_config = { 643 | "max_batch_size": args.max_batch_size, 644 | "resize": 112, 645 | "thresh": args.rec_thresh, 646 | "index": args.index, 647 | "build_index": args.build_index, 648 | "cdd_num": args.cdd_num 649 | } 650 | rec_predictor_config = { 651 | "use_gpu": args.use_gpu, 652 | "enable_mkldnn": args.enable_mkldnn, 653 | "cpu_threads": args.cpu_threads 654 | } 655 | model_file_path, params_file_path = check_model_file(args.rec_model) 656 | rec_predictor_config["model_file"] = model_file_path 657 | rec_predictor_config["params_file"] = params_file_path 658 | self.rec_predictor = Recognizer(rec_config, rec_predictor_config) 659 | 660 | def init_det(self, args): 661 | det_config = {"thresh": args.det_thresh, "target_size": [640, 640]} 662 | det_predictor_config = { 663 | "use_gpu": args.use_gpu, 664 | "enable_mkldnn": args.enable_mkldnn, 665 | "cpu_threads": args.cpu_threads 666 | } 667 | model_file_path, params_file_path = check_model_file(args.det_model) 668 | det_predictor_config["model_file"] = model_file_path 669 | det_predictor_config["params_file"] = params_file_path 670 | self.det_predictor = Detector(det_config, det_predictor_config) 671 | 672 | # TODO(gaotingquan): now only support fixed number of color 673 | self.color_map = ColorMap(100) 674 | 675 | def preprocess(self, img): 676 | img = img.astype(np.float32, copy=False) 677 | return img 678 | 679 | def draw(self, img, box_list, labels): 680 | self.color_map.update(labels) 681 | im = Image.fromarray(img) 682 | draw = ImageDraw.Draw(im) 683 | 684 | for i, dt in enumerate(box_list): 685 | bbox, score = dt[2:], dt[1] 686 | label = labels[i] 687 | color = tuple(self.color_map[label]) 688 | 689 | xmin, ymin, xmax, ymax = bbox 690 | 691 | font_size = max(int((xmax - xmin) // 6), 10) 692 | font = ImageFont.truetype(self.font_path, font_size) 693 | 694 | text = "{} {:.4f}".format(label, score) 695 | th = sum(font.getmetrics()) 696 | tw = font.getsize(text)[0] 697 | start_y = max(0, ymin - th) 698 | 699 | draw.rectangle( 700 | [(xmin, start_y), (xmin + tw + 1, start_y + th)], fill=color) 701 | draw.text( 702 | (xmin + 1, start_y), 703 | text, 704 | fill=(255, 255, 255), 705 | font=font, 706 | anchor="la") 707 | draw.rectangle( 708 | [(xmin, ymin), (xmax, ymax)], width=2, outline=color) 709 | return np.array(im) 710 | 711 | def predict_np_img(self, img): 712 | input_img = self.preprocess(img) 713 | box_list = None 714 | np_feature = None 715 | if hasattr(self, "det_predictor"): 716 | box_list = self.det_predictor.predict(input_img) 717 | if hasattr(self, "rec_predictor"): 718 | np_feature = self.rec_predictor.predict(input_img, box_list) 719 | return box_list, np_feature 720 | 721 | def init_reader_writer(self, input_data): 722 | if isinstance(input_data, np.ndarray): 723 | self.input_reader = ImageReader(input_data) 724 | if hasattr(self, "det_predictor"): 725 | self.output_writer = ImageWriter(self.args.output) 726 | elif isinstance(input_data, str): 727 | if input_data.endswith("mp4"): 728 | self.input_reader = VideoReader(input_data) 729 | info = self.input_reader.get_info() 730 | self.output_writer = VideoWriter(self.args.output, info) 731 | else: 732 | self.input_reader = ImageReader(input_data) 733 | if hasattr(self, "det_predictor"): 734 | self.output_writer = ImageWriter(self.args.output) 735 | else: 736 | raise Exception( 737 | f"The input data error. Only support path of image or video(.mp4) and dirctory that include images." 738 | ) 739 | 740 | def predict(self, input_data, print_info=False): 741 | """Predict input_data. 742 | Args: 743 | input_data (str | NumPy.array): The path of image, or the derectory including images, or the image data in NumPy.array format. 744 | print_info (bool, optional): Wheather to print the prediction results. Defaults to False. 745 | Yields: 746 | dict: { 747 | "box_list": The prediction results of detection. 748 | "features": The output of recognition. 749 | "labels": The results of retrieval. 750 | } 751 | """ 752 | self.init_reader_writer(input_data) 753 | for img, file_name in self.input_reader: 754 | if img is None: 755 | logging.warning(f"Error in reading img {file_name}! Ignored.") 756 | continue 757 | box_list, np_feature = self.predict_np_img(img) 758 | if np_feature is not None: 759 | labels = self.rec_predictor.retrieval(np_feature) 760 | else: 761 | labels = ["face"] * len(box_list) 762 | if box_list is not None: 763 | result = self.draw(img, box_list, labels=labels) 764 | self.output_writer.write(result, file_name) 765 | if print_info: 766 | logging.info(f"File: {file_name}, predict label(s): {labels}") 767 | yield { 768 | "box_list": box_list, 769 | "features": np_feature, 770 | "labels": labels 771 | } 772 | completion_tip = "Predict complete! " 773 | if self.args.output and hasattr(self, "det_predictor"): 774 | completion_tip += f"All prediction result(s) have been saved in \"{self.args.output}\"." 775 | logging.info(completion_tip) 776 | 777 | def build_index(self): 778 | img_dir = self.args.img_dir 779 | label_path = self.args.label 780 | with open(label_path, "r") as f: 781 | sample_list = f.readlines() 782 | 783 | feature_list = [] 784 | label_list = [] 785 | 786 | for idx, sample in enumerate(sample_list): 787 | name, label = sample.strip().split("\t") 788 | img = cv2.imread(os.path.join(img_dir, name)) 789 | if img is None: 790 | logging.warning(f"Error in reading img {name}! Ignored.") 791 | continue 792 | box_list, np_feature = self.predict_np_img(img) 793 | feature_list.append(np_feature[0]) 794 | label_list.append(label) 795 | 796 | if idx % 100 == 0: 797 | logging.info(f"Build idx: {idx}") 798 | 799 | with open(self.args.build_index, "wb") as f: 800 | pickle.dump({"label": label_list, "feature": feature_list}, f) 801 | logging.info( 802 | f"Build done. Total {len(label_list)}. Index file has been saved in \"{self.args.build_index}\"" 803 | ) 804 | 805 | 806 | # for CLI 807 | def main(args=None): 808 | logging.basicConfig(level=logging.INFO) 809 | 810 | args = parser().parse_args() 811 | predictor = InsightFace(args) 812 | if args.build_index: 813 | predictor.build_index() 814 | else: 815 | res = predictor.predict(args.input, print_info=True) 816 | for _ in res: 817 | pass 818 | 819 | 820 | if __name__ == "__main__": 821 | main() 822 | -------------------------------------------------------------------------------- /qq_group.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/7194e87d2980043ca002122959cec89252843a9b/qq_group.jpeg -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | prettytable 3 | tqdm 4 | Pillow 5 | scikit-learn==0.23.2 6 | opencv-python==4.4.0.46 7 | numpy -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from setuptools import setup, find_packages 16 | from io import open 17 | 18 | with open('requirements.txt', encoding="utf-8-sig") as f: 19 | requirements = f.readlines() 20 | 21 | 22 | def readme(): 23 | with open('README.md', encoding="utf-8-sig") as f: 24 | README = f.read() 25 | return README 26 | 27 | 28 | setup( 29 | name='insightface_paddle', 30 | version='0.0.0', 31 | keywords=[ 32 | 'insight face', 'Arcface', 'BlazeFace', 'MobileFace', 'face detection', 33 | 'face recognition', 'PaddlePaddle' 34 | ], 35 | description='A toolkit for face detection and recognition powered by PaddlePaddle.', 36 | long_description=readme(), 37 | long_description_content_type='text/markdown', 38 | author='Baidu', 39 | author_email='dazhiningsibuqu@163.com', 40 | url='https://github.com/littletomatodonkey/insight-face-paddle', 41 | packages=["insightface_paddle"], 42 | package_dir={'insightface_paddle': ''}, 43 | include_package_data=True, 44 | entry_points={ 45 | "console_scripts": ["insightfacepaddle=insightface_paddle:main"] 46 | }, 47 | install_requires=requirements, 48 | license='Apache License 2.0', 49 | download_url='https://github.com/littletomatodonkey/insight-face-paddle.git', 50 | classifiers=[ 51 | 'Intended Audience :: Developers', 52 | 'Operating System :: OS Independent', 53 | 'Natural Language :: Chinese (Simplified)', 54 | 'Programming Language :: Python :: 3', 55 | 'Programming Language :: Python :: 3.2', 56 | 'Programming Language :: Python :: 3.3', 57 | 'Programming Language :: Python :: 3.4', 58 | 'Programming Language :: Python :: 3.5', 59 | 'Programming Language :: Python :: 3.6', 60 | 'Programming Language :: Python :: 3.7', 'Topic :: Utilities' 61 | ], ) 62 | --------------------------------------------------------------------------------