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

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

新規登録して質問してみよう
ただいま回答率
85.46%
CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

OpenCV

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

Python

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

Q&A

0回答

1396閲覧

画像内の特定画像(ロゴ)の検出

toyatii

総合スコア0

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/11/29 01:40

編集2020/12/01 14:50

タイトルと内容が合っていなかったので内容を整理して再度質問します。

画像の中のロゴを検出し、その座標を取得したいです。
「ロゴは2種類ありまして、ロゴ1とロゴ2です。
1)ロゴ1が存在する/しない
2)ロゴ2が存在する/しない
3)両方とも存在する場合、ロゴ1とロゴ2の位置
が知りたいのです」
「テンプレマッチでは、ほぼ水平の画像であれば、上記1),2),3)は検出できていましたが、
傾いた画像だと検出できませんでした。
角度で言えば、プラマイ20度以内の傾きを想定しています。
それ以上の傾きは検出できなくても良いです。
R-CNNやCNNに拘っている訳ではないです。
私の内容は、R-CNNやCNNを使うべきなのでしょうか、他の手段があるのでしょうか?
ご存じの方ご教授願います。```ここに言語を入力

追記:
ここで言う傾きとは、時計回りにプラマイ20度回転するを意味します。
3次元的な回転ではないです。

私が書いたコードを添付します。
ターゲット画像の中からロゴ1とロゴ2を見つけます。
MAXVALが0.90以上あれば発見したとみなします。
ロゴ1とロゴ2の位置を比較します。
ロゴ1がロゴ2より右側にあればOKとします。
そうでなければNGです。
-記-

import cv2 import numpy as np from matplotlib import pyplot as plt # 読み取った画像の読み込み path = "C:/Users/matching/xxx.jpg" img = cv2.imread(path) img_terget = img plt.imshow(img) #一旦表示 plt.show() print(img.shape) # テンプレート画像の読み込み # LOGO1 temp_path = "C:/Users/template/logo1.jpg" img= cv2.imread(temp_path) logo1 = img plt.imshow(img) plt.show() print(img.shape) # LOGO2 temp_path = "C:/Users/template/logo2.jpg" img= cv2.imread(temp_path) logo2 = img plt.imshow(img) plt.show() print(img.shape) # テンプレートマッチング form = cv2.TM_CCOEFF_NORMED result1 = cv2.matchTemplate(img_terget, logo1, form) result2 = cv2.matchTemplate(img_terget, logo2, form) # 最も類似度が高い位置を取得する。 #LOGO1 minval, maxval, minloc, maxloc = cv2.minMaxLoc(result1) maxloc1 = maxloc #画像の座標で使うのでそれ用として確保 maxval1 = round(maxval, 2) #数が長いので小数点2桁までにする、 #LOGO2 minval, maxval, minloc, maxloc = cv2.minMaxLoc(result2) maxloc2 = maxloc #画像の座標で使うのでそれ用として確保 maxval2 = round(maxval, 2) #数が長いので小数点2桁までにする、 #判定 if maxval1 >= 0.90 and maxval2 >= 0.90 and macloc1 > macloc2  print("ok") else  print("ng")

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

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

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

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

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

toast-uz

2020/11/29 03:11

R-CNNの質問者様の見つけたリンクをよく見てください。「画像に複数の物体(車*2+バス)が写り込んでおり、モデルはその物体が画像中のどこの座標に存在しているか当てる」という課題設定に取り組んでいるのが物体検出であり、その手段としてR-CNNがあります。 質問者様は「複数のサッカーチームのロゴが写り込んだ画像の中で、各サッカーチームを判別したい」と考えているのでしょうか?違いますよね。よって、R-CNNを使おうとされているのは目的に合っていません。 この場合、Rなしの普通のCNNにチャレンジしてみてください。CNNについて学ぶにはディープラーニングの概念や道具をある程度知っておく必要があり、OpenCVだけ使っている質問者様だと、覚えることは多いです。teratailのような質問サイトで質問しているだけだと学びにくいと思いますので、CNNについて記載されているディープラーニングの入門書を1つ買って読むのが最も早いと思います。なお、画像が傾いているとかに対応できるように学習データを水増しする方法は、CNNの基礎の1つです。 なお、CNNが使えるようになって、はじめてR-CNNを学ぶ土台ができます。よって、R-CNN使いたい!と思っても、まずはCNNに取り組みましょう。
toyatii

2020/11/29 04:21

お返事ありがとうございます。 お察しの通り、各サッカーチームのロゴを判別したいという訳でわないです。 例えば、車とバスの画像で話すると、 バスは画像のどの座標にいるかが知りたいのです。バスがロゴに当たります。 このようなことをするにはどのようなやり方があるかが知りたい内容です。
toast-uz

2020/11/29 04:33

「画像の中にロゴが発見できたらOKをロゴが見つからなければNGと判定する」というご質問文と「座標を知りたい」というのは、難易度が大きく変わります。 また学習の順番としても、前者をまずできるようにしてから、後者に取り組む方がよいと思います。
toyatii

2020/11/29 04:57

テンプレートマッチを行った時点では、取り込んだ画像が水平の場合、 ロゴは検知でき座標も取得できました。 しかし、傾いた画像の場合、ロゴも傾いているので、検知できなかったのです。 それを解決できる方法を探しているのです。 それがRCNNかなと思っただけです。 目的は、  ・ロゴが画像のどの辺にあるかその座標を知りたい  ・水平のロゴだけでなく傾いたロゴも検出したい です。 例えば、それっぽい画像を切り出せれば、 切り出した画像をCNNで解析できるのではないかと思ったのです。
toast-uz

2020/11/29 05:09 編集

ご質問文である「画像の中にロゴが発見できたらOKをロゴが見つからなければNGと判定する」と、いまやりとりして判明した「座標を知りたい」は、難易度が大きく変わります、とお伝えしています。 高難易度の回答を求められるのであれば、そのように質問文を修正されたほうがよいと思います。 以下のような話など、回答の内容がだいぶ変わってくると思います。 https://qiita.com/karaage0703/items/76ef6b774e3cd69028bb
toyatii

2020/11/29 05:14

すいません。 難易度が大きく変わるというところがよく分からないです。 テンプレートマッチングではない別の手法になるので難しいということでしょうか?
toast-uz

2020/11/29 05:42 編集

URL長いですが以下をご覧ください。項2の前の図がわかりやすいと思います。この中で、画像分類なのか、物体位置特定まで必要なのか、ということをお聞きしています。それぞれの分野ごとに必要となる技術は変わってきて、後ろに行くほど難易度があがります。 https://data-analysis-stats.jp/%E6%B7%B1%E5%B1%9E%E5%AD%A6%E7%BF%92/%E7%94%BB%E5%83%8F%E5%88%86%E9%A1%9E%E3%83%BB%E7%89%A9%E4%BD%93%E6%A4%9C%E5%87%BA%E3%83%BB%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AF%94%E8%BC%83/ opencvのテンプレートマッチングはもっと高度な物体検出の「定食メニュー」です。定食メニューだといまひとつなので、他の手段が欲しい、というのが質問者様の状況です。それに対して、どういうジャンルの料理がいいのかを聞いているのが私です。もちろん、他の店の定食で質問者様にぴったりのものが見つかる可能性もありますが、それでもどのジャンルの料理がお好みかは確認が必要ですし、高級料理だとそれだけ見つかる可能性は減っていきます。また、「自炊するのでしたら簡単なもの(画像分類)から取り組んだ方がよいですよ」「定食を探すにしても、画像分類なのか物体位置特定まで必要なのかは明確にしたほうがよいですよ」と伝えているのが私のこれまでのコメントです。 そもそも質問タイトル「R-CNNの具体的記述」は、物体検出の自炊方法を教えてください、と言っていますし、「画像の中にロゴが発見できたらOKをロゴが見つからなければNGと判定する」は画像分類を言っており、とらえどころがありません。
toyatii

2020/11/29 20:55

お返事ありがとうございます。 タイトルと内容表現が的確でなく申し訳ございません。 実はロゴは2種類ありまして、ロゴ1とロゴ2です。 ロゴ1の検出ができれば、同じ手法でロゴ2も検出できると思い、ロゴ2については伏せていました。  1)ロゴ1が存在する/しない  2)ロゴ2が存在する/しない  3)両方とも存在する場合、ロゴ1とロゴ2の位置 が知りたいのです。 少しは明確になったでしょうか? これらの内容は、紹介頂いたサイトでは、DOG97%、DOG93%と 表示された物体検出に該当するのでしょうか?(そんな気がするのですが…) テンプレマッチでは、ほぼ水平の画像であれば、上記1),2),3)は検出できていましたが、 傾いた画像だと検出できませんでした。 角度で言えば、プラマイ20度以内の傾きを想定しています。 それ以上の傾きは検出できなくても良いです。 R-CNNやCNNに拘っている訳ではないです。 私の内容は、R-CNNやCNNを使うべきなのでしょうか、他の手段があるのでしょうか?
toast-uz

2020/11/29 22:17

「画像の中にロゴが発見できたらOKを、ロゴが見つからなければNGと判定する みたいなことです。」 を削除して、 「ロゴは2種類ありまして、ロゴ1とロゴ2です。 ロゴ1の検出ができれば、同じ手法でロゴ2も検出できると思い、ロゴ2については伏せていました。  1)ロゴ1が存在する/しない  2)ロゴ2が存在する/しない  3)両方とも存在する場合、ロゴ1とロゴ2の位置 が知りたいのです」 「テンプレマッチでは、ほぼ水平の画像であれば、上記1),2),3)は検出できていましたが、 傾いた画像だと検出できませんでした。 角度で言えば、プラマイ20度以内の傾きを想定しています。 それ以上の傾きは検出できなくても良いです。 R-CNNやCNNに拘っている訳ではないです。 私の内容は、R-CNNやCNNを使うべきなのでしょうか、他の手段があるのでしょうか?」 をそのまま質問文に記載されるとよいと思います。
toyatii

2020/11/29 22:59

承知致しました。 再度、記載します。
toast-uz

2020/11/30 13:32 編集

修正ありがとうございます。 ご自分で既にトライしていることは書いた方が良いです。また単なるサンプルを貼るのではなく、ご自分で使っているコードを貼ってください。OpenCVのテンプレマッチで傾いていないロゴを識別成功しているコード、識別結果例、傾いているロゴは識別できていない例、などを記載されるとよいでしょう。 これは、文章だけで書かれている質問文の具体内容を知るためであり、かつ、質問者がどの程度のプログラミングスキルをもたれているのかを知るためであり、かつ、teratailの質問上、丸投げは非推奨なので、丸投げイメージを排除するためです。 あと、私の指摘をそのまま貼り付けるのではなく、自然な文章を作ってください。
fana

2020/12/01 02:22

> プラマイ20度以内の傾き 想定する傾きとは,3次元的ないろんな方向への傾きという意味でしょうか? (「ほぼ水平の画像であれば…」という記述だと,画像平面上での2次元的な傾きという意味にも見えるので)
toyatii
fana

2020/12/02 01:13

> ほぼ水平の画像であれば… の「ほぼ」がどの程度かわかりませんが,例えば「3度くらいならいける」という話だとすれば, わかりやすい(力技な)方法としては「テンプレート(あるいは探索される画像の側)を3度単位で回転してはテンプレートマッチングする」というのがあります. また,何かしらの回転不変な特徴を用いる等の話も考えられます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問