hirax.net::inside out::2008年12月10日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2008年11月 を読む << 2008年12月 を読む >> 2009年1月 を読む

2008-12-10[n年前へ]

Office付属OCR機能で「板書画像を一発でPPTファイルにするRubyスクリプト」を作る  share on Tumblr 

 「ホワイトボード前で打ち合わせをして、打ち合わせ終了時にホワイトボードに書いた板書をプリントアウトして、後でパワーポイント資料を作り直す」といった作業をしたことがある人は多いと思います。あるいは、(印刷機能を持ったホワイトボードは高いですから)「ホワイトボードに板書した内容をデジカメやケータイで撮影しておいて、撮影画像をプリントアウトした後にパワーポイント資料を作ったり」、「撮影画像をモニタ上で眺めながらパワーポイントを作ったりした」ことがある人も多いのではないでしょうか。

 そんな人、そんな時のために、Office 2003以降に着いてくる"Microsoft Office Document Imaging"のOCR機能を使って(デフォルト設定ではインストールされないかもしれません)、「板書画像を一発でPPTファイルにするRubyスクリプト」を作ってみました。作ったもの一式をとりあえずここに置いておきます

 たとえばこんな手書きの板書があったら

ruby imgOCRppt.rb rakugaki.jpg
 といったようにimgOCRppr.rbスクリプトを呼ぶと、rakugaki.pptというファイルができあがります。この例では私のラクガキ手書き文字が汚いせいで、ずいぶんと文字化けしていますが、達筆な人が描いた板書なら、きちんとしたパワーポイント(PPT)ファイルが(もしかしたら)生成されるかもしれません。

 スクリプトの内容は、

require "win32GuiTest"

img=ARGV[0]
Win32GuiTest.img2PPTbyOCR( img.sub(/\.jpg$/i,'.ppt'),
         Win32GuiTest.bmp2texts(img), 
         img.sub(/\..?$/i,'') )
とい風で、"img2PPTbyOCR"と"bmp2texts"という2つのメソッドからできています。

 ちなみに、画像からテキストを抽出するOCR部分("bmp2texts")のRubyソースは、次のようになっています。

def Win32GuiTest.bmp2texts(file)
  doc=WIN32OLE.new('MODI.Document')
  doc.Create(file)
  doc.OCR(17, false, false) # Japanese
  layout=doc.Images(0).Layout
  str=doc.Images(0).layout.Text
  doc.Close
  return str
end
 そして、この後、 Win32GuiTest.img2PPTbyOCR で画像ファイル名をスライドのタイトルにして、画像ファイルからOCRで抽出されたテキストをスライドのコンテンツ・テキストとして入力・保存する、という内容になっています。