Pythonでpng画像をテキストに変換する方法【初心者向け】

初心者向けにPythonでpng画像をテキストに変換する方法について解説しています。この変換にはOCR (Optical Character Recognition)を使用します。OCRの導入方法と画像の読み込み、変換の手順を実際に書きながら覚えていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Pythonでpng画像をテキストに変換する方法について解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのPythonオンライン講座の内容をもとにしています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

png画像をテキストに変換する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

画像を読み込む方法

Python で画像を読み込む方法はいくつかあります。

  • PIL(Pillow)
  • OpenCV
  • scikit-image

中でも一番良く使われているのが PIL(Pillow) です。 Pillow は Python で代表的な画像処理ライブラリで、画像のリサイズや描画を容易に行なえます。 Pillow を利用して画像を読み込むには以下のように記述します。

from PIL import Image, ImageFilter
im = Image.open('画像ファイル名')

 

テキストに変換する方法

画像をテキストに変換する技術を OCR (Optical Character Recognition)といいます。 OCR は OCRエンジンというソフトを使い、画像データからテキストを抽出します。OCRエンジンは多くの種類がありますが、今回はオープンソースのOCRエンジンである Tesseract OCR を利用します。Tesseract OCR は学習によって日本語テキストを抽出することも可能です。

また、 Python から OCRエンジン を使えるようにする代表的なライブラリが PyOCR です。 PyOCR を利用して、画像をテキストに変換するには、以下のように記述します。

txt = tool.image_to_string(
    Image.open('画像ファイル名'),
    lang=言語名,
    builder=pyocr.builders.TextBuilder()
)

 

[PR] Pythonで挫折しない学習方法を動画で公開中

実際にpng画像をテキストに変換してみよう

はじめにOCRエンジンをインストールします。インストール方法は公式サイトを参考にしてください。Windowsであればインストーラーをダウンロードしてインストール、Macであればターミナルから以下のコマンドでインストールします。

brew install tesseract

Tesseract OCR公式サイト

https://github.com/tesseract-ocr/tesseract/wiki

次に必要な ライブラリをインストールします。パソコンが Macならターミナル、Windowsならコマンドプロンプトから以下のコマンドでインストールします。なお、事前に Python のインストールが必要です。

pip install Pillow
pip install pyocr

今回は、 PyOCR サンプルコードを例に、png 画像をテキストに変換する方法を確認します。

https://gitlab.gnome.org/World/OpenPaperwork/pyocr

サンプルコードは以下となります。

from PIL import Image
import sys

import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()
if len(tools) == 0:
 print("No OCR tool found")
 sys.exit(1)
# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'

langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))
# Ex: Will use lang 'fra'
# Note that languages are NOT sorted in any way. Please refer
# to the system locale settings for the default language
# to use.

txt = tool.image_to_string(
 Image.open('test.png'),
 lang=lang,
 builder=pyocr.builders.TextBuilder()
)
# txt is a Python string

print(txt)

また、プログラムと同じフォルダに、画像ファイル「test.png」を配置しておきましょう。今回は英語版Wikipediaのトップページにしました。

実行結果は以下のようになります。かなり高い精度でpng画像をテキストに変換出来ていることが分かりますね。

Welcome to Wikipedia,

the free encyclopedia that anyone can edit.
5,700,236 articles in English

From today's featured article

Oxalaia, a spinosaurid dinosaur, lived in what is now Brazil during the
Late Cretaceous, sometime between 93.9 and 100.5 million years ago.
The genus name comes from Oxala, an African deity. Oxalaia's only
known fossils, a partial snout and upper jaw bone, were found in 1999 in the Alcéntara
Formation. At an estimated 12 to 14 metres (39 to 46 feet) in length, it is the largest
carnivorous dinosaur discovered from Brazilian fossils. The African genus Spinosaurus
was its closest relative. Oxalaia bore two replacement teeth in each socket (similarly to
sharks) and a very ornamented secondary palate, features which are not known in other
theropod or spinosaurid dinosaurs. Its habitat was tropical and heavily forested,
surrounded by dry regions. Since Oxalaia's skull and teeth resembled those of modern
crocodilians, it may have largely hunted fish. Fossil evidence suggests spinosaurids also
occasionally preyed on other animals such as small dinosaurs and pterosaurs.

(Full article...)
 

Recently featured: Hurricane Bret - Golden jackal - Evita (1996 film)
Archive - By email - More featured articles

 

この記事を監修してくれた方

太田和樹(おおたかずき)
ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。