実際にコンピュータービジョンがほとんど使用されない理由

実際、「マシンビジョン」と呼ぶ方が正しいでしょうが、誰かがビデオ監視ではなく、カメラを使用して何かを認識または測定することを知らない方が明確になると思います。 コンピュータビジョンが非常に人気があり、あらゆる場所で使用できる多くのタスクと領域がありますが、実際にはほとんど使用されません。



さまざまな問題を解決するために、この分野でいくつかのプロジェクトを実施しました。つまり、面積の計算と計算、製品品質管理、およびチップボード、ファイバーボード、MDFの製品の製造における動物の皮の面積の測定など、さまざまな業界でさまざまです革など



面積を計算するタスクはかなり複雑に見えるかもしれません。 厳密に数学的にアプローチする場合、たとえば、正方形または長方形の面積を計算することは、長さと幅を乗算するのが非常に簡単で、三角形がもう少し複雑であれば準備ができていますが、他の曲線形状は非常に難しい場合があります。

私の面積計算アルゴリズムは非常に単純なので、ライブラリなどを使用せずに実装できます。 文字通り10行のコードで、実際にはカメラキャリブレーションのみを備えた最も単純なモーション検出器です。 カメラは、製品が供給される場所の上にしっかりと固定され、背景画像が撮影されます(生産なし)。たとえば、白いテーブル、ピクセルの色は配列に駆動されます。 次に、サンプルが提供されるか、テーブルに置かれます(たとえば、ある種のボックス)。 次に、ボックスを使用した2番目のショットが撮影され、2番目のフレームの色が別の配列に書き込まれます。次に、色の値が比較され、異なるピクセルの数が加算されます。 次に、このサンプルを巻尺で測定し、その面積をプログラムに入力し、1ピクセルの面積を計算します。 領域はピクセル数で分割されます。 これがキャリブレーション全体です。 さらに、任意のサイズと形状の製品を提出するだけで十分です。変更されたピクセルの数が決定され、キャリブレーション中に見つかった1ピクセルの面積が乗算されます。 さらに、製品は移動することができます。たとえば、コンベア上で、面積が正しく測定されます。つかむ必要があるだけです。 動きのためにフレームを較正する、すなわち カメラの端に沿って移動方向にピクセルの変化があるいくつかのフレームをスキップして、フレームに入ったり出たりするときに製品がキャプチャされないようにします。



このアルゴリズムは完全に機能し、実際にテストされています。 もちろん、測定誤差に強く影響する光学ノイズ、照明などのフィルタリングなど、いくつかのポイントがありますが、これはすべてプログラム(色係数の自動補正など)とハードウェア(ノイズを物理的に即座に除去できるカメラ)の両方で正常に解決されます生産条件下では、カメラが設置されている閉じた部分で安定した照明が容易に実現されます。

実際には、エラーは固定製品では1%未満、モバイル製品では最大3%です。



たとえば、Open CV( Open Computer Vision )など、多くの開発があります。ちなみに、Habréにはこのライブラリの歴史に関する投稿があります。画像、数字、顔などの多くの認識システムがあり、これらはすべて既製で使用できます。

しかし、実際には、コンピュータービジョンソリューションはほとんど使用されていません。 しかし、最も興味深いのは、これらのタスクがすべて異なる方法で、しかし非常に異なる方法で、他の機器を使用して、はるかに高価に解決されることです。 私が紹介したシステムのほとんどは、この機器のカウントの失敗、修理の費用、または新しい機器の購入のために企業に設置されました。 私はこの機器の動作を見ていませんでした。センサー、メカニック、電子機器などの数だけを見ました。 顧客のレビューによると、古いシステムはより悪く、より遅く、いくつかはより大きなエラーがありました。 さらに、「コンピュータービジョン」を備えたシステムははるかに安価であり、すべてがコンピューター、カメラ、ソフトウェアが1000ドル未満で完全にコストがかかるにもかかわらず、米ドルで少なくとも4つのゼロを持つこのような機器のコストは、500ドルに投資することもできます 既製のソリューションがあります。 大きなコンピューターの電源は必要ありません。最も安いネットブックでもブレーキなしで動作します。 エリアに加えて、製品の色、表面の欠陥、結婚/戦闘などを決定できます。



