OpenCVではじめよう ディープラーニングによる画像認識
- 吉村康弘(よしむらやすひろ),杉浦司(すぎうらつかさ),五木田和也(ごきたかずや) 著
- 定価
- 3,740円(本体3,400円+税10%)
- 発売日
- 2022.4.30 2022.4.8
- 判型
- B5変形
- 頁数
- 312ページ
- ISBN
- 978-4-297-12775-6 978-4-297-12776-3
概要
OpenCVはコンピュータビジョン分野でもっとも利用されているオープンソースフレームワークです。近年の人工知能ブームに呼応する形で機械学習やディープラーニングAPIが強化され、物体の名称と位置を認識するオブジェクト検出(Object Detection)といったタスクも容易に扱えるようになりました。
とはいえ、画像認識タスクがすべてディープラーニングによる手法に置き換わるわけではありません。これまでに培った手法を選択した方が堅実な場面もあるため、本書では現時点で重要とされる画像処理手法を整理します。OpenCVの基礎的な解説からはじめ、dnnモジュールを用いたディープラーニングによる画像認識についても解説していきます。
サンプルコードにはPythonを利用し、OpenCV 4.5.Xに対応しています。
こんな方にオススメ
- OpenCVで画像認識を試してみたい方
- OpenCVの最新のディープラーニングの実装方法を知りたい方
目次
- はじめに
- 本書の構成
- 本書で扱わないこと、参考文献
- API の解説
- サンプルコードとサポート
- 開発環境
第1章 OpenCVとは
- 1.1 OpenCVの概要
- 1.2 主要モジュール
- 1.3 OSSライセンス
- 1.3.1 OpenCVのOSSライセンス
- 1.3.2 opencv-pythonのOSSライセンス
- 1.4 サポート言語
- 1.4.1 公式サポート言語
- 1.4.2 非公式サポート言語
- 1.5 サポートプラットフォーム
- 1.6 高速化
- 1.6.1 スレッド並列化
- 1.6.2 SIMD命令対応
- 1.6.3 アクセラレータ対応
- 1.7 開発の歴史
- 1.8 ブランチ管理
- 1.8.1 2.4ブランチ
- 1.8.2 3.4ブランチ
- 1.8.3 4.xブランチ
- 1.8.4 5.xブランチ
- 1.8.5 masterブランチ
- 1.8.6 nextブランチ
- 1.9 各種サイト
- 1.9.1 公式サイト
- 1.9.2 公式リポジトリ
- 1.9.3 有志サイト
第2章 OpenCVインストール
- 2.1 OpenCVのインストール
- 2.2 pip
- 2.2.1 依存パッケージインストール
- 2.2.2 opencv-pythonインストール
- 2.2.3 opencv-contrib-pythonインストール
- 2.2.4 動作確認
- 2.2.5 opencv-pythonパッケージのバージョン番号
- 2.2.6 Windows環境固有の注意点
- 2.3 Miniconda
- 2.3.1 Minicondaインストール
- 2.3.2 依存パッケージインストール
- 2.3.3 opencvパッケージインストール
- 2.3.4 動作確認
- 2.4 Docker
- 2.4.1 Dockerインストール
- 2.4.2 Dockerイメージのビルド
- 2.4.3 Dockerコンテナの起動
- 2.4.4 動作確認
- 2.5 ソースコード
- 2.5.1 依存パッケージインストール
- 2.5.2 ビルド、インストール
- 2.5.3 動作確認
- 2.5.4 CMakeオプション
第3章 coreモジュール
- 3.1 基本処理
- 3.1.1 画像データの扱い
- 3.1.2 ブランク画像生成
- 3.1.3 画素値の参照、代入
- 3.1.4 width、height、チャンネル情報の取得
- 3.1.5 ROI操作
- 3.2 ピクセルごとの操作
- 3.2.1 add、subtract
- 3.2.2 bitwise_and、bitwise_or
- 3.2.3 addWeighted
- 3.2.4 absdiff
- 3.2.5 copyTo
- 3.2.6 flip
- 3.2.7 rotate
- 3.2.8 clip
- 3.3 統計情報の取得
- 3.3.1 min、max
- 3.3.2 minMaxLoc
- 3.3.3 mean
- 3.3.4 sum
- 3.3.5 countNonZero
- 3.4 画像の分割、結合
- 3.4.1 split、merge
- 3.4.2 hconcat、vconcat
- 3.5 ユーティリティ
- 3.5.1 getBuildInformation
- 3.5.2 TickMeter
- 3.5.3 FileStorage
- 3.5.4 useOptimized
- 3.5.5 setUseOptimized
第4章 imgprocモジュール
- 4.1 画像の前処理と後処理
- 4.1.1 OpenCVで利用できる手法
- 4.1.2 画像の出力方法
- 4.2 色の変換
- 4.2.1 色空間の変換(cvtColor
- 4.2.2 チャンネルで分割(split)
- 4.2.3 HSV色空間の活用
- 4.2.4 その他の色変換
- 4.3 適応的しきい値による2値化(adaptiveThreshold)
- 4.3.1 しきい値(threshold)
- 4.3.2 adaptiveThresholdによる2値化
- 4.3.3 輪郭の抽出(findContours)
- 4.4 画像の幾何変換
- 4.4.1 アフィン変換(warpAffine)
- 4.4.2 射影変換(ホモグラフィ変換)
第5章 imgcodecs、videoioモジュール
- 5.1 画像の読み込み
- 5.1.1 静止画を読み込む(imread)
- 5.1.2 動画の読み込み(VideoCapture)
- 5.1.3 ネットワークカメラからの読み込み
- 5.1.4 Webカメラからの読み込み
- 5.1.5 連番画像の読み込み
- 5.2 画像の書き込み
- 5.2.1 静止画の書き込み(imwrite)
- 5.2.2 動画の書き込み(VideoWriter)
第6章 ディープラーニング
- 6.1 ディープラーニングの概要
- 6.1.1 モデル、パラメータ、オプティマイザ
- 6.1.2 過小適合と過剰適合
- 6.1.3 ディープラーニングでの考え方
- 6.2 精度評価
- 6.2.1 回帰の精度評価
- 6.2.2 分類の精度評価
- 6.3 画像処理におけるディープラーニング
- 6.3.1 CNN
- 6.3.2 CNNの優位性
第7章 dnnモジュール基礎
- 7.1 dnnモジュールの概要
- 7.1.1 dnnモジュールとは?
- 7.1.2 サポートしているモデルフォーマット
- 7.1.3 推論エンジンと実行デバイス
- 7.1.4 High Level APIとLow Level API
- 7.2 顔検出
- 7.2.1 顔検出とは?
- 7.2.2 顔検出(OpenCV Face Detector)
- 7.2.3 NMS(Non-Maximum Suppression)
- 7.2.4 パフォーマンス比較
- 7.2.5 APIの仕様
- 7.3 オブジェクト検出
- 7.3.1 オブジェクト検出とは?
- 7.3.2 精度重視のオブジェクト検出(YOLOv4)
- 7.3.3 さらに精度の高いオブジェクト検出(Scaled-YOLOv4)
- 7.3.4 処理速度重視のオブジェクト検出(YOLOv4-tiny)
- 7.3.5 パフォーマンス比較
- 7.3.6 APIの仕様
- 7.4 クラス分類
- 7.4.1 クラス分類とは?
- 7.4.2 精度重視のクラス分類(EfficientNet)
- 7.4.3 信頼度上位5個のクラスを取得する
- 7.4.4 処理速度重視のクラス分類(MobileNet v3)
- 7.4.5 パフォーマンス比較
- 7.4.6 APIの仕様
- 7.5 セグメンテーション
- 7.5.1 セグメンテーションとは?
- 7.5.2 セグメンテーション(DeepLab v3)
- 7.5.3 APIの仕様
- 7.6 テキスト検出とテキスト認識
- 7.6.1 テキスト検出、テキスト認識とは?
- 7.6.2 テキスト検出(DB)
- 7.6.3 テキスト認識(CRNN-CTC、DenseNet-CTC)
- 7.6.4 パフォーマンス比較
- 7.6.5 APIの仕様
- 7.7 キーポイント検出
- 7.7.1 キーポイント検出とは?
- 7.7.2 キーポイント検出(Lightweight OpenPose)
- 7.7.3 キーポイントのもとになるヒートマップを取得する
- 7.7.4 APIの仕様
第8章 dnnモジュール応用
- 8.1 dnnモジュールの対応レイヤ
- 8.2 カスタムレイヤ対応
- 8.2.1 カスタムレイヤのクラスを実装する
- 8.2.2 カスタムレイヤを登録する
- 8.2.3 動作確認
- 8.3 学習済みモデルの診断ツール(model-diagnostics)
- 8.3.1 概要
- 8.3.2 環境構築
- 8.3.3 使い方
- 8.3.4 実行例
- 8.4 外部DNNフレームワーク連携
- 8.4.1 CUDA backend
- 8.4.2 Intel Inference Engine backend
- 8.4.3 Tengine backend
- 8.5 学習済みモデルの利用
- 8.5.1 OpenCV Zoo
- 8.5.2 Open Model Zoo
- 索引
- 著者プロフィール
プロフィール
吉村康弘(よしむらやすひろ)
奈良先端科学技術大学院大学 情報科学研究科 情報処理学専攻 博士前期課程 修了
株式会社フィックスターズに勤務、コンピュータビジョン、ロボティクスに関するアルゴリズム開発、高速化の業務に従事。
おもな著書、連載として「OpenCV プログラミングブック」、「OpenCV入門【3.0対応】(https://www.atmarkit.co.jp/ait/series/13124/)」など。また、技術書典にてOpenCVに関する技術書を執筆(https://dandelion1124.booth.pm/)ほか、OpenCV、librealsenseなどOSS開発へ貢献。
Web: http://atinfinity.github.io/
GitHub:atinfinity
杉浦司(すぎうらつかさ)
名城大学大学院理工学研究科情報工学専攻を修了、修士(工学)
株式会社ホロラボに勤務、センサーや画像処理、点群処理を扱うソフトウェアエンジニア。
おもな著書に「KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版」など。
ほか、Microsoft MVP for Windows Developmentを受賞、Point Cloud Libraryのコミッターを務めるなどOSSへ貢献。
本書の執筆にあたり、いくつかのOpenCVのバグを報告、修正した。
Blog:https://sugiura-lab.hatenablog.com/
Twitter:@UnaNancyOwen
五木田和也(ごきたかずや)
株式会社ウサギィ役員、ガルム株式会社代表。画像認識、自然言語処理、IoTまわりを扱うほか、経営から営業までなんでもやるエンジニア。
著書: コンピューターで「脳」がつくれるか(技術評論社)
Twitter: @kazoo04