OpenCV関連本いろいろ(洋書)

本のタイトルから対象にしているOpenCVのバージョンが判断しづらいケースや、内容の違いがよくわからないものが多いのでリスト化してみました。


随時更新予定です。

確実に言えることは、Amazon から買うより出版元の割引セールで買うか、電子版なら定額読み放題サービスを利用するのがリーズナブルだということです。

特にPackt の本をAmazonのKindle版で購入しようとするとなぜか価格が高いケースが多いので出版元のサイトから購入することを強く推奨。

Pact の本は定額読み放題サービス(Mapt )のWeb版で確認した情報。

さすがに全部は無理なんで、オライリーとPackt のみ。

オライリー(英語版)の英文よりもPacktという出版社の英文の方が個人的に読みやすいです。

ごちゃごちゃと書いてある本は少なくとも半分以上目を通したか、サンプルコードの一部を入力して実行した*1書籍になります。逆言うとそれ以外は基本的に導入部分の説明(対象バージョンや前提条件)のみ確認しています。

なお、日本語の関連本についてもまとめ記事を作成しました。

a244.hateblo.jp

C++

Packtの方は本文で例示しているソースコードとダウンロードしたソースが微妙に違うケースがあるので注意されたし。

基本的にバージョン3.xの本が出揃っているようなので2.x系を対象にした本は除きます。

Learning Opencv 3: Computer Vision in C++ With the Opencv Library

shop.oreilly.com

Learning OpenCV 3: Computer Vision in C++ With the OpenCV Library

Learning OpenCV 3: Computer Vision in C++ With the OpenCV Library

米オライリーの方針変更でDRMフリーの電子版(epub, pdf, mobi)の単体購入はできなくなりました。定期購読か紙媒体、Kindle版のみ、です。

絶賛リリース遅延中?どうにか正式リリースされた安心安全のオライリー本。Amazonでは夏頃発売になってたんですよ、ホントに。

私の英語力ではちょっと読みにくい。そのうち翻訳本が出るはず。

この本に限らず、もう少しモダンな組版とかレイアウトになるといいのだけど。

サンプルコードはGitHub経由で。

GitHub - oreillymedia/Learning-OpenCV-3_examples

Learning OpenCV 3 Application Development

www.packtpub.com

Learning OpenCV 3 Application Development

Learning OpenCV 3 Application Development

12月正式リリース予定。Mapt 経由では未だ読めず 。

  • OpenCV 3.1
  • 著者はカナダの大学教授
  • 特筆すべき内容は顔認識とか静止画からの3次元再構築とか

OpenCV 3 Computer Vision Application Programming Cookbook - Third Edition

OpenCV 3 Computer Vision Application Programming Cookbook - Third Edition

OpenCV 3 Computer Vision Application Programming Cookbook - Third Edition

12月正式リリース予定。Mapt 経由では未だ読めず。

  • OpenCV 3系
  • Cookbook というタイトル通りサンプル数が多いのか
  • 特筆すべき内容は機械学習による顔画像からの性別判定?

著者はGoogle でインターンしたことがあるとかなんとか。南インドのインド情報技術大学ハイデラバード校の研究者(research intern)。

インド情報技術大学 - Wikipedia

OpenCV 3 Blueprints

www.packtpub.com

  • 紹介されている機材を持っていないとツラい(いわゆるデプスカメラとか)
  • OpenCV の解説というよりは応用例の紹介
  • 機械学習による表情(Facial Expressions)の判別(Chapter 3)
  • パノラマ画像を合成するAndoroid アプリ(Chapter 4)
  • 物体検出(Chapter 5)
  • 生体認証(顔、指紋、虹彩)の実例(Chapter 6)
  • ジャイロセンサ(スコープ)によるビデオ安定化(Gyroscopic Video Stabilization): 手ぶれ補正の話(Chapter 7)

体系的に解説しているタイプの本ではない。OpenCV経験者向けだと思う。

サンプルコード:GitHub - OpenCVBlueprints/OpenCVBlueprints: OpenCVBlueprints

Mastering OpenCV 3 - Second Edition

Mastering OpenCV 3 - Second Edition

