工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

PiCameraによるAI数字認識

Raspberry Pi、Pi Camera、OpenCV、TensorFlowで数字を認識します。

ストーリー

このプロジェクトでは、数字を転写するための深い畳み込みニューラルネットワークをトレーニングします。次に、学習段階のデータを使用して、PiCameraが数字を読み取って認識できるようにします。 AIパイプラインは、画像操作にScikitとOpenCV 3.3を使用し、ディープラーニング部分のバックエンドとしてTensorflowを使用するKerasを使用して実装されます。


これを簡単に保つために、機能のローカリゼーション段階は実行されません。表示される唯一の機能となるように、カメラレンズの前に画像を押し込む必要があります。

MNISTデータセットが使用されます。これは、28×28ピクセルのモノクロ画像としてフォーマットされた手書き数字0〜9の60,000のトレーニング例と10,000のテスト例で構成されています。基本的に、カメラから取得したすべての画像を次のような画像に変換します。

主なネットワークトポロジは、以下の画像で説明できます。

最後のレイヤーは完全に接続されたレイヤーで、10桁を表す10のカテゴリにマップされます。

2つのことを行います。まず、数字を認識するためのネットワークをトレーニングします。次に、RaspberryPiカメラから取得したライブカメラフィードの数字を認識するためにトレーニングしたネットワークの重みを使用しました。

ラズベリーパイカメラを持っていたのはそれだけだったので、サードハンドを使って持っていました。機械的なセットアップは、以下の図で説明できます:

これらすべてを開始する前に、必要なものをすべてインストールしましょう。 Python仮想環境を使用してプログラムをセットアップしました。したがって、以下にリストされているすべてのプログラムがあると仮定すると、発行できます:

 source〜 / .profile workon cvpython PiCameraApp.py --picamera 1 

では、詳細を見ていきましょう。まず、たくさんのプログラムをインストールしましょう。

Tensorflowをインストールする

 pip install tensorflow 

Kerasをインストールする

 pip install keras 

Open-CV3.3をインストールする

すべての最適化が必要な場合は、OpenCVのインストールが少し複雑になります。これは、pipパッケージマネージャーからのものにはすべての最適化がないため、最初からコンパイルする必要があることを意味します。

私が見つけた最高のチュートリアルは次のリンクからのものです:

 https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/ 
最後にNumpy最適化を使用してpicameraをインストールします。

 pip install "picamera [array]" 

RPIにすべてのソフトウェアスタックをインストールしたら、トレーニングを行う必要があります。氷河の遅いパフォーマンスに慣れているヒーローであり、RPIでそれを行うことにした場合を除いて、ネットワークはGPUを備えたラップトップでトレーニングする必要があります。

ネットワークのトレーニング

ネットワークをトレーニングするには、次を発行してラップトップでpythonファイルを実行します:

 python Train_MNIST.py 

これは、ラップトップにCuda(gpuバージョンを使用している場合)、Tensorflow、Keras、matplotlibがインストールされていることを前提としています。

このファイルのプログラムは、Kerasを使用してディープニューラルネットワークモデルを定義し、コンパイルし、トレーニングと検証のフェーズが完了した後、ネットワークの重みを節約します。

最後に、プログラムはネットワークの重みを.h5ファイルとして保存します。これは、ライブディジット画像を認識するためにRPIで実行されている認識スクリプトにロードするネットワークの重みを含むファイルです。

scpまたはWinSCPのいずれかを使用してウェイトファイルをRPIにコピーします。

NVIDIA GPUを使用している場合、カードの計算能力に応じて、トレーニングには数分かかります。ただし、GPUを活用するには、GPUバージョンのTensorflowとNVIDIA WebサイトのCUDA実行可能ファイルをインストールする必要があります。そうしないと、CPUのみを使用している場合は少し時間がかかる可能性があります。

数字のライブ画像の認識

手書きの数字と印刷された数字の両方をテストすることになりました。予測の精度は、主に照明と画像の角度に依存します そして、あなたの文章が実際にどれほど曖昧であるか(くだらないことを読んでください)。アプリを起動したら、 t を押します 数字を読み、 q やめる。

