はじめに
PyTorch / Keras / OpenCV / scikit-learn の違いと、画像から大きさ(実寸)を推定する現実的な方法をまとめます。
AIや画像処理を始めると、PyTorch / Keras / OpenCV / scikit-learn が頻繁に出てきます。
ただしこれらは「同じカテゴリのライブラリ」ではなく、役割(担当)が違う道具です(※一部は守備範囲が重なります)。
この記事ではまず4つの役割の違いを整理して、そのあとによくある疑問
「画像から物の大きさ(実寸)って推定できるの?」 を、条件つきで現実的な方法に絞って解説します。
私はまだ学習途中なので、学んだ内容を備忘録として残しつつ、同じようにこれから始める人が「迷いにくくなる」ことを目的に書いています。
この記事で分かること
- PyTorch / Keras / OpenCV / scikit-learn の「何が違うか」
- どれを先に学べばいいか(目的別)
- 画像から“実寸”を出すための条件と、代表的な手法
- 初学者がやりがちな落とし穴
1. 4つのライブラリは「役割」が違う(ただし少し重なる)
1-1. ざっくり一言まとめ
- OpenCV:画像を 読む・加工する・測る(画像処理・CVの道具箱)
- scikit-learn:定番の 機械学習(非DL中心) を手堅く回す(回帰・分類・評価)
-
Keras(多くは
tf.keras):深層学習を 短いコードで書きやすい(高レベルAPI) - PyTorch:深層学習を 自由に作り込める(柔軟性・拡張性)
「どれが上」ではなく、目的が違うと思うと選びやすいです。
また、たとえば「scikit-learnでも画像特徴量を使った学習はできる」「OpenCVにも古典的MLの機能がある」など、守備範囲は一部重なります(主戦場が違う、という理解が安全です)。
1-2. 比較表(初学者向け)
| ライブラリ | 主な役割 | 得意なこと | 典型ユースケース | 初心者の最初のつまずき |
|---|---|---|---|---|
| OpenCV | 画像処理 / 計測 | 変換、前処理、輪郭、透視補正、カメラ扱い、キャリブレーション | 計測、前処理、画像加工、カメラ映像 | 座標系・幾何(角度/透視/歪み) |
| scikit-learn | 機械学習(非DL中心) | 前処理、学習、評価、CV、パイプライン | 表データの分類/回帰、ベースライン作り(画像でも特徴量化すれば可) | 特徴量設計、データ分割 |
Keras(tf.keras) |
深層学習(書きやすい) | 学習の型がシンプル、モデル構築が簡単 | 画像分類、時系列、入門教材、プロトタイプ | “中で何が起きてるか”が見えにくい |
| PyTorch | 深層学習(自由) | 低レベルまで制御、研究〜実務の拡張 | 物体検出、生成、独自モデル、複雑な学習 | 学習ループ/デバッグ量が増える |
2. どれを先に学ぶ?(目的別おすすめルート)
2-1. 目的:機械学習の全体像を最短で掴みたい
おすすめ:scikit-learn →(必要になったら)Keras/PyTorch
理由:前処理〜評価まで「型」が揃っていて、概念が整理しやすいです。
2-2. 目的:画像を扱いたい(前処理・計測・カメラ)
おすすめ:OpenCV →(学習モデルが必要なら)Keras/PyTorch
理由:画像の読み書き・補正・変換ができないと、学習以前で詰まりがちです。
2-3. 目的:深層学習を最短で動かしたい(成果を先に出したい)
おすすめ:既存モデルを動かす → Keras(入門)or PyTorch(実務寄り) → 必要に応じてOpenCV
理由:最初の成功体験を作りやすいです。
その後、前処理の工夫・計測・幾何補正が必要になってからOpenCVに戻るとスムーズです。
3. 実務では「組み合わせ」が普通
画像分類を例にすると、よくある流れはこうです。
- OpenCV:画像を読み込み・リサイズ・前処理(歪み補正や切り出し等)
- Keras / PyTorch:モデル学習・推論
- scikit-learn:評価指標・混同行列・ベースライン比較(補助)
つまり「どれか一つ覚えればOK」ではなく、役割に応じて併用するのが自然です。
4. 画像から“大きさ(実寸)”は推定できる?
4-1. 結論(大事)
- スケール(基準)が入るなら、実寸を出せる
- スケールが何もない1枚画像だけだと、実寸は原理的に一意に決まらない
なぜなら、同じ見え方で
「小さい物を近く」or「大きい物を遠く」に置けてしまうからです。
だから実務では、基準(画像内/外)・距離・深度(3D) のどれかを入れるのが鉄則です。
※「基準物を一緒に写していない」ように見えても、画像内に 既知サイズの規格品(クレカ、A4、コイン等)が写っていれば、それは「基準あり」に含まれます。
5. 方法別:現実的な“実寸推定”アプローチ
方法A:基準物(定規/A4/コイン/規格品)を一緒に写す(最優先おすすめ)
使える場面
- 机の上、床の上など「同じ平面」にあるものを測りたい
- まずは簡単に精度を出したい
手順(考え方)
- 基準物の実寸を決める(例:A4短辺 210mm)
- 画像で基準物のピクセル長を測る(例:短辺が 840px)
mm/px = 210 / 840 = 0.25- 対象のピクセル長 × 0.25 で実寸に換算
コツ(重要)
- 基準物と対象は同じ平面上に置く
- できれば 同じ向きの長さを測る(射影条件が揃うほど誤差が減る)
良いところ
- 実装が簡単
- 精度も出しやすい
注意点
- 斜め撮影だと「見かけの長さ」が縮む
→ 次の「透視補正」とセットがおすすめ
方法B:透視補正(ホモグラフィ)で平面を“真上/正面視点”に直して測る
使える場面
- 対象が机/床/壁など「平面上」にある
- 斜めから撮ってしまった
- 平面上の長さや面積を測りたい
前提(ここが肝)
- ホモグラフィは 平面上の計測(長さ・面積) に強い
- 立体の「高さ」や、平面から浮いた部分の長さは別問題(誤差が増える)
ざっくり何をする?
- A4用紙など「四隅が分かる基準」を使う
- 斜めに写った平面を、正面(真上)から見た形に変換する
- 変換後の画像上で mm/px を作って測る
何が嬉しい?
- 斜め撮影でも、平面なら精度が出る
- 面積推定にも使える
方法C:距離が分かるなら(カメラモデル)で換算
使える場面
- カメラと対象の距離が測れる(固定環境、距離計、ARなど)
- ある程度、撮影条件が管理できる
概念
- 「ピクセルの大きさ」は距離で変わる
- 距離が分かれば、ピクセルから実寸へ換算できる
追加で必要になりやすい情報
-
画角/焦点距離相当(内部パラメータ)
- 厳密にはカメラキャリブレーション(内部パラメータ)があると強い
- 対象がカメラに対してどの向きか(姿勢)
- 斜めだと投影で短く見える
注意点
- 距離の誤差がそのままサイズ誤差になる
→ 距離推定が一番むずいポイントになりがち
方法D:複数画像 / 深度センサで3Dにして測る(強いが準備がいる)
使える場面
- 2台カメラ(ステレオ)
- 動画など複数視点(SfM/SLAM的アプローチ)
- LiDAR/深度カメラ(iPhoneのLiDAR等)が使える
良いところ
- “平面じゃない対象”(人や家具など)にも対応しやすい
- 精度を上げやすい(条件が揃えば)
注意点
- キャリブレーションや環境整備が必要
- 反射・暗所・テクスチャの少ない面で精度が落ちることがある
6. 初学者がハマりがちな落とし穴
6-1. “1枚画像だけで実寸が出る”と思ってしまう
スケールがないと無理です。
ただし「画像内に既知サイズの物が写っている」なら、それはスケールになります。
6-2. 斜め撮りでそのままピクセル換算する
平面計測なら、透視補正(ホモグラフィ) を入れるだけで一気に改善します。
6-3. レンズ歪みを無視する
広角スマホだと端ほど歪んで誤差が出ます。
精度が必要なら キャリブレーション(OpenCVのカメラキャリブレーション)や undistort を検討してください。
手軽な対策としては、
- できるだけ 画面中央付近で測る
- 端に対象や基準物を置かない
だけでも誤差が減ることが多いです。
6-4. 「長さ」を測る前に「何を長さとするか」を決めてない
- 外接矩形の幅?
- 輪郭の最大径?
- 端点同士の距離?
目的に応じて定義が変わります。
例:同じ「幅」でも
「外接矩形の幅」と「輪郭の最大径」では結果が変わるので、仕様を先に決めるのが大事です。
まとめ
- OpenCVは画像を整える・測る担当(幾何補正やキャリブレーションも)
- scikit-learnは定番機械学習(非DL中心)の担当(評価も強い)
- **Keras(多くは
tf.keras)**は深層学習を手軽に書く担当 - PyTorchは深層学習を自由に作り込む担当
- 画像からの実寸推定は、基本的に スケール(基準)・距離・深度(3D) のどれかを入れるのが現実解