Vidéo 3-bit en console
Ce wiki a été archivé en 2018.
Le nouveau wiki se trouve à: ressources.labomedia.org Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia. |
Ce script python permet d'obtenir de la vidéo en 3-bit dans la console. Il fait l'objet d'un article plus détaillé sur Sam & Max.
Nécessite l'installation de python-opencv :
sudo apt-get install python-opencv
Les variables à bidouiller en premier pour des tests sont le seuil, la largeurOut et la hauteurOut.
# -*- coding: utf-8 -*-
# Ce script est diffusé sous les termes de la très sérieuse WTFPL.
# http://fr.wikipedia.org/wiki/WTFPL
import cv2
import os
# Définition du flux capturé.
# Comme elle sera, de toutes façons, retaillée à la baisse,
# elle est fixée à la valeur la plus petite supportée par la webcam.
# À noter que cette valeur minimale peut varier en fonction de votre cam.
largeurIn = 160
hauteurIn = 120
# Définition du flux qui s'affichera en console.
# À savoir le nombre de caractères en largeur et en hauteur.
largeurOut = 65
hauteurOut = 20
# Seuil de présence des couleurs rouge, vert, bleu dans un pixel.
# Entre 0 et 255.
seuil = 130
# Choix du périphérique de capture.
# Ici /dev/video0
cap = cv2.VideoCapture(0)
# Configuration de la définition du flux.
cap.set(3, largeurIn)
cap.set(4, hauteurIn)
# On efface la console.
os.system('clear')
# On définit une position de référence pour le curseur.
# En haut à gauche, donc, puisqu'on vient juste d'effacer la console.
print ('\033[s')
# Pendant... tout le temps...
while True:
# On capture une image.
ret, img = cap.read()
# On retaille l'image capturée.
img = cv2.resize(img,(largeurOut, hauteurOut))
# On initialise une liste qui contiendra tous les éléments de l'image
liste_image = []
# Pour chaque ligne de l'image.
for ligne in range(hauteurOut):
# Pour chaque colonne de chaque ligne.
for colonne in range(largeurOut):
# On initialise à 0 l'indice du pixel analysé
indice_couleur = 0
# On analyse le niveau de bleu du pixel.
# S'il est au dessus du seuil...
if img.item(ligne, colonne, 0) > seuil :
#...on ajoute 4 à l'indice.
indice_couleur += 4
# On analyse le niveau de bleu du pixel.
# S'il est au dessus du seuil...
if img.item(ligne, colonne, 1) > seuil :
#...on ajoute 2 à l'indice.
indice_couleur += 2
# On analyse le niveau de bleu du pixel.
# S'il est au dessus du seuil...
if img.item(ligne, colonne, 2) > seuil :
# ...on ajoute 1 à l'indice.
indice_couleur += 1
# Si l'indice obtenu est différent de 0...
if indice_couleur:
# ...on ajoute un █ coloré à la liste.
liste_image.append(u"\033[3{0}m█".format(indice_couleur))
# Si l'indice est égale à 0...
if not indice_couleur:
# ...on ajoute un espace (noir ?) à la liste.
liste_image.append(" ")
# On fait en sorte que le terminal retrouve sa couleur initiale
liste_image.append("\n\033[00m")
# On produit un string en mettant bout à bout tous les éléments de la liste
texte_image = ''.join(liste_image)
# On affiche l'image.
print(texte_image)
# On replace le curseur à la position de référence.
print ('\033[u')
# On attend 40 millisecondes pour obtenir du 25 images par seconde.
key = cv2.waitKey(40)
Par défaut, le script ouvre la webcam en /dev/video0 avec la ligne :
cap = cv2.VideoCapture(0)
Mais il est possible d'ouvrir /dev/video1 avec :
cap = cv2.VideoCapture(1)
De même...
cap = cv2.VideoCapture("MonFilm.avi")
... ouvrira MonFilm.avi
Exemple
Vidéo promotionnelle de l'Open Atelier Version Longue #4:
/!\ NSFW /!\ - Deep 3-bit : hommage à Vuk Cosic et son légendaire Deep ASCII.
Captation
Pour produire les vidéos ci-dessus nous avons utilisé ffmpeg de cette façon :
ffmpeg -f x11grab -r 30 -s 394x327 -i :0.0+0,0 -b 2048000 CaptureEcran.avi
Où :
- -r 30 = à 30 images par seconde
- 394x327 = largeur x hauteur
- +0,0 = le coin supérieur gauche de la capture est situé en 0:0, soit en haut à gauche de l'écran.
- -b 2048000 = bitrate