• 検索結果がありません。

OpenCVを用いた画像解析による各種課題解決の提案 -製品の品質検査からモーション・キャプチャまで(ロボットの目)-(PDF)

N/A
N/A
Protected

Academic year: 2021

シェア "OpenCVを用いた画像解析による各種課題解決の提案 -製品の品質検査からモーション・キャプチャまで(ロボットの目)-(PDF)"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

OpenCV を用いた画像解析による各種課題解決の提案

-製品の品質検査からモーション・キャプチャまで(ロボットの目)-

Proposal of various problem solutions by image analysis using OpenCV -From quality inspection of products to person's motion capture (eyes of robot)-

福良 博史 FUKURA Hirofumi 1.はじめに 東京校における生産系4年生は、一般の工 科 系 の 大 学 で の 卒 業 研 究 に 該 当 す る も の と して、開発課題に取り組まなければならない。 開発課題では生産機械システム技術科、生産 電 子 シ ス テ ム 技 術 科 お よ び 生 産 情 報 シ ス テ ム技術科の3科の学生に対し、共同で新しい も の づ く り に 取 り 組 む こ と が 義 務 付 け ら れ ている。東京校における開発課題は多種多様 である。この中で、今年度も含めた過去に、 情 報 系 の 要 素 と し て 画 像 解 析 を 用 い た 様 々 な開発課題があった。例えば、人の動きを監 視し追尾するもの、包装容器の品質検査、機 械部品の傷の判別検査、そして今年度は機械 部品の形状測定を行っている。 こ の よ う に 色 々 な 課 題 解 決 の た め に 画 像 解析が利用される場面が少なくない。それぞ れ の 課 題 毎 に 個 別 に ソ フ ト を 制 作 し な け れ ばならないのが現状である。高価な画像処理 のハードとソフトが世の中にはある。このハ ー ド と ソ フ ト が 利 用 で き る 環 境 の 場 合 は 実 現性については困難な問題を生じにくい。し か し そ の よ う な 機 材 を 利 用 す る こ と が 費 用 的 に み て 困 難 な 場 合 は 自 前 で 色 々 な 関 数 群 を用意し、ハードも安価なもので限界に挑戦 することも多い。この挑戦自身はそれなりに 教育効果も高いともいえる。その反面問題の 解 決 に は 程 遠 い ま ま 課 題 が 山 積 し て し ま う ことも考えられる。このようなことになると 学生が達成感を得にくくなるので、ものづく り の 経 験 を 積 む 上 で は あ ま り 好 ま し い こ と ではないと考える。 近 年 画 像 解 析 の 分 野 に 画 期 的 な こ と が 生 じている。ライセンス・フリーのソフトで高 度 な 画 像 解 析 を 実 現 す る 関 数 群 の ラ イ ブ ラ リが提供されるようになってきた。それは、 Intelから提供されている画像解析ソフトの ライブラリで、OpenCV1 )(Open Source

Computer Vision)と呼ばれている。2006 年にver.1が提供2 )されている。このライ ブ ラ リ に は 種 々 の 画 像 解 析 用 関 数 が 用 意 さ れている。コンピュータの環境もWindows のみならず、LinuxとMacも利用できる。 以下、実験例を紹介する。OpenCVを利用 す る こ と で ロ ボ ッ ト の 目 と し て の 画 像 解 析 が、高度な課題解決の武器になると考える。 2.実験用の環境 今回実験した環境を表1に示す。項番5,6, 7はフリーソフトである。ハードウェアはか なり貧弱な構成と思うが、このような環境で も開発および実行が可能である。パソコン本 体はASUSのEee PC 701SDで、SSD16GB を64GBに入替えた構成で利用している。 開発用言語はCかC++が一般的である。他の 言語として、Pythonも利用できることになっ ている。開発環境のOSは、MacとLinuxも可 能であるが、今利用できるPCがWindowsであ る。このためWindowsを用いた。C言語は、 Cygwin環境のGCCおよびMinGWも利用でき る ことに なっ ている 。こ こでは 、Microsoft が提供しているフリーのVC++3 )を利用した。 OpenCV4)ver.1 は、インストール後、そ のまま利用できたが、ver.2 からは、ライブラリ 自身がソースコードでの提供となっており、ラ イブラリ自身のコンパイルを事前に行わないと 利用できない。このためOpenCV が使えるよう になるまでの準備に若干手間がかかる。

(2)

表2 主なライブラリ

章 章の題名 ライブラリ例

1 CXCORE Operations on Array など 2 CvReference Gradients Edges Laplace Geometrical Transforms Morphological Operations Filters Color Conversion Histograms Matching Motion Analysis Object Tracking Pattern Recognition Camera Calibration 3D Reconstruction など 3 CvAux Stereo Correspondence Functions View Morphing Functions 3D Tracking Functions

など

4 HiGui Simple GUI

VIdeoI/OFunctions など

5 Machine Learning