最近、プログラミング手法、特にソフトウェアソリューションの設計について、Habréで「 Crutchプログラマー 」を読みました。この例を使って、他のチームが同様のプロジェクトを実装するときにCrutchesについて話したいと思います。 私はこのチームのプログラマーと話す機会があり、彼らがそこで行ったことに非常に驚きました。 アルゴリズムは厳密に数学的に使用され、サードパーティのライブラリ、高等数学、数百のクラスを含むOOPなどは言うまでもありません。 形状、座標、位置などのタイプを決定するため それらはOpenCV(上で書いた)を使用し、面積は辺、角度、曲率などに沿って複雑な数式によって計算されます。 その結果、製品は非常に曲がっており、多くのコンピューター電源を必要とし、実際には非常に貧弱に動作し、特定の種類の製品には長く複雑な設定が必要であり、さらに10%に達するエラーは言うまでもありませんでした。 OpenCV自体についてはあまり話したくありません。 これは別の問題です。多くのことが非常にうまく機能していなかったと言います。少なくとも5年前、まだIntelの頃だったので、Intelがそれを放棄してOpenに落としたのはそのためだと思います出所 しかし、私を最も驚かせたのは、ソリューションがはるかにシンプルで信頼性が高いという考えを認めないプログラマーもいるという事実です。 それは小さな会社でしたが、そのようなプログラマーを雇う多くの著名な会社も罪を犯します。



その結果、多くのプロジェクトがバラバラになり、時間を浪費し、最悪の事態は曲がったバグのある製品になることです。 そして、非常に頻繁に、悪いコードやプログラマーのためではなく、貧弱なアルゴリズムと最初から設計への悪いアプローチのために。

この例は、すべてを単純化する代わりに、すべてを複雑にする、OOP、設計パターンなどを使用するプログラマが増えているという事実に導きました。 通常、どの側からも必要とされていない場合、それがまだ必要な場合、またはまったく必要ない場合。 明るい頭にはカテゴリ、オブジェクト、クラスが非常に詰まっているため、多くの人はもはや考えを変えることはできません。 複雑化するために抽象化する必要はありませんが、主に理解を単純化し、反対側から見るために、システムを単純化します。 別の問題は、多くの人々が間違ったライブラリと間違った技術を選択することです。 特に新しい本を読んで、OOPのワークショップをいくつか訪れ、自分自身を専門家と考え、それを「正しく」行う方法を教え始めたプログラマーには特に怖いです。彼らは巨大なUMLダイアグラムを作成し、何かを書いて、次に、機能などを持たない抽象(空の)クラスなど 同時に、実際に機能する何かを発明して実行することはできません。 ほとんどの場合、そのような人々は、ボーンアーキテクチャでボーンプロジェクトを生成する本当の「ボーンプログラマー」であり、「 建築の宇宙飛行士 」(D.スポルスキー)のようなものです。 もちろん、これは非常にクールなことなど、初心者には思えるかもしれません。 しかし、これらのプロジェクトのほとんどは失敗するため、これは通常はそうではありません。他の場合では、顧客が非稼働製品の支払い準備ができている限り、それらは非常に拡張されていますが、最終的にはバラバラになるか、別のチームによって対応されます。 もちろん、例外があり、良い製品が出てきます。良いコードと悪いアルゴリズムは、良いアルゴリズムとツールを使って非難されることもありますが、少なくとも私の練習では、それほど小さくはなく、そのようなケースはほとんどありませんでした。

OOPはコースを変更したくないため、 私は誰にとっても役に立たない非常に長い議論があるのではないかと心配しています。これは別のトピックです。この有名な議論の著者に大いに同意します 。 OOP、特に上から下へのOOデザインは、非常に大規模で非常に複雑なプロジェクトにのみ適用できますが、すべてではなく、そのようなプロジェクトはほとんどありません。 そして、ほとんどの場合の設計では、基本的な機能と基本的なプロトタイプを使用して、ボトムアップから始める必要があります。 最初の結果を受け取った後、すべてが根本的に変化する可能性があり、主題領域と問題の本質は「バグ機能」はもちろんのこと、より明確になります(多くの優れた技術は、後に優れた「機能」となったバグのおかげで登場しました)。 そしてもちろん、最も重要なことは、問題を解決するための適切なアルゴリズムを選択することです。 プロジェクトが非常に複雑で、頭に収まらない場合、ほとんどの場合、OOP、UML、および設計、モデリングなどのシステム それでも同じように、彼らはほとんどの場合、問題を解決して何も単純化せず、むしろそれを複雑にします。 したがって、非常に複雑であるが実際に機能するシステムを作成するには、それを複数のプロジェクト、指示、またはライブラリに分割し、このすべての経済間のデータ交換のフローを最小限に抑えることをお勧めします。 独創的なものはすべてシンプルであることを忘れないでください。



「コンピュータービジョン」は実際にはほとんど使用されていないと思います。なぜなら、この分野の専門家の助けを借りずに簡単にインストールおよび構成できる優れた業界ソリューションや優れた実装がないからです。 そして、それらは高すぎるか、宣伝されておらず、それらについて知っている人はほとんどいません。



All Articles