Bienvenue, Visiteur
S’enregistrer | Mot de passe ?

Nom d’utilisateur

Mot de passe




Derniers sujets
Vos web-radios préférées
Forum : Miouzique
Dernier message : Kirinenko
Mer. 11 Sept 2019, 09:12
» Réponses : 10
» Affichages : 5 543
Day with you - \*o*/
Forum : Films japonais
Dernier message : Marine1828
Sam. 07 Sept 2019, 07:22
» Réponses : 1
» Affichages : 1 757
A story of Yonosuke - \*o...
Forum : Films japonais
Dernier message : Marine1828
Sam. 07 Sept 2019, 07:00
» Réponses : 2
» Affichages : 2 997
Shinzanmono - \*o*/
Forum : J-Dramas
Dernier message : lamine-lmn
Ven. 06 Sept 2019, 05:48
» Réponses : 12
» Affichages : 9 668
Hello à tous
Forum : Votre présentation
Dernier message : Kirinenko
Jeu. 05 Sept 2019, 06:42
» Réponses : 5
» Affichages : 514

Partenaires
partenaire logo

Utilisateurs en ligne
Il y a actuellement 62 utilisateurs connectés.
» 0 Membre(s) | 62 Visiteur(s)

Statistiques du Forum
» Membres : 11 867
» Dernier membre : byeol72
» Sujets du forum : 5 347
» Messages du forum : 25 414

Statistiques complètes

Choisissez Firefox
obtenir firefox
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Faire l'ocr des sous-titres d'une vidéo
Description du topic
Pour péréniser et styliser :)
#1
OCR des sous-titres d'une vidéo


Ce tutoriel fonctionne sur une machine virtuelle debian 10.
Vous pouvez en installer une en suivant ce tuto : https://otarigato.org/showthread.php?tid=5572

ocr = La reconnaissance optique de caractères (ROC), en anglais optical character recognition (OCR), ou océrisation, désigne les procédés informatiques pour la traduction d'images de textes imprimés ou dactylographiés en fichiers de texte.
https://fr.wikipedia.org/wiki/Reconnaiss...t%C3%A8res

On va utiliser une update de YoloCR :
Sources : https://bitbucket.org/YuriZero/yolocr/src/master/
Update du script pour Debian buster :
YoloBuster_v1.sh

Ce script permet d'installer tout le nécessaire sur une machine virtuel faisant tourner Debian Buster.
Vous pourrez alors traiter vos vidéos directement depuis cette machine.

On le télécharge et on le met sur la machine virtuelle.
Avec scp on peut le copier sur la machine virtuelle :

Code :
scp root@192.168.1.100:/home/user/dossier/YoloBuster.sh /home/lambda/Downloads/YoloBuster.sh

On va dans le dossier des téléchargements via le terminal :
Code :
cd /home/lambda/Downloads

On passe le script en exécutable :
Code :
chmod a+x YoloBuster_v1.sh

On lance le script :
Code :
./YoloBuster.sh
Il vous sera demandé plusieurs fois le mot de passe root et de valider l'installation.
Vous laissez tourner, cela peut prendre autour d'une dizaine de minutes.

Normalement tout est bien installé :)
On va vérifier avec la commande :
Code :
vspipe --version

Vous pouvez obtenir le message d'erreur suivant :
Code :
Failed to initialize VapourSynth environment

Cela vient du chemin python mal renseigné : http://www.vapoursynth.com/doc/installat...ompilation
Vous pouvez vérifier en faisant
Code :
echo "$PYTHONPATH"
Et vous verrez qu'il n'y a rien de renseigné.

Faites :
Code :
PYTHONPATH=/usr/local/lib/python3.7/site-packages vspipe --version
Vous aurez les détails de vapousynth.

On va charger des fichiers dans tesseract qui soient un peu plus complets afin d'aider à la reconnaissance des caractères.
On suit ce qui est écrit ici : https://github.com/tesseract-ocr/tessera...perts-only
On utilisera alors le moteur LEGACY pour la reconnaissance et non plus LSTM.