Mastering OpenCV 3 - Second Edition

  • 作者: Daniel Lélis Baggio,Shervin Emami,David Millán Escrivá,Khvedchenia Ievgen,Naureen Mahmood,Jason Saragih,Roy Shilkrot
  • 出版社/メーカー: Packt Publishing
  • 発売日: 2017/05/04
  • メディア: Kindle版
  • この商品を含むブログを見る

Mastering OpenCV 3 - Second Edition | PACKT Books

GitHub - PacktPublishing/Mastering-OpenCV3-Second-Edition: Mastering OpenCV 3 - Second Edition by Packt

OpenCV 3.1がターゲット。

特徴はChapter 3 のナンバープレート読み取り(英数字)。ラズパイを使ったサンプルもある。 あとは顔認識とか姿勢推定とか。

かなり応用重視の本。

OpenCV By Example

www.packtpub.com

OpenCV By Example

OpenCV By Example

  • OpenCV 3.0
  • 比較的平易な英語
  • CMake の初歩など
  • 画像から単純なオブジェクトを検出(Chapter 5/6)
  • 顔認識、顔の一部をトラッキング(Chapter 7)
  • Tesseract OCR 連携(chapter 10)

人間の視覚の話から入る。最初だけの脳科学の用語とか出てくるので注意。Chapter 6 から機械学習の話が始まる。網羅的にOpenCVの機能を解説しているわけではない。

文中で度々OCRに言及している点も特徴のひとつ。「こういう処理はOCRでも有益だ」とか、「典型的な応用例としてはOCRが挙げられる」という文章が何度か出てくる。

気になった点など

ヘッダファイルの追加についてスルーしている箇所があったり、本文中で説明しているコードとダウンロードしたソースコードが微妙に一致していない箇所があるので注意*2

また、OpenCVの関数のうち、引数に整数で範囲をしているするものについては「範囲にその値を含むか含まないか」を説明して欲しかった。上限値を指定する場合、255を引数とするのか、256(範囲に含まない)を引数として与えるのかは明記指定欲しい。プログラムのコメントに0から255と書いておきながら関数の引数が256とあれば誤植でないか、疑問に思って手が止まってしまう。上限値+1など書いてくれた方がいい。

下限値は範囲に含むが、上限値は範囲に含まないというのは個人的には違和感がある。Python とか Go でもそういうAPIの場合はあるから違和感がないのかもしれないが。

サンプルコードに関連して

基本的にダウンロードしたソースはちゃんとコンパイル通るのでそっちをメインに参照するといい。ただし、文中にファイル名は明示されていない(少なくともMapt経由で読む分には)。

ただし、Chapter 6のSVMを使ったサンプルについては本文が正しく、ダウンロードしたファイルの方がおかしい。 具体的にいうと、ソースコード側でmlモジュールの、SVM::Paramsクラスのオブジェクトを使用しているせいでコンパイルが通らない。OpenCV のバージョン3.xにはこのサブクラスはない。

少なくとも3.0 Beta のある時期まではこのSVM::Paramsが存在した模様。まともなOpenCV 3.x のSVMまわりは仕様が変更されたとのことなので、使い方としてはこのSVM::Paramsを使うのは正しくない。

本文側は公式のチュートリアルと同様にSVM::create()を使ってい流。なのでこの部分は本文側を信じてサンプルのコードを書き換える。

Python 系

Python 3.x なのか 2.x かそれが問題です。

Python 2.x が対象の書籍でもprint関数など一部を修正すれば大丈夫だろうと思うが、OpenCV以外に利用されているライブラリまでは判断できない。

ググればサンプルが出てくるので本を買う必要はないのかもしれない。

参考書もPython 3系に移行してくれないと、せっかくPython 3系を勉強した初学者が本格的にPythonを利用する際にやっぱり2系の知識も…という話になってしまう。

OpenCV with Python by Example

  • Python 2.7
  • OpenCV 2.4.9

OpenCV with Python BluePrints

www.packtpub.com

OpenCV with Python Blueprints: Design and Develop Advanced Computer Vision Projects Using Opencv With Python

OpenCV with Python Blueprints: Design and Develop Advanced Computer Vision Projects Using Opencv With Python

  • python 2系?
  • opencv 2.4.9
  • Ubutu 14.04

Learning OpenCV 3 Computer Vision with Python - Second Edition

