Wykonaj OCR przy użyciu C++

Technologia OCR (Optical Character Recognition) umożliwia odczytywanie i konwertowanie tekstu na obrazach lub zeskanowanych dokumentach do postaci czytelnej maszynowo. OCR ma różne zastosowania, które obejmują odczytywanie kodów z kuponów, edytowanie tekstu, sklepy samoobsługowe, konwertowanie drukowanych dokumentów na formaty cyfrowe i tak dalej. Na rynku dostępne są różne narzędzia i biblioteki OCR, jednak kluczowym czynnikiem jest wiarygodność wyników OCR. W tym artykule pokażę, jak stworzyć własną aplikację OCR i programowo konwertować obrazy na tekst za pomocą C++.

Biblioteka C++ OCR do konwersji obrazu na tekst

Aspose oferuje potężną bibliotekę OCR C++, która wykorzystuje głębokie uczenie się, aby zapewnić bardziej niezawodne i prawie dokładne wyniki OCR. Możesz pobrać pliki biblioteki oraz przykładowy projekt z GitHub.

Konwertuj stronę obrazu na tekst za pomocą C++

Najpierw sprawdźmy scenariusz, w którym obraz zawiera tekst wielowierszowy. Może tak być w przypadku zeskanowanej książki, w której każda strona książki zawiera kilka wierszy tekstu. Poniżej przedstawiono kroki konwersji obrazu na tekst w tym przypadku.

  • Ustaw ścieżkę obrazu w zmiennej łańcuchowej.
  • Przygotuj bufor do przechowywania wyników OCR.
  • Wykonaj OCR używając funkcji aspose::ocr::page(const char \imagepath, wchart \buffer, sizet buffersize).
  • Wydrukuj wyniki lub zapisz je w pliku.

Poniższy przykładowy kod pokazuje, jak wykonać rozpoznawanie OCR i przekonwertować obraz na tekst przy użyciu języka C++.

std::string image_path = "sample.png";

// Przygotuj bufor dla wyniku (w symbolach, len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Wykonaj OCR
size_t size = aspose::ocr::page(image_path.c_str(), buffer, len);

//Wydrukuj wynik
std::wcout << buffer << L"\n"; 

Wykonaj OCR dla obrazu z pojedynczą linią przy użyciu C++

W poprzednim przykładzie przekonwertowaliśmy obraz mający wiele linii tekstu. Może się jednak zdarzyć, że obraz zawiera tylko jeden wiersz tekstu, taki jak podpis lub slogan. Poniżej przedstawiono kroki umożliwiające wykonanie rozpoznawania OCR w takich przypadkach.

  • Użyj zmiennej łańcuchowej, aby ustawić ścieżkę obrazu.
  • Utwórz bufor do przechowywania wyników OCR.
  • Wykonaj OCR używając funkcji aspose::ocr::line(const char \imagepath, wchart \buffer, sizet buffersize).
  • Zapisz lub wydrukuj wyniki OCR.

Poniższy przykładowy kod pokazuje, jak wykonać rozpoznawanie OCR na obrazie z pojedynczym wierszem tekstu przy użyciu języka C++.

std::string image_path = "sample_line.jpg";

// Przygotuj bufor dla wyniku (w symbolach, len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Wykonaj OCR
size_t size = aspose::ocr::line(image_path.c_str(), buffer, len);

//Wydrukuj wynik
std::wcout << buffer << L"\n";

Konwertuj określony obszar obrazu na tekst w C++

Możesz także dostosować interfejs API, aby ograniczyć obszar obrazu, w którym chcesz wykonać rozpoznawanie OCR. W takim przypadku możesz utworzyć prostokąt na obrazie, aby uzyskać dostęp do żądanego obszaru. Poniżej przedstawiono kroki, aby wyodrębnić tekst z określonego obszaru obrazu.

  • Ustaw ścieżkę obrazu w zmiennej łańcuchowej.
  • Przygotuj bufor do przechowywania wyników OCR.
  • Wykonaj rozpoznawanie OCR przy użyciu funkcji aspose::ocr::pagerect(const char \imagepath, wchart \buffer, sizet buffersize, int x, int y, int w, int h).
  • Wydrukuj wyniki OCR.

Poniższy przykładowy kod pokazuje, jak przekonwertować określony obszar obrazu na tekst przy użyciu języka C++.

std::string image_path = "sample_line.jpg";

// Przygotuj bufor dla wyniku (w symbolach, len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

int x = 138, y = 352, w = 2033, h = 537;

// Wykonaj OCR lub wybrany obszar
size_t size = aspose::ocr::page_rect(image_path.c_str(), buffer, len, x, y, w, h);

//Wydrukuj wynik
std::wcout << buffer << L"\n";

Wniosek

W tym artykule nauczyłeś się, jak używać biblioteki OCR Aspose do konwersji obrazów na tekst w C++. Widzieliśmy, jak wykonać OCR na obrazie z jedną lub wieloma liniami tekstu, a także przeczytać tekst z określonego obszaru obrazu. Możesz dowiedzieć się więcej o Aspose.OCR for C++, korzystając z dokumentacji.

Zobacz też