python 物体検出 opencv 10

OpenCVを使ったPythonでの画像処理について、物体の追跡(Object Tracking)について扱っていきます。, ここではオプティカルフロー(Optical Flow)の概念とWebカメラを使ってのLucas-Kanade法による物体の追跡を行ってみようと思います。, ここではテキストエディタを使ってコードを書き、ターミナルの対話型シェルから実行して行こうと思います。, オプティカルフローとは、視覚表現(物体やカメラの移動によって生じる隣接フレーム)の中で物体の動きをベクトルで表したものです。, 各ベクトルの1フレーム目から2フレーム目への移る変位ベクトルを、2次元ベクトル場で表現します。, 数学的な説明には触れませんが、オプティカルフローは次のような仮定に基づいて計算されます。, 画像中の画素を考え、わずかな時間t後に撮影された次の画像の画素がそれだけ距離を移動したとして、この二つの画素は同じものとし、明るさは変わらないと仮定して計算したものがオプティカルフローです。この計算には未知のものが残るのですが、この一つの解決法がLucas-Kanade法となります。, Lucas-Kanade法は、ある点に対してその点を含む周囲の3×3に含まれる9画素が同じ動きをしていると仮定し、この9画素の情報を基に注目点の位置の移動を計算します。, ただし、小さい運動を扱うのと、大きな動きがあった場合は観測に違いがあるので、画像のピラミッドの概念を使います。, 画像のピラミッドとは、オリジナルの画像からレベルをピラミッド頂点へズラすようにスケールをアップすると、小さな動きが消され大きな動きが小さな動きとして観測することができます。Lukas-Kanade法をこの解像度で適用することで、そのスケールでのオプティカルフローを得ることができます。, というイメージですが、細かい数学的な素養が無いと深い理解はできないので、そのあたりは関心があるかたは別で勉強してください。検索すると色々な解説が出てきます。, 物体のコーナーを検出して動きを追跡する為にShi-Tomasiコーナー検出を使う為のパラメータの設定です。, あとで出てきますが、goodFeaturesToTrack()でコーナを検出しますが、これに画像を渡し、ここでは辞書型のデータとして、検出したいコーナーの数、0から1の間の値の検出するコーナーの最低限の質、検出される2つのコーナー間の最低限のユークリッド距離を設定します。, 次に、Lucas-Kanade法を使ったオプティカルフローのパラメータを設定していきます。あとで出てきますが、OpenCVはLucas-Kanade法の全ての処理を行うcalcOpticalFlowPyrLK()関数が用意されています。このパラメータを設定しておきます。, winSize引数を変更して、特定の点の動きや集約された領域の動きを検出します。小さくするとノイズに敏感になり、大きな動きを見逃す可能性があります。, maxLevelは画像のピラミッドのことで、ここが0の場合、ピラミッドを使用しないことを意味します。ピラミッドを使用すると、画像のさまざまな解像度でオプティカルフローを見つけることができます。, criteriaで繰り返し処理の終了条件を与えています。この条件が満たされた時にアルゴリズムの繰り返し計算が終了します。cv2.TERM_CRITERIA_EPSは指定された精度(epsilon)に到達したら繰り返し計算を終了します。 cv2.TERM_CRITERIA_COUNTは指定された繰り返しの最大回数(count)に到達したら繰り返し計算を終了します。ここではこれらのどちらかの条件が満たされた時に繰り返し計算の終了を指定しています。ここでは回数を10、精度を0.03にしています。多くの反復はより徹底的な検索を意味し、小さな精度は処理を早く終わらせることを意味します。, cv2.VideoCapture(0)でwebカメラに接続します。ここではMac内臓のデフォルトのカメラに接続しているので0を指定します。, cap.read()で映像を読み込んで、cv2.cvtColor()を使ってグレースケールの変換しています。これを直前のイメージとして理解することにします。, cv2.goodFeaturesToTrack()で物体のコーナーを検出(Shi-Tomasiコーナー検出)しています。ここで先ほどの設定したパラメータを使っています。, あとで検出を描画するために、直前のイメージのフレームにマッチするmaskをnp.zeros_like()を使って作成します。このnp.zeros_like()は、np.zeros()のように第一引数にshapeで型を渡すのではなく、shapeを真似たい配列を指定することで、np.zerosと同じように0の配列を作ってくれます。, while文を使って、キャプチャーを実行し、read()で読み込みます。retはデータの読み込みの可否のture/false、frameで映像のパラメータを取得しています。, cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)で映像をグレースケールに変換します。ここではframe_grayとしておきます。, ここでcv2.calcOpticalFlowPyrLK()を使ってグレースケールのフレーム上のオプティカルフローを計算します。この関数の引数に、直前のイメージ、直後のイメージ、直前に検出したポイント、直後のポイント(ここではNone)、最初の方で準備した辞書型のパラメータを順に渡して計算します。, 返された新しいポイントと直前のポイントの配列を使います。対応する特徴のオプティカルフローが見つかった場合はベクトルの各要素は1に設定され、それ以外の場合は0に設定されます。これをそれぞれgood_new、good_prevにします。, zip関数を使うと複数のシーケンスを並列に反復処理することができるので、good_new、good_prevを同時に処理します。これをfor-inループを使ってenumrate()でインデックスと新旧の検出ポイントを取り出します。, これをravel()で1次元化してx、yの座標に代入する処理を、新しいポイントと直前のポイントで行っています。, 最初のフレームから作成したマスクを使用してcv2.line()で移動の線を描画していきます。新しい点から直前の点に向けて線を描くことで軌跡のように描けるので、そういう渡し方をしています。色は緑色、太さを3にしました。こちらはmask側に描いていることに注意です。, cv2.circle()で新規のポイントに円を描きますが、こちらはframe側に描きます。半径8、色は赤、塗りつぶしなので-1を指定しています。, cv2.add()を使って画像の足し算します。frameをmask与えて点と線の描画を合成しています。これをimshow()で表示します。, if cv2.waitKey(30) & 0xff == 27: で[esc]キーを押された時にbreak処理をします。, 直前のフレームと直前のポイントを更新します。frame_gray.copy()でフレームの更新、reshape()でポイントの更新をしています。good_new.reshape(-1,1,2)は、-1で元の形に戻し1行2列の型にしています。, cap.release()でデバイスを解放し、cv2.destroyAllWindows()で全て終了させます。, このPythonスクリプトをターミナルから実行するとwebカメラが起動して、ビューワーに赤色のポイントが入った映像が映るはずです。自分が写っていたら顔を移動したり、カメラを移動したりすると、検出されたポイントが移動して緑色の線で物体追跡の軌跡が描かれるはずです。, OpenCVを使ったPythonでの画像処理について、物体の追跡(Object Tracking)について扱いました。, ここではオプティカルフロー(Optical Flow)の概念とWebカメラを使ってのLucas-Kanade法による物体の追跡をやってみました。, オプティカルフローとは、物体やカメラの移動によって生じる隣接フレームの中で物体の動きをベクトルで表したものです。, Lucas-Kanade法は、ある点に対してその点を含む周囲の3×3に含まれる9画素が同じ動きをしていると仮定し、この9画素の情報を基に注目点の位置の移動を計算する方法です。, ここではwebカメラで映した画像の注目点の移動を線で描くコードを扱いましたが、次では画像画像中の全画素に対してオプティカルフローを計算する方法を扱います。, 【Python】OpenCVのHarrisコーナー検出とShi-Tomasiコーナー検出, OpenCVを使ったPythonでの画像処理について、ここではコーナー検出を学びます。Harrisコーナー検出でcornerHarris()を、Shi-Tomasiコーナー検出でgoodFeaturesToTrack()を扱います。, 【Python】OpenCVの密なオプティカルフロー calcOpticalFlowFarneback(), OpenCVを使ったPythonでの画像処理について、Lucas-Kanade法は「疎」の物体追跡の検出でしたが、ここでは逆に密なオプティカルフローの検出アルゴリズムであるcalcOpticalFlowFarneback()を扱います。, Pythonを使って電子メールを送信する方法について扱います。ここで利用する電子メールはGoogleのGmailを使ってメールを送信するという方法を見て行きます。メール送信だけでなく、添付ファイルの送信、ログの記録の送信までやってみます。, OpenCVを使ってPythonで画像を処理する方法について、ぼかしや平滑化について扱います。filter2D()、blur()、GaussianBlur()、medianBlur()、bilateralFilter()の処理を見て行きます。, Webスクレイピングは、インターネットからデータ情報を収集する作業です。PythonでWebスクレイピングするためには、便利なサードパーティライブラリのBeautifulSoupがあります。このBS4のインストールをして行きましょう。, Pythonの標準ウェブライブラリであるurllibのurllib.requestをつかってHTTPメソッドを操作したのと同様に、サードパーティのrequestsを使ってHTTP通信のテストを行います。こちらの方がコードが簡単になります。, Pythonの標準ウェブライブラリであるurllib.requestを使って、HTTP通信を行います。HTTPメソッドのGET、POST、PUT、DELETEの操作を https://httpbin.org を使ってテストしてみます。, OpenCVを使ったPythonでの画像処理についてヒストグラムを扱います。ヒストグラムを求めるにはcalcHist()を使います。画像のコントラストを調整するのにヒストグラム平坦化があり、equalizeHist()を使います。. といっても、コード自体はとても簡単ですので以下をコピペしてください。, では、train.pyを実行して機械学習をしましょう! そのため、今回の手順は次のようになります。, そして、この「学習データ」を使って(全く別の)写真の中にビールジョッキが写っているかをチェックします。, ※もしCMake must be installed to build the following extensions: dlibというエラーが出た場合cmakeをインストールしてから実行してください。, はじめに、学習させる写真を用意して、/images/trainフォルダに設置します。, さすがに1枚だけでは機械学習させるには少なすぎますので、最低でも5〜10枚程度は用意した方がいいでしょう。, ただし、ここは機械学習の難しいところですが、数が多ければいいというものではなく、似てる写真ばかりだと学習が偏ってしまい「これしかダメ!」というように「頑固なデータ」になってしまうことがあります。, もし学習するデータが揃っていない場合はダウンロードするからビールジョッキの画像もダウンロードできますので、そちらを使ってください。, いろいろと方法があるのですが、今回はインストール不要で機械学習に必要なxmlをつくることができるImgLabというサイトを使わせていただきます。(感謝✨), まずこのサイトにアクセスすると、ポップアップ表示されるので、「UUM! 以下のコマンドを実行してください。, 今回はビールジョッキの学習データなので、正解の写真を2枚だけ用意して/images/detectionに設置します。, 内容としては、「写真の中にビールジョッキがあるか?」をチェックし、もし存在していたらその座標部分を切り出して保存しています。, そして、検出したビールジョッキが切り出されてこのようにファイルが作成されています。, 今回実際に開発したソースコード一式を以下からダウンロードすることができます。(画像も全て入っています), ということで、今回は機械学習でビールジョッキを検出するプログラムをご紹介しました。, 冒頭でも書きましたが、ビールジョッキに限らずあなたが好きな物体で試すことができます。, 過去には、ある会社の商品画像にロゴが入っているものと入っていないものが共存しているので、機械学習で入っていないものだけ探し出すという記事を読んだことがあります。, と関心したのですが、AIや機械学習といっても結局は人間の工夫が大事だということだと思います。, 開発状況によりましては開発をお待ちいただく可能性もございますが、ご相談はいつでもお受けしております。お気軽にご連絡ください♪, 【Laravel Jetstream】複数モデルでログインできるようにする(Multi Auth).

損保ジャパン ドラレコ 評判 6, 獅子座 O型 好き嫌い 19, エアコン ガス漏れ 車 7, 清須会議 映画 相関図 13, 30 ヴェル ファイア アンプ 取り付け 4, Vba Dvd ドライブ 6, Log Lin 変換 4, Rdr2 伝説の動物 盗品商 7, ベリーショート ファッション 高校生 9, F35 日本 韓国 違い 5, ゴルフ7 ヴァリアント ブログ 5, レオパレス ルーター 自前 6, プレマシー 収納 工夫 4, オールド デュトロ ノミー 歌詞 4, 早稲田 Eスクール 学費 5, Pop Step Rar 30, Anker Soundcore Liberty Air 2 第2世代 違い 4, Open My Icloud 31, チェルシー 移籍 掲示板 16, モンスター 白 カロリー 7, トタン屋根 雨漏り 防水テープ 6, Docuworks お仕事バー ない 15, Vba フォルダ内 ファイル名 取得 15, Bts シリアルナンバー どこ 15, 荒野行動 垢 動画 4, 流星の絆 読書感想文 コピペ 10, Skype For Business 自動起動させる 8, Vba テーブル 行 コピー 13,

Leave a Reply

Your email address will not be published. Required fields are marked *