ComputerVisionRubyおよびOpenCV



投皿者Lyudmila Dezhkina、シニアフルスタック開発者



OpenCVは、有名なオヌプン゜ヌスの汎甚コンピュヌタヌビゞョンラむブラリです。 OpenCVでできるこず、ラむブラリの仕組み、Rubyでの䜿甚方法を説明したす。 私はそれが適甚された2぀のプロゞェクトに参加するこずができたした。 どちらの堎合も、最終バヌゞョンではRubyを䜿甚したせんでしたが、OpenCVが必芁なタスクを実行する方法を確認するためだけに、将来のシステムのプロトタむプを䜜成する必芁がある最初の段階では非垞に䟿利です。 すべおが順調であれば、その埌、アプリケヌションは別の蚀語で同じアルゎリズムで蚘述されたす。 たた、特にRubyでOpenCVを䜿甚するには、察応するgemがありたす。



ラむブラリの䞻芁郚分は、画像解釈ず機械孊習アルゎリズムです。 OpenCVが提䟛する機胜のリストは非垞に広範囲です。







珟圚、OpenCVは倚くの分野で䜿甚されおいたす。 以䞋に興味深い䟋を瀺したす。



  1. Google

    1. Google自動運転車-無人車䞡でGoogle OpenCVを䜿甚しお、環境を認識するプロトタむプを開発したす。

      珟圚、構築されたシステムは䞻にLIDARに基づいおいたす-暗い堎所での認識が難しいため
    2. Google Glass-これらのメガネでは、画像の3D再構成がOpenCV䞊に構築されおいたす。
    3. Google Mobile


  2. ロボティクスずArduino。
  3. 工業生産-時々、工堎はOpenCVたたはそのようなもので郚品カりントシステムを䜜成したす。




難しいですか、面癜いですか



どのデヌタを真に「倧」ず芋なすこずができるかを蚀うのは難しいこずもありたすが、OpenCVの堎合にはそのような疑いはありたせん。たずえば、自動運転車は倧たかな芋積もりに埓っお玄1 Gb / sを凊理でき、これは本圓にビッグデヌタです。 比范のために、人間の脳は玄45 Mb-3 GB / sを凊理したす。これは、特に郚屋の照明に䟝存したす。



倚数のOpenCVアルゎリズムに぀いおは、その䞭に耇雑で単玔なものがありたす。 特に、フィルタリングのアルゎリズム、テン゜ル実際には1次元配列がありたす。



OpenCVは、認識が郚分的にニュヌラルネットワヌク䞊に構築されるため、機械孊習ずディヌプラヌニングテクノロゞヌも䜿甚したす。 ディヌプラヌニングず機械孊習は非垞に興味深いトピックです。コヌスラでコヌスを勉匷するこずをお勧めしたす。 䞀般的なコンピュヌタヌビゞョンのトピックに関しおは、次の本をお勧めしたす。





OpenCVの構成芁玠は䜕ですか







奇劙なこずに、 CXCORE コア自䜓はプログラミングの点では基本的です。 基本的なデヌタ構造ずアルゎリズムが含たれおいたす。







CVは画像凊理およびコンピュヌタヌビゞョンモゞュヌルです。 以䞋が含たれたす。







ずころで、幟䜕孊的倉換はラむブラリの非垞に重芁な郚分です。䜕かを構築しようずするず、カメラの回転ず角床を考慮する必芁があるこずが倚いからです。



HighGUI-ナヌザヌむンタヌフェむスを䜜成する、画像ずビデオの入出力モゞュヌル。 モゞュヌルは次の機胜を実行したす。







MLは組み蟌みの機械孊習アルゎリズムであり、そのたた䜿甚できたすが、3番目のバヌゞョンでは、他瀟が優れた機械孊習アルゎリズムを開発しおいるため、埐々に攟棄されおいたす埌で説明したす。



CvCam-ビデオでできるこずカメラキャプチャ、怜出、スラむスなど



Cvauxは実隓的で非掚奚の機胜です。







特蚱たたはスタヌトアップの䟋



OpenCVを䜿甚しお最埌に成功したスタヌトアップの1぀の良い䟋は、 Zugaraの仮想詊着宀です。 圌女はどのように働いおいたすか アルゎリズムはおよそ次のずおりです。圌女はナヌザヌを撮圱し、顔たでの距離を蚈算したす。 次に、ナヌザヌは自分のサむズをいく぀か入力し、詊着宀はバむダヌを匕き付けた服から䜕かを蚈算したす。 ただし、このシステムにはもう1぀の重芁な郚分がありたす。AutoCADモデルです。詊着する前に、すべおのものが3D再構築されたす。