Normal Bayes Classifier K Nearest Neighbors Decision Trees Neural Networks など 表1 主な実験用環境 項番 項目 明 細 1 CPU Atom 2 OS Windows XP Home Edition SP3 3 メモリ 512MB 4 カメラ QuickCam QV-31(USB) 5 開発環境 Microsoft Visual C++ 2008 Express Edition 6 画像ライ ブラリ OpenCV 2.0.0a 7 make CMake 2.8.0 このコンパイルには、CMake5)が必須である。 パソコンの能力にもよるが、数時間から長くて 一日程度の時間をインストールからセットアッ プまでに要すると考えておけば十分である。 3.主なライブラリの機能 日本語のリファレンス(ver.1)がインターネ ット上にある6)。OpenCV をインストールする とpdf で 800 ページをこえるドキュメント(英 文)が参照できるようになっている。このドキ ュ メ ン ト の 構 成 は 、 1 .CXCORE 、 2 . CvReference、3.CvAux、4.HighGui、5. Machine Learning、6.C++ Interface の6章 に分かれている。このうちの1から5までの、 主なライブラリを表2に列挙する。 4.実験例 いくつかのライブラリを用いて画像処理を行 った。その実験結果の概要を紹介する。 4.1 マッチング マッチングは、品質検査として、製品の傷の 有無をチェックのために利用できる。セキュリ ティ対策として、顔や指紋などによる認証にも 利用できる。 ここでは、簡単に実験するために、被写体の 目の部分をテンプレート(図1)として切り出 し、元の顔の画像とのマッチングを行ってみた。 結果の画像を図2に示す。 図1 テンプレート画像 マッチングのプログラムは 50 行以内で作製で きる。ほとんど関数を利用するだけでできあが っている。 コードの主な部分を抜粋したものを図3に示

(3)

す。マッチングには cvMatchTemplate 関数を 用いる。cvMinMaxLoc 関数は、最大の相関値 の箇所を探すために用いる。cvRectangle 関数 は、マッチング箇所を白四角の枠で囲むために 用いる。 図3 テンプレートマッチングのコード抜粋 4.2 物体抽出による人の顔認識 これは、マッチングではなく、xml ファイル (haarcascade_frontalface_default.xml)に正 面からの顔画像のモデル・データが用意されて いる(3 万行以上)。このデータと Haar 分類器 を用いた物体抽出法である。 正面からの顔を抽出した結果、その顔を白枠 で囲い、表示するプログラムも 50 行以内でで き上がる。 コードの主な部分を抜粋したものを図4に示 す。cvHaarDetectObjects 関数を用いて顔の抽 出を行う。 図2 マッチング結果の画像 この関数への入力は、画面と先ほどのxml ファ イルの顔データを読み込んでおいた情報の2 個 である。cvGetSeqElem 関数を用いて抽出した 件数分の顔の情報を得る。cvRectangle 関数を 用いて、顔の抽出位置を白枠で囲う処理をして いる。このプログラムは、先ほどのマッチング 処理と同様に、ほとんど関数の呼び出しだけで プログラムの処理ができている。 顔認識の結果は図5である。 // 顔の正面画像モデル・データを読み込む CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*) cvLoad( "C:/opencv/haarcascade_frontalface_default.x ml" ); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* faces; int i; // Haar 分類器と顔のデータを用い、正面顔画像を検出 faces = cvHaarDetectObjects(

image, cascade, storage ); // 検出した箇所を四角で囲って表示 for( i = 0; i < faces->total; i++ ){ CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i ); if ((face_rect.width>130) & (face_rect.width<200)) cvRectangle( image, cvPoint(face_rect.x,face_rect.y), cvPoint((face_rect.x+face_rect.width), (face_rect.y+face_rect.height)), CV_RGB(255, 255, 255), 8 ); } cvReleaseMemStorage( &storage ); cvNamedWindow( "face_detect", 0 ); cvShowImage( "face_detect", image ); IplImage *src=cvLoadImage("source.bmp",0); IplImage *temp=cvLoadImage("template.bmp",0); IplImage *dst=cvCreateImage( cvSize(src->width-temp->width+1, src->height-temp->height+1),IPL_DEPTH_32F,1); // テンプレートとのマッチング cvMatchTemplate( src,temp,dst,CV_TM_CCOEFF_NORMED); double minVal=0,maxVal=0; CvPoint minLoc,maxLoc,opposite; // マッチング結果の相関が最大の場所を調べる cvMinMaxLoc( dst,&minVal,&maxVal,&minLoc,&maxLoc,NULL); opposite.x=maxLoc.x+temp->width; opposite.y=maxLoc.y+temp->height; // マッチング箇所を四角で囲い、表示する cvRectangle( src,maxLoc,opposite,CV_RGB(0,0,255),2,0,0); cvShowImage("Show",src); 図4 人の正面画像の抽出コード抜粋

(4)

