ページ 11

Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 03:22
by SBSK
OCRに興味があってこちらのページを見つけました。
http://homepie.blog.shinobi.jp/vc--/tes ... F%E3%82%8B

ほとんどやってることは変わらないのですが(ライブラリをスタティックで使うかダイナミックで使うかの違いくらい?)
実行してみると、liblept168.dllがないと怒られました。
http://gyazo.com/f5fbaea0d80cc3dc7dc7f6defa5a0ab5

確かにliblept168.dllというファイルは(systemフォルダ内にも)持っていません。

一応ソースや実行ファイル一式をアップロードしておいたので、見てもらえませんか?
http://firestorage.jp/download/85249d5f ... aa4e3b97de
ダウンロードパス:0603

よろしくお願いします。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 04:25
by rascal
こんばんは
調べてみました

http://www.solvusoft.com/ja/files/%E4%B ... pt168-dll/

leptonicaとよばれる製品の一部らしいです

Leptonica C Image Processing Libraryとありました

leptonica

調べた結果ですので間違いがあるかもしれません
その場合はご容赦いただけましたらと思います

Re: Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 17:19
by SBSK
rascal さんが書きました:こんばんは
調べてみました

http://www.solvusoft.com/ja/files/%E4%B ... pt168-dll/

leptonicaとよばれる製品の一部らしいです

Leptonica C Image Processing Libraryとありました

leptonica

調べた結果ですので間違いがあるかもしれません
その場合はご容赦いただけましたらと思います
わざわざありがとうございます。
早速、ダウンロードしてみようと思います。

それと、私が書いたソースの書き方は正しいでしょうか?

Re: Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 17:33
by rascal
私自身 まだまだ未熟なため人様のプログラムを正しいか正しくないかを言える立場にまだありませんので
そのあたりはここの掲示板の副管理人様方にお願いしてみてはいかがでしょうか?

少し気になった点だけ
フルパス指定でソースにファイルへのアクセスが記述されていますが 同じ環境でないと実行できないので
ほかの人に渡す予定があったり 配布する予定があるのであれば 相対パスのほうがよろしいかと思います

Re: Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 17:45
by SBSK
rascal さんが書きました:私自身 まだまだ未熟なため人様のプログラムを正しいか正しくないかを言える立場にまだありませんので
そのあたりはここの掲示板の副管理人様方にお願いしてみてはいかがでしょうか?

少し気になった点だけ
フルパス指定でソースにファイルへのアクセスが記述されていますが 同じ環境でないと実行できないので
ほかの人に渡す予定があったり 配布する予定があるのであれば 相対パスのほうがよろしいかと思います
そうでしたか。ありがとうございます。
副管理人様方が来るまで待ってみます。

一応、配布する予定などないのでフルパスにしたのですが、
配布する際は相対に直してから配布します。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月10日(土) 19:15
by Poco
関数の仕様が良くわかりませんが、ProcessPages()が文字列を取得するものであれば、
引数に渡すべきはchar型の変数(output)ではなく、charの配列です。
文字を取得するものであれば、printf("%s",output)はprintf("%c",output)となるべきです。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月11日(日) 20:02
by SBSK
Poco さんが書きました:関数の仕様が良くわかりませんが、ProcessPages()が文字列を取得するものであれば、
引数に渡すべきはchar型の変数(output)ではなく、charの配列です。
文字を取得するものであれば、printf("%s",output)はprintf("%c",output)となるべきです。
配列になっていなかったですか?
すみません、凡ミスでした。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月11日(日) 20:04
by SBSK
関数仕様がわからないとのことなので、プロトタイプ宣言をしているヘッダーファイルをアップしときます。

今、出先なので、帰宅後すぐにやります。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 21:09
by SBSK
大変遅くなりました。
http://firestorage.jp/download/f17f1c94 ... f7a567eefb
こちらが関数のプロトタイプ宣言しているヘッダーファイルです。
よろしくお願いします。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 21:24
by Poco
これコンパイル通りました?
ProcessPages()はSTRING型のポインタを要求しています。
なぜchar型変数のポインタを渡しているのでしょうか?
#SBSKさんが参考にされたWebページもSTRING型のポインタを渡しているのですが。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 21:37
by SBSK
Poco さんが書きました:これコンパイル通りました?
ProcessPages()はSTRING型のポインタを要求しています。
なぜchar型変数のポインタを渡しているのでしょうか?
#SBSKさんが参考にされたWebページもSTRING型のポインタを渡しているのですが。
C++ではなく、C言語で作成しているので、STRINGではなくchar型にしました。
コンパイルは通りました。

