Le notebook télécharge une petite vidéo de Mary Poppins, extrait une dizaine de secondes, convertit la vidéo sous forme d'images, enlève le fond de chaque image et recompose une vidéo.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
%matplotlib inline
On choisit une vidéo de Mary Poppins : Supercalifragilisticexpialidocious.
from pytube import YouTube
from pytube.exceptions import RegexMatchError
try:
y = YouTube("https://www.youtube.com/watch?v=DYacXAd3eAo")
except RegexMatchError as e:
print("Youtube... changes sometimes, don't ask me why", e)
Youtube... changes sometimes, don't ask me why regex pattern (yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*c\s*&&\s*d\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\() had zero matches
import os
name = 'Supercalifragilisticexpialidocious (from Mary Poppins) - Julie Andrews Dick Van Dyke.mp4'
if not os.path.exists(name):
from code_beatrix.art.video import download_youtube_video
name = download_youtube_video(tag='DYacXAd3eAo', res=None)
name
'Marie Poppins - Supercalifragilisticexpilialidocious.mp4'
On extraire une dizaine de secondes.
from code_beatrix.art.video import video_extract_video, video_save
vid = video_extract_video(name, '00:00:32', '00:00:45')
video_save(vid, "mpoppins.mp4")
folder = "images"
import os
if not os.path.exists(folder):
os.mkdir(folder)
from code_beatrix.art.video import video_enumerate_frames
imgs = list(video_enumerate_frames("mpoppins.mp4", folder=folder))
imgs[:5]
['images\\images_0000.jpg', 'images\\images_0001.jpg', 'images\\images_0002.jpg', 'images\\images_0003.jpg', 'images\\images_0004.jpg']
from IPython.display import Image
Image(imgs[0], width=360)
Image(imgs[10], width=360)
Image(imgs[-1], width=360)
On essaye différentes résolutions. On s'aperçoit que les personnages de dessin animé sont aussi considérés comme des personnes.
from code_beatrix.ai import DLImageSegmentation
model = DLImageSegmentation()
feat, pred = model.predict(imgs[0], resize=('max2', 400))
viz = model.plot(feat, pred)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(14, 12))
ax.imshow(viz);
feat, pred = model.predict(imgs[10], resize=('max2', 400))
viz = model.plot(feat, pred)
fig, ax = plt.subplots(1, 1, figsize=(14, 12))
ax.imshow(viz);
feat, pred = model.predict(imgs[10])
viz = model.plot(feat, pred)
fig, ax = plt.subplots(1, 1, figsize=(14, 12))
ax.imshow(viz);
pred[pred!=0]
array([15, 15, 15, ..., 15, 15, 15])
feat.shape
(360, 480, 3)
feat[pred!=15] = 0
fig, ax = plt.subplots(1, 1, figsize=(7, 6))
ax.imshow(feat);
from skimage.io import imread
from skimage.transform import resize
from skimage import img_as_ubyte
img = imread("data/plage.jpg")
img = img_as_ubyte(resize(img, (360, 480)))
fig, ax = plt.subplots(1, 1, figsize=(7, 6))
ax.imshow(img);
img.shape, feat.shape
((360, 480, 3), (360, 480, 3))
img[pred==15] = feat[pred==15]
fig, ax = plt.subplots(1, 1, figsize=(7, 6))
ax.imshow(img);