数字の認識4.その4を描くには大量のインクを使用する必要がありました。

ネットワークは、他の数値に対して非常に低い確率を出力する場合があります。したがって、0.0001%の確率で7になる可能性があります。

貿易のツール。

プログラムの説明

プログラムは、「t」キーを押すとカメラからスナップショットを取得し、画像をDNNに転送する前にいくつかの変換手順を適用します。

最初に覚えておく必要があるのは、カラー画像が浮動小数点数の大きな配列として取得されることです。最初に、画像がRGB形式からグレースケール画像に変換されるため、効果的に2つのチャネルを破棄します。

次のステップは、画像の浮動小数点形式を0〜255の範囲の8ビット数に変換することです。

次に、OpenCVを使用してしきい値処理を行います。大津法は、数字の特徴がはっきりとわかるように、画像を自動的にしきい値設定するために使用されます。次のステップは、画像のサイズを28×28ピクセルの形式に変更することです。これは、MNISTDNNで受け入れられているのと同じ形式です。

再スケーリングを行うには、scikit image、open-cv、またはKerasのいずれかを使用できます。

画像が再スケーリングされた後、次のステップは色を反転することです。MNISTは、数字が白い背景の黒い線ではなく、黒い背景になると想定しているためです。

後処理後、画像はDNNに送信され、観測された数字が予測されます。

出力配列は、観測された画像がその数である確率を表します。したがって、位置2の1は、1であるため、100%の確実性を示します。位置1は0用に予約されていることに注意してください。

アルゴリズムの手順

1.画像を読む

最初のステップは、明らかにカメラの前に画像を配置することです。 CNN(畳み込みニューラルネットワーク)は特定のサイズの画像を想定しているため、これは後でスケーリングされます。

2.グレースケールに変換

取得した画像は、scipy関数呼び出しを使用してグレースケールに変換されます。偶然にも、画像操作にはopencvしか使用できませんが、すべての関数名を覚えておく必要があります。また、別のポイントとして、特定の機能に関しては、scipyとopen-cvの間にいくつかの非常に微妙な違いがあります。

3.画像範囲を拡大縮小します

ここでは、画像が浮動小数点形式からuint8範囲[0、255]に変換されます

4.しきい値処理

素敵な白黒画像を取得するには、大津法を使用してしきい値処理を行います。手動でしきい値処理を行うと、値を1つずつ入力するため、これは魔法のソースステップです。

5.画像のサイズを変更する

画像のサイズが28x28ピクセルの配列に変更されます。次に、これはサイズ(28×28)の線形配列にフラット化されます

6.画像を反転

MNIST DNNは、黒の背景に白で描画された28×28ピクセルの画像を受け入れます。したがって、画像を反転する必要があります。

7.訓練されたニューラルネットワークにフィードする

これが最後のステップです。ここでは、ディープニューラルネットワークの重みをロードし、画像をネットワークにフィードしています。予測を立てるのに2〜3秒かかります。

8.回答を印刷する

最後に、0から9までのすべての数字を示す10個のクラスを持つ出力配列になります。配列の位置は、ネットワークによって推論が行われる確率を表します。これを人間の話し方に変換することは、最も高い確率で位置を選択することを意味します。

メインのセットアップは医療機器のように見えます。

フィン!

以上です。これは、数字を認識できるニューラルネットワークを実装する方法を示しています。

コードはいつものようにGitHubにアップロードされます。

出典: PiCameraによるAI数字認識


製造プロセス

  1. Acceed:4つのSFPポートを備えた12ポートギガビットスイッチ
  2. AAEONはIntelと協力して、強力なネットワークソリューションを提供します
  3. Lannerが第2世代IntelXeonでネットワークアプライアンスをアップグレードする
  4. DS18B20で温度を読み取る|ラズベリーパイ2
  5. RASPBERRYPIによる温度測定
  6. ラズベリーパイで温度を監視する
  7. Walabotとの姿勢パル
  8. TJBot入門
  9. RaspberryPiでセグウェイを構築する
  10. GoPiGo v2 with Windows IoT
  11. IoTネットワークソリューションによる都市部の洪水との戦い