предисловие
В предыдущей статье мы завершили пару дополнительных приложений ношения маски и снятия маски. В этой статье давайте посмотрим на недавнее видео о Douyin, которое извлекает черновики строк в пакетах. Чтобы освоить его основные принципы, мы использовать
OpenCV
Легко реализовать более быстрое решение.
Извлечение штрихового рисунка Photoshop
Недавно я видел видео на Douyin
Принцип реализации
Чтобы преобразовать изображение в линейный рисунок, вам в основном необходимо выполнить следующие шаги:
- Преобразование цветного изображения в оттенки серого
- Отменить изображение в градациях серого
- сделать размытие по Гауссу
- Осветление цвета смешивается с оттенками серого
Штриховая графика извлечения OpenCV
Для удобства просмотра эффекта изображения на этот раз мы используемjupyter notebook
сделать это.
1. Импортируйте файл библиотеки
import cv2
from matplotlib import pyplot as plt
%matplotlib inline
2. Показать исходное изображение
input_img = cv2.imread("image.jpg")
plt.figure(figsize=(10,7))
plt.imshow(cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB))
3. Преобразование изображения в градациях серого
gray_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
plt.figure(figsize=(10,7))
plt.imshow(cv2.cvtColor(gray_img, cv2.COLOR_BGR2RGB))
4. Инверсия изображения в градациях серого
inv_gray_img = 255 - gray_img
plt.figure(figsize=(10,7))
plt.imshow(cv2.cvtColor(inv_gray_img, cv2.COLOR_BGR2RGB))
5. Размытие по Гауссу
ksize=21
sigma=0
blur_img = cv2.GaussianBlur(inv_gray_img, ksize=(ksize, ksize), sigmaX=sigma, sigmaY=sigma)
plt.figure(figsize=(10,7))
plt.imshow(cv2.cvtColor(blur_img, cv2.COLOR_BGR2RGB))
6. Цвет Додж Фьюжн
sketch_img = cv2.divide(gray_img, 255 - blur_img, scale=256) # 颜色减淡融合
plt.figure(figsize=(15,10))
plt.imshow(cv2.cvtColor(sketch_img, cv2.COLOR_BGR2RGB))
Несколько строк кода можно сделать.Если хотите сравнить скорость, тоPython+OpenCV
никогда не терял. (PS
Дизайнер не бей меня! )
SketchKeras извлечь штриховую графику
вышеOpenCV
Хотя метод прост, он все еще недостаточно ясен, чтобы внимательно смотреть на линии на пучке и манжетах, поэтому мы будем использовать метод нейронной сети, чтобы реализовать его снова.
1. Загрузка исходного кода
Клонировать исходный код
git clone https://github.com/lllyasviel/sketchKeras.git
Загрузите файл весовmod.h5
, поместите его в каталог проекта
2. Проанализируйте структуру сети
sketchKeras
Являетсяu-net
тип сети, структуру модели автор не публикует, но можно передатьtensorboard
используй этоKeras
Файл модели для интерпретации ее сетевой структуры.
первыйkeras
Превратиться вpb
документ
python keras_to_tensorflow.py --input_model="mod.h5" --output_model="mod.pb"
тогда вы можете использоватьtensorboard
импортная модель
mkdir logs
python3 tensorboard_graph.py
Граф расчета экспортируется путем создания каталога журналов в рамках проекта.
tensorboard --logdir=logs/ --host=127.0.0.1
Мы видим, что типичныйunet
Архитектура, вход [3 * 512 * 512 * 1] постоянно понижается до [3 * 32 * 32 * 512], а затем снова повышается.
Вы также можете установитьNetron
, интерпретировать сеть будет удобнее.
3. Предварительная обработка
Введите исходное изображение, сначалаresize
в 384 * 512 (длина или ширина стороны 512), затем преобразуйте изображение в градациях серого, а затем выполните размытие по Гауссу после вычитания двух и, наконец, нормализуйте его в [3, 512, 512, 1]Tensor
, предварительная обработка завершена.
from_mat = from_mat.transpose((2, 0, 1))
light_map = np.zeros(from_mat.shape, dtype=np.float)
for channel in range(3):
light_map[channel] = get_light_map_single(from_mat[channel])
light_map = normalize_pic(light_map)
light_map = resize_img_512_3d(light_map)
4. Вывод вывода
Как проанализировано выше, на выходе нейронной сети есть [3, 512, 512, 1], который нужно пропорционально обрезать до исходного размера, а затем после шумоподавления получить нужный нам каркас.
# 模型推理 (3, 512, 512, 1)
line_mat = mod.predict(light_map, batch_size=1)
# 去除 batch 维度 (512, 512, 3)
line_mat = line_mat.transpose((3, 1, 2, 0))[0]
# 裁剪 (512, 384, 3)
line_mat = line_mat[0:int(new_height), 0:int(new_width), :]
show_active_img_and_save('sketchKeras_colored', line_mat, 'sketchKeras_colored.jpg')
line_mat = np.amax(line_mat, 2)
# 降噪
show_active_img_and_save_denoise_filter2('sketchKeras_enhanced', line_mat, 'sketchKeras_enhanced.jpg')
show_active_img_and_save_denoise_filter('sketchKeras_pured', line_mat, 'sketchKeras_pured.jpg')
show_active_img_and_save_denoise('sketchKeras', line_mat, 'sketchKeras.jpg')
Идеально!
Совет: если вы столкнулись
load_model requires h5py
Если вы получите ошибку, установите егоh5py
Вот и все.sudo apt-get install libhdf5-dev pip install h5py
можно увидеть, сsketchKeras
Преобразованный линейный уклон будет более четким, иsketchKeras_colored
Содержит элементы цвета, которые очень помогут при раскрашивании последующих картинок.
Загрузка исходного кода
Соответствующие документы и материалы по этому вопросу можно найти на официальном аккаунте «Глубокое пробуждение», а справочный ответ: «rpi14», чтобы получить ссылку для скачивания.
Следующее уведомление
Теперь, когда черновая линия извлечена,
Если они будут драться друг с другом,
В следующей статье мы будем использовать линейные рисунки,
чтобы «вернуться» обратно к цветному изображению,
Быть в курсе...