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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

お願いします!

 

画像を読み込む方法

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

  • PIL(Pillow)
  • OpenCV
  • scikit-image
1時間でできる無料体験!

中でも一番良く使われているのが 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を使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。

独学に限界を感じたら…テックアカデミーに相談しよう

プログラミングを独学していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 独学に不安を抱えている方へ、現役エンジニア講師とマンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう 厳しい試験を通過した講師 があなたの相談に真摯に向き合います。

「ただ気になることを相談したい」
「漠然としているがプロの話を聞いてみたい」

こんな気持ちでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料で予約する