|
|
import cv2 |
|
|
from PIL import Image, ImageEnhance,ImageColor |
|
|
import gradio as gr |
|
|
import numpy as np |
|
|
import datetime |
|
|
|
|
|
with gr.Blocks() as interface: |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Accordion("1.请选择一张待加工图片"): |
|
|
img_input = gr.Image(label='图片',interactive=True) |
|
|
with gr.Row(): |
|
|
with gr.Accordion("2.可更换勾边颜色,点加工图片"): |
|
|
color = gr.ColorPicker(label="勾边颜色") |
|
|
section_btn = gr.Button("加工图片") |
|
|
|
|
|
with gr.Accordion("【结果】4种勾边效果"): |
|
|
gr.Markdown("#### 手机下载图片,需长按图片2秒后松开,会出现保存方式") |
|
|
with gr.Row(): |
|
|
closed_output0 = gr.Image(label='简单勾边') |
|
|
closed_output1 = gr.Image(label='常规勾边') |
|
|
|
|
|
with gr.Row(): |
|
|
closed_output2 = gr.Image(label='细致勾边') |
|
|
closed_output3 = gr.Image(label='彩色勾边') |
|
|
|
|
|
|
|
|
|
|
|
def turn_arguments(img,color): |
|
|
imageX = Image.fromarray(img) |
|
|
contrast = ImageEnhance.Contrast(imageX) |
|
|
imageX = contrast.enhance(1.5) |
|
|
sharpness = ImageEnhance.Sharpness(imageX) |
|
|
imageX = sharpness.enhance(1.5) |
|
|
img = np.asarray(imageX) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gaussian_blur_0 = 13 |
|
|
structuring_element_0 = 3 |
|
|
canny_start_0 = 65 |
|
|
canny_end_0 = 100 |
|
|
thresh_val_0 = 205 |
|
|
maxval_0 = 330 |
|
|
blend = 0.4 |
|
|
gray0 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|
|
|
|
|
gray0 = cv2.GaussianBlur(gray0, (gaussian_blur_0,gaussian_blur_0), 0) |
|
|
|
|
|
edges0 = cv2.Canny(gray0, canny_start_0, canny_end_0) |
|
|
|
|
|
_, thresh0 = cv2.threshold(edges0, thresh_val_0, maxval_0, cv2.THRESH_BINARY) |
|
|
|
|
|
kernel0 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_0, structuring_element_0)) |
|
|
closed0 = cv2.morphologyEx(thresh0, cv2.MORPH_CLOSE, kernel0) |
|
|
closed0 = closed0.astype(img.dtype) |
|
|
result0 = cv2.bitwise_and(img, img, mask=closed0) |
|
|
result0[closed0==0] = (255,255,255) |
|
|
line_color0 = ImageColor.getcolor(color, "RGB") |
|
|
result0[closed0!=0] = (line_color0) |
|
|
close00 = Image.fromarray(result0).convert('RGB') |
|
|
|
|
|
|
|
|
image0 = Image.fromarray(img) |
|
|
enhancer0 = ImageEnhance.Color(image=image0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gaussian_blur_1 = 13 |
|
|
structuring_element_1 = 3 |
|
|
canny_start_1 = 25 |
|
|
canny_end_1 = 45 |
|
|
thresh_val_1 = 205 |
|
|
maxval_1 = 330 |
|
|
gray1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|
|
|
|
|
gray1 = cv2.GaussianBlur(gray1, (gaussian_blur_1,gaussian_blur_1), 0) |
|
|
|
|
|
edges1 = cv2.Canny(gray1, canny_start_1, canny_end_1) |
|
|
|
|
|
_, thresh1 = cv2.threshold(edges1, thresh_val_1, maxval_1, cv2.THRESH_BINARY) |
|
|
|
|
|
kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_1, structuring_element_1)) |
|
|
closed1 = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel1) |
|
|
closed1 = closed1.astype(img.dtype) |
|
|
result1 = cv2.bitwise_and(img, img, mask=closed1) |
|
|
result1[closed1==0] = (255,255,255) |
|
|
line_color1 = ImageColor.getcolor(color, "RGB") |
|
|
result1[closed1!=0] = (line_color1) |
|
|
close01 = Image.fromarray(result1).convert('RGB') |
|
|
|
|
|
|
|
|
image1 = Image.fromarray(img) |
|
|
enhancer1 = ImageEnhance.Color(image=image1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gaussian_blur_2 = 13 |
|
|
structuring_element_2 = 3 |
|
|
canny_start_2 = 10 |
|
|
canny_end_2 = 40 |
|
|
thresh_val_2 = 205 |
|
|
maxval_2 = 330 |
|
|
gray2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|
|
|
|
|
gray2 = cv2.GaussianBlur(gray2, (gaussian_blur_2,gaussian_blur_2), 0) |
|
|
|
|
|
edges2 = cv2.Canny(gray2, canny_start_2, canny_end_2) |
|
|
|
|
|
_, thresh2 = cv2.threshold(edges2, thresh_val_2, maxval_2, cv2.THRESH_BINARY) |
|
|
|
|
|
kernel2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_2, structuring_element_2)) |
|
|
closed2 = cv2.morphologyEx(thresh2, cv2.MORPH_CLOSE, kernel2) |
|
|
closed2 = closed2.astype(img.dtype) |
|
|
result2 = cv2.bitwise_and(img, img, mask=closed2) |
|
|
result2[closed2==0] = (255,255,255) |
|
|
line_color2 = ImageColor.getcolor(color, "RGB") |
|
|
result2[closed2!=0] = (line_color2) |
|
|
close02 = Image.fromarray(result2).convert('RGB') |
|
|
|
|
|
|
|
|
image2 = Image.fromarray(img) |
|
|
enhancer2 = ImageEnhance.Color(image=image2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
closed3 = closed1.astype(img.dtype) |
|
|
result3 = cv2.bitwise_and(img, img, mask=closed3) |
|
|
result3[closed3==0] = (255,255,255) |
|
|
close03 = Image.fromarray(result3).convert('RGB') |
|
|
|
|
|
|
|
|
image3 = Image.fromarray(img) |
|
|
enhancer3 = ImageEnhance.Color(image=image3) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result0,result1,result2,result3 |
|
|
|
|
|
section_btn.click(turn_arguments,inputs=[img_input,color], |
|
|
outputs = [closed_output0,closed_output1,closed_output2,closed_output3]) |
|
|
|
|
|
|
|
|
def feed_back(fb_info): |
|
|
f = open('feedback.txt', mode='a',encoding='utf-8-sig') |
|
|
dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') |
|
|
result = f.writelines(dt+' , '+fb_info+'\n') |
|
|
print('result->',result) |
|
|
f.close() |
|
|
return '我们已收到,谢谢反馈!' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Accordion("点击我,反馈意见 or 提出需求",open=False): |
|
|
gr.Markdown("功能免费,服务无价,欢迎给我们提出任何意见和建议,我们会尽快改进") |
|
|
with gr.Row(): |
|
|
fb_info = gr.TextArea(label='反馈内容',lines=7,value='hi,') |
|
|
with gr.Row(): |
|
|
rInfo = gr.Markdown() |
|
|
with gr.Row(): |
|
|
fb_btn = gr.Button("反馈",elem_classes=".gradio-button {}") |
|
|
l = fb_btn.click(feed_back,inputs=[fb_info],outputs = [rInfo]) |
|
|
interface.launch(show_api=False) |