2016-05-15 2 views
0

C++/CXのWindows UWP OCR-Engineを使用して画像内の数字/数字を検出する際に問題があります。次のコードでOcrEngine組み込みOcrEngineクラスを使用して数値/数字を検出する方法

... 
cv::Mat croppedImage = imread("digit.png"); 
WriteableBitmap^ bit1 = ref new WriteableBitmap(croppedImage.cols, croppedImage.rows); 
SoftwareBitmap^ bit2 = bit2->CreateCopyFromBuffer(bit1->PixelBuffer, BitmapPixelFormat::Bgra8, bit1->PixelWidth, bit1->PixelHeight); 
Windows::Globalization::Language^ l = ref new Windows::Globalization::Language("de"); 
OcrEngine^ ocrEngine = OcrEngine::TryCreateFromLanguage(l); 
IAsyncOperation<OcrResult^>^ ao = ocrEngine->RecognizeAsync(bit2); 
task_completion_event<Platform::String^> purchaseCompleted; 
auto deviceEnumTask = create_task(ao); 
deviceEnumTask.then([this](OcrResult^ result) 
{ 
App1::MainPage::findNumber(result->Text); 
}); 
... 
void App1::MainPage::findNumber(Platform::String^ text) 
{ 
//Do something with String 
} 

私の問題は今、私は、私は、Windows 10 UWPのための組み込みメソッドを使用して、それを試してみました、次の画像

Digit

に数を検出する必要が findNumberに挿入された文字列は常にnullであることを示します。私は入力として異なる画像を試しましたが、常に同じ結果を返しました:NULL。

  1. C++/CXでこの画像の数字を取得する簡単な方法はありますか?
  2. 何が問題なのですか?画像を変換しますか?
+0

公式[GitHubの中OCRサンプル](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR)がありますが、あなたはチェックを持つことができます。しかし、あなたのイメージを認識するためにそれを使うと、それを認識することもできません。 OcrEngineは、画像を正しく認識できるかどうかを保証しません。テキスト認識の精度は、画像の品質に依存します。詳細については、[Windows.Media.Ocr名前空間](https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.ocr.aspx)を参照してください。あなたの答えは –

+0

Thxです。 その間、私は間違いを見つけました。問題は、SoftwareBitmapをWriteableBitmapに変換することでした。後で解決策を投稿します。 また、私の画像のOCRで1桁の数字を特定できませんでした。テキストを「2」から「Raum 2」に変更し、すべて正常に動作します。 –

答えて

1

問題がSoftwareBitmap WriteableBitmap ^ビット1 = REF新しいWriteableBitmap(croppedImage.cols、croppedImage.rows)にWriteableBitmapの変換でした。 //ピクセルにアクセスする IBuffer^buffer = bit1-> PixelBuffer; unsigned char * dstPixels;

 // Obtain IBufferByteAccess 
     ComPtr<IBufferByteAccess> pBufferByteAccess; 
     ComPtr<IInspectable> pBuffer((IInspectable*)buffer); 
     pBuffer.As(&pBufferByteAccess); 

     // Get pointer to pixel bytes 
     pBufferByteAccess->Buffer(&dstPixels); 
     memcpy(dstPixels, croppedImage.data, croppedImage.step.buf[1] * croppedImage.cols*croppedImage.rows); 
     SoftwareBitmap^ bit2= ref new SoftwareBitmap(BitmapPixelFormat::Bgra8, croppedImage.cols, croppedImage.rows); 
     //SoftwareBitmap^ bit2 = 
     bit2->CopyFromBuffer(bit1->PixelBuffer); 
関連する問題