Создайте карандашный набросок приложения с графическим интерфейсом из фотографии в 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 libraries import streamlit as st from PIL import Image from io import BytesIO import numpy as np import cv2 # computer vision # function to convert an image to a # water color sketch def 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 sketch def 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 image def load_an_image(image): img = Image. open (image) return img # the main function which has the code for # the web application def 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() |
Выход: