summaryrefslogtreecommitdiff
path: root/python-deskew.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-deskew.spec')
-rw-r--r--python-deskew.spec388
1 files changed, 388 insertions, 0 deletions
diff --git a/python-deskew.spec b/python-deskew.spec
new file mode 100644
index 0000000..91a2a43
--- /dev/null
+++ b/python-deskew.spec
@@ -0,0 +1,388 @@
+%global _empty_manifest_terminate_build 0
+Name: python-deskew
+Version: 1.4.3
+Release: 1
+Summary: Skew detection and correction in images containing text
+License: MIT
+URL: https://github.com/sbrunner/deskew
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/0c/53/e6e83055477254cc23b928f155445deb582434d4477f22769c068e21228f/deskew-1.4.3.tar.gz
+BuildArch: noarch
+
+Requires: python3-matplotlib
+Requires: python3-numpy
+Requires: python3-opencv-python-headless
+Requires: python3-scikit-image
+
+%description
+# Deskew
+
+Note: Skew is measured in degrees. Deskewing is a process whereby skew is removed by rotating an image by the same amount as its skew but in the opposite direction. This results in a horizontally and vertically aligned image where the text runs across the page rather than at an angle.
+
+The return angle is between -45 and 45 degrees to don't arbitrary change the image orientation.
+
+By using the library you can set the argument `angle_pm_90` to `True` to have an angle between -90 and 90 degrees.
+
+## Skew detection and correction in images containing text
+
+| Image with skew | Image after deskew |
+| ---------------------------------------------------- | ------------------------------------------------------------------ |
+| ![Image with skew](doc/input.jpeg 'Image with skew') | ![Image after deskew](doc/sample_output.jpeg 'Image after deskew') |
+
+## Cli usage
+
+Get the skew angle:
+
+```bash
+deskew input.png
+```
+
+Deskew an image:
+
+```bash
+deskew --output output.png input.png
+```
+
+## Lib usage
+
+With scikit-image:
+
+```python
+import numpy as np
+from skimage import io
+from skimage.color import rgb2gray
+from skimage.transform import rotate
+
+from deskew import determine_skew
+
+image = io.imread('input.png')
+grayscale = rgb2gray(image)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, resize=True) * 255
+io.imsave('output.png', rotated.astype(np.uint8))
+```
+
+With OpenCV:
+
+```python
+import math
+from typing import Tuple, Union
+
+import cv2
+import numpy as np
+
+from deskew import determine_skew
+
+
+def rotate(
+ image: np.ndarray, angle: float, background: Union[int, Tuple[int, int, int]]
+) -> np.ndarray:
+ old_width, old_height = image.shape[:2]
+ angle_radian = math.radians(angle)
+ width = abs(np.sin(angle_radian) * old_height) + abs(np.cos(angle_radian) * old_width)
+ height = abs(np.sin(angle_radian) * old_width) + abs(np.cos(angle_radian) * old_height)
+
+ image_center = tuple(np.array(image.shape[1::-1]) / 2)
+ rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0)
+ rot_mat[1, 2] += (width - old_width) / 2
+ rot_mat[0, 2] += (height - old_height) / 2
+ return cv2.warpAffine(image, rot_mat, (int(round(height)), int(round(width))), borderValue=background)
+
+image = cv2.imread('input.png')
+grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, (0, 0, 0))
+cv2.imwrite('output.png', rotated)
+```
+
+## Debug images
+
+If you get wrong skew angle you can generate debug images, that can help you to tune the skewing detection.
+
+If you install deskew with `pip install deskew[debug_images]` you can get some debug images used for
+the skew detection with the function `determine_skew_debug_images`.
+
+To start the investigation you should first increase the `num_peaks` (default `20`) and use
+the `determine_skew_debug_images` function.
+
+Then you can try to tune the following arguments `num_peaks`, `angle_pm_90`, `min_angle`, `max_angle`,
+`min_deviation` and eventually `sigma`.
+
+Inspired by Alyn: https://github.com/kakul/Alyn
+
+## Contributing
+
+Install the pre-commit hooks:
+
+```bash
+pip install pre-commit
+pre-commit install --allow-missing-config
+```
+
+
+
+%package -n python3-deskew
+Summary: Skew detection and correction in images containing text
+Provides: python-deskew
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-deskew
+# Deskew
+
+Note: Skew is measured in degrees. Deskewing is a process whereby skew is removed by rotating an image by the same amount as its skew but in the opposite direction. This results in a horizontally and vertically aligned image where the text runs across the page rather than at an angle.
+
+The return angle is between -45 and 45 degrees to don't arbitrary change the image orientation.
+
+By using the library you can set the argument `angle_pm_90` to `True` to have an angle between -90 and 90 degrees.
+
+## Skew detection and correction in images containing text
+
+| Image with skew | Image after deskew |
+| ---------------------------------------------------- | ------------------------------------------------------------------ |
+| ![Image with skew](doc/input.jpeg 'Image with skew') | ![Image after deskew](doc/sample_output.jpeg 'Image after deskew') |
+
+## Cli usage
+
+Get the skew angle:
+
+```bash
+deskew input.png
+```
+
+Deskew an image:
+
+```bash
+deskew --output output.png input.png
+```
+
+## Lib usage
+
+With scikit-image:
+
+```python
+import numpy as np
+from skimage import io
+from skimage.color import rgb2gray
+from skimage.transform import rotate
+
+from deskew import determine_skew
+
+image = io.imread('input.png')
+grayscale = rgb2gray(image)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, resize=True) * 255
+io.imsave('output.png', rotated.astype(np.uint8))
+```
+
+With OpenCV:
+
+```python
+import math
+from typing import Tuple, Union
+
+import cv2
+import numpy as np
+
+from deskew import determine_skew
+
+
+def rotate(
+ image: np.ndarray, angle: float, background: Union[int, Tuple[int, int, int]]
+) -> np.ndarray:
+ old_width, old_height = image.shape[:2]
+ angle_radian = math.radians(angle)
+ width = abs(np.sin(angle_radian) * old_height) + abs(np.cos(angle_radian) * old_width)
+ height = abs(np.sin(angle_radian) * old_width) + abs(np.cos(angle_radian) * old_height)
+
+ image_center = tuple(np.array(image.shape[1::-1]) / 2)
+ rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0)
+ rot_mat[1, 2] += (width - old_width) / 2
+ rot_mat[0, 2] += (height - old_height) / 2
+ return cv2.warpAffine(image, rot_mat, (int(round(height)), int(round(width))), borderValue=background)
+
+image = cv2.imread('input.png')
+grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, (0, 0, 0))
+cv2.imwrite('output.png', rotated)
+```
+
+## Debug images
+
+If you get wrong skew angle you can generate debug images, that can help you to tune the skewing detection.
+
+If you install deskew with `pip install deskew[debug_images]` you can get some debug images used for
+the skew detection with the function `determine_skew_debug_images`.
+
+To start the investigation you should first increase the `num_peaks` (default `20`) and use
+the `determine_skew_debug_images` function.
+
+Then you can try to tune the following arguments `num_peaks`, `angle_pm_90`, `min_angle`, `max_angle`,
+`min_deviation` and eventually `sigma`.
+
+Inspired by Alyn: https://github.com/kakul/Alyn
+
+## Contributing
+
+Install the pre-commit hooks:
+
+```bash
+pip install pre-commit
+pre-commit install --allow-missing-config
+```
+
+
+
+%package help
+Summary: Development documents and examples for deskew
+Provides: python3-deskew-doc
+%description help
+# Deskew
+
+Note: Skew is measured in degrees. Deskewing is a process whereby skew is removed by rotating an image by the same amount as its skew but in the opposite direction. This results in a horizontally and vertically aligned image where the text runs across the page rather than at an angle.
+
+The return angle is between -45 and 45 degrees to don't arbitrary change the image orientation.
+
+By using the library you can set the argument `angle_pm_90` to `True` to have an angle between -90 and 90 degrees.
+
+## Skew detection and correction in images containing text
+
+| Image with skew | Image after deskew |
+| ---------------------------------------------------- | ------------------------------------------------------------------ |
+| ![Image with skew](doc/input.jpeg 'Image with skew') | ![Image after deskew](doc/sample_output.jpeg 'Image after deskew') |
+
+## Cli usage
+
+Get the skew angle:
+
+```bash
+deskew input.png
+```
+
+Deskew an image:
+
+```bash
+deskew --output output.png input.png
+```
+
+## Lib usage
+
+With scikit-image:
+
+```python
+import numpy as np
+from skimage import io
+from skimage.color import rgb2gray
+from skimage.transform import rotate
+
+from deskew import determine_skew
+
+image = io.imread('input.png')
+grayscale = rgb2gray(image)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, resize=True) * 255
+io.imsave('output.png', rotated.astype(np.uint8))
+```
+
+With OpenCV:
+
+```python
+import math
+from typing import Tuple, Union
+
+import cv2
+import numpy as np
+
+from deskew import determine_skew
+
+
+def rotate(
+ image: np.ndarray, angle: float, background: Union[int, Tuple[int, int, int]]
+) -> np.ndarray:
+ old_width, old_height = image.shape[:2]
+ angle_radian = math.radians(angle)
+ width = abs(np.sin(angle_radian) * old_height) + abs(np.cos(angle_radian) * old_width)
+ height = abs(np.sin(angle_radian) * old_width) + abs(np.cos(angle_radian) * old_height)
+
+ image_center = tuple(np.array(image.shape[1::-1]) / 2)
+ rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0)
+ rot_mat[1, 2] += (width - old_width) / 2
+ rot_mat[0, 2] += (height - old_height) / 2
+ return cv2.warpAffine(image, rot_mat, (int(round(height)), int(round(width))), borderValue=background)
+
+image = cv2.imread('input.png')
+grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+angle = determine_skew(grayscale)
+rotated = rotate(image, angle, (0, 0, 0))
+cv2.imwrite('output.png', rotated)
+```
+
+## Debug images
+
+If you get wrong skew angle you can generate debug images, that can help you to tune the skewing detection.
+
+If you install deskew with `pip install deskew[debug_images]` you can get some debug images used for
+the skew detection with the function `determine_skew_debug_images`.
+
+To start the investigation you should first increase the `num_peaks` (default `20`) and use
+the `determine_skew_debug_images` function.
+
+Then you can try to tune the following arguments `num_peaks`, `angle_pm_90`, `min_angle`, `max_angle`,
+`min_deviation` and eventually `sigma`.
+
+Inspired by Alyn: https://github.com/kakul/Alyn
+
+## Contributing
+
+Install the pre-commit hooks:
+
+```bash
+pip install pre-commit
+pre-commit install --allow-missing-config
+```
+
+
+
+%prep
+%autosetup -n deskew-1.4.3
+
+%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-deskew -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.4.3-1
+- Package Spec generated