Создайте карандашный набросок приложения с графическим интерфейсом из фотографии в Python
В этой статье мы расскажем, как конвертировать изображения в акварельные наброски и карандашные наброски Linux.
Эскиз и живопись используются художниками многих дисциплин для сохранения идей, воспоминаний и мыслей. Знакомство с искусством, от рисования и скульптуры до посещения художественного музея, обеспечивает множество преимуществ для хорошего самочувствия, включая снижение стресса и улучшение способностей к критическому мышлению. Рисование, наброски и, в частности, рисование связаны с повышением творческих способностей, памяти и снятием стресса и используются в арт-терапии.
Благодаря этой статье мы теперь можем создать веб-приложение для прямого преобразования изображения в эскиз с использованием фреймворка Python Streamlit. Пользователь может загрузить изображение, чтобы преобразовать его либо в акварельный, либо в карандашный рисунок. Пользователь может дополнительно загрузить преобразованное изображение, перед этим давайте разберемся с некоторыми определениями, которые мы будем использовать в этой статье.
- Streamlit — Streamlit — это популярная среда веб-приложений с открытым исходным кодом среди разработчиков Python. Он совместим с широким спектром часто используемых библиотек, включая Keras, Sklearn, Numpy и pandas.
- PIL — PIL расшифровывается как Python Imaging Library. Это пакет для обработки изображений на языке программирования Python. Он включает в себя легкие инструменты обработки изображений, которые помогают редактировать, создавать и хранить изображения.
- Numpy — Numpy — это широко используемая библиотека программирования Python, используемая для высокоуровневых математических вычислений.
- cv2 — эта библиотека используется для решения задач компьютерного зрения.
Требуется пакет
pip install streamlit pip install opencv-python pip install numpy pip install Pillow
Поэтапная реализация
Шаг 1: Установите Streamlit
Точно так же мы установим PIL, Numpy и cv2.
Шаг 2. Проверьте, работает ли установка
streamlit hello
Шаг 3: Теперь запустите веб-приложение Streamlit. Нам нужно ввести следующую команду
streamlit run app.py
Шаг 4: Теперь веб-приложение успешно запущено. Вы можете получить доступ к веб-приложению через локальный URL-адрес или сетевой URL-адрес.
Шаг 5: Создайте новую папку с именем «Веб-приложение» для преобразования изображений в эскизы.
Шаг 6: Вставьте код веб-приложения в файл app.py и сохраните файл.
Первоначально в коде мы импортируем все необходимые фреймворки, пакеты, библиотеки и модули, которые будем использовать для создания веб-приложения. Кроме того, мы должны использовать пользовательские функции, используемые для преобразования изображения в акварельный набросок и для преобразования изображения в карандашный набросок. Существует также функция загрузки изображения с использованием библиотеки PIL. Основная функция содержит код для веб-приложения. Изначально у нас есть несколько заголовков и подзаголовков, которые помогут пользователю загрузить изображение. Для загрузки изображения мы использовали загрузчик файлов streamlit . Мы также предоставляем пользователю раскрывающееся меню для выбора между созданием акварельного наброска или созданием карандашного наброска, а затем, в зависимости от их выбора, мы визуализируем результаты. Исходное изображение и изображение после применения фильтра визуализируются рядом друг с другом, так что пользователь может сравнить оба изображения, чтобы увидеть результаты. Наконец, пользователь также может загрузить образ на свой локальный компьютер. Это делается с помощью кнопки загрузки Streamlit.
Полный код
Python3
# import the frameworks, packages and librariesimport streamlit as stfrom PIL import Imagefrom io import BytesIOimport numpy as npimport cv2 # computer vision # function to convert an image to a # water color sketchdef convertto_watercolorsketch(inp_img): img_1 = cv2.edgePreservingFilter(inp_img, flags=2, sigma_s=50, sigma_r=0.8) img_water_color = cv2.stylization(img_1, sigma_s=100, sigma_r=0.5) return(img_water_color) # function to convert an image to a pencil sketchdef pencilsketch(inp_img): img_pencil_sketch, pencil_color_sketch = cv2.pencilSketch( inp_img, sigma_s=50, sigma_r=0.07, shade_factor=0.0825) return(img_pencil_sketch) # function to load an imagedef load_an_image(image): img = Image.open(image) return img # the main function which has the code for# the web applicationdef main(): # basic heading and titles st.title("WEB APPLICATION TO CONVERT IMAGE TO SKETCH") st.write("This is an application developed for converting your ***image*** to a ***Water Color Sketch*** OR ***Pencil Sketch***") st.subheader("Please Upload your image") # image file uploader image_file = st.file_uploader("Upload Images", type=["png", "jpg", "jpeg"]) # if the image is uploaded then execute these # lines of code if image_file is not None: # select box (drop down to choose between water # color / pencil sketch) option = st.selectbox("How would you like to convert the image", ("Convert to water color sketch", "Convert to pencil sketch")) if option == "Convert to water color sketch": image = Image.open(image_file) final_sketch = convertto_watercolorsketch(np.array(image)) im_pil = Image.fromarray(final_sketch) # two columns to display the original image and the # image after applying water color sketching effect col1, col2 = st.columns(2) with col1: st.header("Original Image") st.image(load_an_image(image_file), width=250) with col2: st.header("Water Color Sketch") st.image(im_pil, width=250) buf = BytesIO() img = im_pil img.save(buf, format="JPEG") byte_im = buf.getvalue() st.download_button( label="Download image", data=byte_im, file_name="watercolorsketch.png", mime="image/png" ) if option == "Convert to pencil sketch": image = Image.open(image_file) final_sketch = pencilsketch(np.array(image)) im_pil = Image.fromarray(final_sketch) # two columns to display the original image # and the image after applying # pencil sketching effect col1, col2 = st.columns(2) with col1: st.header("Original Image") st.image(load_an_image(image_file), width=250) with col2: st.header("Pencil Sketch") st.image(im_pil, width=250) buf = BytesIO() img = im_pil img.save(buf, format="JPEG") byte_im = buf.getvalue() st.download_button( label="Download image", data=byte_im, file_name="watercolorsketch.png", mime="image/png" ) if __name__ == "__main__": main() |
Выход:





