2010/06/28(月)16:42
Excel VBA 画像のトリミングとOCR 1
このプログラムは『Excel2003』以降で使用できます。
このプログラムについて
このプログラムは画像をトリミング(切り取り)し、
その画像をOCR(文字変換)するソフトです。
ただし、トリミング後の図に含まれる文字数が5文字未満だと、
日本語変換が「OCRエラー」になる可能性があります。
まず初めにライブラリの参照設定をすること
・メニューの ツール > マクロ > Visual Basic Editor でVisualBasic画面を起動
・ VisualBasic画面の メニューの ツール > 参照設定で参照設定を開く
・□Microsoft Office Document Imaging 11.0 Type Library ←にチェック
つづけてVBAでフォームを作成
・ VisualBasic画面の メニューの 挿入 > ユーザーフォーム
(フォームは挿入するだけでOK)
シートの操作
・どのシートでも良いので「設定」とシート名をつける。
・「設定」シートの中にボタンを作成する。(マクロ起動用)
設定シートについて
セルE2:OCR実行中にOCR解析中の文字が入力されます。
セルC3:画像のフォルダのパスを入力。
空白の場合はこのExcelと同じフォルダをデフォルトの参照場所とします。
セルB5~I5:この行は見出しです。とりあえず何か入力してください。
(何か入力されてれば問題ない)
セルB6:取得したい場所名など自由に入力してください。
(ここに何か文字が入力されてれば下記7項目を取得する)
セルC6:OCR判定の型です。「英数字」「日本語」のどちらかを記入して下さい。
セルD6:トリミングの上位置(上から記入ピクセルまでを削除)
セルE6:トリミングの下位置(下から記入ピクセルまでを削除)
セルF6:トリミングの左位置(左から記入ピクセルまでを削除)
セルG6:トリミングの右位置(右から記入ピクセルまでを削除)
セルH6:結果を記入するシート名
セルI6:結果を記入するセル番地。(セルH6に記入したシート上)
コードのコピペ
・メニューの ツール > マクロ > Visual Basic Editor でVisualBasic画面を起動
・ブログのコードをコピーし 設定シート へ貼り付け。
トリミングのサイズを調べる方法
・まずは一度、[トリミング&OCR実行]ボタンで実行し元画像を選択して下さい。
(結果は気にせずに)
・このExcelと同フォルダに「image1.bmp」が作成されます。
・このExcelを一度閉じて、新たにExcelを開きます。
・メニューの 挿入 > 図 > ファイル このExcelと同フォルダの「image1.bmp」を選択。
・メニューの ツール > マクロ > 新しいマクロの記述。
・図形のトリミングを手動で行う。
・マクロの停止をクリック。
・メニューの ツール > マクロ > マクロ 記録したマクロを選択し編集。
・Selection.ShapeRange.PictureFormat.CropTop の値がCropTopになる。
・同じようにCropBottom、CropLeft、CropRightの値を記入する。
※1ピクセル=0.75 なので 0.75で割り切れる数字を入力
現在確認されている不具合
・実行後に、図の取り込みや、オートシェープを実行するとフリーズする。
(MODI.DocumentのCreateを実行後から)
対策が思いつかないので、使用後は一度Excelを閉じた方がいい。
開発中のメモ
・一度フォームに取り込みしてから保存してるのは、図を安定させるため。
・あるビットマップでは解像度が71dpiだったのでフォームに取り込みしてから
保存すると96dpiで安定した。
・図をトリミング無しでOCRして、レイアウト情報から場所別に出力も考えたが、
日本語で全部OCRすると数字部の解析率が悪くなる。
・数字部は「英数字」でOCRした方が解析率がかなり高かったので、
トリミング無しは断念した。
(レイアウト情報は取得可能。参考までに設定の隣に出力させてる)
・フォームに、スクロールバー付のフレーム貼り付けて、
中にイメージ貼り付け図を挿入し、フレームの縦横サイズを
テキストボックスの値入力で変更できるようにする。
そうすれば下記の方法でトリミングサイズやレイアウトを
取得できると思うが面倒なので断念。
1.現在表示されてる座標をスクロールバーから取得
2.フレームのサイズを取得