Bienvenue, Visiteur
S’enregistrer | Mot de passe ?

Nom d’utilisateur

Mot de passe




Derniers sujets
K-pop & K-Rock
Forum : Miouzique
Dernier message : umi-chan
Il y a 3 minutes
» Réponses : 409
» Affichages : 82 692
Le pendu [Animes / Mangas...
Forum : Jeux
Dernier message : Kirinenko
Il y a 22 minutes
» Réponses : 3 605
» Affichages : 868 360
J-Pop & J-Rock
Forum : Miouzique
Dernier message : Amaryllis
Il y a 2 heures
» Réponses : 96
» Affichages : 20 244
Inuyasha Kanketsu-hen
Forum : Animes [Fourre-tout]
Dernier message : Kirinenko
Lun. 18 Jan 2021, 20:00
» Réponses : 2
» Affichages : 2 407
Kinou nani tabeta ?
Forum : Vos fiches à vous, les mouîtres
Dernier message : Kirinenko
Dim. 17 Jan 2021, 18:56
» Réponses : 9
» Affichages : 212

Partenaires
partenaire logo

Utilisateurs en ligne
Il y a actuellement 70 utilisateurs connectés.
» 3 Membre(s) | 67 Visiteur(s)
Kirinenko, Laudreyo, umi-chan

Statistiques du Forum
» Membres : 970
» Dernier membre : Sayurinn
» Sujets du forum : 4 045
» Messages du forum : 27 275

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 ubuntu 20.04.
Vous pouvez en installer une en suivant ce tuto : https://otarigato.org/showthread.php?tid=5572

Wikipedia a écrit :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

Installation de YoloCR

On va utiliser YoloCR :
Sources : https://bitbucket.org/YuriZero/yolocr/src/master/
Archive dépôt : YuriZero-yolocr-4d88afa106af.zip

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

On lance la vm et un terminal.
On met la machine à jour :
Code :
sudo apt update
sudo apt install

On va vouloir récupérer le dépôt.
Pour ça, on doit installer git :
Code :
sudo apt install git

Puis on clone le dépôt :
Code :
git clone https://bitbucket.org/YuriZero/yolocr.git

On va dans le dossier créé :
Code :
cd yolocr

On permet aux fichiers d'extension .sh d'être exécutable s'ils ne le sont pas déjà :
Code :
sudo chmod +x *.sh

On lance le script qui va installer toutes les dépendances et logiciels utiles par la suite :
Code :
./YoloBuntuInstallation.sh

On dit bien qu'on veut installer tout le bordel proposé.
Vous laissez tourner pendant quelques minutes.

Note : Durant l'installation, j'ai pu voir ce genre d'erreur :
Code :
E: Impossible de récupérer http://fr.archive.ubuntu.com/ubuntu/pool/universe/x/xdotool/libxdo3_3.20160805.1-4_amd64.deb  Impossible d'initialiser la connexion à fr.archive.ubuntu.com: 80 - connect (101: Le réseau n'est pas accessible)
E: Impossible de récupérer http://fr.archive.ubuntu.com/ubuntu/pool/universe/p/parallel/parallel_20161222-1.1_all.deb  Impossible d'initialiser la connexion à fr.archive.ubuntu.com: - connect (101: Le réseau n'est pas accessible)

Pour remédier à cela, j'ai modifié l'url où ubuntu allait chercher les paquets pour voir les mises à jour :
Code :
sudo sed -i 's/fr\.archive/archive/g' /etc/apt/sources.list
Cela ne fonctionne que si vous aviez fr.archive.ubuntu.com comme source au départ.

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.8/site-packages vspipe --version
Vous aurez les détails de vapousynth.
On se souvient donc qu'il faudra renseigner ce chemin pour faire fonctionner le tout plus tard.

On éteint 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.


Création d'une vidéo à OCR

Vous pouvez avoir des fichiers tout fait pour tester avec les urls suivantes :
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


On essaie d'OCR

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.

- YoloResize.vpy

Vous ouvrez le script "YoloResize.vpy".
On modifie les valeurs suivantes dans l'éditeur :
Citation :FichierSource=r'Sintel_fra-srt.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)
ModeU='sinc' (contrôle la méthode d'Upscale : 'sinc' (2 taps, plus rapide), 'znedi3' (plus lent) ou 'waifu2x' (beaucoup plus lent))

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: Image_OCR_01.jpg]
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.
3 - Changez la valeur de HauteurCropBox pour changer la distance vis à vis du bas de la vidéo de la zone capturée.
Refaites F5 pour mettre à jour la visualisation. Les sous-titres ne doivent pas être en contact avec le bord blanc.
4 - Modifiez les valeurs de DimensionCropBox pour modifier la largeur et la hauteur du cadre.
Refaites F5 pour mettre à jour la visualisation. Des dimensions adéquates améliorent la vitesse de traitement et la fiabilité de l'OCR.
5 - Essayez de tourner dans la vidéo pour voir si c'est bon.

On se souvient bien de ces valeurs :
Citation :FichierSource=r'Sintel_fra-srt.mp4"
DimensionCropBox=[1344,150]
HauteurCropBox=30
ModeU='sinc'

- YoloSeuil.vpy

On ouvre un nouveau script :
Menu > File > Open script > YoloSeuil.vpy

On va ensuite ajuster les différentes valeurs dans le script YoloSeuil.vpy

On modifie les valeurs suivantes dans l'éditeur :
Citation :FichierSource=r'Sintel_fra-srt.mp4"
DimensionCropBox=[1300,150]
HauteurCropBox=30
ModeU='sinc'
ModeS='L' ou 'R' ou 'G' ou 'B' (L = utilisation d'un seuillage basé sur du noir/blanc, R, G, B = utilisation d'un seuillage basé sur des valeurs RGB (Red Green Blue))
Seuil=-1 (nous permet de chercher la valeur pour les seuils avec l'éditeur VapourSynth avec F5

Pour trouver les valeurs avec l'éditeur de VapourSynth.
Faites F5 avec les paramètres précédents d'édités. Vous avez alors une fenêtre qui s'ouvre.
[Image: Image_OCR_02.jpg]
1 - Vous activez le "Color panel".
2 - Vous avez alors une nouvelle indication de disponible.
3 - En bougeant la souris au-dessus des zones que vous voulez analyser, vous aurez alors la valeur de gris associé à cet endroit.

1. SeuilI
Dans le cas de l'inline (intérieur des sous-titres), ce niveau doit être réglé au minimum possible tout en laissant les sous-titres complètement visibles.
On règle le niveau de la valeur de ce seuil avec celle déterminée en survolant les zones internes des sous-titres.
Seuil=140
On regarde ce que cela nous donne : CTRL+S puis F5.
[Image: Image_OCR_03.png]
Si vous êtes content de la valeur, vous la notez et vous passez au seuillage des contours.

2. SeuilO
Dans de le cas de l'outline (bordure des sous-titres), cherchez le seuil maximum. Le contour des sous-titres doit être entièrement noir.
On règle le niveau de la valeur de ce seuil avec celle déterminée en survolant les contours des sous-titres.
Seuil=90
On regarde ce que cela nous donne : CTRL+S puis F5.
[Image: Image_OCR_04.png]
Si vous êtes content de la valeur, vous la notez.

Ces deux étapes demandent d'essayer de de voir. Vous pouvez augmentez le seuilI si cela permet d'améliorer la propreté des lettres.

On ferme la fenêtre d'affichage.

- YoloCR.vpy

On ouvre un nouveau script :
Menu > File > Open script > YoloCR.vpy

On modifie les valeurs suivantes dans l'éditeur pour celles que l'on déterminées précédemment :
Citation :FichierSource=r'Sintel_fra-srt.mp4"
DimensionCropBox=[1300,150]
HauteurCropBox=30
ModeU='sinc'
SeuilI=140
SeuilO=90

On enregistre : CTRL + S.

On filtre la vidéo

On ferme l'éditeur.

On ouvre un terminal dans le dossier yolocr.
On lance la commande :
Code :
vspipe -y YoloCR.vpy - | ffmpeg -i - -c:v mpeg4 -qscale:v 3 -y videofiltre.mp4
Attention, votre nom de fichier videofiltre.mp4 doit avoir un nom différent de la vidéo sur laquelle vous voulez travailler.

Vous laissez tourner tranquillement.
Vous aurez alors deux nouveaux fichiers dans votre dossier :
- SceneChanges.log
- videofiltre.mp4

On OCR

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 amené à répondre à de la reconnaissance d'italique.
Pas pour moi dans le cas présent.
On obtient les fichiers/dossiers suivants :
- Timecodes.txt (fichier qui contient le time de la vidéo)
- ScreensFiltrés (dossier qui contient les screens des subs sur lesquels l'ocr va travailler)
- TessResult (dossier qui contient les résultats de l'ocr pour le logiciel)
- videofiltre.srt (fichier qui contient les sous-titres de la vidéo avec le time)

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 mauvaises 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é)

Autre moteur de reconnaissance de caractères

Je copie ici ce qui est mis dans le dépôt de YoloCR :
Citation :Le moteur LSTM de Tesseract produit un OCR de moindre qualité (notamment au niveau de la détection des italiques). Utiliser les traineddata du moteur Legacy à la place : https://github.com/tesseract-ocr/tessdata Ces fichiers peuvent être placés dans le dossier tessdata de YoloCR.

On va charger des fichiers dans tesseract qui soient un peu plus complets afin d'aider à la reconnaissance des caractères.
On utilisera alors le moteur LEGACY pour la reconnaissance et non plus LSTM.

Avec la commande :
Code :
ls -al /home/lambda/yolocr/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 :
mkdir /home/lambda/yolocr/tessdataOLD
sudo mv /home/lambda/yolocr/tessdata/fra.traineddata /home/lambda/yolocr/tessdataOLD/fra.traineddata
Et on télécharge un autre à la place :
Code :
wget https://github.com/tesseract-ocr/tessdata/blob/master/fra.traineddata
sudo mv fra.traineddata /home/lambda/yolocr/tessdata/
https://github.com/tesseract-ocr/tessdata_best/blob/master/fra.traineddata

D'après le dépôt sur gitlab, à l'heure actuelle, le script utilise déjà le module LEGACY et non plus LSTM.

Voilà, à vous de tester sur vos fichiers :)
Kirinenko a écrit :Je m'autoquote si je veux, d'abord.
Nyanyanyanyan . . . . . . . . . . . . . . . [Image: chat-moche-27c1d17.gif]
[Image: 4yi3an10-3858b7.gif]
Aimer
#2
Maj du tuto avec les dernières versions dispos.
Kirinenko a écrit :Je m'autoquote si je veux, d'abord.
Nyanyanyanyan . . . . . . . . . . . . . . . [Image: chat-moche-27c1d17.gif]
[Image: 4yi3an10-3858b7.gif]
Aimer Répondre
#3
Mais t'es dingue ? O_o
Qu'est-ce que tu t'en vas donner de mauvaises idées aux gens, hein ?
C'est la triste réalité de la vie !

[Image: htf10.jpg]
Aimer Répondre
#4
T'imagines s'ils faisaient des v2 d'anciens subs avec des vidéos de meilleures qualités :O
Kirinenko a écrit :Je m'autoquote si je veux, d'abord.
Nyanyanyanyan . . . . . . . . . . . . . . . [Image: chat-moche-27c1d17.gif]
[Image: 4yi3an10-3858b7.gif]
Aimer Répondre
#5
@Kirinenko
T'imagines que c'est beau de rêver Laugh
[-] 1 otarie(s) aime(nt) ce post :
  • Tchenss
Aimer Répondre
#6
Bah, on a prévu d'en faire, nous... pour 2030 Laugh

Buzzer beat par exemple vu que c'était Mangas Arigatou Fansub, et Hungry avec Mizuki no Drama.
On a récup du bô 720p.
Tu veux participer, Misterdred ?  :p
C'est la triste réalité de la vie !

[Image: htf10.jpg]
Aimer Répondre
#7
Voyons Tchenss, tu sais bien que je ne suis attiré que par les historiques. Whistling
Aimer Répondre
#8
Si t'as de l'historique à OCR, on peut s'arranger misterdred :p
Kirinenko a écrit :Je m'autoquote si je veux, d'abord.
Nyanyanyanyan . . . . . . . . . . . . . . . [Image: chat-moche-27c1d17.gif]
[Image: 4yi3an10-3858b7.gif]
Aimer Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)