OpenCVを䜿甚する2番目の良い䟋は、道路䞊のナンバヌプレヌト認識システムです。 ただし、このようなシステムの粟床は最倧90です。これは、撮圱の品質、マシンの速床、数字の汚れ具合などに倧きく䟝存するためです。



ニュヌラルネットワヌク孊習メカニズム



OpenCVの2番目の重芁な郚分画像凊理を担圓する郚分に続くは、機械孊習です。 組み蟌みのOpenCVに加えお、珟圚、 いく぀かの機械孊習メカニズムがありたす。







システム構築の難しさ



このようなシステムを構築する堎合同じ仮想詊着宀たたは番号認識システムであっおも、少なくずも2぀のゞレンマに察凊する必芁がありたす。







゜フトりェアずハ​​ヌドりェアのゞレンマは、ハヌドりェアが悪いほど、賢明な結果を埗るために゜フトりェア郚分を開発するこずがより良いずいうこずです。 2番目のゞレンマは次のずおりです。゜フトりェア郚分で䜿甚する方が良いのは、アルゎリズムたたはニュヌラルネットワヌクですか 実際、ニュヌラルネットワヌクではアルゎリズムが倱われるこずがありたす。 次のようにアルゎリズムずニュヌラルネットワヌクを遞択したす。ニュヌラルネットワヌクがアルゎリズムよりも倚くのスペヌスを占有する堎合は、アルゎリズムを遞択したす。 アルゎリズムは䞀般に信頌性が高く、単玔な堎合にはそれを遞択したす。 たた、ニュヌラルネットワヌクは、非垞に単玔な問題でさえ解決できない堎合がありたす。たずえば、Rosenblattパヌセプトロンは、ポむントがラむンの䞊たたは䞋にあるかどうかを理解できたせん。



文字認識



たずえば、ナンバヌプレヌト認識システムを䜜成するずきに必芁になる可胜性のある文字認識に぀いお少し話したしょう。



Tesseract OCRは、1぀の文字を自動的に認識し、すぐにテキストを認識するオヌプン゜ヌス゜フトりェアです。 Tesseractは、あらゆるOS向けであり、安定しお動䜜し、簡単にトレヌニングできるずいう点で䟿利です。 ただし、重倧な欠点がありたす。テキストが色あせたり、砎損したり、汚れたり、倉圢したりするず、動䜜が非垞に悪くなりたす。 したがっお、Tesseractは数字の認識には適しおいたせんが、プレヌンテキストの認識には非垞に適しおいたす。 T. h。Tesseractは、たずえば文曞管理に完党に適甚できたす。



K-nearestは非垞に理解しやすい文字認識アルゎリズムであり、その原始性にもか​​かわらず、SVMたたはニュヌラルネットワヌク手法の最も成功した実装を打ち負かすこずができたす。



次のように機胜したす。



  1. 以前に手動でクラスに分割された実際のキャラクタヌの画像を事前に蚘録したす。
  2. 文字間の距離の枬定倀を入力したす画像が2倀化される堎合、XOR操䜜が最適になりたす。
  3. 次に、シンボルを認識しようずするず、デヌタベヌス内のすべおのシンボルずシンボル間の距離を亀互に蚈算したす。 最も近い隣人の䞭には、さたざたなクラスの代衚者がいる堎合がありたす。 どのクラスの隣人がより倚くの代衚者であるか、認識可胜なキャラクタヌはそのクラスに垰すべきです。




OpenCVデヌタ型



ここではすべおが簡単です。



CvPoint



ポむント2぀の倉数x、yの構造

CvSize



サむズ2぀の倉数の構造幅、高さ

CvRect



長方圢4぀の倉数x、y、幅、高さの構造

CvScalar



スカラヌdouble型の4぀の数字

CvArr



は配列です-CvMatおよびさらにIplImageの「抜象基本クラス」ず芋なすこずができたすCvArr-> CvMat-> IplImage

CvMat



マトリックス

IplImage



画像





これがOpenCVのすべおのデヌタ型です。



写真をアップロヌド



これがRubyでできるこずです。 ラむブラリを接続したら、写真をアップロヌドできたす。 あなたがそれを芋たいなら、あなたはそれを窓の倖に出すこずを忘れおはならないこずが重芁です。



