Thực hiện OCR bằng C++

Công nghệ OCR(Nhận dạng ký tự quang học) cho phép bạn đọc và chuyển đổi văn bản trong hình ảnh hoặc tài liệu được quét sang dạng máy có thể đọc được. OCR có nhiều trường hợp sử dụng khác nhau bao gồm đọc mã từ chứng từ, làm cho văn bản có thể chỉnh sửa được, lưu trữ tự phục vụ, chuyển đổi tài liệu in thành định dạng kỹ thuật số, v.v. Có nhiều công cụ và thư viện OCR khác nhau trên thị trường, tuy nhiên, độ tin cậy của kết quả OCR là yếu tố chính. Trong bài viết này, tôi sẽ chỉ cho bạn cách tạo ứng dụng OCR của riêng bạn và chuyển đổi hình ảnh thành văn bản theo chương trình bằng C++.

Thư viện C++ OCR để chuyển đổi hình ảnh thành văn bản

Aspose cung cấp [thư viện C++ OCR] mạnh mẽ, sử dụng phương pháp học sâu để cung cấp cho bạn kết quả OCR đáng tin cậy hơn và gần chính xác hơn. Bạn có thể tải xuống các tệp thư viện cũng như dự án mẫu từ GitHub.

Chuyển đổi trang hình ảnh thành văn bản bằng C ++

Trước tiên, hãy kiểm tra tình huống trong đó hình ảnh chứa văn bản nhiều dòng. Đây có thể là trường hợp khi bạn quét một cuốn sách trong đó mỗi trang của cuốn sách chứa nhiều dòng văn bản. Sau đây là các bước để chuyển đổi hình ảnh thành văn bản trong trường hợp này.

  • Đặt đường dẫn của hình ảnh trong một biến chuỗi.
  • Chuẩn bị bộ đệm để lưu kết quả OCR.
  • Thực hiện OCR bằng hàm aspose::ocr::page(const char \imagepath, wchart \buffer, sizet buffersize).
  • In kết quả hoặc lưu chúng vào một tệp.

Mẫu mã sau đây cho biết cách thực hiện OCR và chuyển đổi hình ảnh thành văn bản bằng C++.

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

// Chuẩn bị bộ đệm cho kết quả (bằng ký hiệu, len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Thực hiện OCR
size_t size = aspose::ocr::page(image_path.c_str(), buffer, len);

//Kết quả in
std::wcout << buffer << L"\n"; 

Thực hiện OCR cho một hình ảnh với một dòng bằng C ++

Trong ví dụ trước, chúng tôi đã chuyển đổi một hình ảnh có nhiều dòng văn bản. Tuy nhiên, có thể xảy ra trường hợp hình ảnh chỉ chứa một dòng văn bản như chú thích hoặc khẩu hiệu. Sau đây là các bước để thực hiện OCR trong những trường hợp như vậy.

  • Sử dụng biến chuỗi để đặt đường dẫn của hình ảnh.
  • Tạo bộ đệm để lưu kết quả OCR.
  • Thực hiện OCR bằng hàm aspose::ocr::line(const char \imagepath, wchart \buffer, sizet buffersize).
  • Lưu hoặc in kết quả OCR.

Mẫu mã sau đây cho biết cách thực hiện OCR trên hình ảnh bằng một dòng văn bản bằng C++.

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

// Chuẩn bị bộ đệm cho kết quả (bằng ký hiệu, len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Thực hiện OCR
size_t size = aspose::ocr::line(image_path.c_str(), buffer, len);

//Kết quả in
std::wcout << buffer << L"\n";

Chuyển đổi một vùng cụ thể của hình ảnh thành văn bản trong C++

Bạn cũng có thể tùy chỉnh API để giới hạn vùng hình ảnh mà bạn muốn thực hiện OCR. Trong trường hợp này, bạn có thể tạo một hình chữ nhật trên ảnh để truy cập vào khu vực mong muốn. Sau đây là các bước để trích xuất văn bản từ một khu vực cụ thể của hình ảnh.

  • Đặt đường dẫn của hình ảnh trong một biến chuỗi.
  • Chuẩn bị bộ đệm để lưu kết quả OCR.
  • Thực hiện OCR bằng hàm aspose::ocr::pagerect(const char \imagepath, wchart \buffer, sizet buffersize, int x, int y, int w, int h).
  • In kết quả OCR.

Mẫu mã sau đây cho biết cách chuyển đổi một vùng cụ thể của hình ảnh thành văn bản bằng C++.

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

// Chuẩn bị bộ đệm cho kết quả (bằng ký hiệu, 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;

// Thực hiện OCR hoặc khu vực đã chọn
size_t size = aspose::ocr::page_rect(image_path.c_str(), buffer, len, x, y, w, h);

//Kết quả in
std::wcout << buffer << L"\n";

Sự kết luận

Trong bài viết này, bạn đã học cách sử dụng thư viện OCR của Aspose để chuyển đổi hình ảnh thành văn bản trong C++. Chúng ta đã biết cách thực hiện OCR trên một hình ảnh với một hoặc nhiều dòng văn bản cũng như đọc văn bản từ một vùng cụ thể của hình ảnh. Bạn có thể tìm hiểu thêm về Aspose.OCR cho C++ bằng cách sử dụng tài liệu.

Xem thêm