mirror of
https://github.com/deepfakes/faceswap.git
synced 2026-10-29 06:03:41 +08:00
251 lines
12 KiB
Python
251 lines
12 KiB
Python
#!/usr/bin python3
|
|
"""Tencent TFace inference"""
|
|
|
|
from __future__ import annotations
|
|
import logging
|
|
import typing as T
|
|
|
|
import numpy as np
|
|
|
|
from lib.utils import get_module_objects, GetModel
|
|
from lib.model.networks.insightface_resnet import ir_50, ir_101
|
|
from plugins.extract.base import FacePlugin
|
|
from . import t_face_defaults as cfg
|
|
|
|
if T.TYPE_CHECKING:
|
|
from lib.model.networks.insightface_resnet import IRNet
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TFace(FacePlugin):
|
|
"""Tencent TFace with the IR 50 and IR 101 backbones
|
|
|
|
Extracts feature vectors from faces in order to compare similarity.
|
|
|
|
From: https://github.com/Tencent/TFace
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__(input_size=112,
|
|
batch_size=cfg.batch_size(),
|
|
is_rgb=True,
|
|
dtype="float32",
|
|
scale=(0, 1),
|
|
force_cpu=cfg.cpu(),
|
|
centering="legacy")
|
|
self._backbone = cfg.backbone()
|
|
self.storage_name = f"{self.storage_name}_{self._backbone}"
|
|
self.model: IRNet
|
|
logger.debug("Initialized %s", self.__class__.__name__)
|
|
|
|
def load_model(self) -> IRNet:
|
|
"""Initialize TFace Model
|
|
|
|
Returns
|
|
-------
|
|
The loaded TFace model
|
|
"""
|
|
# pylint:disable=duplicate-code
|
|
model = ir_50 if self._backbone == "ir-50" else ir_101
|
|
vers = 1 if self._backbone == "ir-50" else 2
|
|
weights = GetModel(f"tface_v{vers}.pth", 33).model_path
|
|
assert isinstance(weights, str)
|
|
input_size = T.cast(T.Literal[112, 224], self.input_size)
|
|
assert input_size == 112
|
|
return T.cast("IRNet", self.load_torch_model(model(input_size), weights))
|
|
|
|
def pre_process(self, batch: np.ndarray) -> np.ndarray:
|
|
"""Format the detected faces for prediction
|
|
|
|
Parameters
|
|
----------
|
|
batch
|
|
The batch of aligned faces in the correct format for the model
|
|
|
|
Returns
|
|
-------
|
|
The updated images for feeding the model
|
|
"""
|
|
return batch.transpose(0, 3, 1, 2)
|
|
|
|
def process(self, batch: np.ndarray) -> np.ndarray:
|
|
"""Get the identity matrix from the model
|
|
|
|
Parameters
|
|
----------
|
|
batch
|
|
The batch to feed into the recognition plugin
|
|
|
|
Returns
|
|
-------
|
|
The predictions from the plugin
|
|
"""
|
|
return self.from_torch(batch)
|
|
|
|
|
|
__all__ = get_module_objects(__name__)
|
|
|
|
|
|
# LICENSE
|
|
"""
|
|
Copyright (C) 2025 Tencent. All rights reserved.
|
|
|
|
Apache License
|
|
Version 2.0, January 2004
|
|
http://www.apache.org/licenses/
|
|
|
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
|
|
1. Definitions.
|
|
|
|
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by
|
|
Sections 1 through 9 of this document.
|
|
|
|
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
|
|
granting the License.
|
|
|
|
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are
|
|
controlled by, or are under common control with that entity. For the purposes of this definition,
|
|
"control" means (i) the power, direct or indirect, to cause the direction or management of such
|
|
entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
|
|
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
|
|
License.
|
|
|
|
"Source" form shall mean the preferred form for making modifications, including but not limited to
|
|
software source code, documentation source, and configuration files.
|
|
|
|
"Object" form shall mean any form resulting from mechanical transformation or translation of a
|
|
Source form, including but not limited to compiled object code, generated documentation, and
|
|
conversions to other media types.
|
|
|
|
"Work" shall mean the work of authorship, whether in Source or Object form, made available under
|
|
the License, as indicated by a copyright notice that is included in or attached to the work (an
|
|
example is provided in the Appendix below).
|
|
|
|
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
|
|
derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
|
|
modifications represent, as a whole, an original work of authorship. For the purposes of this
|
|
License, Derivative Works shall not include works that remain separable from, or merely link (or
|
|
bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
|
|
|
"Contribution" shall mean any work of authorship, including the original version of the Work and
|
|
any modifications or additions to that Work or Derivative Works thereof, that is intentionally
|
|
submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal
|
|
Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition,
|
|
"submitted" means any form of electronic, verbal, or written communication sent to the Licensor or
|
|
its representatives, including but not limited to communication on electronic mailing lists, source
|
|
code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor
|
|
for the purpose of discussing and improving the Work, but excluding communication that is
|
|
conspicuously marked or otherwise designated in writing by the copyright owner as "Not a
|
|
Contribution."
|
|
|
|
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
|
|
Contribution has been received by Licensor and subsequently incorporated within the Work.
|
|
|
|
2. Grant of Copyright License.
|
|
|
|
Subject to the terms and conditions of this License, each Contributor hereby grants to You a
|
|
perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
|
reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and
|
|
distribute the Work and such Derivative Works in Source or Object form.
|
|
|
|
3. Grant of Patent License.
|
|
|
|
Subject to the terms and conditions of this License, each Contributor hereby grants to You a
|
|
perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
|
|
section) patent license to make, have made, use, offer to sell, sell, import, and otherwise
|
|
transfer the Work, where such license applies only to those patent claims licensable by such
|
|
Contributor that are necessarily infringed by their Contribution(s) alone or by combination of
|
|
their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute
|
|
patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
|
|
alleging that the Work or a Contribution incorporated within the Work constitutes direct or
|
|
contributory patent infringement, then any patent licenses granted to You under this License for
|
|
that Work shall terminate as of the date such litigation is filed.
|
|
|
|
4. Redistribution.
|
|
|
|
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with
|
|
or without modifications, and in Source or Object form, provided that You meet the following
|
|
conditions:
|
|
|
|
You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
|
You must cause any modified files to carry prominent notices stating that You changed the files;
|
|
and
|
|
You must retain, in the Source form of any Derivative Works that You distribute, all copyright,
|
|
patent, trademark, and attribution notices from the Source form of the Work, excluding those
|
|
notices that do not pertain to any part of the Derivative Works; and
|
|
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works
|
|
that You distribute must include a readable copy of the attribution notices contained within such
|
|
NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at
|
|
least one of the following places: within a NOTICE text file distributed as part of the Derivative
|
|
Works; within the Source form or documentation, if provided along with the Derivative Works; or,
|
|
within a display generated by the Derivative Works, if and wherever such third-party notices
|
|
normally appear. The contents of the NOTICE file are for informational purposes only and do not
|
|
modify the License. You may add Your own attribution notices within Derivative Works that You
|
|
distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such
|
|
additional attribution notices cannot be construed as modifying the License.
|
|
You may add Your own copyright statement to Your modifications and may provide additional or
|
|
different license terms and conditions for use, reproduction, or distribution of Your
|
|
modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and
|
|
distribution of the Work otherwise complies with the conditions stated in this License.
|
|
|
|
5. Submission of Contributions.
|
|
|
|
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in
|
|
the Work by You to the Licensor shall be under the terms and conditions of this License, without
|
|
any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or
|
|
modify the terms of any separate license agreement you may have executed with Licensor regarding
|
|
such Contributions.
|
|
|
|
6. Trademarks.
|
|
|
|
This License does not grant permission to use the trade names, trademarks, service marks, or
|
|
product names of the Licensor, except as required for reasonable and customary use in describing
|
|
the origin of the Work and reproducing the content of the NOTICE file.
|
|
|
|
7. Disclaimer of Warranty.
|
|
|
|
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each
|
|
Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
ANY KIND, either express or implied, including, without limitation, any warranties or conditions of
|
|
TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely
|
|
responsible for determining the appropriateness of using or redistributing the Work and assume any
|
|
risks associated with Your exercise of permissions under this License.
|
|
|
|
8. Limitation of Liability.
|
|
|
|
In no event and under no legal theory, whether in tort (including negligence), contract, or
|
|
otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or
|
|
agreed to in writing, shall any Contributor be liable to You for damages, including any direct,
|
|
indirect, special, incidental, or consequential damages of any character arising as a result of
|
|
this License or out of the use or inability to use the Work (including but not limited to damages
|
|
for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other
|
|
commercial damages or losses), even if such Contributor has been advised of the possibility of
|
|
such damages.
|
|
|
|
9. Accepting Warranty or Additional Liability.
|
|
|
|
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
|
|
fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
|
|
consistent with this License. However, in accepting such obligations, You may act only on Your own
|
|
behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You
|
|
agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or
|
|
claims asserted against, such Contributor by reason of your accepting any such warranty or
|
|
additional liability.
|
|
|
|
END OF TERMS AND CONDITIONS
|
|
|
|
APPENDIX: How to apply the Apache License to your work
|
|
|
|
To apply the Apache License to your work, attach the following boilerplate notice, with the fields
|
|
enclosed by brackets "[]" replaced with your own identifying information. (Don't include the
|
|
brackets!) The text should be enclosed in the appropriate comment syntax for the file format.
|
|
We also recommend that a file or class name and description of purpose be included on the same
|
|
"printed page" as the copyright notice for easier identification within third-party archives.
|
|
|
|
TFace-可信人脸算法框架 is licensed under the Apache License, Version 2.0
|
|
"""
|