Le moteur OCR de Windows ne reconnaît pas le texte en toile (converti en bitmap)

J'ai un projet cordova où j'ai un "scribble pad" où l'utilisateur peut gribouiller ses notes. Il s'agit d'un objet de toile simple, et j'aimerais que le moteur OCR le converti en texte. Je tente de convertir les données de la toile en bitmap logiciel que supporte OCR Engine.

Tous les échantillons sont basés soit sur le chargement d'un fichier à partir du stockage, soit sur la lecture d'un flux depuis la caméra. Dois-je sauvegarder cette toile dans un fichier sur un périphérique et le relire dans un flux?

J'aimerais recevoir les conseils ici, car les images sont quelque chose avec qui je me débat.

[Mettre à jour]

Donc, j'ai réussi à obtenir le flux, mais malheureusement, OCR ne le reconnaît pas.

J'ai l'objet de toile et après la chargement de la page, je place le texte dans celui-ci, donc tout OCR capable de pouvoir le lire. J'ai également l'élément "img", pour vérifier si le flux est correct et contient le bitmap correct. Voici le code qui gère la conversion convas en reconnaissance OCR

var blob = canvas.msToBlob(); // This is the stream I'll use for OCR detection var randomAccessStream = blob.msDetachStream(); // This is the stream I'll use for the image element to make sure the stream above contains what I've placed into the canvas var blob2 = MSApp.createBlobFromRandomAccessStream("image/png", randomAccessStream.cloneStream()); // Angular JS scope model $scope.imageUrl = URL.createObjectURL(blob2); // This works, but returns "" var scope = this; if (!this.ocrEngine) return; var bitmapDecoder = Windows.Graphics.Imaging.BitmapDecoder; bitmapDecoder.createAsync(randomAccessStream).then(function (decoder) { return decoder.getSoftwareBitmapAsync(); }).then(function (bitmap) { return scope.ocrEngine.recognizeAsync(bitmap); }).then(function (result) { console.log(result.text); }); 

Après cela, tout fonctionne, l'image reçoit le src et est chargée et contient exactement tout ce qui se trouve dans la toile afin que le flux soit correct.

OcrEngine est configuré de la manière suivante:

 var Globalization = Windows.Globalization; var OCR = Windows.Media.Ocr; this.ocrEngine = OCR.OcrEngine.tryCreateFromUserProfileLanguages(); if (!this.ocrEngine) { // Try to create OcrEngine for specified language. // If language is not supported on device, method returns null. this.ocrEngine = OCR.OcrEngine.tryCreateFromLanguage(new Globalization.Language("en-us")); } if (!this.ocrEngine) { console.error("Selected language is not available."); } 

Pourquoi OCR ne reconnaît-il pas simplement «Hello World»?

Eh bien, il était plutôt embarrassant de constater que la raison pour laquelle l'OCR n'a pas répondu à quelque chose, même un texte écrit du système était que l'image générée résultante avait un fond transparent. Une fois que j'ai inclus un rectangle avec le blanc, tout cela a commencé à fonctionner correctement.

Malheureusement, l'OCR essaie de reconnaître tout ce que je gribble sur la toile, donc, par exemple, les numéros manuscrits ou le texte multiligne dans une toile ne sont pas reconnus, voir ci-dessous

Reconnu: Reconnu

Pas reconnu Pas reconnu

Pas reconnu: Pas reconnu

Pas reconnu: Non reconnu ni

Ensuite, j'ai trouvé l'espace de noms Windows.UI.Input.Inking et je considère que c'est le seul moyen d'aller.