1.まえがき
HaaSはHardwareas a Serviceの略で、AIoT開発者のイノベーションを加速するためのビルディングブロックプラットフォームです。
Python Light Applicationは、HaaSビルディングブロックプラットフォームで実行されるアプリケーションフレームワークのセットです。彼はMicroPythonに基づいて開発され、Pythonのエレガントな構文を継承し、便利な組み込みハードウェア操作ライブラリを提供します。
HaaS100は、Alibaba Cloud Intelligent IoTチームによって立ち上げられたIoT開発ボードとして、MicroPythonオペレーティングエンジンに適合し、さまざまな豊富なハードウェア操作インターフェイスを提供し、Alibaba CloudIoTプラットフォームとクラウドAI関連の機能を提供します。
この開発ボードを使用すると、Pythonプログラムを介して、ハードウェア制御、クラウドAI、およびクラウドの相互運用性を簡単に実装できます。
この記事では、Pythonライトアプリケーションフレームワークに基づいてテキスト認識(OCR)関数を実装する方法を紹介します。
2.スキーム
2.1。一般的な考え方
この計画には、MinicvやAlibaba CloudSDKなどの機能モジュールが含まれます。
MiniCVは、データ収集、画像処理、画像のエンコードとデコード、ビデオのエンコードとデコード、機械学習、UIレンダリングをサポートする軽量のビジュアルフレームワークです。
Alibaba Cloud SDKは、顔、人体、ビデオ、テキストなどの150以上のシーンをカバーするAlibaba DharmaAcademyのビジュアルインテリジェンスオープンプラットフォームの終わりです。
Vision Intelligence Platformの詳細については、公式Webサイトhttps://vision.aliyun.com/を参照してください。
データ処理フローは次のとおりです。
MiniCVモジュールを介して、データソースのパッケージ処理、画像のデコード、画像データ形式の変換とスケーリングなどの完全な機能を実行し、最後に処理されたデータをMLモジュールにフィードします。MLモジュールは、Alibaba CloudSDKエンジンとDharmaのビジュアルオープニングによって開かれます。アカデミーインテリジェントプラットフォームが相互作用して、期待される結果を取得します。
HaaS100ボードにはデフォルトでLCDが装備されていないため、開発者の便宜のために、結果はLOGを印刷して出力されます。
2.2、機能付き
テキスト認識テクノロジーは、Alibaba Cloudのディープラーニングテクノロジーに基づいており、ユニバーサルな印刷テキスト認識およびドキュメント構造化機能を提供します。テキスト認識テクノロジーは、証明書テキスト認識、請求書テキスト認識、ドキュメント認識、並べ替えなどの業界シナリオに柔軟に適用して、認証、認証、請求書発行のレビューなどのビジネスニーズを満たすことができます。
2.3、効果が提示されます
テストリソースの画像: "/ data / python-apps / ml / recognize-character / res / test.jpg"
出力結果:
# -------------------Welcome HaasAI MicroPython--------------------
-----ml ucloud RecognizeCharacter demo start-----
results size:1
index:0
probability:0.441612
text:飞猪旅行
left:199
angle:-5
top:166
height:373
width:781
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-----ml ucloud RecognizeCharacter demo end-----
3.OCRテクノロジーの概要
3.1。コンセプトの紹介
OCRは、Optical Character Recognitionの略語で、光学式文字認識、または略してテキスト認識を意味します。
- 光入力:スキャナー、カメラなど。
- アルゴリズム処理、テキスト抽出および認識
- テキスト出力
簡単に言えば、画像内のテキスト情報を抽出することです。
写真でカバーできるテキスト情報はたくさんありますが、これらのテキストを手動で入力すると、必然的に非常に遅くなります。ただし、OCRを使用すると、画像内のすべてのテキスト情報を一度に取得できるため、効率が大幅に向上します。
OCRは非常に高速で省力的なテキスト入力方法であるため、テキストの量が比較的多い今日の人々に非常に人気があります。たとえば、銀行カード認識、IDカード認識、電子名刺などです。
3.2。テキスト検出のDBテクニカル分析
DBはDifferentiableBinarizationの略で、文字通りの意味から、その主な機能は可変の2値化しきい値であることがわかります。
テキストの位置をより正確に特定するために、トレーニングを通じてさまざまなシーンとさまざまなピクセルの2値化しきい値を動的に設定できます。
図に示すように:
青い矢印の部分は、従来のセグメンテーションプロセスを表しています。
元の画像->セグメンテーション画像->バイナリ画像->ターゲット画像このプロセスでは、セグメンテーション画像からバイナリ画像への変換は一定のしきい値で完了します。したがって、テキストが密集している場合、および不規則な場合、生成されたバイナリグラフのテキスト境界は正確ではありません。
赤い部分はDBのプロセスです。その主な機能は、図のしきい値マップである画像をセグメント化しながら、テキスト境界に基づいて動的しきい値マップを生成することです。セグメント化マップとしきい値マップは、バイナリ画像の生成方法を共同で決定します。
セグメンテーションマップ:テキストのある領域の値はPです。
しきい値マップ:テキスト境界のみがTの値を持ちます
バイナリマップ:B = 1またはB = 0
上の写真の場合
文字区域内部:
P = 0.99 、T = 0.2、P –T> 0、B = 1
テキスト領域の境界:
P = 0 、T = 0.99、P –T <0、B = 0
非テキスト領域:
P = 0 、T = 0.2、P –T <0、B = 0
元の画像の各ピクセルについて、P値とT値の差に基づいて計算が行われ、最終的な2値画像Bが計算されます。最後に、2値画像が元の画像に復元され、正確なテキスト領域が生成されます。
3.3、テキスト認識
テキスト認識とは、テキスト検出によって取得されたテキストボックスのコンテンツを特定のテキストに変換するプロセスを指します。通常の状況では、テキスト認識は2つのカテゴリに分類できます。
固定長のテキスト認識
固定長文字の認識は比較的単純であり、使用シナリオも比較的制限されており、検証コードの認識が一般的です。この種のテキスト認識のネットワーク結果も比較的単純です。LeNetを参照してCNNネットワークを構築できます。通常、3つの畳み込みと1つの完全に接続された層を実装できます。この記事では詳しく説明しません。
可変長テキスト認識
日常生活では、多くの場面で認識される必要のあるテキストの長さはわかりません。したがって、テキストの長さを自律的に決定し、セグメント化して変換するには、ディープラーニングを通じてより複雑なネットワークが必要です。現在、可変長文字の認識を実現するには、通常2つの方法があります。
* CNN + Seq2Seq +注意
- CRNNの2つの方法の主な違いは、出力層にあります。どちらもsoftMaxを放棄し、AttentionとCTCを使用してシーケンスの特徴情報を認識結果に区別します。注意メカニズム上の理由により、モデルは比較的大きいため、Iot側でCRNNを使用します。
3.4、CRNN
CRNN (畳み込みリカレントニューラルネットワーク、畳み込みリカレントニューラルネットワーク)は、現在人気のあるテキスト認識モデルです。サンプルデータの文字セグメンテーションを必要とせず、任意の長さのテキストシーケンスを認識できます。このモデルは高速で、優れたパフォーマンスを発揮します。
CRNNの主な機能は次のとおりです。
*訓練可能
*任意の長さの文字のシリアル認識、分割する必要はありません
*高速、優れたパフォーマンス、小型モデル
CRNNモデルは、主に次の3つの部分で構成されています。
*畳み込み層:入力画像から特徴シーケンスを抽出します
*循環層:畳み込み層から取得された特徴シーケンスのラベル分布を予測します。
*転写層:ループ層から取得したラベル分布は、重複排除や統合などの操作によって最終的な認識結果に変換されます。
3.4.1、畳み込み層
- 前処理は、最初に入力画像に対してスケーリング処理を実行し、すべての入力画像を同じ高さにスケーリングします
- 畳み込み操作7つの畳み込みと4つのプーリング、20億(BatchNormalization)を導入して、モデルの収束を加速し、トレーニングプロセスを短縮します
- 左から右への特徴抽出、ループレイヤーへの入力として、列に特徴ベクトルを生成します
3.4.2、ループ層
リカレント層は双方向LSTMで構成されています。
LSTM (Long Short Term Memory、Long Short Term Memory)は、RNN(Circular Neural Network)の特殊な構造であり、RNNの長期依存性を解決するために使用されます。つまり、RNNネットワークに入力される情報の時間間隔として使用されます。増加し続けると、通常のRNNには「漸進的消失」または「漸進的爆発」の現象が発生します
上の図からわかるように、LSTMとRNNの最大の違いは、長期状態を保存するユニットを追加し、3つのドアスイッチを介してこのユニットの状態を制御することです。
- 入力ゲート:ネットワークの現在の状態と、この長期的な状態にどれだけ保存するかを決定します
- ドアを忘れる:最後の瞬間の長期的な状態と、現在の瞬間の長期的な状態をどれだけ維持するかを決定します
- 出力ゲート:現在の長期状態、現在のネットワークの結果として出力される数
3.4.3、転写層
転写層は、CTCを介してLSTMネットワークによって予測された特徴シーケンスの結果を統合し、それを最終的な出力結果に変換します。
CTCモデル(Connectionist Temporal Classification)は、主にトレーニング中に文字が整列しない問題を解決するために使用されます。
上の図に示すように、入力文字CTC、文字間隔、画像の歪みなどの理由により、CNN + RNN処理後の結果は--CC ---- TT--CCになります。
それらの中で-CTCのトレーニングフェーズで追加される空白領域を表します。目的は、デコードでの重複排除の利便性を回避することです。
デコード段階では、最初に連続する繰り返し文字を削除し、次に挿入された空白文字を削除し、最後に認識結果CTCを取得します。
4、Demo体验
4.1、コードのダウンロードとコンパイル
AliOS Thingsコードをダウンロードするには、「HaaS100クイックスタート」を参照してください。
git clone https://github.com/alibaba/AliOS-Things.git -b dev_3.1.0_haas
コードをコンパイルします。
aos make distclean
aos make py_engine_demo@haas100 -c config
aos make
コンパイルが完了したら、完全なファームウェアを書き込みます
シリアルポート経由の入力:
python /data/python-apps/network/wifi/main.py wifi_ssid wifi_password
python /data/python-apps/ml/recognize-character/main.py
4.2、サンプルコード
from minicv import ML
print("-------------------Welcome HaasAI MicroPython--------------------")
print("-----ml ucloud RecognizeCharacter demo start-----")
OSS_ACCESS_KEY = "xxxx"
OSS_ACCESS_SECRET = "xxxx"
OSS_ENDPOINT = "xxxx"
OSS_BUCKET = "xxxx"
ml = ML()
ml.open(ml.ML_ENGINE_CLOUD)
ml.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL")
ml.setInputData("/data/python-apps/ml/recognize-character/res/test.jpg")
ml.loadNet("RecognizeCharacter")
ml.predict()
responses_value = bytearray(10)
ml.getPredictResponses(responses_value)
print(responses_value)
ml.unLoadNet()
ml.close()
print("-----ml ucloud RecognizeCharacter demo end-----")
4.3デバイス構成
4.3.1。アカウント登録:
登録リンク:https://www.aliyun.com/
赤い丸の「今すぐ登録」ボタンをクリックして登録してください。
4.3.2、OSSパラメータの取得
OSS関数を使用する場合、AccessKeyId、AccessKeySecret、Endpoint、およびBucketNameの4つの構成パラメーターが関係します。
AccessKeyの取得:
https://ram.console.aliyun.com/アカウント管理プラットフォームにログインして、AccessKeyId、AccessKeySecretを表示します(アカウントは前のセクションで登録されたアカウントです)
アカウントの額縁にある「AccessKeyManagement」ボタンをクリックします。
[選択を表示]ボタンをクリックして、AccessKeyId、AccessKeySecretを取得します
バケットアカウントの取得:
OSSコンソールhttps://oss.console.aliyun.com/にログインしてバケットを作成します。バケットを作成するときは、Shanghaiを選択する必要があります。
バケットが作成された後、上の画像から確認できます。
エンドポイント:oss -cn-shanghai.aliyuncs.com
BucketNameは、バケットoss-ai-devを作成した名前です。
4.3.3、バケットフォルダの作成:
4.4.4、バケットフォルダーのアクセス許可
フォルダを作成した後、フォルダのアクセス許可を変更することを忘れないでください。そうしないと、アクセスが失敗します。
開発者テクニカルサポート
さらにテクニカルサポートが必要な場合は、DingTalk開発者グループに参加するか、WeChat公式アカウントをフォローしてください。
テクノロジーとソリューションの詳細については、AliyunAIoTホームページhttps://iot.aliyun.com/をご覧ください。