如何在日语窗口操作系统中编码日语文本?

我正在使用 Tesseract 来阅读日语文本。我从 OCR 收到以下文本。


日付 請求書


C++代码


 extern "C" _declspec(dllexport) char* _cdecl Test(char* imagePath)

    {

        char *outText;


        tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();

        // Initialize tesseract-ocr with English, without specifying tessdata path

        if (api->Init("D:\\tessdata", "jpn", tesseract::OcrEngineMode::OEM_TESSERACT_ONLY))

        {

            fprintf(stderr, "Could not initialize tesseract.\n");           

        }


        api->SetPageSegMode(tesseract::PageSegMode::PSM_AUTO);      

        outText = api->GetUTF8Text();


        return outText;

    }

C#


[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]

        public static extern string Test(string imagePath);


        void Tessrect()

        {

            string result = Test("D:\\japan4.png");

            byte[] bytes = System.Text.Encoding.Default.GetBytes(result);

            MessageBox.Show(System.Text.Encoding.UTF8.GetString(bytes));

        }

输入文件:、

http://img1.mukewang.com/617552df0001051d02270159.jpg

上面的代码在窗口英语中工作正常。但它在窗口日语中不起作用。它在 windows 的 Japanes 操作系统中给出了错误的输出。

任何人都可以指导我如何正确使用 Japanes Window 吗?


冉冉说
浏览 190回答 3
3回答

万千封印

您必须首先从 imagePath 制作一个图像对象。就我而言,这是通过使用著名的 opencv 来完成的。然后,使用 SetImage 功能。void detectJpn(cv::Mat& img){&nbsp; &nbsp; char *outText;&nbsp; &nbsp; // Create Tesseract object&nbsp; &nbsp; tesseract::TessBaseAPI *ocr = new tesseract::TessBaseAPI();&nbsp; &nbsp; ocr->Init(NULL, "jpn", tesseract::OEM_TESSERACT_ONLY);&nbsp; &nbsp; // Set Page segmentation mode to PSM_AUTO (3)&nbsp; &nbsp; ocr->SetPageSegMode(tesseract::PSM_AUTO);&nbsp; &nbsp; ocr->SetImage((uchar*)img.data, img.size().width, img.size().height, img.channels(), img.step1());&nbsp; &nbsp; // Run Tesseract OCR on image&nbsp; &nbsp; outText = ocr->GetUTF8Text();&nbsp; &nbsp; // print recognized text&nbsp; &nbsp; std::cout << outText << std::endl; // Destroy used object and release memory ocr->End();&nbsp; &nbsp; //ocr->Clear();&nbsp; &nbsp; //ocr->End();&nbsp; &nbsp; delete ocr;&nbsp; &nbsp; ocr = nullptr;}int main(int argc, char *argv[]){&nbsp; &nbsp; cv::Mat img = imread(argv[1], cv::IMREAD_UNCHANGED);&nbsp; &nbsp; detectJpn(img);&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; return 0;}

皈依舞

您正在向非 UTF-8 的窗口发送 UTF-8 文本。您需要在显示之前进行转换这是可能导致问题的代码(因为它尝试使用您无法控制的默认系统编码);byte[] bytes = System.Text.Encoding.Default.GetBytes(result);您是否尝试在那里使用 Encoding.UTF8 ?如果单独这样做不起作用,请尝试在下面的行中将 Encoding.UTF8 更改为 Encoding.Default。
打开App,查看更多内容
随时随地看视频慕课网APP