質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

690閲覧

Pythonで書いた物体認識のプログラムの出力がおかしい

iden_mos

総合スコア4

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/29 12:06

編集2020/04/29 12:11

前提・実現したいこと

pythonを用いてOpenCVで物体認識をしたい

発生している問題・エラーメッセージ

物体(キャベツ)を認識したらそれを赤い四角で囲むはずが出力ファイルに何も描かれない

該当のソースコード

Python

1#-*- coding:utf-8 -*- 2import os 3import cv2 4import numpy as np 5 6# カスケード型識別器の読み込み 7cascade = cv2.CascadeClassifier("cascade.xml") 8 9# 入力画像を読み込み 10img = cv2.imread("3.jpg") 11 12# グレースケール変換 13gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 14 15# 物体領域の探索 16obj = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30)) 17 18# 物体の領域を赤色の矩形で囲む 19for (x, y, w, h) in obj: 20 cv2.rectangle(img, (x, y), (x + w, y+h), (0, 0, 200), thickness=3) 21 22# 結果の出力 23cv2.imwrite("output1.jpg", img)

3.jpgはキャベツが3つほど写っている画像です。
プログラムの参考元はこちら

試したこと

img,gray,objの出力を確かめました。

print(imgとすると)

[[[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] [[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] [[255 255 255] [255 255 255] [255 255 255] ... [247 245 245] [247 245 245] [247 245 245]] ... [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]] [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]] [[243 244 242] [243 244 242] [243 244 242] ... [230 231 227] [232 233 229] [232 233 229]]]

print(gray)とすると、

[[255 255 255 ... 245 245 245] [255 255 255 ... 245 245 245] [255 255 255 ... 245 245 245] ... [243 243 243 ... 230 232 232] [243 243 243 ... 230 232 232] [243 243 243 ... 230 232 232]]

print(obj)とすると

()

cascade.xmlの中身は、それっぽい数字が並んでいて学習が失敗したわけではなさそうでした。

補足情報(FW/ツールのバージョンなど)

macOS Catalina 10.15.2
python 3.7.6
OpenCV 3.4.9(print(cv2.version)を実行)

OpenCVが4.xでない理由は、ネット上のプログラムを参考にする上で4.xでは動かない物がいくつかあったので(opencv_traincascadeなど)改めて3.xをインストールしてそちらにPATHを通したからです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

obj が空なので,認識されたキャベツはなかったということになります.
学習が失敗していないようであれば,学習された識別器では与えた画像内にキャベツを認識できなかったのではないかと思います.

投稿2020/04/30 11:21

mktia

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iden_mos

2020/05/01 11:22 編集

回答ありがとうございます。 その可能性を考えて、識別器を作成する際に1枚だけ正解画像を用意して行ったことから、それを改めて識別させたところ同様にobjの中身が空でした。 これはつまり学習の仕方が相当おかしかったということでしょうか?
technocore

2020/05/01 11:26

cascade = cv2.CascadeClassifier("cascade.xml") これはキャベツを判別する識別器ですか?
iden_mos

2020/05/01 12:00

その通りです。そのファイルが学習後のファイルです。
mktia

2020/05/01 13:28

識別器作成とテストで同じ画像を使用して認識できないということは,識別器作成の時点で何らかの処理が誤っている可能性が高いのではないかと思います.
iden_mos

2020/05/01 15:14

ありがとうございます。もう一度そこからやり直してみます
iden_mos

2020/05/01 16:07

間違い画像だけを差し替えてもう一度識別器を作成したのですが、同様な結果になりました。(というか,gray,imgの中身がすべて255になった気がします)。 個人的に原因の一つは画像のサイズがバラバラすぎることではないかと思っているのですが、これ以降は違う質問扱いにした方がいい気がするので、一旦返信を止めることにしておこうと思います 返信してくださったお二方丁寧な返信ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問