Memulai
Android
Raspberry Pi (Raspbian OS), Linux, Nvidia Jetson, Windows dan lainnya
Mendapatkan bantuan
Demo web online di https://www.doubango.org/webapps/alpr/
Dokumentasi lengkap untuk SDK di https://www.doubango.org/sdks/anpr/docs/
Bahasa yang Didukung (API): C ++ , C# , Java dan Python
Perpustakaan Visi Komputer Open Source: https://github.com/doubangotelecom/compv
Kata kunci: 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) dan Vehicle Speed Estimation (VSE)
Pernahkah Anda melihat mesin Deep Learning berbasis ANPR/ALPR (Nomor Otomatis/Pengenalan Lisensi) yang berjalan pada 64fps pada perangkat ARM $ 99 (Khadas Vim3, Resolusi Video 720p)?
UltimatealPr adalah implementasi ANPR/ALPR tercepat yang akan Anda temukan di pasar. Menjadi cepat itu penting tetapi akurat itu penting.
Kami menggunakan teknik pembelajaran mendalam yang canggih untuk menawarkan akurasi dan presisi yang tak tertandingi. Sebagai perbandingan, ini #33 kali lebih cepat dari OpenAlpr di Android. (Lihat bagian Benchmark untuk informasi lebih lanjut).
Tidak perlu untuk GPU khusus atau khusus, semuanya berjalan di CPU dengan optimasi neon ARM SIMD , operasi matematika titik tetap dan multithreading. Ini membuka pintu untuk kemungkinan menjalankan sepenuhnya menampilkan solusi (Sistem Transportasi Cerdas) pada kamera tanpa meminta awan. Mampu menjalankan semua aplikasinya pada perangkat akan secara signifikan menurunkan biaya untuk memperoleh, menggunakan dan memelihara sistem tersebut. Silakan periksa bagian Solusi Berbasis Perangkat Versus Cloud untuk informasi lebih lanjut tentang bagaimana ini akan mengurangi biaya.
Video berikutnya menunjukkan sampel pengenalan yang berjalan di Windows:
Kode ini dipercepat pada CPU , GPU , VPU dan FPGA , terima kasih kepada CUDA, NVIDIA Tensorrt dan Intel Openvino.
Selain pengenalan plat lisensi (LPR) kami mendukung peningkatan gambar untuk malam-penglihatan (IENV), Identifikasi Negara Plat Lisensi (LPCI), Pengenalan Warna Kendaraan (VCR), Pengenalan Model Make Vehicle (VMMR), Pengenalan Gaya Tubuh Kendaraan (VBSR), Pelacakan Arah Kendaraan (VDT) dan Estimasi Kecepatan Kendaraan (VSE).
Pada NVIDIA GPU kelas atas seperti Tesla V100 frame rate 315 fps yang berarti 3,17 waktu inferensi milidetik . Pada CPU kelas atas seperti Intel Xeon, frame rate maksimum bisa mencapai 237fps , berkat OpenVino. Pada CPU kelas bawah seperti Raspberry Pi 4, frame rate rata-rata adalah 12fps .
Jangan ambil kata -kata kami untuk itu, lihat implementasi kami. Tidak ada pendaftaran, kunci lisensi atau koneksi internet yang diperlukan , cukup klon kode dan mulai pengkodean/pengujian. Semuanya berjalan pada perangkat, tidak ada data yang meninggalkan komputer Anda. Kode yang dirilis di sini hadir dengan banyak sampel siap pakai untuk Android, Raspberry Pi, Linux, dan Windows untuk membantu Anda memulai dengan mudah.
Anda juga dapat memeriksa implementasi berbasis cloud online kami ( tidak perlu pendaftaran ) untuk memeriksa keakuratan dan presisi sebelum mulai bermain dengan SDK.
Silakan periksa dokumentasi lengkap di https://www.doubango.org/sdks/anpr/docs/
SDK bekerja pada banyak platform dan dilengkapi dengan dukungan untuk banyak bahasa pemrograman tetapi bagian berikutnya fokus pada Android, Raspberry Pi, Linux, dan Windows.
Bagian selanjutnya adalah tentang Android dan Java API.
Kode sumber dilengkapi dengan aplikasi sampel Android #4: Benchmark, Videoparallel, VideoCeQuential dan ImagesNap.
Aplikasi ini digunakan untuk memeriksa semuanya baik -baik saja dan berjalan secepat yang diharapkan. Informasi tentang frame rate maksimum ( 237fps di Intel Xeon, 64fps pada Khadas VIM3 dan 12FPS di Raspberry Pi 4) dapat diperiksa menggunakan aplikasi ini. Ini open source dan tidak memerlukan kunci pendaftaran atau lisensi.
Aplikasi ini harus digunakan sebagai kode referensi oleh pengembang mana pun yang mencoba menambahkan UltimatealPr ke produk mereka. Ini menunjukkan cara mendeteksi dan mengenali plat nomor secara realtime menggunakan stream video langsung dari kamera. Silakan periksa bagian pemrosesan paralel versus berurutan untuk info lebih lanjut tentang mode parellel.
Sama seperti videoparallel tetapi bekerja pada mode berurutan yang berarti lebih lambat. Aplikasi ini disediakan untuk memudahkan membandingkan mode: paralel versus berurutan.
Aplikasi ini membaca dan menampilkan stream video langsung dari kamera tetapi hanya mengenali gambar dari aliran sesuai permintaan.
Untuk mencoba aplikasi sampel di Android:
Buka Android Studio dan pilih "Buka Proyek Studio Android yang ada"
Arahkan ke Ultimatealpr-SDK/Sampel , pilih Folder Android dan klik OK
Pilih sampel yang ingin Anda coba (misalnya videoparallel ) dan tekan jalankan . Pastikan untuk memiliki perangkat pada mode lansekap untuk pengalaman yang lebih baik.
SDK didistribusikan sebagai modul studio Android dan Anda dapat menambahkannya sebagai referensi atau Anda juga dapat membangunnya dan menambahkan AAR ke proyek Anda. Tapi, cara termudah untuk menambahkan SDK ke proyek Anda adalah dengan langsung memasukkan sumber.
Di file build.gradle Anda, tambahkan:
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' ]
}
}
}Sulit untuk hilang ketika Anda mencoba menggunakan API karena hanya ada 3 fungsi yang berguna: init, proses dan deinit.
API C ++ didefinisikan di sini.
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 ();
}Sekali lagi, silakan periksa aplikasi sampel untuk Android, Raspberry PI, Linux dan Windows dan dokumentasi lengkap untuk informasi lebih lanjut.
Kode sumber dilengkapi dengan aplikasi sampel #2 C ++: Benchmark dan Pengakuan. Aplikasi sampel ini dapat digunakan pada semua platform yang didukung: Android , Windows , Raspberry PI , iOS , OSX , Linux ...
Aplikasi ini digunakan untuk memeriksa semuanya baik -baik saja dan berjalan secepat yang diharapkan. Informasi tentang frame rate maksimum ( 237fps di Intel Xeon, 47fps di Snapdragon 855, 152fps di Jetson NX, 64fps pada Khadas VIM3, 30fps di Jetson Nano dan 12FPS di Raspberry Pi 4) dapat diperiksa menggunakan aplikasi ini. Ini open source dan tidak memerlukan kunci pendaftaran atau lisensi.
Untuk informasi lebih lanjut tentang cara membangun dan menjalankan sampel ini, silakan periksa sampel/c ++/tolok ukur.
Ini adalah aplikasi baris perintah yang digunakan untuk mendeteksi dan mengenali plat nomor dari gambar JPEG/PNG/BMP.
Untuk informasi lebih lanjut tentang cara membangun dan menjalankan sampel ini, silakan periksa:
API C ++ didefinisikan di 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());Sekali lagi, silakan periksa aplikasi sampel untuk informasi lebih lanjut tentang cara menggunakan API.
Silakan periksa grup diskusi kami atau akun Twitter