Tesseract OCRライブラリについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
SBSK

Tesseract OCRライブラリについて

#1

投稿記事 by SBSK » 10年前

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

よろしくお願いします。

rascal
記事: 27
登録日時: 10年前

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

#2

投稿記事 by rascal » 10年前

こんばんは
調べてみました

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

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

Leptonica C Image Processing Libraryとありました

leptonica

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

SBSK

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

#3

投稿記事 by SBSK » 10年前

rascal さんが書きました:こんばんは
調べてみました

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

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

Leptonica C Image Processing Libraryとありました

leptonica

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

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

rascal
記事: 27
登録日時: 10年前

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

#4

投稿記事 by rascal » 10年前

私自身 まだまだ未熟なため人様のプログラムを正しいか正しくないかを言える立場にまだありませんので
そのあたりはここの掲示板の副管理人様方にお願いしてみてはいかがでしょうか?

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

SBSK

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

#5

投稿記事 by SBSK » 10年前

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

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

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

Poco
記事: 161
登録日時: 13年前

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

#6

投稿記事 by Poco » 10年前

関数の仕様が良くわかりませんが、ProcessPages()が文字列を取得するものであれば、
引数に渡すべきはchar型の変数(output)ではなく、charの配列です。
文字を取得するものであれば、printf("%s",output)はprintf("%c",output)となるべきです。

SBSK

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

#7

投稿記事 by SBSK » 10年前

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

SBSK

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

#8

投稿記事 by SBSK » 10年前

関数仕様がわからないとのことなので、プロトタイプ宣言をしているヘッダーファイルをアップしときます。

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

SBSK

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

#9

投稿記事 by SBSK » 10年前

大変遅くなりました。
http://firestorage.jp/download/f17f1c94 ... f7a567eefb
こちらが関数のプロトタイプ宣言しているヘッダーファイルです。
よろしくお願いします。

Poco
記事: 161
登録日時: 13年前

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

#10

投稿記事 by Poco » 10年前

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

SBSK

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

#11

投稿記事 by SBSK » 10年前

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

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

Poco
記事: 161
登録日時: 13年前

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

#12

投稿記事 by Poco » 10年前

GetProcAddress()で取得できるのは関数のアドレスであって、クラスの非staticなメンバ変数は取得できないのでは?

SBSK

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

#13

投稿記事 by SBSK » 10年前

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

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

Poco
記事: 161
登録日時: 13年前

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

#14

投稿記事 by Poco » 10年前

訂正します。
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となっているので、序数指定で関数のアドレスが取得可能だと思います。
#やったことないので上手くいくか分かりません。

SBSK

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

#15

投稿記事 by SBSK » 10年前

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

Poco
記事: 161
登録日時: 13年前

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

#16

投稿記事 by Poco » 10年前

DLLを使用する方法として明示的リンク、暗黙的リンクがあります。
どちらも動的リンクです。実行時にDLLが必要です。
お使いの検索エンジンで、「DLL 明示 暗黙」をキーワードに検索をかければいろいろわかると思います。

SBSK

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

#17

投稿記事 by SBSK » 10年前

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

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

Poco
記事: 161
登録日時: 13年前

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

#18

投稿記事 by Poco » 10年前

C言語で書こうとしているときにC++向けのライブラリを使用するのが間違いかと。
私なら代替ライブラリ探します。

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

SBSK

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

#19

投稿記事 by SBSK » 10年前

Poco さんが書きました:C言語で書こうとしているときにC++向けのライブラリを使用するのが間違いかと。
私なら代替ライブラリ探します。

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

Poco
記事: 161
登録日時: 13年前

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

#20

投稿記事 by Poco » 10年前

手探りでしょうね。
#baseapi.hのコメントが参考になるとは思いますが。

SBSK

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

#21

投稿記事 by SBSK » 10年前

Poco さんが書きました:手探りでしょうね。
#baseapi.hのコメントが参考になるとは思いますが。
なんとか手探りで文字を認識し、表示させるところまではできました。
お世話になりました。

閉鎖

“C言語何でも質問掲示板” へ戻る