tesseract-ocr 文字辨識
首先先感謝Google ~ 開放了這麼有趣又簡單操作工具
用Google用繁體搜尋 , 感覺台灣玩的有點不熱絡 , 讓我感覺有點失望的說
不過 tesseract-ocr 資料跟其他應用,還是不少的說
環境:
OS: Win 7 64
VC++ 2008
1.先到此網站下載 tesseract-ocr-setup-3.02.02.exe 安裝
https://code.google.com/p/tesseract-ocr/downloads/list
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16. 測試看看 tesseract-ocr 原本的自己exe檔案
17. 查看版本
18. 測試看看英文包
19.測試看看中文包
20.用中文包來測試看看 ~ 英文跟中文夾雜的圖片 ~沒想到還可以測試成功
21.
API參考資料:
http://zdenop.github.io/tesseract-doc/index.html
簡單的程式碼:
#include <baseapi.h>
#include <allheaders.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string UTF8ToBig5(const std::string& strUTF8);
int main(void){
tesseract::TessBaseAPI api;
api.Init("", "chi_tra", tesseract::OEM_DEFAULT);
api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
api.SetOutputName("out");
char image[256]="4.tif";
PIX *pixs = pixRead(image);
STRING text_out;
api.ProcessPages(image, NULL, 0, &text_out);
FILE *output;
output=fopen("test.txt","wb");
fwrite( text_out.string(), 1, text_out.length(), output );
fclose(output);
string Text01 = UTF8ToBig5(text_out.string());
cout<<"輸出文字:"<<Text01.c_str()<<endl;
system("pause");
}
string UTF8ToBig5(const std::string& strUTF8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
unsigned short * wszBig5 = new unsigned short[len + 1];
memset(wszBig5, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0,LPCSTR(strUTF8.c_str()), -1, LPWSTR(wszBig5), len);
len = WideCharToMultiByte(CP_ACP, 0,LPCWSTR(wszBig5), -1, NULL, 0, NULL, NULL);
char *szBig5 = new char[len + 1];
memset(szBig5, 0, len + 1);
WideCharToMultiByte(CP_ACP,0, LPCWSTR(wszBig5), -1, szBig5, len, NULL, NULL);
std::string strTemp(szBig5);
delete[]szBig5;
delete[]wszBig5;
return strTemp;
}
您好,我也正在使用tesseract寫辨識的相關程式,想請教您tesseract是否只能在VS2008下運作,因為我用VS2010無法運作。
回覆刪除我沒試過VS2010
回覆刪除照理說 ~ 只要正確引入檔案跟設定就可以用了
給你網址參考看看:
http://stackoverflow.com/questions/8153569/tesseract-ocr-how-to-includ-baseapi-h
http://tpgit.github.io/UnOfficialLeptDocs/vs2008/vs2010-notes.html
main.obj : error LNK2019: 無法解析的外部符號 _pixRead 在函式 _main 中被參考
回覆刪除不好意思又來請教您,我一些相關設定完之後,會跳出這樣的訊息,看了網路相關文章之後還是無解,想請問您知道這要怎麼解決嗎?
參考看看 ~ coka 部落格的:
回覆刪除http://coka.popcat.net/2011/11/error-lnk2019-unresolved-external-symbol.html
我猜應該是第三個 library 檔案中,沒有找到函式名稱
1>main.obj : error LNK2019: 無法解析的外部符號 "public: virtual __thiscall tesseract::TessBaseAPI::~TessBaseAPI(void)" (??1TessBaseAPI@tesseract@@UAE@XZ) 在函式 _main 中被參考
回覆刪除1>main.obj : error LNK2019: 無法解析的外部符號 "public: __thiscall STRING::~STRING(void)" (??1STRING@@QAE@XZ) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: char const * __thiscall STRING::string(void)const " (?string@STRING@@QBEPBDXZ) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: int __thiscall STRING::length(void)const " (?length@STRING@@QBEHXZ) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: bool __thiscall tesseract::TessBaseAPI::ProcessPages(char const *,char const *,int,class STRING *)" (?ProcessPages@TessBaseAPI@tesseract@@QAE_NPBD0HPAVSTRING@@@Z) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: __thiscall STRING::STRING(void)" (??0STRING@@QAE@XZ) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 _pixRead 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: void __thiscall tesseract::TessBaseAPI::SetOutputName(char const *)" (?SetOutputName@TessBaseAPI@tesseract@@QAEXPBD@Z) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: void __thiscall tesseract::TessBaseAPI::SetPageSegMode(enum tesseract::PageSegMode)" (?SetPageSegMode@TessBaseAPI@tesseract@@QAEXW4PageSegMode@2@@Z) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: __thiscall tesseract::TessBaseAPI::TessBaseAPI(void)" (??0TessBaseAPI@tesseract@@QAE@XZ) 在函式 _main 中被參考
1>main.obj : error LNK2019: 無法解析的外部符號 "public: int __thiscall tesseract::TessBaseAPI::Init(char const *,char const *,enum tesseract::OcrEngineMode,char * *,int,class GenericVector const *,class GenericVector const *,bool)" (?Init@TessBaseAPI@tesseract@@QAEHPBD0W4OcrEngineMode@2@PAPADHPBV?$GenericVector@VSTRING@@@@3_N@Z) 在函式 "public: int __thiscall tesseract::TessBaseAPI::Init(char const *,char const *,enum tesseract::OcrEngineMode)" (?Init@TessBaseAPI@tesseract@@QAEHPBD0W4OcrEngineMode@2@@Z) 中被參考
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 無法解析的外部符號 _WinMain@16 在函式 ___tmainCRTStartup 中被參考
我用VS2010跑出現這個,請問哪裡出了問題,上面步驟都照做了
試試看這篇
刪除https://www.dotblogs.com.tw/timchang/2012/11/21/84955
請問為什麼試了中文兩行以上的圖會辨識錯誤?英文也是
回覆刪除可以提供詳細的流程跟錯誤的訊息嗎?
回覆刪除我截取用
回覆刪除民國100年10月10日
A1001010BCDEFG
那張圖
結果出來變
ˊ葷葷玉宣)宣盲)寞]羃羃I羃 l0 日
圖片的檔案格式是tif嗎?
刪除試試看標楷體跟新細明體兩種字體 ~ 然後 字體的大小
先試試看從8 , 然後慢慢試到14
藉此查看他的辨識率 , 因為影響因素很多種
要一一的去調整或者訓練自己的語言包
請問可以同時使用多種語言跑程式嗎?
回覆刪除api.Init("", "chi_tra", tesseract::OEM_DEFAULT);表示中文封包
api.Init("", "eng", tesseract::OEM_DEFAULT);表示英文封包
要同時使用程式要怎麼寫?
我記得中文包應該也可以辨識英文吧!!!
回覆刪除就像我倒數第二張圖片
如果說要混者其他語言用的話 ~ 最好把兩種語言訓練成一個包!!