An easy to use face detection module based on MTCNN and RetinaFace algorithms.
Project description
FDet-Offline: just like FDet, but offline
Download like this:
pip install fdet-offline --find-links https://download.pytorch.org/whl/torch_stable.html
Package depends on torch-packages not in PyPi.
A version of fdet where you don't have to access the internet to download the weights.
These are the changes:
MTCNN (only works for this model at the moment)
1.
In fdet/mtcnn.py, line 73-76, the url for the MTCNN-weights are listed:
base_url = 'https://github.com/acnazarejr/fdet/releases/download/weights/'
self._pnet = self.__load_model(_PNet, base_url + 'mtcnn_pnet.pt')
self._rnet = self.__load_model(_RNet, base_url + 'mtcnn_rnet.pt')
self._onet = self.__load_model(_ONet, base_url + 'mtcnn_onet.pt')
I downloaded those weights and created packages to import them (because PyPi has a 100MB max on package size, this was the solution).
I put the weights in the directory weights in the package fdet_offline_mtcnn_weights. The function fdet_offline_mtcnn_weights.import_weights takes mtcnn_type as input and returns a partial function of torch.load.
This partial function gets map_location from __load_model.
The previously mentioned fdet/mtcnn.py, line 73-76, now looks like this:
self._pnet = self.__load_model(_PNet, 'pnet')
self._rnet = self.__load_model(_RNet, 'rnet')
self._onet = self.__load_model(_ONet, 'onet')
In fdet/mtcnn.py, what previously was (url was input):
def __load_model(self, net_class: type, url: str) -> torch.nn.Module:
"""Download and construct the models"""
try:
state_dict = load_state_dict_from_url(url, map_location=self._device_control)
is now (mtcnn_type is input):
def __load_model(self, net_class: type, mtcnn_type: str) -> torch.nn.Module:
"""Download and construct the models"""
try:
load_state_dict = import_weights.load_partial(mtcnn_type)
state_dict = load_state_dict(map_location=self._device_control)
2.
At fdet/mtcnn.py, line 427:
state_dict = load_state_dict_from_url(url, map_location=self._device_control)
load_state_dict_from_url, returns a torch.load which takes the weight-file as input. I replaced the load_state_dict_from_url with torch.load, and that's it.
That line now states this instead;
state_dict = torch.load(url, map_location=self._device_control)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fdet_offline-1.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 323f62d00c0ff9e28a43cd4423794286779df189474f2dd169923f689bcf3562 |
|
MD5 | 01fc12d4335bdbb632907878b30dba7c |
|
BLAKE2b-256 | 27e27447aa1c885a8daf277a221df0b708ab7cd68e5331f34714c59f7f2620d7 |