├── .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 |
--------------------------------------------------------------------------------