画像化されている文字をテキストに変換する方法


WEB サイトで画像化されている文字があって、ALT もセットされていない画像をテキストにしたいと思ったが、さすがに手入力はだるすぎる・・・(ALTから読み出すのも面倒だが。)

Google drive にアップロードして変換できるというような記事も見たが、いちいち保存してアップロードなんてめんどくさすぎる・・・

画像のURL(は右クリックでコピーされる)からテキストに変換するアプリでも作ろうかと思っていたが、そういえば、Google に OCR 機能があったなと思って調べた。Vision API だ。

画像の URL からファイルをダウンロードして、API に入れればテキストが返ってくるんだろうな、と思ってドキュメントを読んでいると、サンプルコードが提供されていた。

Mac で試してみた。authentication の下に書かれてあるリンクを辿って、Creating the service account のとおりに設定し、落ちてきた json ファイルを保存。シェルから、

sudo pip3 -r requirement.txt
export GOOGLE_APPLICATION_CREDENTIALS=jsonファイルのパス
python3 detect.py text-uri URL

のようにすれば結果が返ってくる。おそらく Windows でも同様で、export のところが環境変数の設定に変わるだけだろう。

テキスト変換しようとしていた画像の変換結果はこうだ。

> python3 detect.py text-uri http://www.e-b-s.co.jp/herseries/img/LP_SLIM/c04_point_pc.png
Texts:

"あなたの食行動(高カロリー嗜好)の有無がわかります。
FTO
FTO
あなたに必要な栄養素が何なのかがわかります。
あなたが太りやすい食べ物の特徴がわかります。
ADRB3 UCPl
あなたに適した運動の種類がわかります。
UCPI
あなたの脂肪のつきやすい部位がわかります。
ADRB3 UCP1
あなたの基礎代謝が高いか、
低いかがわかります
ADRB3UCP1ADRB2
"
bounds: (98,35),(963,35),(963,660),(98,660)

"あなた"
bounds: (98,35),(181,35),(181,62),(98,62)

"の"
bounds: (187,38),(212,38),(212,60),(187,60)

"食"
bounds: (218,35),(243,35),(243,63),(218,63)

"行動"
bounds: (247,35),(303,35),(303,62),(247,62)

"("
bounds: (313,35),(321,35),(321,62),(313,62)

"高"
bounds: (325,35),(351,35),(351,63),(325,63)

"カロリー"
bounds: (357,36),(469,36),(469,61),(357,61)

"嗜好"
bounds: (474,35),(532,35),(532,62),(474,62)

")"
bounds: (535,36),(542,36),(542,62),(535,62)

"の"
bounds: (551,38),(576,38),(576,60),(551,60)

"有無"
bounds: (582,35),(636,35),(636,63),(582,63)

"が"
bounds: (640,37),(667,37),(667,61),(640,61)

"わかり"
bounds: (671,35),(751,35),(751,62),(671,62)

"ます"
bounds: (764,35),(815,35),(815,61),(764,61)

"。"
bounds: (820,55),(828,55),(828,63),(820,63)

"FTO"
bounds: (865,42),(903,42),(903,56),(865,56)

"FTO"
bounds: (928,42),(959,42),(959,56),(928,56)

"あなた"
bounds: (99,155),(181,155),(181,182),(99,182)

"に"
bounds: (188,157),(210,157),(210,180),(188,180)

"必要"
bounds: (216,155),(273,155),(273,182),(216,182)

"な"
bounds: (278,155),(302,155),(302,182),(278,182)

"栄養素"
bounds: (306,155),(392,155),(392,183),(306,183)

"が"
bounds: (397,157),(424,157),(424,180),(397,180)

"何"
bounds: (427,155),(453,155),(453,182),(427,182)

"な"
bounds: (459,155),(482,155),(482,182),(459,182)

"の"
bounds: (487,159),(512,159),(512,180),(487,180)

"か"
bounds: (517,156),(543,156),(543,180),(517,180)

"が"
bounds: (547,157),(574,157),(574,180),(547,180)

"わかり"
bounds: (577,155),(658,155),(658,182),(577,182)

"ます"
bounds: (671,155),(723,155),(723,181),(671,181)

"。"
bounds: (726,175),(733,175),(733,183),(726,183)

