その理由は次のとおりです-ビデオ内の道路標識の自動認識がリアルタイムで望ましい。 残念ながら、ロシア語では同様の問題に関する情報はほとんどなく、例はさらに少ない。
一般的にインターネット上で調べてみると、必要なマットを備えたOpenCVライブラリを使用することが決定されました。 装置およびそれが後で非常に高性能であることが判明したように。
だから問題を解決する段階。
最初のステップは、カメラから画像を取得することです。 開発中、ネットワークカメラが使用されましたが、Webカメラの解像度は十分に手元にありませんでした。 OpenCVは、Webカメラを操作するためのかなり簡単な方法を提供します。 (HighGuiモジュール)
cvNamedWindow("web-cam", CV_WINDOW_AUTOSIZE); //
this->capture = cvCreateCameraCapture(0);
cvSetCaptureProperty(this->capture,CV_CAP_PROP_FRAME_WIDTH_HEIGHT,640480); // 640x480
while (1)
{
// -
if(!cvGrabFrame(this->capture)) //
break;
this->frame = cvRetrieveFrame(this->capture); // ( IplImage)
if(!frame)
break;
cvShowImage("web-cam",this->frame); //
cvWaitKey(10);
if(this->fwork == false)
break;
}
同様のコードを使用して、カメラから常に関連するフレームを取得します

2番目の段階は、結果の画像の変換です。 最初の段階では、特定の文字グループのみを認識しました。 (禁止、警告)いくつかの実験の結果、フィルターが取得され、その後、次の画像が取得されます。

3番目の段階は、しきい値フィルターの使用です。 OpenCVには多数の変換と処理が含まれており、このフィルターのcvThresholdパラメーターを経験的に選択しました。

4番目の段階は、輪郭の境界の決定です。 繰り返しになりますが、私は自分の3輪自転車を考え出す必要はありませんでした;境界検出器であるcvCannyライブラリの最適化された機能が採用されました。 結果の輪郭は、元の画像で丸で囲まれます。

したがって、回路のリストを受け取り、事前に訓練されたニューラルネットワークを使用して、結果の回路を分類します。 回路が複数の事前定義されたタイプに属していない場合、ゴミ箱に移動されて表示されませんでした。
このような作業スキームにより、(フレームの負荷に応じて)1秒あたり約3〜5フレームを処理できる既製のアプリケーションを作成できました。 テストでは、ラップトップ-Core 2 Duo T5450、解像度1024x768のネットワークカメラを使用しました。 テスト中、システムは文字の約90%のどこかで認識を示しましたが、唯一の認識です。 看板が曲がったり、看板などで覆われていると、システムは標識を認識できません(残念ながら、これは非常に一般的です。ほぼ完全な道路でテストされています)。
その結果、完全に機能するアプリケーションが完成しました。最も重要なことは、openCVでの作業スキルとビデオ認識の分野の知識を得たことです。 このライブラリの類似物は見つかりませんでした。
PS 夜には、このアプローチもかなりの適用性があり、いくつかのバリエーションがあります。