2016-05-15 6 views
0

У меня есть проблемы с обнаружением цифр/цифр в изображении с помощью OCR-Engine Windows UWP из C++/CX. мне нужно определить количество в следующем ImageКак обнаружить числа/цифры с помощью встроенного класса OcrEngine

Digit

Я попробовал его с помощью встроенного метода для Windows 10 UWP: 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 
} 

Моя проблема сейчас , что вставленная строка в findNumber всегда равна нулю. Я пытался использовать разные изображения в качестве входных данных, но всегда имел одинаковый результат: NULL.

  1. Есть ли более простой способ получить цифры на этих изображениях в C++/CX?
  2. В чем может быть проблема? Преобразование изображения?
+0

Существует официальный [образец OCR в GitHub] (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 на моем изображении. Я изменил текст с «2» на «Raum 2», и все работает отлично. –

ответ

1

Проблема была конверсия WriteableBitmap к^bit1 = исх новый WriteableBitmap SoftwareBitmap WriteableBitmap (croppedImage.cols, croppedImage.rows); // Получить доступ к пикселям 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^