ابدء
Android
Raspberry Pi (Raspbian OS) ، Linux ، Nvidia Jetson ، Windows وغيرها
الحصول على المساعدة
عرض الويب عبر الإنترنت على https://www.doubango.org/webapps/alpr/
وثائق كاملة لـ SDK على https://www.doubango.org/sdks/anpr/docs/
اللغات المدعومة (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)
هل سبق لك أن شاهدت محرك ANPR/ALPR القائم على التعلم العميق (التعرف على لوحة/لوحة ترخيص أوتوماتيكي) يعمل بسرعة 64 إطارًا في الثانية على جهاز ذراع 99 دولارًا (Khadas VIM3 ، 720p Pideo Dentoly)؟
UltimatealPR هو أسرع تطبيق ANPR/ALPR الذي ستجده في السوق. أن تكون سريعًا أمرًا مهمًا ولكن كونك دقيقًا أمر بالغ الأهمية.
نستخدم تقنيات التعلم العميق على أحدث طراز لتقديم دقة ودقة لا مثيل لها. على سبيل المقارنة ، هذا هو #33 مرة أسرع من Openalpr على Android. (انظر القسم القياسي لمزيد من المعلومات).
لا حاجة إلى وحدات معالجة رسمية خاصة أو مخصصة ، كل شيء يعمل على وحدة المعالجة المركزية مع تحسينات Neon ARM SIMD ، وعمليات الرياضيات ذات النقطة الثابتة ، ومتعددة الإقراض. هذا يفتح أبوابها لإمكانيات التشغيل بشكل كامل تتميز بحلولها (نظام النقل الذكي) على الكاميرا دون التماس سحابة. إن القدرة على تشغيل جميع تطبيقاته على الجهاز ستقلل بشكل كبير من تكلفة الحصول على هذه الأنظمة ونشرها وصيانتها . يرجى التحقق من قسم الحلول المستند إلى السحابة لمزيد من المعلومات حول كيفية تقليل التكلفة.
يعرض الفيديو التالي عينة التعرف على Windows:
يتم تسريع الرمز على وحدة المعالجة المركزية و GPU و VPU و FPGA ، وذلك بفضل CUDA و NVIDIA TENSORRT و Intel Openvino.
بالإضافة إلى التعرف على لوحة الترخيص (LPR) ، فإننا ندعم تعزيز الصور للثمل الليلي (IENV) ، وتحديد بلد لوحة الترخيص (LPCI) ، والتعرف على ألوان السيارة (VCR) ، والتعرف على النماذج (VMMR) ، والتعرف على نمط جسم السيارة (VBSR) ، وتتبع اتجاه السيارة (VDT) وتقدير سرعة السيارة (VSE).
على وحدات معالجة الرسومات NVIDIA المتطورة مثل Tesla V100 ، يبلغ معدل الإطارات 315 إطارًا في الثانية مما يعني 3.17 ميلي ثانية . على وحدات المعالجة المركزية الراقية مثل Intel Xeon ، يمكن أن يصل معدل الإطار الأقصى إلى 237 إطارًا في الثانية ، وذلك بفضل OpenVino. على وحدات المعالجة المركزية المنخفضة مثل Raspberry Pi 4 ، يبلغ متوسط معدل الإطارات 12 إطارًا في الثانية .
لا تأخذ كلمتنا لذلك ، تعال تحقق من تنفيذنا. لا يلزم تسجيل أي تسجيل أو مفتاح ترخيص أو اتصال بالإنترنت ، ما عليك سوى استنساخ الرمز وابدأ الترميز/الاختبار. كل شيء يعمل على الجهاز ، لا توجد بيانات تترك جهاز الكمبيوتر الخاص بك. يأتي الرمز الذي تم إصداره هنا مع العديد من العينات الجاهزة للاستخدام لنظام Android و Raspberry Pi و Linux و Windows لمساعدتك في البدء بسهولة.
يمكنك أيضًا التحقق من تطبيقنا على الإنترنت ( لا مطلوب تسجيل ) للتحقق من الدقة والدقة قبل البدء في اللعب مع SDK.
يرجى التحقق من الوثائق الكاملة على https://www.doubango.org/sdks/anpr/docs/
يعمل SDK على العديد من المنصات ويأتي مع دعم للعديد من لغات البرمجة ولكن الأقسام التالية تركز على Android و Raspberry Pi و Linux و Windows.
الأقسام التالية تدور حول Android و Java API.
يأتي الرمز المصدر مع تطبيقات نموذج Android #4: المعيار ، والفيديو ، والفيديو ، و ImageNap.
يتم استخدام هذا التطبيق للتحقق من كل شيء على ما يرام ويعمل بأسرع ما هو متوقع. يمكن فحص المعلومات حول معدل الإطارات القصوى ( 237 إطارًا في الثانية على Intel Xeon و 64 إطارًا في الثانية على Khadas VIM3 و 12 إطارًا في الثانية على Raspberry Pi 4) باستخدام هذا التطبيق. إنه مفتوح المصدر ولا يتطلب التسجيل أو مفتاح الترخيص.
يجب استخدام هذا التطبيق كرمز مرجعي من قبل أي مطور يحاول إضافة UltimateAlpr إلى منتجاته. يوضح كيفية اكتشاف لوحات الترخيص والتعرف عليه في الوقت الفعلي باستخدام دفق الفيديو المباشر من الكاميرا. يرجى التحقق من قسم المعالجة المتتابعة مقابل التسلسل لمزيد من المعلومات حول وضع Parellel.
مثل VideoSoparalalle ولكن العمل على الوضع المتسلسل مما يعني أبطأ. يتم توفير هذا التطبيق لتخفيف مقارنة الأوضاع: بالتوازي مقابل التسلسل.
يقرأ هذا التطبيق وعرض دفق الفيديو المباشر من الكاميرا ولكن فقط التعرف على صورة من الدفق عند الطلب.
لتجربة عينة تطبيقات على Android:
افتح Android Studio وحدد "فتح مشروع Android Studio الحالي"
انتقل إلى UltimatealPR-SDK/عينات ، حدد مجلد Android وانقر فوق "موافق"
حدد العينة التي تريد تجربتها (على سبيل المثال videoparalal ) واضغط على Run . تأكد من وجود الجهاز على وضع المناظر الطبيعية لتجربة أفضل.
يتم توزيع 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' ]
}
}
}من الصعب أن تضيع عندما تحاول استخدام واجهة برمجة التطبيقات حيث لا يوجد سوى 3 وظائف مفيدة: init و Process و 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 ...
يتم استخدام هذا التطبيق للتحقق من كل شيء على ما يرام ويعمل بأسرع ما هو متوقع. يمكن التحقق من المعلومات حول معدل الإطار الأقصى ( 237 إطارًا في الثانية على Intel Xeon ، 47 إطارًا في الثانية على Snapdragon 855 ، 152 إطارًا في الثانية على Jetson NX ، 64 إطارًا في الثانية على Khadas VIM3 ، 30 إطارًا في الثانية على Jetson Nano و 12 إطارًا في الثانية على Raspberry Pi 4) باستخدام هذا التطبيق. إنه مفتوح المصدر ولا يتطلب التسجيل أو مفتاح الترخيص.
لمزيد من المعلومات حول كيفية إنشاء وتشغيل هذه العينة ، يرجى التحقق من العينات/C ++/القياس.
هذا هو تطبيق سطر الأوامر المستخدمة لاكتشاف لوحة الترخيص والتعرف عليه من أي صورة JPEG/PNG/BMP.
لمزيد من المعلومات حول كيفية إنشاء وتشغيل هذه العينة ، يرجى التحقق:
يتم تعريف API C ++ في 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());مرة أخرى ، يرجى التحقق من تطبيقات العينة للحصول على مزيد من المعلومات حول كيفية استخدام واجهة برمجة التطبيقات.
يرجى التحقق من مجموعة المناقشة الخاصة بنا أو حساب Twitter