Commencez avec OCR en C# et VB.NET

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR est une bibliothèque logicielle C# permettant aux développeurs sur la plateforme .NET de reconnaître et de lire le texte à partir d'images et de documents PDF. C'est une bibliothèque OCR pure .NET utilisant le moteur Tesseract le plus avancé connu, n'importe où.

Installation

Installation avec le gestionnaire de paquets NuGet

Installez IronOcr dans Visual Studio ou en ligne de commande avec le gestionnaire de paquets NuGet. Dans Visual Studio, naviguez jusqu'à la console avec :

  • Outils ->
  • Gestionnaire de paquets NuGet ->
  • Console du gestionnaire de paquets
Install-Package IronOcr

Et consultez IronOcr sur NuGet pour plus d'informations sur les mises à jour de version et l'installation.

Il existe d'autres paquets NuGet IronOCR disponibles pour différentes plateformes :

IronOcr.Extensions.AdvancedScan pour Linux et macOS

Ce paquet est destiné aux utilisateurs qui utilisent Linux et Mac et qui souhaitent également bénéficier des fonctionnalités avancées pour IronOcr.

Résolution de problèmes

Avec la nouvelle mise à jour de ce paquet, IronOCR combine les dépendances OpenCV au sein du paquet pour le simplifier de telle manière que, si les développeurs importent actuellement les dépendances OpenCV, ils obtiendront l'erreur suivante.

The type of namespace name `OpenCvSharp` could not be found(are you missing a using directive or an assembly reference)

Vous pouvez supprimer en toute sécurité les espaces de noms OpenCV, et le problème sera résolu.

Téléchargez le .ZIP d'IronOCR

Vous pouvez également choisir de télécharger IronOCR via un fichier .ZIP. Cliquez pour télécharger directement le DLL. Une fois que vous avez téléchargé le .zip :

Instructions pour l'installation de .NET Framework 4.0+ :

  • Incluez le IronOcr.dll dans le dossier net40 dans votre projet
  • Et ensuite ajoutez des références d'assembly à :

    • System.Configuration
    • System.Drawing
    • System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Incluez le IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Et ensuite ajoutez une référence de package NuGet à :

    • System.Drawing.Common 4.7 ou supérieur

Téléchargez l'installateur IronOCR (Windows uniquement)

Une autre option est de télécharger notre installateur IronOCR qui installera toutes les ressources nécessaires pour que IronOCR fonctionne dès la sortie de la boîte. Veuillez garder à l'esprit que cette option est uniquement destinée aux systèmes Windows. Pour télécharger l'installateur, veuillezcliquer ici. Une fois que vous avez téléchargé le .zip :

Instructions pour l'installation de .NET Framework 4.0+ :

  • Incluez le IronOcr.dll dans le dossier net40 dans votre projet
  • Et ensuite ajoutez des références d'assembly à :

    • System.Configuration
    • System.Drawing
    • System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Incluez le IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Et ensuite ajoutez une référence de package NuGet à :

    • System.Drawing.Common 4.7 ou supérieur

Pourquoi choisir IronOCR ?

IronOCR est une bibliothèque logicielle .NET facile à installer, complète et bien documentée.

Choisissez IronOCR pour atteindre une précision OCR de 99,8%+ sans utiliser de services web externes, de frais continus ou l'envoi de documents confidentiels sur internet.

Pourquoi les développeurs C# choisissent IronOCR plutôt que Vanilla Tesseract :

  • Installation en tant qu'unique DLL ou NuGet
  • Comprend les moteurs Tesseract 5, 4, et 3 prêts à l'emploi.
  • Précision 99,8% surpasse de manière significative le Tesseract régulier.
  • Vitesse fulgurante et multi-threading
  • Compatible avec MVC, WebApp, Desktop, Console & Server Application
  • Pas de fichiers Exes ou de code C++ à gérer
  • Support complet de l'OCR PDF
  • Effectue l'OCR sur presque tous les fichiers image ou PDF
  • Support complet de .NET Core, Standard et Framework
  • Déploie sur Windows, Mac, Linux, Azure, Docker, Lambda, AWS
  • Lecture de codes-barres et de QR codes
  • Exporter les résultats OCR sous forme de XHTML
  • Exporter l'OCR vers des documents PDF consultables
  • Support du multi-threading
  • 125 langues internationales toutes gérées via des fichiers NuGet ou OcrData
  • Extraire les images, coordonnées, statistiques et polices. Pas seulement du texte.
  • Peut être utilisé pour redistribuer Tesseract OCR dans des applications commerciales & propriétaires.