"あなた"
bounds: (98,275),(181,275),(181,302),(98,302)

"が"
bounds: (186,276),(214,276),(214,301),(186,301)

"太り"
bounds: (218,275),(267,275),(267,301),(218,301)

"やすい"
bounds: (277,274),(362,274),(362,301),(277,301)

"食べ物"
bounds: (367,274),(452,274),(452,302),(367,302)

"の"
bounds: (456,278),(482,278),(482,299),(456,299)

"特徴"
bounds: (486,274),(542,274),(542,302),(486,302)

"が"
bounds: (546,276),(573,276),(573,301),(546,301)

"わかり"
bounds: (576,275),(657,275),(657,301),(576,301)

"ます"
bounds: (670,274),(722,274),(722,301),(670,301)

"。"
bounds: (725,294),(734,294),(734,303),(725,303)

"ADRB3"
bounds: (866,284),(903,284),(903,292),(866,292)

"UCPl"
bounds: (930,284),(958,284),(958,292),(930,292)

"あなた"
bounds: (99,395),(181,395),(181,422),(99,422)

"に"
bounds: (188,397),(210,397),(210,420),(188,420)

"適し"
bounds: (215,395),(270,395),(270,422),(215,422)

"た"
bounds: (278,396),(301,396),(301,421),(278,421)

"運動"
bounds: (306,395),(363,395),(363,422),(306,422)

"の"
bounds: (367,399),(392,399),(392,420),(367,420)

"種類"
bounds: (396,395),(453,395),(453,422),(396,422)

"が"
bounds: (457,397),(484,397),(484,420),(457,420)

"わかり"
bounds: (487,395),(568,395),(568,422),(487,422)

"ます"
bounds: (581,395),(633,395),(633,421),(581,421)

"。"
bounds: (636,415),(644,415),(644,423),(636,423)

"UCPI"
bounds: (870,403),(897,403),(897,413),(870,413)

"あなた"
bounds: (99,515),(181,515),(181,542),(99,542)

"の"
bounds: (187,519),(213,519),(213,539),(187,539)

"脂肪"
bounds: (216,515),(273,515),(273,542),(216,542)

"の"
bounds: (277,519),(302,519),(302,539),(277,539)

"つき"
bounds: (307,515),(360,515),(360,542),(307,542)

"やすい"
bounds: (367,515),(453,515),(453,541),(367,541)

"部位"
bounds: (457,515),(512,515),(512,542),(457,542)

"が"
bounds: (517,517),(544,517),(544,540),(517,540)

"わかり"
bounds: (547,515),(628,515),(628,541),(547,541)

"ます"
bounds: (641,515),(693,515),(693,541),(641,541)

"。"
bounds: (696,535),(704,535),(704,543),(696,543)

"ADRB3"
bounds: (867,524),(903,524),(903,533),(867,533)

"UCP1"
bounds: (915,524),(955,524),(955,533),(915,533)

"あなた"
bounds: (99,633),(181,633),(181,660),(99,660)

"の"
bounds: (187,636),(212,636),(212,658),(187,658)

"基礎"
bounds: (218,633),(273,633),(273,660),(218,660)

"代謝"
bounds: (277,633),(334,633),(334,660),(277,660)

"が"
bounds: (336,635),(363,635),(363,658),(336,658)

"高い"
bounds: (367,633),(422,633),(422,660),(367,660)

"か"
bounds: (427,634),(453,634),(453,658),(427,658)

"、"
bounds: (457,653),(464,653),(464,660),(457,660)

"低い"
bounds: (486,633),(542,633),(542,660),(486,660)

"か"
bounds: (546,634),(573,634),(573,658),(546,658)

"が"
bounds: (577,635),(603,635),(603,658),(577,658)

"わかり"
bounds: (607,633),(687,633),(687,659),(607,659)

"ます"
bounds: (701,633),(753,633),(753,659),(701,659)

"ADRB3UCP1ADRB2"
bounds: (807,642),(963,642),(963,651),(807,651)

すごすぎる。十分使える。

領域の座標らしきものが返ってきているので、変換単位で移動させたりといったアプリケーションも考えられるのかもしれない。

もう、ALT も設定しなくていいのかもしれない・・・