Avec la commande :
Code :
ls -al /usr/share/tesseract-ocr/4.00/tessdata
Vous obtenez le listing des fichiers traineddata pour les langues disponibles.
Il y a déjà un "fra.traineddata".
On va le stocker en archive de côté :
Code :
sudo mv /usr/share/tesseract-ocr/4.00/tessdata/fra.traineddata /home/lambda/fra-OLD.traineddata
Et on télécharge un autre à la place :
Code :
wget https://github.com/tesseract-ocr/tessdata/raw/master/fra.traineddata
sudo mv fra.traineddata /usr/share/tesseract-ocr/4.00/tessdata/


On éteins complètement la machine et on en profite pour faire un snapshot de l'état afin de pouvoir repartir sur une base saine au besoin.

On copie le répertoire de YoloCr afin d'avoir les script vapoursynth :
Code :
cd /home/lambda
mkdir psy
cd psy
git clone https://bitbucket.org/YuriZero/yolocr.git
cd yolocr

On télécharge les fichiers vidéos pour tester l'ocr.
Sintel_sub-fra.mp4
SintelHQ_fra-srt.mp4

Pour créer vous même votre vidéo de test, vous pouvez incruster vous-même les sous-titres à la vidéo brute.
Le projet est disponible à cette adresse : https://durian.blender.org/
Les vidéos sont disponibles au téléchargement ici : https://durian.blender.org/download/ (j'ai utilisé la vidéo "HD 1080p" pour les exemples).
Et les sous-titres ici : https://download.blender.org/durian/subs/ (afin de styliser les sous-titres, je les ai édité avec aegisub au préalable).
Les commandes ffmpeg pour réaliser cela en 2 passes sont les suivantes :
Code :
ffmpeg -y -i Sintel.mkv -vf "ass=Sintel.ass" -c:v libx264 -b:v 400k -c:a libmp3lame -qscale:a 9 -pass 1 -f mp4 /dev/null
ffmpeg -i Sintel.mkv -vf "ass=Sintel.ass" -c:v libx264 -b:v 400k -c:a libmp3lame -qscale:a 9 -pass 2 Sintel_sub-fra.mp4
Modifier les valeurs suivantes :
-b:v 400k (augmenter la valeur de 400 pour augmenter le flux vidéo)
-qscale:a 9 (diminuer la valeur de 9 pour augmenter le flux audio)
En 1 passe avec contrôle sur la qualité globale via crf :
Code :
ffmpeg -i Sintel.mkv -vf "ass=Sintel.ass" -vcodec libx264 -x264-params crf=18 -preset slow -acodec copy SintelHQ_sub-fra.mp4

Vous avez maintenant votre fichier source à côté des fichiers .vpy dans le dossier "yolocr".
On va suivre ce qui est recommandé dans le README :
https://bitbucket.org/YuriZero/yolocr/src/master/
Anglais : https://bitbucket.org/YuriZero/yolocr/sr...ADME_EN.md

On lance "VSEdit" via Activities > Champ de recherche.

Vous ouvrez le script "YoloResize.vpy".
On modifie les valeurs suivantes dans l'éditeur :
FichierSource=r'Sintel_sub-fra.mp4" (nom de la vidéo dans le dossier yolocr)
DimensionCropBox=[1344,150] (largeur et hauteur du bloc de reconnaissance)
HauteurCropBox=46 (distance du bloc de reconnaissance du bas de la vidéo)
Supersampling=-1 (passez à -1 pour un redimmensionnement auto)

Vous pouvez voir le résultat en pressant F5.
Vous obtiendrez une nouvelle fenêtre afin de naviguer dans la vidéo pour voir le résultat :
[Image: attachment.php?aid=6335]
Vous commencez par :
1 - Changer pour "Fit to frame" afin d'avoir la taille complète de la zone capturée
2 - Déplacer vous vers un timecode ayant double ligne avec une bonne longueur. Cela vous donnera une idée du maximum à mettre pour la cadre.
Pour le cas présent, visez autour de 2 minutes.

On va ensuite ajuster les différentes valeurs dans le script YoloResize.vpy
je change en
DimensionCropBox=[1300,150]
HauteurCropBox=30
J'obtiens (après CTRL+S et F5) :
[Image: attachment.php?aid=6336]