IronOCR brille lorsqu'il travaille avec des images du monde réel et des documents imparfaits tels que des photographies ou des numérisations de basse résolution qui peuvent avoir du bruit numérique ou des imperfections.

D'autres bibliothèques OCR gratuites pour la plateforme .NET comme d'autres APIs Tesseract .NET et services web ne performent pas aussi bien sur ces cas d'utilisation du monde réel.

OCR avec Tesseract 5 - Commencez à coder en C#

L'exemple de code ci-dessous montre à quel point il est facile de lire du texte à partir d'une image en utilisant C# ou VB .NET.

OneLiner

:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
$vbLabelText   $csharpLabel

Hello World configurable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Add multiple images
input.LoadImage("images/sample.jpeg");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Add multiple images
input.LoadImage("images/sample.jpeg")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

C# PDF OCR

La même approche peut être utilisée pour extraire du texte de tout document PDF.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)

' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
$vbLabelText   $csharpLabel

OCR pour les TIFF MultiPage

:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Codes-barres et QR

Une caractéristique unique d'IronOCR est qu'il peut lire les codes-barres et les QR codes des documents tout en scannant le texte. Les instances de la classe OcrResult.OcrBarcode donnent au développeur des informations détaillées sur chaque code-barres scanné.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");

OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
    // type and location properties also exposed
    Console.WriteLine(Barcode.Value);
}
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True

Using input As New OcrInput()
	input.LoadImage("img/Barcode.png")
	
	Dim Result As OcrResult = ocr.Read(input)
	For Each Barcode In Result.Barcodes
		' type and location properties also exposed
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
$vbLabelText   $csharpLabel

OCR sur des zones spécifiques d'images

Toutes les méthodes de scan et de lecture d'IronOCR offrent la possibilité de spécifier exactement quelle partie d'une page ou des pages nous voulons lire le texte. C'est très utile lorsque nous examinons des formulaires standardisés et peut faire économiser beaucoup de temps et améliorer l'efficacité.

Pour utiliser des régions de découpe, nous devrons ajouter une référence système à System.Drawing afin que nous puissions utiliser l'objet System.Drawing.Rectangle.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

input.LoadImage("document.png", contentArea);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
	.X = 215,
	.Y = 1250,
	.Height = 280,
	.Width = 1335
}

input.LoadImage("document.png", contentArea)

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

OCR pour des scans de faible qualité

La classe IronOCR OcrInput peut réparer des scans que le Tesseract normal ne peut pas lire.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Exporter les résultats OCR comme un PDF consultable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)

Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Conversion de TIFF en PDF consultable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Exporter les résultats OCR en HTML

:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");

OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")

Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
$vbLabelText   $csharpLabel

Filtres d'amélioration d'image OCR

IronOCR fournit des filtres uniques aux objets OcrInput pour améliorer la performance OCR.

Exemple de code d'amélioration d'image

:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Liste des filtres d'image OCR

