Livrable WP6 - L1 : Enregistrements et annotations en lecture de textes
Objectif
Ce livrable s'inscrit dans le processus de création de capsules qui constituent les supports d’application spécifiquement destinés aux acteurs de terrain de ce projet. Des vidéos codées automatiquement, en français, permettront de créer quatre ensembles de capsules dont le type et la portée sont différents.
- Le premier type de capsule sera destiné à l'entraînement au codage LfPC. Il répond au manque de supports dans ce domaine, car l'accès aux formations au code LfPC est inégal sur le territoire et les formateurs sont peu disponibles pour un entraînement post-formation.
- Le deuxième type de capsule sera destiné à l’entraînement au décodage LfPC. Pour bénéficier de l'aide apportée par le codage LfPC dans leur acquisition de la langue française, les enfants sourds doivent apprendre à décoder, souvent avant même de pouvoir apprendre à coder, à savoir avant l'âge de la lecture.
- Le troisième type de capsule permettra d’enrichir le ‘bain de langage’ des enfants sourds, car un enfant sourd ne bénéficie pas du même ‘bain de langage’ qu'un enfant entendant (quantité et qualité moindres), les aidant ainsi à acquérir les modèles linguistiques.
- Le quatrième type de capsule servira pour l'entraînement à la lecture labiale seule. Cette compétence représente le mot « complété » dans l’acronyme LfPC : plus la lecture labiale est performante, meilleure est la compréhension et donc, le seront la communication et l’intégration sociale.
Une fois terminées, les capsules seront accessibles sur la plateforme web du projet. Le site web intégrera des solutions de recherches avancées, sur la base des annotations qui auront été effectuées. Effectivement, dans la mesure où les vidéos requièrent d’être annotées aux niveaux lexical et phonétique pour pouvoir ensuite être codées, nous disposons de ces informations que nous pourrons facilement exploiter. Il sera possible d’effectuer des recherches sur les mots, les phonèmes, ou les clés par exemple, pour un accès direct à ces éléments dans les vidéos.
Ce livrable porte sur les premières étapes du processus de création des capsules : la sélection du contenu textuel à enregistrer, les modalités d'enregistrement, et les annotations manuelles. Enfin, toutes les vidéos collectées ont été augmentées par le codage automatique de SPPAS.
Le processus de sélection des vidéos codées automatiquement et de création des capsules à partir de ces vidéos, prévu au premier semestre 2025, fera l'objet d'un autre livrable.
Choix du contenu textuel
Méthodologie
Les choix opérés dans le présent projet pour effectuer la sélection d’un sous-ensemble de textes prennent en compte les difficultés spécifiquement liées à la surdité et les spécificités du codage.
Pour la création des capsules, il était initialement prévu de sélectionner un ensemble de quatre textes dans la base de corpus du projet ALECTOR. Afin de s'assurer que quatre textes seront réellement disponibles pour créer les capsules, à ce stade, nous avons sélectionné six textes. Deux versions de chaque texte sont proposées : un texte original et sa version adaptée (simplifiée). Les adaptations ont été conçues comme une aide à la lecture principalement pour des enfants faibles lecteurs et dyslexiques. Le choix de ces textes a été guidé par les caractéristiques phonétiques en plus de leur longueur, leur thème et leur niveau de difficulté.
Pour répondre à l'objectif de création des quatre types différents de capsules, les listes de mots et de phrases ont également été créées. La méthode de conception sera décrite dans une version ultérieure de ce document.
Les textes sélectionnés sont présentés en annexe de ce document.
Enregistrements
Session
Les enregistrements ont eu lieu le 8 avril 2024 au Laboratoire Parole et Langage, Aix-en-Provence. Ils ont été adossé à la réunion annuelle du projet afin de permettre la présence des membres de Datha. Les enregistrements ont donc été effectués sous leur contrôle.
Un acteur professionnel a été recruté pour la journée. Les textes lui avaient été confiés au préalable pour qu'il puisse en prendre connaissance.
Les enregistrements ont eu lieu dans la chambre sourde avec le matériel suivant :
- une caméra Canon Legria HF G70
- deux microphones Neumann TLM 103 connectés en XLR
- un enregistreur RME Fireface, et le logiciel Audacity
- éclairage type "studio photo" avec fond vert
L'audio a été enregistré en stéréo et sauvegardé au format WAV, 16bits, 48kHz ; la vidéo a été enregistrée en HD (1920x1080) avec rotation 90°, à 50fps.
Chaque série de chaque section a été enregistrée séparément. Chaque enregistrement commençait par un "clap" visible à l'image et audible dans les deux microphones, mais aussi dans celui de la caméra.
Traitements des données
L'audio et la vidéo de chaque série ont été synchronisés à l'aide du clap audible dans les deux médias. Les moments des claps ont été repérés visuellement et notés dans un fichier, ainsi que les durées à conserver pour les enregistrements (figure ci-dessous). La synchronisation de chaque série a ensuite été effectuée automatiquement par un script, en utilisant l'outil 'ffmpeg' pour les traitements de la vidéo, ainsi que SoX et SPPAS pour l'audio.
Voici l'algorithme du script de synchronisation :
- estimation des valeurs de temps de début et de fin pour la segmentation de l'audio des microphones.
Ces derniers doivent correspondrent précisément aux temps de début ou fin d'une frame de la vidéo.
Code source
clap_frame_idx = int(input_video_clap * input_video_fps) clap_frame_time = float(clap_frame_idx) / input_video_fps print(" ... Video: start time value of the frame with the clap: {:d} frames = {:.3f} seconds".format(clap_frame_idx, clap_frame_time)) d = input_video_clap - clap_frame_time print(" ... ... Delta among the real clap position in the video and " "the start time of the first frame in the video = {:.3f}".format(d)) real_end_time = input_video_clap + expected_duration end_frame_idx = 1 + int(real_end_time * input_video_fps) end_frame_time = float(end_frame_idx) * input_video_frame_dur if end_frame_time > video_dur: print("Error: Given expected duration is too high. Expected end = " "{:.3f} is higher than the video duration.".format(end_frame_time)) sys.exit(1) print(" ... estimated end time of video: {:d} frames = {:.3f} seconds".format(end_frame_idx, end_frame_time))
- découpage du signal audio à ces valeurs
Code source
adjust_audio_at_clap(input_audio, input_audio_clap, input_video_clap, file_audio_clap) audio_with_duration(file_audio_clap, end_frame_time, file_audio_endtrim)
- découpage de la vidéo à des valeurs qui correspondent et ré-encodage en H.265
Code source
command = "ffmpeg -i '{:s}' ".format(input_video) command += "-f matroska -vcodec libx265 -crf {:d} ".format(CRF) command += "-pix_fmt yuv420p -vf trim=start_frame={:d}:end_frame={:d},setpts=PTS-STARTPTS ".format(clap_frame_idx, end_frame_idx) command += "-an '{:s}' ".format(output_video) command += "-nostdin -y" run_command(command)
- re-cadrage de la vidéo en 1600x960 (permet d'enlever du fond vert non nécessaire)
Code source
command = "ffmpeg -i '{:s}' -filter:v 'crop=w=1600:h=960:x=0:y=32' {:s} ".format(output_video, new_output) run_command(command)
- ajout du copyright et rotation à 90 degrés
Code source
command = "ffmpeg " command += "-i '{:s}' ".format(output_video) command += "-f matroska " command += "-vcodec libx265 " command += "-crf {:d} ".format(CRF) command += "-pix_fmt yuv420p " #command += "-filter_complex \"[0:v] drawtext='font=Arial:fontsize=20:x=40:y=12:text={:s}:fontcolor=white'\" ".format(COPY) command += "-filter_complex \"[0:v] drawtext=fontfile='arial.ttf':fontsize=18:x=40:y=12:text='{:s}':fontcolor=white\" ".format(COPY) command += "-an '{:s}' ".format(new_output) command += "-nostdin -y" run_command(command) command = f"ffmpeg -i '{output_video}' -v 0 -filter:v 'transpose=2' -qscale 0 {new_output} -nostdin -y" run_command(command)
- optionnel : création d'un fichier audio mono ré-échantilloné à 16kHz, pour une utilisation ultérieure dans SPPAS
- optionnel : création d'une vidéo compressée incluant l'audio, et ré-échantillonée à 25 fps, pour d'éventuelles démos.
Code source des fonctions utilisées
def time_to_seconds(strtime): """Convert a time in string format into a number of seconds. :Example: >>>print(time_to_seconds("00:01")) >>>1.0 >>>print(time_to_seconds("00:00:01.1")) >>>1.1 >>>print(time_to_seconds("00:01:01")) >>>61.0 >>>print(time_to_seconds("01:01:01")) >>>3661.0 :param strtime: (str) String representing a time value (HH:MM:SS or MM:SS or MM:SS.m) :return: (float) Time in seconds """ values = strtime.split(':') v = 0. if len(values) > 3 or len(values) == 1: raise ValueError("Time format not supported. Expected HH:MM:SS or MM:SS." "Got {:s} instead.".format(values)) elif len(values) == 3: # hours are given. v = float(values[0]) * 60. * 60. v += float(values[1]) * 60. v += float(values[2]) else: v += float(values[0]) * 60. v += float(values[1]) return v # --------------------------------------------------------------------------- def seconds_to_time(value): """Convert a number of seconds into a time in string format. :Example: >>>print(seconds_to_time(1.)) >>>"00:01" >>>print(seconds_to_time(61.)) >>>"01:01" >>>print(seconds_to_time(3661.234)) >>>01:01:01.234 :param value: (float) Time value in seconds :return: (str) String of a time value (HH:MM:SS or MM:SS or MM:SS.m) """ strtime = "" hours = int(float(value) // 3600) if hours > 0: strtime += "{:02d}:".format(hours) value -= (hours*3600) minutes = int(float(value) // 60) strtime += "{:02d}:".format(minutes) seconds = int(value % 60) strtime += "{:02d}".format(seconds) milliseconds = int((value %1) * 1000.) if milliseconds > 0: strtime += ".{:03d}".format(milliseconds) return strtime # ---------------------------------------------------------------------------- def run_command(command): """Execute a system command if available. :param command: (str) The command to execute as a sub-process. :return: (str) An error message or an empty string """ print("Run command:") print(command) command_args = shlex.split(command) p = subprocess.Popen( command_args, shell=False, stdout=subprocess.PIPE, stderr=None ) output = p.communicate() message = list() for m in output: if m is not None: message.append(m) if len(message) > 0: print(message) return message print("Done.") # ---------------------------------------------------------------------------- # Functions to deal with a video: wrappers for ffmpeg # ---------------------------------------------------------------------------- def extract_audio(video, audio): """Extract the audio of the video and re-encode into wav. :param video: (str) Input video file name :param audio: (str) Output audio file name """ command = "ffmpeg " command += "-i '{:s}' ".format(video) command += "-vn -acodec pcm_s16le " command += "'{:s}' ".format(audio) command += "-nostdin -y" # override if existing run_command(command) # ---------------------------------------------------------------------------- # Functions to deal with an audio: wrappers for sox # ---------------------------------------------------------------------------- def test_audio(audio, workdir): """Test and return the name of a valid audio (wav). """ try: print(" ... Test audio file: {:s}".format(audio)) fa = audioopy.aio.open(audio) print(" - duration: {:.3f}".format(fa.get_duration())) print(" - framerate: {:d}".format(fa.get_framerate())) print(" - channels: {:d}".format(fa.get_nchannels())) print(" - bitrate: {:d}".format(fa.get_sampwidth()*8)) fa.close() return audio except Exception as e: print("AudiooPy was not able to read the audio file: {:s}. " "Try to convert it with sox.".format(str(e))) new_audio = os.path.join(workdir, "audio_converted.wav") if os.path.exists(new_audio): print("File {:s} already exists.".format(new_audio)) sys.exit(1) command = "sox '{:s}' -b 16 ".format(audio) command += "'{:s}'".format(new_audio) run_command(command) return new_audio # ---------------------------------------------------------------------------- def audio_duration(audio): """Return the duration of the audio (wav). It corresponds to execute this command: sox audio -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p' :param audio: (str) Input audio file name :return: (float) Duration in seconds """ try: fa = audioopy.aio.open(audio) d = fa.get_duration() fa.close() except Exception as e: print("SPPAS was not able to read the audio file: {:s}. ".format(str(e))) sys.exit(1) return d # ---------------------------------------------------------------------------- def trim_audio(audio, duration, audio_out, begin=True): """Trim an audio file. :param audio: (str) Input audio file name :param duration: (float) Duration (in seconds) to trim :param audio_out: (str) Output audio file name :param begin: (bool) True to trim at the beginning, False to trim the end. """ cur_dur = audio_duration(audio) trim_dur = cur_dur - duration if begin is True: trim_start = duration else: trim_start = 0. command = "sox '{:s}' ".format(audio) command += "'{:s}' ".format(audio_out) command += "trim {:f} {:f} ".format(trim_start, trim_dur) run_command(command) # ---------------------------------------------------------------------------- def add_silence_to_audio(audio, duration, audio_out, begin=True): """Add silence at the begin or the end of an audio file. :param audio: (str) Input audio file name :param duration: (float) Duration (in seconds) to insert :param audio_out: (str) Output audio file name :param begin: (bool) True to insert the silence at the beginning, False to append it. """ fa = audioopy.aio.open(audio) # create a file with silence command = "sox -n " command += "-r {:d} ".format(fa.get_framerate()) command += "-c {:d} ".format(fa.get_nchannels()) command += "-b {:d} ".format(fa.get_sampwidth()*8) command += "silence.wav " command += "trim 0.0 {:f}".format(duration) fa.close() run_command(command) # concatenate the silence and the audio (or the contrary) command = "sox " if begin is True: command += "silence.wav " command += "'{:s}' ".format(audio) else: command += "'{:s}' ".format(audio) command += "silence.wav " command += "'{:s}' ".format(audio_out) run_command(command) os.remove("silence.wav") # ---------------------------------------------------------------------------- def adjust_audio_at_clap(audio_in, audio_clap, expected_clap, audio_out): """Create an audio file starting at the appropriate clap position. :param audio_in: (str) Input audio file name :param audio_clap: (float) Time of the start clap in the audio :param expected_clap: (float) Time of the start clap in the video :param audio_out: (str) Output audio file name """ delta = expected_clap - audio_clap if delta == 0: shutil.copy(audio_in, audio_out) print("Already matching. Nothing to do.") elif delta < 0: # The expected clap is before the one of the audio print("Trim the beginning of the audio of {:f} seconds" "".format(-delta)) trim_audio(audio_in, -delta, audio_out, begin=True) else: # The expected clap is after the one of the audio print("Add {:f} seconds of silence at the beginning of the audio" "".format(delta)) add_silence_to_audio(audio_in, delta, audio_out, begin=True) # ---------------------------------------------------------------------------- def audio_with_duration(audio_in, expected_duration, audio_out): """Create an audio file during the same than the other one. :param audio_in: (str) Input audio file name :param expected_duration: (str) The expected duration :param audio_out: (str) Output audio file name """ # Get the current audio duration cur_dur = audio_duration(audio_in) print("Duration of the audio is {:f} seconds".format(cur_dur)) # Make the difference delta = expected_duration - cur_dur if delta == 0: shutil.copy(audio_in, audio_out) print("Already matching. Nothing to do.") elif delta > 0: # The expected duration is higher than the one we already have. print("Add {:f} seconds of silence at the end of the audio" "".format(delta)) add_silence_to_audio(audio_in, delta, audio_out, begin=False) else: # The expected duration is less than the one we already have. print("Trim the end of the audio of {:f} seconds" "".format(-delta)) trim_audio(audio_in, -delta, audio_out, begin=False)
Génération des vidéos codées
Annotations
Nous avons suivi le processus d'annotation de SPPAS, à savoir :
- Recherche automatique des unités inter-pausales (IPUs)
- Transcription orthographique (manuelle) au sein des IPUs, avec correction des frontières si nécessaire
- Normalisation, phonétisation et alignement automatique permettant d'obtenir les mots et phonèmes alignés sur le signal audio
- Détection du visage de la personne filmée, puis du maillage du visage (68 points)
Nous avons ensuite utilisé le système de génération automatique du codage afin de créer les vidéos codées. Ce système étant paramétrable, nous avons d'abord procédé à une évaluation auprès des acteurs de terrain dans le but de déterminer quelles sont les meilleures conditions pour le décodage.
Expérimentation : paramétrage du système de codage automatique
Nous avons réalisé une étude afin d'explorer la capacité des modèles automatiques à intégrer la main virtuelle du codage LfPC dans des vidéos de l'acteur. Les modèles ont été évalués selon quatre aspects clés :
- la synchronisation main/son,
- l’angle de la main,
- le design visuel de la main,
- l’intégration d’informations visuelles supplémentaires.
Pour ce faire, nous avons extrait des phrases de la version originale des sections 8 et 10. Nous avons ensuite codé automatiquement ces vidéos en faisant varier ces 4 paramètres. Durant le stage annuel de l'ALPC 2024, huit participants volontaires ont décodé ces phrases, nous permettant ainsi de tester l'impact de chaque facteur sur la performance de décodage, et de collecter leurs impressions.
Les résultats montrent que le design visuel de la main joue un rôle crucial dans la compréhension, surpassant l'importance de la synchronisation main/son ou de l'angle de présentation de la main. Les participants ont mieux réussi à décoder lorsque la main était clairement distincte visuellement.
Cette étude a mis en évidence que pour optimiser le décodage, il est essentiel de privilégier :
- le modèle de synchronisation main/son proposé dans SPPAS, qui a été mieux accepté ;
- de ne pas trop faire varier l'angle de la main : selon la position de la clé sur le visage, l'angle de la main peut varier, mais pas autant que celui d'un codeur professionnel ;
- un design visuel clair : une main dessinée est mieux interprétée qu'une photo de main ;
- l'intégration d'informations supplémentaires brouille le message.
Suite à cette expérimentation, nous avons généré les vidéos codées automatiquement. Pour obtenir ces vidéos, il est possible d'utiliser l'interface graphique de SPPAS en ajustant la configuration de l'annotation, ou de lancer la commande suivante dans un terminal :
$SPPAS/.sppaspyenv~/bin/python $SPPAS/sppas/bin/cuedspeech.py -l fra -I input_file.mkv --createvideo=true --handtrans=4 --handangle=1 --handpos=1 --handsset=drawcue
Contributeurs
Choix des textes / Création du contenu textuel à lire : Núria Gala, Datha (janvier-mars 2024)
Soutien technique : Carine André
Annotation manuelle du corpus : Léa Delaporte (juillet/août 2024)
Annotation automatique du corpus, gestion des données : Brigitte Bigi (2024)
À propos
- Rédaction du document : Brigitte Bigi, Núria Gala
- Licence du document : GNU documentation libre - FDL 1.3
- URL du document : https://auto-cuedspeech.org/wp6l1.html
- Dernière mise à jour : décembre 2024
Annexe : Contenu textuel sélectionné pour lecture
Pour faciliter leur utilisation ultérieure, les mots, phrases et textes ont été répartis en 10 sections, chacune étant divisée en plusieurs séries.
L’ensemble des dix sections est décomposé en trois groupes :
- Corpus I (mots)
1) Syllabes avec Voyelles Orales
2) Syllabes avec Voyelles Nasales - Corpus II (phrases)
3) Phrases courtes avec CV
4) Phrases courtes avec CCV - Corpus III (textes)
5) Narratif niveau 1
6) Narratif niveau 2
7) Narratif niveau 3
8) Documentaire niveau 1
9) Documentaire niveau 2
10) Documentaire niveau 3
Section 1 : syllabes avec des voyelles orales
Cette première section se compose de trois series avec les voyelles /a/, /oe/, /o/, /ə/, /ø/ et /i/, suivi de deux séries avec les voyelles /ɛ/ /u/ /ɔ/ /y/ /e/.
Série 1
"papa", "peur", "potager", "pipe", "peu", "pipe", "panda", "ardeur", "dodo", "salade", "deux", "diner", "jaguar", "nageur", "jovial", "rouge", "jeux", "gigot", "canular", "coeur", "haricot", "toque", "queue", "qui", "vanille", "éleveur", "volant", "Eve", "baveux", "ville", "isabelle", "viseur", "zoo", "bise", "les oeufs", "les îles"
Série 2
"savon", "danseur", "seau", "lisse", "ceux", "scie", "râteau", "horreur", "rôti", "or", "cireux", "rire", "bague", "boeuf", "beau", "robe", "boeufs", "habiter", "naviguer", "bonheur", "anneau", "bonne", "noeud", "Annie", "évalua", "sueur", "vertueux", "lui", "tomate", "meuf", "hameau", "dame", "émeut", "mime"
Série 3
"tapis", "lenteur", "bateau", "hâte", "pâteux", "type", "farce", "coiffeur", "faux", "feu", "fil", "a", "heurt", "eau", "eux", "idée", "lama", "voleur", "vélo", "bal", "frileux", "Bali", "chapeau", "pêcheur", "chaud", "pèche", "grincheux", "chichi", "toi", "joueur", "oui", "tignasse", "seigneur", "agneau", "montagne", "hargneux", "compagnie", "radiateur", "ailleurs", "rafiot", "fille", "pieu", "faillite"
Série 4
"pelle", "poux", "porte", "purée", "épée", "fidèle", "doudou", "dormir", "dur", "dé", "gel", "joue", "jauge", "jury", "boulanger", "quête", "coup", "corps", "curé", "piqué", "vers", "vous", "envol", "vulnérable", "vélo", "zèbre", "bisou", "gazole", "azur", "zéro", "sec", "sous", "sort", "sucre", "séjour", "sirène", "roue", "Rome", "ruse", "doré", "belle", "boue", "bol", "butte", "bénit", "naître", "nous", "nord", "nu", "négatif", "suaire", "quatuor", "tué"
Série 5
"mère", "mou", "mort", "musée", "mémé", "tête", "tout", "tortue", "tuer", "été", "fête", "fou", "fort", "fuir", "fée", "elle", "outil", "auréole", "utile", "étirer", "laine", "loup", "l’or", "lueur", "filer", "chaine", "choux", "échoppe", "chute", "archet", "ouest", "beignet", "biniou", "ignore", "accompagner", "fillette", "yourte", "diode", "sciure", "pied"
Section 2 : syllabes avec des voyelles nasales
Série 1
"pin", "pont", "paon", "punk", "daim", "don", "danser", "Verdun", "geindre", "pigeon", "janvier", "junte", "mannequin", "conserve", "quand", "quelqu’un", "vin", "vont", "vanter", "zinzin", "blouson", "exemple", "sein", "sont", "sans", "rein", "rond", "rente", "brun", "bain", "bonbon", "ruban", "bungalow", "nain", "non", "nanti"
Série 2
"juin", "saluons", "demain", "mon", "mensonge", "commun", "teint", "tonton", "temps", "feindre", "fontaine", "fente", "parfum", "hein", "on", "en", "un", "lin", "long", "lenteur", "lundi", "machin", "capuchon", "chambre", "point", "tatouant", "pignon", "gagnant", "viens", "haillon", "orient"
Section 3 : Phrases courtes avec structures syllabiques 'CV'
Série 1
"J’ai vu la queue du vieux renard.", "Eulalie a de beaux yeux bleus.", "J’ai un tee-shirt tout neuf.", "Léo s’est offert une moto.", "Ces sabots jaunes sont rigolos.", "L’homme mange un abricot.", "La vipère est un serpent.", "La soupière est pleine de haricots verts.", "J’ai tartiné une pâte aux noisettes.", "Il chante une chanson dans son salon.", "Les enfants font un boucan du tonnerre.", "Le lièvre bondit dans le champ.", "Il y a un sapin brun dans son jardin.", "Elle met du parfum au thym.", "Lundi vingt elle boit un bon vin.", "Les cigarettes font mal à la gorge.", "Une guêpe a piqué Gérard à la figure.", "Nous mangeons du gigot avec des flageolets.", "Ces ciseaux sont aiguisés.", "Prends la bassine dans la cuisine.", "Voici un musée pour s’amuser."
Série 2
"Le vigneron a soigné sa vigne.", "Le chant du rossignol est magnifique.", "Le voyant clignote, c’est un signe !", "Elle a mis son jogging pour faire un footing.", "Ils aiment le bowling et le curling.", "Ton smoking est au pressing.", "Maxime n’aime pas la boxe.", "Astérix est l’ami d’Obélix.", "Alexandre conduit un taxi.", "Ils ont tous réussi l’examen.", "Le xylophone est exigeant.", "Il existe des lieux exotiques et exigus.", "Le chien a aboyé.", "J’ai pris du yaourt et du miel.", "Attention : il y a des millions de papillons.", "Les fruits sont dans la cuisine.", "Le nuage cache la lueur du soleil.", "Nous continuons à saluer nos invités.", "Les oies du roi ont fait la foire.", "Le moineau est un oiseau.", "Tu as le choix entre une poire ou des noisettes."
Section 4 : Phrases courtes avec structures syllabiques 'CCV'
Série 1
"Le blouson est bleu.", "Le cartable est indispensable.", "Tu as oublié ton tablier sur la table.", "Ton briquet me brûle.", "La brebis broute les brindilles.", "Brigitte a une bronchite.", "Claudine ne voit pas clair.", "Ma bicyclette éclaire mal.", "Le clown joue de la clarinette.", "Il a écrit avec une craie.", "On aura des crêpes à la crème.", "Le crocodile est cruel.", "Il respecte les insectes.", "Active le train électrique !", "L’acteur profite de l’entracte.", "Le cadre penche à droite.", "Adrien est à Londres.", "Je voudrais des dragées.", "Le fromage ne se mange pas froid.", "Il est friand de gaufres."
Série 2
"Mon frère part en Afrique.", "Le tigre s’agrippe avec ses griffes.", "Regarde la grosse grenouille.", "Ce tissu gris est agréable.", "Il y a un prunier dans le pré.", "Prends des pruneaux.", "Le professeur a imprimé les principales épreuves.", "Le train est entré en gare à treize heures trente.", "Le trèfle traite les tremblements.", "Il a trouvé une truelle sur le trottoir.", "Les esquimaux font de la motoski.", "Laisse ta casquette et prends ton casque.", "Connais-tu le score du match de basket ?", "La standardiste est une star !", "Arrête-toi au stop près du stade.", "La statue est sur une stèle.", "Le spécialiste conseille l’aspirine.", "Gaspard espère aller dans l’espace.", "Il transpire en faisant une spirale."
Section 5 : Hugo l'asticot, narratif niveau 1
Version originale
"Hugo l'asticot"
Ce soir-là, Hugo dormait profondément au fond de sa pomme,
quand soudain de terribles secousses agitèrent le fruit.
Quelle tempête !
Hugo eut à peine le temps de bondir hors de son lit
qu'il tomba à la renverse en criant de frayeur : « Au secours ! Au secours ! »
À l'extérieur, les conspirateurs s'en donnaient à coeur joie.
Ils secouaient la pomme, la bousculaient, l'ébranlaient,
tant et si bien qu'elle se détacha de la branche et tomba au pied de l'arbre.
Hugo, qui ne s'était pas fait mal, gesticulait,
furieux au milieu de sa maison en morceaux. Quelle déconfiture !
- Regardez ! S'esclaffa Mireille. Il est tout nu à présent ... nu comme un ver !
- Nu comme un ver ! s'écriaient ses amis en pouffant de rire.
Malheureusement, notre asticot ne comprit pas la plaisanterie
et s'en alla en maugréant, penaud, fâché, ridicule.
Mais comme il n'avait jamais passé la nuit dehors, il fut très inquiet.
Alors il se glissa dans un chou.
C'était la maison d'une grosse limace terriblement bavarde
qui s'appelait Grace.
- Oh, mon Dieu, ce que vous êtes pâle ! Tenez, mangez un peu de chou, c'est excellent pour la santé.
- Merci, mais je...
- Ta-ta-ta, mangez-en, mangez-en. Vous êtes si menu.
- Je préfère encore mordre dans les pommes, murmura assez fort l'asticot.
- Ta-ta-ta, reprenez-en. J'insiste, et ne parlez pas la bouche pleine,
mon petit chou, c'est très mal élevé, dit-elle.
Version simplifiée
"Hugo l'asticot"
Ce soir-là, Hugo dormait bien au fond de sa pomme,
quand soudain le fruit fut rudement secoué.
Quelle tempête !
Hugo qui n'eut pas le temps de sortir de son lit tomba en criant de peur : « Au secours ! Au secours ! »
À l'extérieur, les semeurs de trouble se faisaient plaisir.
Ils remuaient la pomme, la bougeaient, l'agitaient.
La pomme finit par se détacher de la branche et tomba au pied de l'arbre.
Hugo, qui ne s'était pas fait mal, était furieux au milieu
de sa maison en morceaux. Quel trouble !
- Regardez ! rit Mireille. Il est tout nu à présent... nu comme un ver !
- Nu comme un ver ! criaient ses amis en riant.
Par malheur, notre ver n'a pas compris la blague et partit grognon,
honteux, fâché, ridicule.
Mais comme il n'avait jamais passé la nuit dehors, il était très inquiet.
Alors il se glissa dans un chou.
C'était la maison d'une grosse limace très bavarde. Elle s'appelait Grace.
- Oh, mon Dieu, ce que vous êtes blanc ! Tenez, mangez un peu de chou, c'est bon pour la santé.
- Merci, mais je...
- Ta-ta-ta, mangez-en, mangez-en. Vous êtes si maigre.
- Je préfère encore mordre dans les pommes, dit assez fort l'asticot.
- Ta-ta-ta, reprenez-en. J'insiste, et ne parlez pas la bouche pleine,
mon petit chou, c'est très élevé, dit-elle.
Section 6 : Buveur d'encre, narratif niveau 2
Texte original
"Buveur d'encre"
Papa est libraire. Il adore les livres. Il les dévore. C'est un ogre.
Il lit toute la journée et parfois même la nuit.
C'est une maladie incurable,
mais ça n'a pas l'air d'inquiéter notre médecin de famille.
Chaque soir, une nouvelle pile de livres débarque à la maison.
Il y en a partout, jusque dans les toilettes.
C'est une invasion. Impossible de râler. Avec papa,
les envahisseurs ont toujours raison. Il leur parle comme à des humains.
Il leur invente des prénoms et les appelle mes p'tits bouquins.
Tous les bouquins sont ses copains. Moi je n'ai pas de copain.
Et je n'aime pas les livres. De l'extérieur, je ressemble à papa.
Mais à l'intérieur, alors là, nous sommes deux étrangers.
Maman fait semblant de ne pas s'en apercevoir. Elle nous aime tous les deux.
Je suis le plus petit mais elle ne me défend même pas
quand papa veut me forcer à lire, vous vous rendez-compte ?
Les grandes vacances viennent de commencer. Je ne sais pas quoi faire.
Alors j'aide papa à la librairie. Qu'est-ce que je fais ? Pas grand-chose.
Il m'a interdit de ranger et même de toucher quoi que ce soit.
Il paraît que le papier ne résiste pas. C'est vrai que j'aime bien entendre
le bruit d'une feuille en train de se déchirer. C'est beau comme un morceau de musique.
Alors je guette les voleurs.
C'est la seule chose qui m'amuse dans une librairie.
Quand un livre disparaît dans la poche d'un pickpocket, je ne dis rien,
je suis bien trop content. Un envahisseur de moins ! Mais cela arrive rarement.
En général, papa détecte les voleurs au moment où ils pénètrent dans le magasin.
Texte simplifié
"Buveur d'encre"
Papa est libraire. Il adore les livres. Il les dévore.
C'est un ogre. Il lit toute la journée et parfois la nuit.
C'est une maladie incurable mais ça n'a pas l'air d'inquiéter
notre médecin de famille.
Chaque soir, une nouvelle pile de livres arrive à la maison.
Il y en a partout, jusque dans les toilettes.
C'est une invasion. Impossible de râler.
Avec papa, les occupants ont toujours raison.
Il leur parle comme à des humains.
Il leur invente des prénoms et les appelle mes p'tits bouquins.
Tous les bouquins sont ses copains. Moi je n'ai pas de copain.
Et je n'aime pas les livres. De l'extérieur, je suis comme à papa.
Mais à l'intérieur nous sommes deux étrangers.
Maman fait semblant de ne pas le voir. Elle nous aime tous les deux.
Je suis le plus petit.
Mais elle ne me défend pas quand papa veut me forcer à lire.
Vous vous rendez-compte ?
Les grandes vacances ont commencé. Je ne sais pas quoi faire.
Alors j'aide papa à la librairie. Qu'est-ce que je fais ?
Pas grand-chose.
Il m'a interdit de ranger et de toucher quoi que ce soit.
Il paraît que le papier ne résiste pas.
C'est vrai que j'aime bien entendre le bruit d'une feuille
en train de se déchirer. C'est beau comme un morceau de musique.
Alors je surveille les voleurs.
C'est la seule chose qui m'amuse dans une librairie.
Quand un livre part dans la poche d'un voleur, je ne dis rien,
je suis bien trop content. Un occupant de moins ! Mais cela arrive peu.
En général, papa trouve les voleurs au moment où ils arrivent dans le magasin.
Section 7 : Oeil du loup, narratif niveau 3
Texte original
"Oeil du loup"
Debout devant l'enclos du loup, le garçon ne bouge pas. Le loup va et vient.
Il marche de long en large et ne s'arrête jamais.
"M'agace, celui-là...". Voilà ce que pense le loup.
Cela fait bien deux heures que le garçon est là, debout devant ce grillage,
immobile comme un arbre gelé, à regarder le loup marcher.
"Qu'est-ce qu'il me veut ?" C'est la question que se pose le loup.
Ce garçon l'intrigue. Il ne l'inquiète pas (le loup n'a peur de rien), il l'intrigue.
"Qu'est-ce qu'il me veut ?"
Les autres enfants courent, sautent, crient, pleurent,
ils tirent la langue au loup et cachent leurs têtes dans les jupes de leurs mères.
Puis, ils vont faire les clowns devant la cage du gorille et rugir au nez du lion
dont la queue fouette l'air. Ce garçon-là, non.
Il reste debout, immobile, silencieux.
Seuls ses yeux bougent. Ils suivent le va-et-vient du loup, le long du grillage.
"N'a jamais vu de loup ou quoi ?"
Le loup, lui, ne voit le garçon qu'une fois sur deux.
C'est qu'il n'a qu'un oeil, le loup. Il a perdu l'autre dans sa bataille
contre les hommes, il y a dix ans, le jour de sa capture.
À l'aller donc (si on peut appeler ça l'aller), le loup voit le zoo tout entier,
ses cages, les enfants qui font les fous et, au milieu d'eux, ce garçon-là,
tout à fait immobile. Au retour (si on peut appeler ça le retour),
c'est l'intérieur de son enclos que voit le loup.
Son enclos vide, car la louve est morte la semaine dernière.
Son enclos triste, avec son unique rocher gris et son arbre mort.
Puis le loup fait demi-tour, et voilà de nouveau ce garçon,
avec sa respiration régulière, qui fait de la vapeur blanche dans l'air froid.
"Il se lassera avant moi", pense le loup en continuant de marcher.
Et il ajoute : "Je suis plus patient que lui."
Et il ajoute encore : "Je suis le loup."
Mais, le lendemain matin, en se réveillant, la première chose que voit le loup,
c'est ce garçon, debout devant son enclos, là, exactement au même endroit.
Le loup a failli sursauter.
"Il n'a pas passé la nuit ici, tout de même !"
Il s'est contrôlé à temps, et il a repris son va-et-vient comme si de rien n'était.
Cela fait une heure, maintenant, que le loup marche.
Une heure que les yeux du garçon le suivent.
Texte simplifié
"Oeil du loup"
Debout devant la cage du loup, le garçon ne bouge pas.
Le loup va et vient.
Il marche de long en large et ne s'arrête jamais.
"Il m’énerve, celui-là..." pense le loup.
Depuis 2 heures le garçon est là, debout devant ce grillage,
immobile, à regarder le loup marcher.
"Que me veut-il ?" se demande le loup. Ce garçon l’étonne.
Le garçon ne l'inquiète pas (le loup n'a peur de rien), il l’étonne.
"Que me veut-il ?"
Les autres enfants courent, sautent, crient, pleurent.
Ils tirent la langue au loup et cachent leurs têtes
dans les jupes de leurs mères.
Puis, ils vont faire les clowns devant la cage du gorille.
Ils rugissent au nez du lion qui fouette l’air avec sa queue.
Ce garçon-là, non. Il reste debout, immobile, silencieux.
Seuls ses yeux bougent.
Ils suivent le va-et-vient du loup, le long du grillage.
"N'a jamais vu de loup ou quoi ?"
Le loup, lui, ne voit le garçon qu'une fois sur deux.
Le loup n’a qu’un oeil. Il a perdu l'autre dans sa bataille
contre les hommes, il y a 10 ans, le jour de sa capture.
À l'aller donc (si on peut appeler ça l'aller), le loup voit le zoo
tout entier, ses cages, les enfants qui font les fous et,
au milieu d'eux, ce garçon-là, tout à fait immobile.
Au retour (si on peut appeler ça le retour),
c'est l'intérieur de sa cage que voit le loup.
Sa cage vide, car la louve est morte la semaine dernière.
Sa cage triste, avec son unique rocher gris et son arbre mort.
Puis le loup fait demi-tour, et voilà de nouveau ce garçon,
avec sa respiration régulière, qui fait de la vapeur blanche dans l'air froid.
Il se fatiguera avant moi\", pense le loup en continuant de marcher.
Et il ajoute : "Je suis plus patient que lui."
Et il ajoute encore : "Je suis le loup."
Mais, le lendemain matin, en se réveillant, la première chose
que voit le loup, c'est ce garçon, debout devant sa cage, là,
toujours au même endroit.
Le loup a failli bondir.
"Il n'a pas passé la nuit ici, tout de même !"
Le loup s'est contrôlé à temps, et il a repris son va-et-vient
comme si de rien n'était.
Cela fait une heure, maintenant, que le loup marche.
Une heure que les yeux du garçon le suivent.
Section 8 : Le vent, documentaire niveau 1
Texte original
"Le vent"
"Le vent souffle sur ton visage et dans tes cheveux.
Il fait bouger les feuilles des arbres, l'herbe des champs,
les vagues sur la mer et les nuages dans le ciel.
Tu le sens mais tu ne le vois pas. Il est invisible.
Tu peux aussi l'entendre hurler quand il souffle très fort.
Le vent, c'est l'air mis en mouvement par différentes causes.
Sa force peut aller de l'agitation d'un éventail aux vents violents.
Les vents sont créés par les différences de réchauffement
des continents et des océans dues au soleil.
Parfois le vent est bien régulier, c'est la petite brise qui vient de la mer.
Il peut être violent et souffler en tempête.
Parfois il arrive en rafales.
Parfois, c'est surprenant : il change brusquement de direction.
Les feuilles mortes s'envolent alors dans des tourbillons.
Une couche d'air appelée atmosphère entoure la terre.
Cet air contient deux gaz : l'azote et l'oxygène, et une petite quantité
d'autres gaz. En chauffant, les gaz se dilatent, ils deviennent plus légers
et s'élèvent. Ainsi, l'air chauffé par le soleil monte.
Un vide se crée alors qui aspire le froid.
C'est cela qui provoque le vent.
Depuis la plus haute antiquité, les hommes ont utilisé la force du vent.
Ils ont utilisé le vent qui gonfle les voiles des bateaux pour naviguer
sur la mer. Pendant des milliers d'années, cette énergie a permis
le transport des hommes et des marchandises
et la découverte de terres inconnues."
Texte simplifié
"Le vent"
Le vent souffle sur ton visage et dans tes cheveux.
Il fait bouger les feuilles des arbres, l'herbe des jardins,
les vagues sur la mer et les nuages dans le ciel.
Tu le sens mais tu ne le vois pas. Il est invisible.
Tu peux aussi l'entendre crier quand il souffle très fort.
Le vent c'est l'air qui bouge dans plusieurs cas.
Il peut être faible comme si on bouge un éventail ou violents.
Ces vents existent car le soleil réchauffe plus ou moins
la terre et la mer.
Parfois le vent est régulier, c'est la petite brise qui vient de la mer.
Parfois il est violent et souffle en tempête.
Parfois il arrive en rafales.
Parfois, il change brusquement de direction.
Alors les feuilles mortes s'envolent dans des tourbillons.
Une couche d'air entoure la terre : l'atmosphère.
Cet air contient surtout 2 gaz : l'azote et l'oxygène.
En chauffant, les gaz gonflent : ils deviennent plus légers et montent.
Ainsi, l'air chauffé par le soleil monte.
Il laisse alors un vide qui aspire le froid.
Cela provoque le vent.
Depuis la plus haute antiquité, les hommes utilisent la force du vent.
Ainsi, le vent gonfle les voiles des bateaux pour naviguer sur la mer.
Pendant des milliers d'années, la force du vent a permis le transport
des hommes et des marchandises et la découverte de nouvelles terres.
Section 9 : Mesurer, documentaire niveau 2
Texte original
"Mesurer"
La mesure est un outil nécessaire pour comprendre l'espace et le temps.
Si l'homme mesure, c'est pour communiquer, comparer, se souvenir...
Mesurer une longueur c'est répondre à ces questions :
« Quelle est la longueur de cette planche ? », ou
« quelle est la distance entre Paris et Cannes ? ».
Mesurer un volume, c'est être capable de répondre à cette question :
« Quelle quantité de liquide contient cette bouteille ? ».
Mesurer une masse, c'est être capable de répondre à cette question :
« Quel est mon poids ? ».
Pour avoir des informations très précises, il faut mesurer.
De tout temps, l'homme a utilisé son corps pour mesurer : la main,
l'oeil donnent des informations : c'est loin, c'est près, c'est lourd,
c'est léger, c'est plus grand.
Les Grecs, les Égyptiens, les Romains utilisaient la main, le pied,
le coude, les doigts comme unités de mesure. Toutes les mesures
avaient un rapport au corps humain ou au travail des hommes.
Mais les échanges étaient bien compliqués, car le pied romain représentait
environ 29 de nos centimètres, le pied des Grecs 31 centimètres.
En 1793, les députés français rédigent une loi.
L'unité de longueur qui servira dans toute la République sera appelée :
le mètre.
À partir de l'invention du mètre, les scientifiques ont inventé,
le kilogramme, le litre... Cela s'appelle le système métrique.
Ce système sera ensuite adopté dans la plupart des États du monde
à la suite de guerres.
Les pays qui y résistent encore sont les Anglais et les Américains.
Le système scientifique international est basé sur le mètre.
Texte simplifié
"Mesurer"
La mesure est nécessaire pour comprendre l'espace et le temps.
L'homme mesure pour communiquer, comparer, se souvenir...
Mesurer une longueur sert à répondre à des questions :
« Quelle est la longueur de cette planche ? », ou
« quelle est la distance entre Paris et Cannes ? ».
Mesurer un volume, c'est pouvoir répondre à la question :
« Quelle quantité de liquide contient cette bouteille ? ».
Mesurer une masse, c'est pouvoir répondre à la question :
« Quel est mon poids ? ».
Pour avoir des informations justes, il faut mesurer.
L'homme a toujours utilisé son corps pour mesurer.
La main et l'oeil donnent des informations : c'est loin, c'est près,
c'est lourd, c'est léger, c'est plus grand.
Les Grecs, les Égyptiens, les Romains utilisaient la main,
le pied, le coude, les doigts comme unités de mesure.
Toutes les mesures avaient un rapport au corps humain ou
au travail des hommes. Mais les échanges étaient difficiles
car le pied romain mesurait environ 29 centimètres,
le pied des Grecs 31 centimètres.
En 1793, les députés français écrivent une loi.
L'unité de longueur de toute la République sera appelée le mètre.
Depuis l'invention du mètre, les scientifiques inventent,
le kilo, le litre... Cela s'appelle le système métrique.
Ce système s'utilise presque partout à la suite de guerres.
Les pays qui résistent encore sont les Anglais et les Américains.
Le système scientifique international se base sur le mètre.
Section 10 : Le goût, documentaire niveau 3
Texte original
"Le goût"
Les expressions « avoir le palais fin » ou « un bon bec »
laissent croire que le goût n'est qu'une affaire de bouche.
Erreur ! Car les yeux, les oreilles, le nez, la mémoire et
l'imagination entrent en jeu.
Avant même qu'un aliment s'approche de notre bouche,
le mécanisme du goût se met en marche. Les simples mots de
« pain frais », « chocolat » ou « gratin d'endives »
déclenchent automatiquement une image dans notre cerveau.
L'imagination projette alors les sensations que l'on pourrait
de nouveau éprouver en les mangeant.
La couleur des aliments joue aussi un grand rôle.
La consistance compte beaucoup : une cacahuète molle,
des coquillettes gluantes, un bonbon poisseux n'excitent
guère les papilles. Vient le tour de l'odeur.
Elle arrive d'abord aux narines, qui savent percevoir
plus de 3000 arômes différents.
Lors de la mastication, d'autres arômes sont dégagés.
La bouche perçoit les saveurs :
sucré, salé, amer, acide et une quantité d'autres saveurs
qui n'ont pas de nom précis.
Ces saveurs sont captées par 8000 papilles, de minuscules
récepteurs situés sur la langue et le palais, puis envoyées au cerveau.
À chaque personne, mais aussi à chaque peuple, sa perception
des différentes saveurs et son classement du « bon » et du « mauvais ».
En Europe de l'Ouest, on est plutôt amateur d'acide et de salé,
les saveurs des charcuteries et du fromage. En Europe de l'Est,
on apprécie l'acide et l'amer (bière, choucroute) comme en Asie (sauce de soja).
Les Etats-Unis et l'Australie sont friands de l'alliance acide et sucré,
comme dans le ketchup.
Seule la saveur sucrée est universellement reconnue et appréciée,
car c'est celle du lait maternel.
Texte simplifié
"Le goût"
Les expressions « avoir le palais fin » ou « un bon bec »
laissent croire que le goût concerne la bouche.
Erreur ! Car les yeux, les oreilles, le nez, la mémoire
et l'imagination entrent en jeu.
Avant qu'un aliment entre dans notre bouche,
le mécanisme du goût se met en marche.
Les simples mots de « pain frais », « chocolat » ou
« gratin d'endives » lancent une image dans notre cerveau.
L'imagination projette les sensations qu'on pourrait avoir
si on les mangeait. La couleur des aliments joue aussi un grand rôle.
La consistance compte beaucoup : une cacahuète molle,
des pâtes gluantes, un bonbon gras n'excite pas les papilles.
Vient le tour de l'odeur. Elle arrive d'abord aux narines,
qui savent détecter plus de 3000 arômes différents.
Si on mastique, d'autres arômes arrivent.
La bouche sent les saveurs : sucré, salé, amer, acide et
d'autres saveurs sans nom.
Ces saveurs sont captées par 8000 papilles, de minuscules
récepteurs sur la langue et le palais.
Les saveurs sont alors envoyées au cerveau.
Chaque personne, mais aussi chaque peuple, a sa perception des saveurs.
On les classe en « bon » et « mauvais ».
En Europe de l'Ouest, on aime plutôt l'acide et le salé,
les saveurs des charcuteries et du fromage.
En Europe de l'Est, on aime l'acide et l'amer (bière, choucroute)
comme en Asie (sauce de soja).
Les Etats-Unis et l'Australie aiment l'acide et le sucré,
comme dans le ketchup.
Seule la saveur sucrée est reconnue et appréciée par tous,
car c'est celle du lait maternel.