Learning Opencv 3 Computer Vision With Python

Learning Opencv 3 Computer Vision With Python

  • OpenCV 3
  • Python 2.7.x
  • Windows/Mac/Ubuntu

OpenCV: Computer Vision Projects with Python

www.packtpub.com

  • OpenCV 2.4.x
  • Python 2.7.x
  • Windows/Mac/Ubuntu

Mac環境の場合は、MacPorts、Homebrew 両方とも解説あり。

extraモジュールを有効にしていればOpenCV 3.x でも問題はなさそうに見える。

Raspberry Pi for Python Programmers cookbook Second Edition

www.packtpub.com

Raspberry Pi for Python Programmers Cookbook, Second Edition

Raspberry Pi for Python Programmers Cookbook, Second Edition

ちょこっとだけOpenCVが出てくる。旧版と間違えないよう注意。

  • Python 3.4
  • OpenCV 3.0
  • Raspberry Pi 3 model B を推奨しているが、他のモデルでもOK
  • Pi Camera module or Webカメラ

改訂版のはずだが現行のRaspbian に存在しないはずのmencoder を使う例がある。mpvで代用できると思う。

ネットワーク接続を含めて環境構築周りが詳しい。ソースからOpenCV 3.0 + contlib でビルドして

Chapter 2 からPythonプログラミング。最初は換字式暗号(シーザー暗号)のプログラムからスタート。Python/Tk のGUIプログラミングとかゲーム作成の初歩とか。OpenCV はChapter 8の後半のみ。

Computer Vision with Python 3

Computer Vision with Python 3

Computer Vision with Python 3

Computer Vision with Python 3 | PACKT Books

GitHub - PacktPublishing/Computer-Vision-with-Python-3: Code files for Computer Vision with Python 3, uploaded by Packt

OpenCV オンリーではないけど一応。Pillow, Scikit-Image, and OpenCVの3つを解説している。バランスは良さそう。

トータル206ページなのでそれほど読むのもしんどくないはず。

for iOS

www.packtpub.com

IOS Application Development with Opencv 3

IOS Application Development with Opencv 3

  • Objective-C
  • OpenCV 3.1
  • iOS 9
  • 画像の合成
  • 顔認識、顔画像合成
  • コインの判別など

GitHubでもソースコードが公開されている。出版社のページから入手できるソースより更新されている場合がある。 また、正誤訂正(ERRATA)もGitHubで。

iOS 9 を前提にしているので、微妙に'deprected'で警告が出たりするが、適宜修正すればいい。GitHubで公開されている方のコードはiOS 10対応になっている。

Mapt経由で読んでいるせいなのか、本文中のソースコードのインデント(というかメソッド定義の先頭)がおかしい箇所がある(Chapter 2)。

OpenCV 3.1系の、特にCvVideoCameraクラスのバグ対策のノウハウが色々と記載されている。ただし、OpenCV 3.2系でどこまで修正されているのかは未確認。

Objective-Cでのアプリ開発の経験があるならなかなか良い本。難点を挙げるとすればアルゴリズムの説明がちょっと雑。例えば画像合成の説明で複数の合成アルゴリズムを使用するのはいいのだけれど、アルゴリズムAの前処理、アルゴリズムBの前処理、…と続いてアルゴリズムAの処理、アルゴリズムBの処理、と続くのはかえって混乱する。

少なくとも現在のSwiftから直接C/C++のライブラリを使用することはできない。そのためこの本はObjective-C/C++でアプリを開発するサンプルになっている。 OpenCVに関係ない部分はSwiftで、残りはObjective-CでC++をラップすれば問題ないはずだがやはり混在させると面倒なのだろうと思った。

そのほか

日本語のOpenCV解説ページなど。

結論

身もふたもないが、定額読み放題サービス(Safari Books Online or Mapt )に加入すれば悩む必要なし。ざっくり1冊読んでおいて、あとは必要に迫られた時に参考になりそうなトピックが書いてあるものを読めばいいのではないでしょうか。

OpenCV 3.x + Python 3.x はGoogle 先生がサンプルのありかを教えてくれます。関数の名称は変化していないのできっとなんとかなる。


……以上です。

*1:俗に言う写経

*2:まあよくある話ではあるけど