はじめる
アンドロイド
Raspberry Pi(Raspbian OS)、Linux、Nvidia Jetson、Windowsなど
助けを得る
https://www.doubango.org/webapps/alpr/のオンラインWebデモ
https://www.doubango.org/sdks/anpr/docs/のSDKの完全なドキュメント
サポート言語(API): C ++ 、 C# 、 Java 、 Python
オープンソースのコンピュータービジョンライブラリ:https://github.com/doubangotelecom/compv
キーワード: Image Enhancement for Night-Vision (IENV) 、 License Plate Recognition (LPR) 、 License Plate Country Identification (LPCI) 、 Vehicle Color Recognition (VCR) 、 Vehicle Make Model Recognition (VMMR) 、車両Vehicle Body Style Recognition (VBSR) Vehicle Direction Tracking (VDT)およびVehicle Speed Estimation (VSE)
99ドルのARMデバイス(Khadas VIM3、720pビデオ解像度)で64fpsで実行されるANPR/ALPR(自動番号/ナンバープレート認識)エンジンを見たことがありますか?
ultimatealPRは、市場で見つかった最速のANPR/ALPR実装です。高速であることは重要ですが、正確であることが重要です。
最先端の深い学習テクニックを使用して、比類のない精度と精度を提供します。比較として、これはAndroidのOpenalPRよりも33倍高速です。 (詳細については、ベンチマークセクションを参照してください)。
特別なGPUまたは専用のGPUは必要ありません。すべてがCPUでSIMD ARM NEONの最適化、固定点数学操作、マルチスレッドで実行されています。これにより、クラウドを勧誘せずにカメラに完全に特徴の(インテリジェントな輸送システム)ソリューションを完全に機能させる可能性のための扉が開かれます。デバイス上のすべてのアプリケーションを実行できると、そのようなシステムを取得、展開、維持するためのコストが大幅に削減されます。これにより、コストを削減する方法の詳細については、デバイスベースとクラウドベースのソリューションセクションを確認してください。
次のビデオでは、Windowsで実行されている認識者サンプルを示しています。
Cuda、Nvidia Tensort、Intel Openvinoのおかげで、コードはCPU 、 GPU 、 VPU 、 FPGAで加速されます。
ナンバープレート認識(LPR)に加えて、ナイトビジョン(IENV)、ナンバープレート国識別(LPCI)、車両色認識(VCR)、車両のモデル認識(VMMR)、車両スタイル認識(VBSR)、車両方向追跡(VDT)、車両速度推定(VSE)の画像強化をサポートします。
テスラV100のようなハイエンドNVIDIA GPUでは、フレームレートは315 fpsで、3.17ミリ秒推論時間を意味します。 Intel XeonのようなハイエンドCPUでは、OpenVinoのおかげで、最大フレームレートは最大237FPSになる可能性があります。 Raspberry Pi 4のようなローエンドCPUでは、平均フレームレートは12fpsです。
私たちの言葉を見てはいけません。実装をチェックしてください。登録、ライセンスキー、またはインターネット接続は必要ありません。コードをクローンしてコーディング/テストを開始するだけです。すべてがデバイス上で実行され、コンピューターを離れるデータはありません。ここでリリースされたコードには、Android、Raspberry Pi、Linux、Windows用の多くのすぐに使用できるサンプルが付属しています。
また、SDKで遊び始める前に、オンラインクラウドベースの実装(登録は不要)を確認して正確性と精度を確認することもできます。
https://www.doubango.org/sdks/anpr/docs/で完全なドキュメントを確認してください
SDKは多くのプラットフォームで動作し、多くのプログラミング言語をサポートしていますが、次のセクションではAndroid、Raspberry Pi、Linux、Windowsに焦点を当てています。
次のセクションは、AndroidとJava APIに関するものです。
ソースコードには、#4 Androidサンプルアプリケーションが付属しています:ベンチマーク、ビデオパラレル、Videosecenticent、ImagesNap。
このアプリケーションは、すべてが問題であり、予想される速さで実行されていることを確認するために使用されます。このアプリケーションを使用して、最大フレームレート(Intel Xeonの237fps 、Khadas Vim3の64fps 、Raspberry Pi 4の12fps )に関する情報を確認できます。オープンソースであり、登録やライセンスキーは必要ありません。
このアプリケーションは、製品にultimatealPRを追加しようとする開発者が参照コードとして使用する必要があります。カメラからライブビデオストリームを使用して、ライセンスプレートをリアルタイムで検出および認識する方法を示しています。パレルモードの詳細については、並列処理セクションとシーケンシャル処理セクションを確認してください。
VideoParLellと同じですが、シーケンシャルモードで動作します。つまり、遅いことを意味します。このアプリケーションは、モードを容易に比較するために提供されます:並列と順次。
このアプリケーションは、カメラからライブビデオストリームを読み取り、表示しますが、オンデマンドのストリームからの画像のみを認識します。
Androidでサンプルアプリケーションを試すには:
Android Studioを開き、「既存のAndroid Studioプロジェクトを開く」を選択します
ultimatealpr-sdk/サンプルに移動し、 Androidフォルダーを選択して[OK]をクリックします
試してみたいサンプル(ビデオパラレルなど)を選択し、実行を押します。より良い体験のために、必ずランドスケープモードにデバイスを用意してください。
SDKはAndroid Studioモジュールとして配布されているため、参照として追加することもできます。または、プロジェクトにAARを構築して追加することもできます。しかし、SDKをプロジェクトに追加する最も簡単な方法は、ソースを直接含めることです。
build.gradleファイルに追加:
android {
# This is the block to add within "android { } " section
sourceSets {
main {
jniLibs . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/binaries/android/jniLibs' ]
java . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/java/android' ]
assets . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/assets/models' ]
}
}
}APIを使用しようとすると、3つの有用な機能があるため、init、プロセス、およびdeinitのみがあるため、紛失するのは困難です。
C ++ APIはここで定義されています。
import org . doubango . ultimateAlpr . Sdk . ULTALPR_SDK_IMAGE_TYPE ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkEngine ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkParallelDeliveryCallback ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkResult ;
final static String CONFIG = "{" +
" " debug_level " : " info " ," +
" " gpgpu_enabled " : true," +
" " openvino_enabled " : true," +
" " openvino_device " : " CPU " ," +
" " detect_minscore " : 0.1," +
" " detect_quantization_enabled " : true," +
" " pyramidal_search_enabled " : true," +
" " pyramidal_search_sensitivity " : 0.28," +
" " pyramidal_search_minscore " : 0.5," +
" " pyramidal_search_quantization_enabled " : true," +
" " klass_lpci_enabled " : true," +
" " klass_vcr_enabled " : true," +
" " klass_vmmr_enabled " : true," +
" " recogn_score_type " : " min " ," +
" " recogn_minscore " : 0.3," +
" " recogn_rectify_enabled " : false," +
" " recogn_quantization_enabled " : true" +
"}" ;
/**
* Parallel callback delivery function used to notify about new results.
* This callback will be called few milliseconds (before next frame is completely processed)
* after process function is called.
*/
static class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {
@ Override
public void onNewResult ( UltAlprSdkResult result ) { }
}
final MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback (); // set to null to disable parallel mode
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
// Initialize the engine
assert UltAlprSdkEngine . init (
getAssets (),
CONFIG ,
mCallback
). isOK ();
}
// Camera listener: https://developer.android.com/reference/android/media/ImageReader.OnImageAvailableListener
final ImageReader . OnImageAvailableListener mOnImageAvailableListener = new ImageReader . OnImageAvailableListener () {
@ Override
public void onImageAvailable ( ImageReader reader ) {
try {
final Image image = reader . acquireLatestImage ();
if ( image == null ) {
return ;
}
// ANPR/ALPR recognition
final Image . Plane [] planes = image . getPlanes ();
final UltAlprSdkResult result = UltAlprSdkEngine . process (
ULTALPR_SDK_IMAGE_TYPE . ULTALPR_SDK_IMAGE_TYPE_YUV420P ,
planes [ 0 ]. getBuffer (),
planes [ 1 ]. getBuffer (),
planes [ 2 ]. getBuffer (),
image . getWidth (),
image . getHeight (),
planes [ 0 ]. getRowStride (),
planes [ 1 ]. getRowStride (),
planes [ 2 ]. getRowStride (),
planes [ 1 ]. getPixelStride ()
);
assert result . isOK ();
image . close ();
} catch ( final Exception e ) {
e . printStackTrace ();
}
}
};
@ Override
public void onDestroy () {
// DeInitialize the engine
assert UltAlprSdkEngine . deInit (). isOK ();
super . onDestroy ();
}繰り返しますが、詳細については、Android、Raspberry Pi、Linux、Windows、および完全なドキュメントのサンプルアプリケーションを確認してください。
ソースコードには、#2 C ++サンプルアプリケーションが付属しています:ベンチマークと認識者。これらのサンプルアプリケーションは、 Android 、 Windows 、 Raspberry Pi 、 iOS 、 OSX 、 Linuxのすべてのサポートされているプラットフォームで使用できます。
このアプリケーションは、すべてが問題であり、予想される速さで実行されていることを確認するために使用されます。最大フレームレート(Intel Xeonの237fps 、Snapdragon 855の47fps 、Jetson NXの152fps 、Khadas Vim3の64fps 、Jetson Nanoでの30fps 、Raspberry Pi 4の12fps )に関する情報は、このアプリケーションを使用してチェックできます。オープンソースであり、登録やライセンスキーは必要ありません。
このサンプルの構築と実行方法の詳細については、サンプル/C ++/ベンチマークを確認してください。
これは、JPEG/PNG/BMP画像からナンバープレートを検出および認識するために使用されるコマンドラインアプリケーションです。
このサンプルを構築して実行する方法の詳細については、確認してください。
C ++ APIは、https://www.doubango.org/sdks/anpr/docs/cpp-api.htmlで定義されています。
# include < ultimateALPR-SDK-API-PUBLIC.h > // Include the API header file
// JSON configuration string
// More info at https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html
static const char * __jsonConfig =
" { "
" " debug_level " : " info " , "
" " debug_write_input_image_enabled " : false, "
" " debug_internal_data_path " : " . " , "
" "
" " num_threads " : -1, "
" " gpgpu_enabled " : true, "
" " openvino_enabled " : true, "
" " openvino_device " : " CPU " , "
" "
" " detect_roi " : [0, 0, 0, 0], "
" " detect_minscore " : 0.1, "
" "
" " pyramidal_search_enabled " : true, "
" " pyramidal_search_sensitivity " : 0.28, "
" " pyramidal_search_minscore " : 0.3, "
" " pyramidal_search_min_image_size_inpixels " : 800, "
" "
" " klass_lpci_enabled " : true, "
" " klass_vcr_enabled " : true, "
" " klass_vmm_enabled " : true, "
" "
" " recogn_minscore " : 0.3, "
" " recogn_score_type " : " min " "
" } " ;
// Local variable
UltAlprSdkResult result;
// Initialize the engine (should be done once)
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::init(
__jsonConfig
)).isOK());
// Processing (detection + recognition)
// Call this function for every video frame
const void * imageData = nullptr ;
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::process(
ULTMICR_SDK_IMAGE_TYPE_RGB24,
imageData,
imageWidth,
imageHeight
)).isOK());
// DeInit
// Call this function before exiting the app to free the allocate resources
// You must not call process() after calling this function
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::deInit()).isOK());繰り返しますが、APIの使用方法の詳細については、サンプルアプリケーションを確認してください。
ディスカッショングループまたはTwitterアカウントを確認してください