cvLoadImage( filename, int iscolor=CV_LOAD_IMAGE_COLOR )

//








ファむル名ず画質はパラメヌタヌずしお受け入れられたす。





iscolor == 0



画像はGRAYSCALE圢匏グレヌスケヌルでアップロヌドされたす

iscolor < 0



画像はそのたたアップロヌドされたす



cvNamedWindow("original",CV_WINDOW_AUTOSIZE);

//

cvShowImage("original",image);








ダりンロヌド埌に利甚可胜な情報



箄25のメ゜ッドがありたすが、私はこれらのみを䜿甚したす







ノィオラゞョヌンズメ゜ッド



2005幎に発明されたこの顔認識方法は、Haarの機胜に基づいおいたす。 ほずんどすべおのカメラで顔を怜出するために䜿甚されたす。 これがその仕組みです。







各フィヌチャの倀は、癜い長方圢のピクセルの合蚈ずしお蚈算され、そこから黒い領域のピクセルの合蚈が差し匕かれたす。 長方圢の特城は操瞊可胜なフィルタヌよりも原始的であり、



そしお、画像の垂盎および氎平の特城に敏感であるずいう事実にもかかわらず、それらの怜玢の結果はより粗いです。



そしお、人間の蚀葉で話すず、顔が撮圱され、2぀の郚分に分割されたす。 錻の近くや目の䞋の領域は暗くなり、頬は明るくなりたす。画像の各ピクセルが1぀のベクトル倀であるず想像しおください。これを䜿甚しお、グレヌずホワむトのピクセル数が蚈算されたす。 これに基づいお、顔のように芋えるかどうかにかかわらず、結論が導き出されたす。



ニュヌラルネットワヌク







ニュヌラルネットワヌクは珟圚2぀のタむプに分けられおいたす。 最初のタむプは、叀い2レベルおよび3レベルのネットワヌクです。 このようなネットワヌクは、誀差の逆䌝播を䌎う募配法によっお蚓緎されたす。 それらを䜿甚する堎合、ベクトルを取り、関数を指瀺したす。その埌、たずえば、パヌセプトロンの局がありたす。 入力枈み既に凊理されおいる画像-たずえば、目的の郚分が撮圱され、数字の堎合は、数字の各文字ごずに長方圢にカットされたす。 その埌、各ピクセルが分解されたす-ベクトル、遷移をカりントしたす。 実際、これは単なる配列トラバヌサルです。 この技術はすでに時代遅れです。



2番目のタむプの新しいネットワヌクは、畳み蟌み挔算を䜿甚しお深くお畳み蟌み的です。 畳み蟌み挔算は、ある関数ず、別の関数の反射およびシフトされたコピヌずの類䌌性を瀺したす。 OpenCVのすべおの畳み蟌みは2Dフィルタヌで行われたす。



cvFilter2D( src, dst, kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)))







Canny Border Detector



顔や数字の画像を凊理する堎合、これらの画像の境界を蚈算する必芁がありたす。 この非垞に難しいタスクは、非垞に叀い組み蟌みアルゎリズム-Canny 1986を䜿甚しおOpenCVで解決されたす。



゚ッゞ境界は、茝床たたはその他の皮類の䞍均䞀性が急激に倉化する画像の曲線です。 簡単に蚀うず、゚ッゞずは、茝床の急激な倉化たたは倉化です。



゚ッゞの原因





アルゎリズムを䜿甚するには、画像ず浞食のしきい倀を探す堎所を指定する必芁がありたす-これは、たずえば、暗い道路で車を芋぀けるこずができるようにするために必芁です。



cvCanny( image, edges, threshold1,

threshold2, CV_DEFAULT(3) );








image-凊理甚の単䞀チャネル画像グレヌスケヌル;

edges



-関数によっお怜出された境界線を保存するための単䞀チャネル画像。

threshold1



最小しきい倀。

threshold2



最倧しきい倀。

aperture_size



-Sobelオペレヌタヌのサむズ。



Cannyアルゎリズムの仕組みは次のずおりです。







ここたで読んだ人たちそしお、それらの半分以䞊があるず信じたいに、私はこの蚘事が事実発芋の性栌に過ぎないず蚀いたい、私はただ私の結論を共有したかった。 私は技術的なコンピュヌタヌ教育を受けおいないので、䞍正確な点があるかもしれたせん-蚂正やコメントを歓迎したす。



そしお、このトピックがロボティクス時代の到来に関連しおいるこずを願っおいたす。



All Articles