%global _empty_manifest_terminate_build 0 Name: python-NudeNet Version: 2.0.9 Release: 1 Summary: An ensemble of Neural Nets for Nudity Detection and Censoring License: GPLv3 URL: https://github.com/bedapudi6788/NudeNet Source0: https://mirrors.nju.edu.cn/pypi/web/packages/d4/dc/efe7618feb71cc833ce3e208f0acde41c3b883815ebe382db5b9f0d7dee7/NudeNet-2.0.9.tar.gz BuildArch: noarch Requires: python3-pillow Requires: python3-opencv-python-headless Requires: python3-pydload Requires: python3-scikit-image Requires: python3-onnxruntime %description # NudeNet: Neural Nets for Nudity Classification, Detection and selective censoring [![DOI](https://zenodo.org/badge/173154449.svg)](https://zenodo.org/badge/latestdoi/173154449) Uncensored version of the following image can be found at https://i.imgur.com/rga6845.jpg (NSFW) ![](https://i.imgur.com/0KPJbl9.jpg) **Classifier classes:** |class name | Description | |--------|:--------------: |safe | Image/Video is not sexually explicit | |unsafe | Image/Video is sexually explicit| **Default Detector classes:** |class name | Description | |--------|:-------------------------------------: |EXPOSED_ANUS | Exposed Anus; Any gender | |EXPOSED_ARMPITS | Exposed Armpits; Any gender | |COVERED_BELLY | Provocative, but covered Belly; Any gender | |EXPOSED_BELLY | Exposed Belly; Any gender | |COVERED_BUTTOCKS | Provocative, but covered Buttocks; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |FACE_F | Female Face| |FACE_M | Male Face| |COVERED_FEET |Covered Feet; Any gender | |EXPOSED_FEET | Exposed Feet; Any gender| |COVERED_BREAST_F | Provocative, but covered Breast; Female | |EXPOSED_BREAST_F | Exposed Breast; Female | |COVERED_GENITALIA_F |Provocative, but covered Genitalia; Female| |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_BREAST_M |Exposed Breast; Male | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | **Base Detector classes:** |class name | Description | |--------|:--------------: |EXPOSED_BELLY | Exposed Belly; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |EXPOSED_BREAST_F | Exposed Breast; Female | |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | |EXPOSED_BREAST_M |Exposed Breast; Male | # As self-hostable API service ```bash # Classifier docker run -it -p8080:8080 notaitech/nudenet:classifier # Detector docker run -it -p8080:8080 notaitech/nudenet:detector # See fastDeploy-file_client.py for running predictions via fastDeploy's REST endpoints wget https://raw.githubusercontent.com/notAI-tech/fastDeploy/master/cli/fastDeploy-file_client.py # Single input python fastDeploy-file_client.py --file PATH_TO_YOUR_IMAGE # Client side batching python fastDeploy-file_client.py --dir PATH_TO_FOLDER --ext jpg ``` **Note: golang example https://github.com/notAI-tech/NudeNet/issues/63#issuecomment-729555360**, thanks to [Preetham Kamidi](https://github.com/preetham) # As Python module **Installation**: ```bash pip install --upgrade nudenet ``` **Classifier Usage**: ```python # Import module from nudenet import NudeClassifier # initialize classifier (downloads the checkpoint file automatically the first time) classifier = NudeClassifier() # Classify single image classifier.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier.classify(['path_to_image_1', 'path_to_image_2'], batch_size=BATCH_SIZE) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify video # batch_size is optional; defaults to 4 classifier.classify_video('path_to_video', batch_size=BATCH_SIZE) # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'safe': PROBABILITY, 'unsafe': PROBABILITY}, ....}} ``` Thanks to [Johnny Urosevic](https://github.com/JohnnyUrosevic), NudeClassifier is also available in tflite. **TFLite Classifier Usage**: ```python # Import module from nudenet import NudeClassifierLite # initialize classifier (downloads the checkpoint file automatically the first time) classifier_lite = NudeClassifierLite() # Classify single image classifier_lite.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier_lite.classify(['path_to_image_1', 'path_to_image_2']) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} ``` Using the tflite classifier from flutter: **https://github.com/ndaysinaiK/nude-test** **Detector Usage**: ```python # Import module from nudenet import NudeDetector # initialize detector (downloads the checkpoint file automatically the first time) detector = NudeDetector() # detector = NudeDetector('base') for the "base" version of detector. # Detect single image detector.detect('path_to_image') # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect('path_to_image', mode='fast') # Returns [{'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...] # Detect video # batch_size is optional; defaults to 2 # show_progress is optional; defaults to True detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN) # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN, mode='fast') # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...], ....}} ``` # Notes: - detect_video and classify_video first identify the "unique" frames in a video and run predictions on them for significant performance improvement. - V1 of NudeDetector (available in master branch of this repo) was trained on 12000 images labelled by the good folks at cti-community. - V2 (current version) of NudeDetector is trained on 160,000 entirely auto-labelled (using classification heat maps and various other hybrid techniques) images. - The entire data for the classifier is available at https://archive.org/details/NudeNet_classifier_dataset_v1 - A part of the auto-labelled data (Images are from the classifier dataset above) used to train the base Detector is available at https://github.com/notAI-tech/NudeNet/releases/download/v0/DETECTOR_AUTO_GENERATED_DATA.zip %package -n python3-NudeNet Summary: An ensemble of Neural Nets for Nudity Detection and Censoring Provides: python-NudeNet BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-NudeNet # NudeNet: Neural Nets for Nudity Classification, Detection and selective censoring [![DOI](https://zenodo.org/badge/173154449.svg)](https://zenodo.org/badge/latestdoi/173154449) Uncensored version of the following image can be found at https://i.imgur.com/rga6845.jpg (NSFW) ![](https://i.imgur.com/0KPJbl9.jpg) **Classifier classes:** |class name | Description | |--------|:--------------: |safe | Image/Video is not sexually explicit | |unsafe | Image/Video is sexually explicit| **Default Detector classes:** |class name | Description | |--------|:-------------------------------------: |EXPOSED_ANUS | Exposed Anus; Any gender | |EXPOSED_ARMPITS | Exposed Armpits; Any gender | |COVERED_BELLY | Provocative, but covered Belly; Any gender | |EXPOSED_BELLY | Exposed Belly; Any gender | |COVERED_BUTTOCKS | Provocative, but covered Buttocks; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |FACE_F | Female Face| |FACE_M | Male Face| |COVERED_FEET |Covered Feet; Any gender | |EXPOSED_FEET | Exposed Feet; Any gender| |COVERED_BREAST_F | Provocative, but covered Breast; Female | |EXPOSED_BREAST_F | Exposed Breast; Female | |COVERED_GENITALIA_F |Provocative, but covered Genitalia; Female| |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_BREAST_M |Exposed Breast; Male | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | **Base Detector classes:** |class name | Description | |--------|:--------------: |EXPOSED_BELLY | Exposed Belly; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |EXPOSED_BREAST_F | Exposed Breast; Female | |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | |EXPOSED_BREAST_M |Exposed Breast; Male | # As self-hostable API service ```bash # Classifier docker run -it -p8080:8080 notaitech/nudenet:classifier # Detector docker run -it -p8080:8080 notaitech/nudenet:detector # See fastDeploy-file_client.py for running predictions via fastDeploy's REST endpoints wget https://raw.githubusercontent.com/notAI-tech/fastDeploy/master/cli/fastDeploy-file_client.py # Single input python fastDeploy-file_client.py --file PATH_TO_YOUR_IMAGE # Client side batching python fastDeploy-file_client.py --dir PATH_TO_FOLDER --ext jpg ``` **Note: golang example https://github.com/notAI-tech/NudeNet/issues/63#issuecomment-729555360**, thanks to [Preetham Kamidi](https://github.com/preetham) # As Python module **Installation**: ```bash pip install --upgrade nudenet ``` **Classifier Usage**: ```python # Import module from nudenet import NudeClassifier # initialize classifier (downloads the checkpoint file automatically the first time) classifier = NudeClassifier() # Classify single image classifier.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier.classify(['path_to_image_1', 'path_to_image_2'], batch_size=BATCH_SIZE) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify video # batch_size is optional; defaults to 4 classifier.classify_video('path_to_video', batch_size=BATCH_SIZE) # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'safe': PROBABILITY, 'unsafe': PROBABILITY}, ....}} ``` Thanks to [Johnny Urosevic](https://github.com/JohnnyUrosevic), NudeClassifier is also available in tflite. **TFLite Classifier Usage**: ```python # Import module from nudenet import NudeClassifierLite # initialize classifier (downloads the checkpoint file automatically the first time) classifier_lite = NudeClassifierLite() # Classify single image classifier_lite.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier_lite.classify(['path_to_image_1', 'path_to_image_2']) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} ``` Using the tflite classifier from flutter: **https://github.com/ndaysinaiK/nude-test** **Detector Usage**: ```python # Import module from nudenet import NudeDetector # initialize detector (downloads the checkpoint file automatically the first time) detector = NudeDetector() # detector = NudeDetector('base') for the "base" version of detector. # Detect single image detector.detect('path_to_image') # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect('path_to_image', mode='fast') # Returns [{'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...] # Detect video # batch_size is optional; defaults to 2 # show_progress is optional; defaults to True detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN) # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN, mode='fast') # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...], ....}} ``` # Notes: - detect_video and classify_video first identify the "unique" frames in a video and run predictions on them for significant performance improvement. - V1 of NudeDetector (available in master branch of this repo) was trained on 12000 images labelled by the good folks at cti-community. - V2 (current version) of NudeDetector is trained on 160,000 entirely auto-labelled (using classification heat maps and various other hybrid techniques) images. - The entire data for the classifier is available at https://archive.org/details/NudeNet_classifier_dataset_v1 - A part of the auto-labelled data (Images are from the classifier dataset above) used to train the base Detector is available at https://github.com/notAI-tech/NudeNet/releases/download/v0/DETECTOR_AUTO_GENERATED_DATA.zip %package help Summary: Development documents and examples for NudeNet Provides: python3-NudeNet-doc %description help # NudeNet: Neural Nets for Nudity Classification, Detection and selective censoring [![DOI](https://zenodo.org/badge/173154449.svg)](https://zenodo.org/badge/latestdoi/173154449) Uncensored version of the following image can be found at https://i.imgur.com/rga6845.jpg (NSFW) ![](https://i.imgur.com/0KPJbl9.jpg) **Classifier classes:** |class name | Description | |--------|:--------------: |safe | Image/Video is not sexually explicit | |unsafe | Image/Video is sexually explicit| **Default Detector classes:** |class name | Description | |--------|:-------------------------------------: |EXPOSED_ANUS | Exposed Anus; Any gender | |EXPOSED_ARMPITS | Exposed Armpits; Any gender | |COVERED_BELLY | Provocative, but covered Belly; Any gender | |EXPOSED_BELLY | Exposed Belly; Any gender | |COVERED_BUTTOCKS | Provocative, but covered Buttocks; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |FACE_F | Female Face| |FACE_M | Male Face| |COVERED_FEET |Covered Feet; Any gender | |EXPOSED_FEET | Exposed Feet; Any gender| |COVERED_BREAST_F | Provocative, but covered Breast; Female | |EXPOSED_BREAST_F | Exposed Breast; Female | |COVERED_GENITALIA_F |Provocative, but covered Genitalia; Female| |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_BREAST_M |Exposed Breast; Male | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | **Base Detector classes:** |class name | Description | |--------|:--------------: |EXPOSED_BELLY | Exposed Belly; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |EXPOSED_BREAST_F | Exposed Breast; Female | |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | |EXPOSED_BREAST_M |Exposed Breast; Male | # As self-hostable API service ```bash # Classifier docker run -it -p8080:8080 notaitech/nudenet:classifier # Detector docker run -it -p8080:8080 notaitech/nudenet:detector # See fastDeploy-file_client.py for running predictions via fastDeploy's REST endpoints wget https://raw.githubusercontent.com/notAI-tech/fastDeploy/master/cli/fastDeploy-file_client.py # Single input python fastDeploy-file_client.py --file PATH_TO_YOUR_IMAGE # Client side batching python fastDeploy-file_client.py --dir PATH_TO_FOLDER --ext jpg ``` **Note: golang example https://github.com/notAI-tech/NudeNet/issues/63#issuecomment-729555360**, thanks to [Preetham Kamidi](https://github.com/preetham) # As Python module **Installation**: ```bash pip install --upgrade nudenet ``` **Classifier Usage**: ```python # Import module from nudenet import NudeClassifier # initialize classifier (downloads the checkpoint file automatically the first time) classifier = NudeClassifier() # Classify single image classifier.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier.classify(['path_to_image_1', 'path_to_image_2'], batch_size=BATCH_SIZE) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify video # batch_size is optional; defaults to 4 classifier.classify_video('path_to_video', batch_size=BATCH_SIZE) # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'safe': PROBABILITY, 'unsafe': PROBABILITY}, ....}} ``` Thanks to [Johnny Urosevic](https://github.com/JohnnyUrosevic), NudeClassifier is also available in tflite. **TFLite Classifier Usage**: ```python # Import module from nudenet import NudeClassifierLite # initialize classifier (downloads the checkpoint file automatically the first time) classifier_lite = NudeClassifierLite() # Classify single image classifier_lite.classify('path_to_image_1') # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} # Classify multiple images (batch prediction) # batch_size is optional; defaults to 4 classifier_lite.classify(['path_to_image_1', 'path_to_image_2']) # Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}, # 'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}} ``` Using the tflite classifier from flutter: **https://github.com/ndaysinaiK/nude-test** **Detector Usage**: ```python # Import module from nudenet import NudeDetector # initialize detector (downloads the checkpoint file automatically the first time) detector = NudeDetector() # detector = NudeDetector('base') for the "base" version of detector. # Detect single image detector.detect('path_to_image') # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect('path_to_image', mode='fast') # Returns [{'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...] # Detect video # batch_size is optional; defaults to 2 # show_progress is optional; defaults to True detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN) # fast mode is ~3x faster compared to default mode with slightly lower accuracy. detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN, mode='fast') # Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'}, # "preds": {frame_i: {'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...], ....}} ``` # Notes: - detect_video and classify_video first identify the "unique" frames in a video and run predictions on them for significant performance improvement. - V1 of NudeDetector (available in master branch of this repo) was trained on 12000 images labelled by the good folks at cti-community. - V2 (current version) of NudeDetector is trained on 160,000 entirely auto-labelled (using classification heat maps and various other hybrid techniques) images. - The entire data for the classifier is available at https://archive.org/details/NudeNet_classifier_dataset_v1 - A part of the auto-labelled data (Images are from the classifier dataset above) used to train the base Detector is available at https://github.com/notAI-tech/NudeNet/releases/download/v0/DETECTOR_AUTO_GENERATED_DATA.zip %prep %autosetup -n NudeNet-2.0.9 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-NudeNet -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 10 2023 Python_Bot - 2.0.9-1 - Package Spec generated