【関連記事】【Pythonのライブラリ管理ツール】pipインストールを徹底解説!Windowsでも簡単?
Pythonを使った画像認識
Pythonは、データサイエンスや機械学習などのAI領域で活用されており、その用途の1つに画像認識があります。ここでは、画像認識の概要とともに、実際にPythonの代表的な画像認識ソフトウェアであるOpenCVを用いてコードを作成して理解を深めていきます。
【参考】:Python
そもそも画像認識とは
画像認識とは、画像に写っている情報が何なのか認識する技術を表します。ここでいう情報とは人や物などで、これらを識別する情報処理の分野として、パターン認識と呼ぶ場合もあります。パターン認識には、広く音声や画像、文字テキストなども含まれますが、ここでは画像を対象に解説していきます。
人間の脳と機械やコンピュータとの違い
人間は脳に蓄積されている情報から、画像を見るとそれが何なのか、記憶や経験から識別することができます。機械やコンピュータでは画像の情報が単なるドットの集合体ですので、それが何を意味するのかそのままでは識別できません。
そのために、画像の特徴やパターンを学習させておき、対象となる画像がどの分類に近いかの識別や、どのパターンに近いか適合の状況を表示させます。
これらにより、人物の顔の部分を特定したり、生産工場の品質検査で異常がある製品を判別したりすることができます。
Pythonの代表的な画像認識ソフトウェア
Pythonの代表的な画像認識ソフトウェアとして、次の2点が挙げられます。
◼︎OpenCV OpenCVは、インテルが開発した画像認識ライブラリです。画像処理や解析、パターン認識、機械学習に広く利用することができます。学習済みのモデルが用意されており、自作に適しています。
【参考】:OpenCV
◼︎TensorFlow TensorFlowは、Googleが開発した機械学習用ライブラリです。機械学習のみならず、画像認識にも対応します。合わせてTensorFlowのコアライブラリでサポートされるニューラルネットワークライブラリ、Kerasを使うことも可能です。
【参考】:TensorFlow 【参考】:Keras: Pythonの深層学習ライブラリ 【参考】:TensorFlow Core チュートリアル:Keras
ここからは、Pythonの画像認識ソフトウェアとして利用者の多いOpenCVを使い、さらに詳しく解説していきます。
ぜひ『マイナビIT エージェント』をご活用ください!
画像認識や処理を行うエンジニア
Pythonを主言語として扱うエンジニアをPythonエンジニアと呼びますが、Pythonなどの技術を使って画像認識・画像処理の業務をメインに担当するエンジニアのことを「画像処理エンジニア」と言います。ここでは、画像処理エンジニアの仕事内容や年収事情について紹介します。
画像処理エンジニアとは
画像処理エンジニアとは、デジタル画像技術に関するアプリ・システムなどの分析や開発、運用を行うエンジニアを指します。画像処理の技術はあらゆる分野で活用されており、自動車や医療機器メーカー、映像技術、工業分野などさまざまです。
仕事内容としては、画像処理に関する知見を求められたり、プログラミングを行なったりします。大まかな流れは通常のシステム開発と変わらず、クライアントのヒアリングから要件定義を行い、そこで画像処理に必要な技術や工程を特定します。
また、画像処理の技術に関しては「画像処理エンジニア検定」という資格試験でスキルを証明することができます。学習の過程で知識を深めることができるため、画像処理の仕事に携わるエンジニアには取得をおすすめします。
【参考】:画像処理エンジニア検定
画像処理エンジニアの年収
画像処理エンジニアは、システムエンジニアやプログラマーなどの職種に比べて確立された1つの職種というよりも、業務の一環として捉えられるケースが多くみられます。「画像処理エンジニア」と題した求人を出している企業が少ないため、ここではシステムエンジニアの年収を例に紹介します。
「マイナビエージェント 職種図鑑」でのシステムエンジニアの平均年収は431万円(※2024年9月執筆時点)であり、経済産業省2017年発表の「IT関連産業の給与等に関する実態調査結果」から近い職種のエンジニア/プログラマでは、平均年収592万円でした。
国税庁2020年発表の「民間給与実態統計調査」における民間企業の平均年収は433万円なので、画像処理エンジニアを含むシステムエンジニアは平均年収よりも高めの年収を目指せます。
画像処理エンジニアとして今後キャリアを積む場合、前述した画像処理エンジニア検定やPythonに関する資格を取得することで、自身の市場価値を高められるでしょう。
【参考】:マイナビエージェント 職種図鑑/システムエンジニア ※【平均年収 調査対象者】2020年1月~2020年12月末までの間にマイナビエージェントサービスにご登録頂いた方 【参考】:IT関連産業における給与水準の実態① ~ 職種別(P7) 【参考】:民間給与実態統計調査-国税庁
PythonでOpenCVを使ってみる
OpenCVは、PythonのほかC++やJavaでも利用できるポピュラーな画像認識ソフトウェアです。画像処理の機能が豊富で、他のソフトウェアを追加せずに多くの処理をこなすことができます。英語ですが、豊富なドキュメントが公開されています。
【参考】:OpenCV 【参考】:Introduction to OpenCV 【参考】:OpenCV-Python 4.8.0 Tutorials
OpenCVの日本語ドキュメント
OpenCVの公式サイトは英語のドキュメントが中心です。英語が心配な方は、日本のOpenCVユーザの方々が有志で日本語のドキュメントやサンプルコードを掲載していますので、そちらを利用しましょう。
日本語サイトは公式サイトにもリンクが掲載されていますが、掲載情報はOpenCV2.4.2までなので注意が必要です。
【参考】:OpenCV.jp
OpenCVのインストール
Pythonで利用するには、 ”pip install opencv-python” などでインストールを行います。同様に、NumpyもPythonの配列処理に活用しますので、 ”pip install numpy” でインストールしておくと良いでしょう。
インストールについて、WindowsやLinuxなどOS別のインストール手順は必要に応じて以下のリンク先を確認しましょう。
【参考】:OpenCV installation overview 【参考】:Install OpenCV-Python in Windows 【参考】:Install OpenCV-Python in Fedora 【参考】:Install OpenCV-Python in Ubuntu
OpenCVの基本操作
ここでは、OpenCVの基本操作を学んでいきます。手順は以下の通りです。
①ライブラリのインポートと画像の読み込み PythonでOpenCVを使う場合は、 ”import cv2” でライブラリをインポートします。取り扱う画像データは、JPEGやPNG、BMP・PBMなどの主要なフォーマットに対応します。
配列処理を行う場合は、必要に応じて ”import numpy” などを行い、ライブラリをインポートしておきます。画像の読み込みですが、静止画の場合はcv2.imread()、動画の場合はcv2.VideoCapture()を使って読み込みます。
実際の使い方は、次のように行います。なお、NumPyを使用しない場合は、OpenCVのみインポートしてください。
import numpy
import cv2
image = cv2.imread('picture.jpg')
②画像の前処理 前処理として画像の処理を行います。認識精度向上のために、cv2.cvtColor()でグレースケールや二値化によるモノクロ化、トリミングなどを行います。BGRの分離やマージも行うことができます。
ここで言うBGRは、青緑赤で通常のRGBとは逆の順番となることに注意します。GBRからRGBへの変換は、cv2.cvtColor()を用います。
次の例は、グレースケールに変換する場合の指定です。
grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
③画像の画面表示と保存 処理した画像を画面に表示するには、cv2.imshow()を使います。保存するには、静止画はcv2.imwrite()、動画はcv2.VideoWriter()で出力します。
具体的には、次のように使用して画像を保存します。
cv2.imwrite('grayscale.jpg', grayscale)
OpenCVを用いた画像の認識
ここから、OpenCVを用いた画像の認識を行っていきます。画像認識には、cv2.CascadeClassifier()で学習済みのモデルを読み込み、cv2.CascadeClassifier.detectMultiScale()で顔などのパターンを検出します。
なお、OpenCVではあらかじめ認識できるパターンが用意されていますので、それを用いるのが良いでしょう。
ここで用いる学習済みのモデルは、カスケード分類器と言います。同様に学習済みのモデルである、認識パターンの登録済みファイルはカスケードファイルと言い、目や眼鏡、ネコや人の顔、人物の全身・下半身・上半身、左目・右目・証明写真風の顔や笑顔などが用意されています。
格納場所は、 ”Pythonのインストール先\Lib\site-packages\cv2\data” で、17種類の登録ファイルがあります。
【参考】:OpenCV /data/ haarcascades 【参考】:OpenCV Cascade Classifier 【参考】:OpenCV Cascade Classifier Training
OpenCVを用いた画像認識のサンプルコード
ここまで学んだことを実際のコードにしてみます。サンプルコードでは、画像から顔(正面)を認識する一連の流れを表します。顔(正面)の学習済みモデルは、 ”haarcascade_frontalface_default.xml" を使います。このファイルをローカルに保存するか、パスを指定して読み込みます。
実際のサンプルコードは、以下の通りです。作成したサンプルコードに注釈を入れておきましたので、参考にしてください。
# NumPyを使う場合インポートします(通常、numpyをnpとして使用します)
#import numpy as np
# OpenCVは必ずインポートします(通常、cv2をcvとして使用します)
import cv2 as cv
# 画像を読み込みます(ここでは'picture.jpg'とします)
imagefile = 'picture.jpg'
image = cv.imread(imagefile)
# グレースケールに変換します
grayscale = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 学習済みモデルを読み込みます
# 正式なパスは"Pythonのインストール先\Lib\site-packages\cv2\data"です
cascade = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
# 顔を検出します(検出する最小サイズは50x50とします)
results = cascade.detectMultiScale(grayscale, minSize=(50, 50))
# 検出した場合の処理です
if len(results) > 0:
# 検出した顔を矩形で囲みます(色は赤、線の太さは2とします)
for rectangle in results:
cv.rectangle(image, tuple(rectangle[0:2]),tuple(rectangle[0:2]+rectangle[2:4]), (0, 0, 255), thickness=2)
# 検出結果を保存します(ここではファイル名の最初に'result-'という文字列を追加します)
cv.imwrite('result-'+imagefile, image)
# 検出結果を画面に表示します(ウィンドウタイトルに'imshow:ファイル名'を表示します)
cv.imshow('imshow: '+imagefile, image)
エンジニア転職のご相談はぜひ
『マイナビIT エージェント』へ!
Pythonを使った画像認識は難しくない
Pythonは用途に応じたライブラリが豊富であり、画像認識も人や動物などを認識するほか、物体の形状を登録することで生産ラインの品質検査にも応用できます。その中でも、OpenCVは手間なく環境構築と学習済みモデルを使った画像検出が可能で、簡単に始めるにはおすすめのソフトウェアです。
画像処理技術は年々高度化しており、特に汎用性の高いPythonを使って画像処理を行えるエンジニアの需要はますます増加しています。この技術を習得することで、画像処理エンジニアやAI関連職種へのキャリアパスが広がるでしょう。
今のキャリアを活かした転職を望む場合、いかに自分に合う企業とマッチングできるかが重要です。そのような優良企業を見つけるのは至難の業でしょう。
そこでぜひご活用いただきたいのがマイナビIT エージェントです。
マイナビIT エージェントは、IT・Webエンジニア向けの無料の転職⽀援サービスです。
IT・Webエンジニアの転職事情に詳しいキャリアアドバイザーが、あなたのご経験やスキルをお伺いし、転職活動のプランをご提案致します。
アドバイザーは企業側の人事担当者と直接連携を取れますので、求人票に載っていない企業情報も確認することができます。残業時間や給与面など、働き方などをしっかり確認の上で応募企業を選んでいくのが良いでしょう。
・資格やプログラミングの勉強をしているけれど、企業が求めるレベルに達しているのかわからない ・スキルアップをして市場価値を上げていける企業の選び方を知りたい ・数多くあるITエンジニアの職種の中で、自分に向いている仕事は何か知りたい
こうした悩みを抱えていらっしゃる方は、まずは無料登録でキャリアカウンセリングをおすすめ致します。
マイナビエージェントに無料登録して
転職サポートを受ける
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから