summaryrefslogtreecommitdiff
path: root/python-nudenet.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-10 04:59:29 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-10 04:59:29 +0000
commit5847482d4d1086a53185dde2faf1a67905e14047 (patch)
treef59668fca701bf93cd89adcf3e04f4a915094d9d /python-nudenet.spec
parentc2f045a97c98215179ccd8c845491cf09866a4fd (diff)
automatic import of python-nudenetopeneuler20.03
Diffstat (limited to 'python-nudenet.spec')
-rw-r--r--python-nudenet.spec539
1 files changed, 539 insertions, 0 deletions
diff --git a/python-nudenet.spec b/python-nudenet.spec
new file mode 100644
index 0000000..6bd53bb
--- /dev/null
+++ b/python-nudenet.spec
@@ -0,0 +1,539 @@
+%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 <Python_Bot@openeuler.org> - 2.0.9-1
+- Package Spec generated