新バージョンの認識メソッド
従来のmrecognizeメソッドと比較して以下の点を改良した。
  1. 認識アルゴリズムの改良
  2. 言語辞書による言語処理機能を大幅に改良
  3. 濁点・半濁点の判別性能をアップ
  4. 偏旁冠足を認識することによる自動的な生き別れの検出
  5. 括弧の対応づけの自動処理
  6. アンダーライン処理を追加することが可能(デフォルトではアンダーライン処理なし)


// 1段落認識
		int mrecognizecluster(unsigned long chartype1,unsigned long chartype2);
		入力
		unsigned long chartype1;			文字種フィルター1
											CHAR_SET_ALL,CHAR_SET_ENGLISH,CHAR_SET_NUMBERALL
											などの組み合わせ
		unsigned long chartype2;			文字種フィルター2
											0あるいはCHAR_SET_ASCIIを指定
			chartype1で指定した文字種以外は結果に入らない
			chartype2でCHAR_SET_ASCIIを指定すると、さらにアスキー文字だけを対象に認識する。
			認識率や認識速度も上がる
		返り値
		0.................正常終了
		MEMORY_SHORTAGE...メモリ不足
// アンダーライン処理追加
		void msetunderlineflag(int flag = 1);
		入力
			int		flag;					0あるいは1(1でアンダーライン処理を実行するようになる)


#include	"ocrdef.h"
#include	"ocrco.h"
#include	"cjocrstock.h"
#include	"cjocrdict98.h"
#include	"cjocrpat98.h"
#include	"cjocrrec98.h"
#include	"cjocrline98.h"
#include	"cjocrlang.h"
#include	"cjocrblock.h"
#include	"errcode.h"
...
....
// パターンクラス作成
CJocrPattern*	pattern = new CJocrPattern;
int ret = pattern->mallocmemory();
if(ret < 0) {
	printf("パターンクラスメモリ確保エラー");
	delete pattern;
	exit(1);
}
// 辞書クラス作成
CJocrDict* pjocrdict = new CJocrDict;
pjocrdict->msetsystemdict("c:\\dic\\feature\\system");
pjocrdict->msetsystemdict("c:\\dic\\feature\\systemfat");
pjocrdict->msetuserdict("c:\\dic\\feature\\user");
ret = pjocrdict->mloaddict();
if(ret < 0) {
	printf("エラー");
	delete pjocrdict;
	delete pattern;
	exit(1);
}
// 1文字認識クラス作成
CJocrRecognize* precognize = new CJocrRecognize;
precognize->msetpatter(pattern);
precognize->msetdict(pjocrdict);
// 1文字認識クラスの初期化
ret = precognize->mallocmemory();
if(ret < 0) {
	printf("エラー");
	delete precognize;
	delete pjocrdict;
	delete pattern;
	exit(1);
}
// 言語処理付き1行認識クラス作成
CJocrLang* pjocrlang = new CJocrLang;
pjocrlang->msetpatter(pattern);
pjocrlang->msetrecognize(precognize);
// 1段落認識クラス作成
CJocrBlock* pjocrblock = new CJocrBlock;
pjocrblock->msetlang(pjocrlang);
pjocrblock->msetprocess(PREPROCESS_INSIDE);	// 枠に接触するプリミティブを除く
// ドキュメントの設定
pjocrblock->msetdocument(mdata,mwidth,mheight);
pjocrblock->msetdpi(400);		// 解像度400dpi
// 段落の設定
// ブロックの設定
OCRBlock	ocrblock;
ocrblock.baseline.x1 = 100;
ocrblock.baseline.y1 = 100;
ocrblock.baseline.x2 = 300;
ocrblock.baseline.y2 = 200;
ocrblock.thickness = 100;
// ベースラインは(100,100)-(300,200)
// 行高は100
// 背景0
// 横書きのブロックを設定
pjocrblock->msetblock(ocrblock,atan2(ocrblock.baseline.y2 - ocrblock.baseline.y1,ocrblock.baseline.x2 - ocrblock.baseline.x1),0,0);
// 正規化画像の作成
ret = pjocrblock->mregularize();
if(ret < 0) {
	printf("エラー");
	delete pjocrblock;
	delete pjocrlang;
	delete precognize;
	delete pjocrdict;
	delete pattern;
	exit(1);
}
// 1段落認識
pjocrblock->msetunderlineflag(1);							// アンダーライン処理を行う場合
ret = pjocrblock->mrecognizecluster(CHAR_SET_ALL,0);		// 全文字種を対象に認識
if(ret < 0) {
	printf("エラー");
	delete pjocrblock;
	delete pjocrlang;
	delete precognize;
	delete pjocrdict;
	delete pattern;
	exit(1);
}

// 認識結果取得
int resultnum;
mgetresult(resultnum,NULL);
// result×sizeof(OCRResult)のバッファを確保する
OCRResult* pocrresult = malloc(sizeof(OCRResult) * resultnum);
if(pocrresult) {
	pjocrblock->mgetresult(resultnum,pocrresult);
}
// pocrresult[i].cand[0].codeには各文字の認識結果あるいは
// 行区切りとしての改行コード0x0d,0x0aが入っている。
....
...
..
delete pjocrblock;
delete pjocrlang;
delete precognize;
delete pjocrdict;
delete pattern;