現在、Init関数が呼び出せないようで、26行目の
「Function Init error!!」
という文字が出て処理が終わってしまいます。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 22:29
by Poco
GetProcAddress()で取得できるのは関数のアドレスであって、クラスの非staticなメンバ変数は取得できないのでは?

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 22:35
by SBSK
Poco さんが書きました:GetProcAddress()で取得できるのは関数のアドレスであって、クラスの非staticなメンバ変数は取得できないのでは?
同じようにProcessPagesも取得できません。
こっちはクラスのメンバではなく関数なので取得できるはずなのですが・・・

エラーコード的には127のプロシージャが見つからないとのことでした。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 22:46
by Poco
訂正します。
ProcessPages()もInit()と同様、TessBaseAPIクラスのメンバ変数です。
同じ理由で、アドレスの取得に失敗していると思います。
#私ならC++リンケージを持つDLLは、SBSKさんのように明示的リンクではなく、暗黙的リンクで利用します。

C++ではオーバロードがあるため、関数名だけでは一意に実体が定まりません。
件のdllのエクスポート情報ではProcessPages()は以下のようになっています。
151 96 00013930 ?ProcessPage@TessBaseAPI@tesseract@@QAE_NPAUPix@@HPBD1HPAVSTRING@@@Z
152 97 00013C00 ?ProcessPages@TessBaseAPI@tesseract@@QAE_NPBD0HPAVSTRING@@@Z
序数が151,152となっているので、序数指定で関数のアドレスが取得可能だと思います。
#やったことないので上手くいくか分かりません。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月12日(月) 23:35
by SBSK
Poco さんが書きました:訂正します。
ProcessPages()もInit()と同様、TessBaseAPIクラスのメンバ変数です。
同じ理由で、アドレスの取得に失敗していると思います。
#私ならC++リンケージを持つDLLは、SBSKさんのように明示的リンクではなく、暗黙的リンクで利用します。
ということは、DLLで使うより、LIBでで使った方がいいということでしょうか?
仮の話として、どうしてもDLLで使いたい、またはDLLでなければならない場合はどうすればよいのでしょうか?
それともDLLでは使うことはできないのでしょうか?
DLLが用意されてるということは使うこともできると思うのですが・・・

Re: Tesseract OCRライブラリについて

Posted: 2014年5月13日(火) 00:06
by Poco
DLLを使用する方法として明示的リンク、暗黙的リンクがあります。
どちらも動的リンクです。実行時にDLLが必要です。
お使いの検索エンジンで、「DLL 明示 暗黙」をキーワードに検索をかければいろいろわかると思います。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月13日(火) 00:25
by SBSK
Poco さんが書きました:DLLを使用する方法として明示的リンク、暗黙的リンクがあります。
どちらも動的リンクです。実行時にDLLが必要です。
お使いの検索エンジンで、「DLL 明示 暗黙」をキーワードに検索をかければいろいろわかると思います。
試しにやってみました。
ヘッダーファイルのところで構文エラーばかり出ました。
C++用のようなので、拡張子をcからcppにしたところエラーはなくなりました。
私はC++をやったことがないので、C言語縛りでやりたいのですが、それにはヘッダーを自分で書き換える必要があるのだと思いますが、
コンパイル済みのdllはヘッダーが書き換わっても問題ないのでしょうか?

こういう場合はみなさんどうしているのですか?

Re: Tesseract OCRライブラリについて

Posted: 2014年5月13日(火) 00:45
by Poco
C言語で書こうとしているときにC++向けのライブラリを使用するのが間違いかと。
私なら代替ライブラリ探します。

#ただ、このライブラリはC言語向けのAPIも用意していますよ。
#APIリファレンスを見つけることはできませんでしたが、capi.hがそれに該当するんじゃないでしょうか。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月13日(火) 01:11
by SBSK
Poco さんが書きました:C言語で書こうとしているときにC++向けのライブラリを使用するのが間違いかと。
私なら代替ライブラリ探します。

#ただ、このライブラリはC言語向けのAPIも用意していますよ。
#APIリファレンスを見つけることはできませんでしたが、capi.hがそれに該当するんじゃないでしょうか。
C言語向けのAPIが用意してあったのは気付きませんでした。
そちらを使います。
ただ、リファレンスがないとはどういうことでしょう?
手探りで使ってみるしかないのでしょうか?

Re: Tesseract OCRライブラリについて

Posted: 2014年5月13日(火) 01:15
by Poco
手探りでしょうね。
#baseapi.hのコメントが参考になるとは思いますが。

Re: Tesseract OCRライブラリについて

Posted: 2014年5月14日(水) 16:21
by SBSK
Poco さんが書きました:手探りでしょうね。
#baseapi.hのコメントが参考になるとは思いますが。
なんとか手探りで文字を認識し、表示させるところまではできました。
お世話になりました。