Otary library, shape your images, image your shapes.
# Welcome to Otary Otary — elegant, readable, and powerful image and 2D geometry Python library. ## Features The main features of Otary are: - **Unification**: Otary offers a cohesive solution for image and geometry manipulation, letting you work seamlessly without switching tools. - **Readability**: Self-explanatory by design. Otary’s clean, readable code eliminates the need for comments, making it easy for beginners to learn and for experts to build efficiently. - **Performance**: optimized for speed and efficiency, making it suitable for high-performance applications. It is built on top of [NumPy](https://numpy.org) and [OpenCV](https://opencv.org), which are known for their speed and performance. - **Interactivity**: designed to be Interactive and user-friendly, ideal for [Jupyter notebooks](https://jupyter.org) and live exploration. - **Flexibility**: provides a flexible and extensible architecture, allowing developers to customize and extend its functionality as needed. ## Installation Otary is available on [PyPI](https://pypi.org/project/otary/). You can install it with: ```bash pip install otary ``` ## Example Let me illustrate the usage of Otary with a simple example. Imagine you need to: 1. read an image from a pdf file 2. draw an rectangle on it, shift and rotate the rectangle 3. crop a part of the image 4. rotate the cropped image 5. apply a threshold 6. show the image In order to compare the use of Otary versus other libraries, I will use the same example but with different libraries. Try it yourself on your favorite LLM (like [ChatGPT](https://chatgpt.com/)) by copying the query: ```text Generate a python code to read an image from a pdf, draw a rectangle on it, shift and rotate the rectangle, crop a part of the image, rotate the cropped image, apply a threshold on the image. ``` Using Otary you can do it with few lines of code: ```python import otary as ot im = ot.Image.from_pdf("path/to/you/file.pdf", page_nb=0) rectangle = ot.Rectangle([[1, 1], [4, 1], [4, 4], [1, 4]]) * 100 rectangle.shift([50, 50]).rotate(angle=30, is_degree=True) im = ( im.draw_polygons([rectangle]) .crop(x0=50, y0=50, x1=450, y1=450) .rotate(angle=90, is_degree=True) .threshold_simple(thresh=200) ) im.show() ``` Using Otary makes the code: - Much more **readable** and hence **maintainable** - Much more **interactive** - Much simpler, simplifying **libraries management** by only using one library and not manipulating multiple libraries like Pillow, OpenCV, Scikit-Image, PyMuPDF etc. ## Enhanced Interactivity In a Jupyter notebook, you can easily test and iterate on transformations by simply commenting part of the code as you need it. ```python im = ( im.draw_polygons([rectangle]) # .crop(x0=50, y0=50, x1=450, y1=450) # .rotate(angle=90, is_degree=True) .threshold_simple(thresh=200) ) ```