図5 正面からの顔の抽出 4.3 モーションキャプチャ 物 体 の 動 き を 追 跡 す る プ ロ グ ラ ム は 、 OpenCV をインストールしたとき、サンプル・ プログラムとして提供されている。インストー ルしたフォルダが OpenCV2.0 だとすると、 c:¥OpenCV2.0¥samples¥c¥ lkdemo.c がその プログラムである。 このプログラムは、マウスでクリックすると、 小さな丸いマークが付加される。これは複数個 所に付加することができる。このマークをつけ た箇所を追跡するようになっている。移動速度 が速いと追跡できないが、高々200 行程度のコ ードではあるが動作実験には支障が無かった。 例えば、顔の目と鼻にマークを付加し、マバ タキをしたり、口を動かしたり、または顔を斜 めにしたりしてみると、リアルタイムに追跡し ているのが実感できる。この動きを実験してみ ることが、ものづくりの実体験としては有益で ある。ここでは、ホワイトボード上でその動き の様子を実験したときの写真を紹介する。 図6のように右のマグネットにマウスを用い てマークをつける。このマグネットを移動 させると、マークを追跡する(図7)。 図6 マーク付け(移動前) 図7 マークの追尾(移動後)

(5)

5 まとめ この環境のインストール7)8)は、慣れていれ ば数時間で設定できる。プログラムもC と C++ を使ったことのある人であれば数時間でこの確 認実験までできる。OpenCV を用いると、画像 解析が日曜大工的にできるという感覚が持てる。 しかし、C 言語などのプログラミングの素養が 無いと理解が困難であろうと思われる。プログ ラミングの知識を前提とした OpenCV の使い 方を説明したホームページ9)もある。 このように画像の解析が非常に容易にできる ようになってきたことにより、パソコンを用い た環境でよければ、今後は、各種の高度な応用 に存分に力を振り向けることが可能と考える。 ま た 現 在 の ハ ー ド の 高 集 積 化 か ら 考 え る と FPGA への実装にも利用できるのではないかと 考える。この根拠として組込み系への移植の事 例がある。OpenCV を iPhone に一部移植した 例が詳細に報告10)されている。 応用分野として、従来のマッチングによる傷 の検査、人の認証検査およびものの計測などの 分野以外に、ものづくりの作業分析用のモーシ ョンキャプチャとしても利用することが可能と 考える。たとえば旋盤の熟練者やガラスの宙吹 き成形法の熟練者などのモーション解析を行い、 その情報に基づき学習者の弱点を補強するため の道具として利用できる。 開発課題のテーマとして、従来は画像解析の 基本的なアルゴリズムで苦労したこともある。 しかし、これからは画像処理のライブラリを活 用することにより、今まで以上に高度な課題の 解決を実現できる可能性がでてきたと考えてい る。今後は今まで以上に高度な課題解決の実現 に向けての環境づくりを続けていきたい。 参考文献 1)OpenCV のホームページ http://opencv.willowgarage.com/wiki/ 2)OpenCV の ver.1 に関する情報 http://opencv.willowgarage.com /wiki/OpenCV%20Change%20Logs 3)Microsoft VC++のダウンロード元 http://www.microsoft.com/japan/msdn /vstudio/express/ 4)OpenCV のダウンロード元 http://sourceforge.net/projects/opencvlibrary/ 5)CMake のダウンロード元 http://www.kitware.com/news/home/browse /CMake?2009_11_04&CMake+2.8.0+Now +Available 6)日本の OpenCV のホームページ http://opencv.jp/ 7) OpenCV のインストール例 http://imagingsolution.blog107.fc2.com /blog-entry-179.html 8) OpenCV のインストール例 http://www.cutt.jp/books/For_opencv2.pdf 9)皆川卓也:“OpenCV で学ぶ画像認識” http://gihyo.jp/dev/feature/01/opencv/ 10)Gary .Bradski,Adrian Kaebler:

“詳解 OpenCV コンピュータビジョンライ ブラリを使った画像処理・認識”,オライリー・ ジャパン(2009) この翻訳本には、原文に記述が無く、翻訳本 に特別追加された記事がいくつかある。その一 つとして付録A に以下の記事が添付されている。 “iPhone OS への OpenCV/FaceDetection の移 植と高速化”、松田 白朗(著)

参照

関連したドキュメント

この項目の内容と「4環境の把 握」、「6コミュニケーション」等 の区分に示されている項目の

本時は、「どのクラスが一番、テスト前の学習を頑張ったか」という課題を解決する際、その判断の根

87.06 原動機付きシャシ(第 87.01 項から第 87.05 項までの自動車用のものに限る。).. この項には、87.01 項から

一次製品に関連する第1節において、39.01 項から 39.11 項までの物品は化学合成によって得 られ、また 39.12 項又は

2 第 85.01 項から第 85.04 項までには、第 85.11 項、第 85.12 項又は第 85.40 項から第 85.42

(1) 令第 7 条第 1 項に規定する書面は、「製造用原料品・輸出貨物製造用原 料品減免税明細書」

2 次元 FEM 解析モデルを添図 2-1 に示す。なお,2 次元 FEM 解析モデルには,地震 観測時点の建屋の質量状態を反映させる。.

前ページに示した CO 2 実質ゼロの持続可能なプラスチッ ク利用の姿を 2050 年までに実現することを目指して、これ