On note bien ces valeurs de côté.
On ferme la fenêtre de preview et de retour dans VSEdit, on ouvre maintenant le fichier YoloSeuil.vpy.
On modifie les valeurs suivantes dans l'éditeur :
FichierSource=r'Sintel_sub-fra.mp4"
DimensionCropBox=[1300,150]
HauteurCropBox=30
ModeS='L' (on laisse l'utilisation d'un seuilage basé sur du noir/blanc, je n'ai pas testé l'autre mode)

1.
On regarde ce que cela nous donne : CTRL+S puis F5
On règle le niveau de la valeur de SeuilI :
Seuil=220
Ce niveau doit être réglé au maximum possible tout en laissant les sous-titres complètement visibles.

2.
On regarde ce que cela nous donne : CTRL+S puis F5
On règle le niveau de la valeur de SeuilO :
Seuil=80
Ce niveau doit être réglé au minimum possible tout en laissant le contour des sous-titres complètement noir..

On a bien noté nos paramètres :
FichierSource=r'Sintel_sub-fra.mp4"
DimensionCropBox=[1300,150]
HauteurCropBox=30
SeuilI=220
SeuilO=80

On ferme la preview.
On ouvre YoloCR.vpy.
On change le fichier pour les paramètres précédents.
On enregistre : CTRL + S.

On ferme l'éditeur.
On lance la commande :
Code :
PYTHONPATH=/usr/local/lib/python3.7/site-packages vspipe -y YoloCR.vpy - | ffmpeg -i - -c:v mpeg4 -qscale:v 3 -y videofiltre.mp4

Une fois que cela a tourné, on peut lancer l'ocr sur la vidéo que l'on a obtenu :
Code :
./YoloCR.sh videofiltre.mp4

Vous pourriez être demandé à répondre à de la reconnaissance d'italique.
Pas pour moi dans le cas présent.
On obtient le fichier srt : videofiltre.srt

En utilisant une vidéo avec basse qualité, les subs sont moins bien définis et on obtient alors un fichier qui demandera pas mal de vérifications à réaliser.
Si vous prenez la meilleure résolution, vous pourrez obtenir de bons résultats.
Les seuils sont à adapter pour chaque vidéos.
Par exemple, avec la vidéo de Sintel d'environ 50 Mo (2 passes, flux vidéo 400k), j'obtiens le fichier suivant :
Sintel_fra-sub.srt
(beaucoup de mauvaise reconnaissances + fautes)

Et avec une vidéo encodée en meilleure qualité (1 passe, crf 18 ), j'obtiens ceci :
SintelHQ_fra-sub.srt
(1 espace manquant et un italique mal placé)

Voilà, à vous de tester sur vos fichiers :)


Pièces jointes Miniature(s)
       

.sh   YoloBuster_v1.sh (Taille : 3,53 Ko / Téléchargements : 2)
.srt   Sintel_fra-srt.srt (Taille : 2,57 Ko / Téléchargements : 2)
.srt   SintelHQ_fra-srt.srt (Taille : 1,62 Ko / Téléchargements : 3)
Kirinenko a écrit :Je m'autoquote si je veux, d'abord.
Nyanyanyanyan . . . . . . . . . . . . . . . [Image: chat-moche-27c1d17.gif]
[Image: 4yi3an10-3858b7.gif]
Aimer




Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
Accès ChatBox

Mαlice Fαnsub

Dernières sorties

Are you ready
Hey, you girl !

Kakugo

Terminé 5 / 5

Gye Baek
GyeBeak

En cours 28 / 36
Ep 29 prévu
pour la semaine
des quatres jeudis

Romance Theater
Midnight

Todome no kiss
& parallel

Todome

En cours 3 / 10
+ 3 / 10

Midnight runners
Midnight

Oh brother,
oh sister

Onodera

Gomen, aishiteru
GomenA

Terminé 10 / 10

Narratage
Narratage

Higurashi no naku
koro ni

Higurashi

En cours 2 / 6