Les filtres d'entrée pour améliorer la performance OCR qui sont intégrés dans IronOCR incluent :

  • OcrInput.Rotate(double degrees) - Tourne les images d'un certain nombre de degrés dans le sens des aiguilles d'une montre. Pour une rotation dans le sens inverse des aiguilles d'une montre, utilisez des nombres négatifs.
  • OcrInput.Binarize() - Ce filtre convertit chaque pixel en noir ou blanc sans compromis, potentiellement améliorant la performance OCR sur les images à très faible contraste.
  • OcrInput.ToGrayScale() - Convertit chaque pixel en une nuance de gris. Cela peut ne pas améliorer l'exactitude mais pourrait améliorer la vitesse.
  • OcrInput.Contrast() - Augmente automatiquement le contraste, améliorant souvent la vitesse et l'exactitude dans les scans à faible contraste.
  • OcrInput.DeNoise() - Supprime le bruit numérique, recommandé uniquement lorsque le bruit est attendu.
  • OcrInput.Invert() - Inverse chaque couleur (blanc devient noir et vice versa).
  • OcrInput.Dilate() - Avance la morphologie, ajoute des pixels aux contours des objets, opposé au Erode.
  • OcrInput.Erode() - Avance la morphologie, enlève des pixels des contours des objets, opposé au Dilate.
  • OcrInput.Deskew() - Tourne une image pour l'orienter correctement. Utile parce que la tolérance de déformation de Tesseract est limitée.
  • OcrInput.EnhanceResolution - Améliore la résolution des images de faible qualité. Ce réglage est généralement utilisé pour gérer automatiquement l'entrée à faible DPI.
  • EnhanceResolution détecte les images de basse résolution (en dessous de 275 dpi), les agrandit et affine le texte pour de meilleurs résultats OCR. Bien que chronophage, il réduit souvent le temps global de l'opération OCR.
  • Language - Prend en charge la sélection parmi 22 packs de langues internationales.
  • Strategy - Permet de choisir entre des stratégies rapides et moins précises ou avancées (utilisant l'IA pour la précision) basées sur la relation statistique des mots.
  • ColorSpace - Choisir l'OCR en niveaux de gris ou en couleur ; les niveaux de gris sont généralement optimaux bien que la couleur puisse être meilleure dans certains scénarios de contraste.
  • DetectWhiteTextOnDarkBackgrounds - Ajuste pour les images négatives, détectant et lisant automatiquement le texte blanc sur fonds sombres.
  • InputImageType - Guide la bibliothèque OCR, en spécifiant si elle travaille sur un document complet ou un extrait.
  • RotateAndStraighten - Permet à IronOCR de gérer correctement des documents qui sont tournés ou affectés par des distorsions de perspective.
  • ReadBarcodes - Lit automatiquement les codes-barres et QR codes en même temps que le scan de texte sans temps supplémentaire significatif.
  • ColorDepth - Détermine les bits par pixel pour la profondeur de couleur dans le processus d'OCR. Une profondeur plus élevée peut augmenter la qualité mais également le temps de traitement.

Packs de langues 125

IronOCR prend en charge 125 langues internationales via des packs de langues qui sont distribués sous forme de DLL, disponibles pour téléchargement depuis ce site, ou via le gestionnaire de paquets NuGet.

Les langues incluent l'allemand, le français, l'anglais, le chinois, le japonais, parmi d'autres. Des packs de langues spécialisés existent pour MRZ, les chèques MICR, les données financières, les plaques d'immatriculation, etc. De plus, des fichiers " .traineddata " tesseract personnalisés peuvent être utilisés.

Exemple de langue

// Reference to the path of the source file that demonstrates setting language packs for OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
// Reference to the path of the source file that demonstrates setting language packs for OCR
using IronOcr;

// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();

var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
' Reference to the path of the source file that demonstrates setting language packs for OCR
Imports IronOcr

' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img/arabic.gif", pageindices)
	' Add image filters if needed
	' In this case, even thought input is very low quality
	' IronTesseract can read what conventional Tesseract cannot.
	Dim result As OcrResult = ocr.Read(input)
	' Console can't print Arabic on Windows easily.
	' Let's save to disk instead.
	result.SaveAsTextFile("arabic.txt")
End Using
$vbLabelText   $csharpLabel

Exemple de langues multiples

Il est également possible de faire de l'OCR en utilisant plusieurs langues en même temps. Cela peut améliorer l'OCR des métadonnées en anglais et des URL dans les documents Unicode.

// Reference to the path of the source file that demonstrates multi-language OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
// Reference to the path of the source file that demonstrates multi-language OCR
using IronOcr;

// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
' Reference to the path of the source file that demonstrates multi-language OCR
Imports IronOcr

' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)

Using input As New OcrInput()
	input.LoadPdf("multi-language.pdf")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("results.txt")
End Using
$vbLabelText   $csharpLabel

Objets de résultats OCR détaillés

IronOCR renvoie un objet de résultat OCR pour chaque opération. Généralement, les développeurs accèdent à la propriété Text pour obtenir le texte scanné. Cependant, l'objet de résultats contient des informations beaucoup plus détaillées.

// Reference to the path of the source file demonstrating detailed OCR result object usage
:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
// Reference to the path of the source file demonstrating detailed OCR result object usage
using IronOcr;

IronTesseract ocr = new IronTesseract();

// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);

OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
' Reference to the path of the source file demonstrating detailed OCR result object usage
Imports IronOcr

Private ocr As New IronTesseract()

' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\sample.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Dim pages = result.Pages
	Dim words = pages(0).Words
	Dim barcodes = result.Barcodes
	' Explore here to find a massive, detailed API:
	' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
	' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
$vbLabelText   $csharpLabel

Performance

IronOCR fonctionne dès la sortie de la boîte sans nécessiter d'ajustement de performance ou de modification d'image.

La vitesse est fulgurante : IronOcr.2020+ est jusqu'à 10 fois plus rapide et fait plus de 250% d'erreurs en moins que les versions précédentes.

En savoir plus

Pour en savoir plus sur l'OCR en C#, VB, F#, ou tout autre langage .NET, veuillez lire nos tutoriels communautaires, qui donnent des exemples du monde réel d'utilisation d'IronOCR et montrent les nuances de l'optimisation de la bibliothèque.

Une référence API complète pour les développeurs .NET est également disponible.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer?
Nuget Téléchargements 5,167,857 | Version: 2025.11 vient de sortir