เริ่มต้น
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 ที่ใช้การเรียนรู้อย่างลึกซึ้ง (การจดจำหมายเลขอัตโนมัติ/ป้ายทะเบียน) ที่ทำงานที่ 64fps บนอุปกรณ์ ARM $ 99 (Khadas Vim3, ความละเอียดวิดีโอ 720p)?
UltimateAlpr คือการใช้งาน ANPR/ALPR ที่เร็วที่สุดที่คุณจะพบในตลาด การอดอาหารเป็นสิ่งสำคัญ แต่ความถูกต้องเป็นสิ่งสำคัญ
เราใช้เทคนิคการเรียนรู้ที่ทันสมัยเพื่อนำเสนอความแม่นยำและความแม่นยำที่ไม่มีใครเทียบ เป็นการเปรียบเทียบนี้ เร็วกว่า OpenAlPR บน Android #33 เท่า (ดูส่วนมาตรฐานสำหรับข้อมูลเพิ่มเติม)
ไม่จำเป็นต้องมี GPU พิเศษหรือเฉพาะทุกอย่างที่ทำงานบน CPU ด้วยการเพิ่มประสิทธิภาพ นีออน ARM ARM , การดำเนินการทางคณิตศาสตร์แบบจุดคงที่และมัลติเธรด สิ่งนี้เปิดประตูสำหรับความเป็นไปได้ในการใช้งานโซลูชั่น (ระบบการขนส่งอัจฉริยะ) อย่างเต็มที่บนกล้องโดยไม่ต้องชักชวนเมฆ ความสามารถในการเรียกใช้แอพพลิเคชั่นทั้งหมดบนอุปกรณ์ จะลดต้นทุนในการรับใช้งานและบำรุงรักษาระบบดังกล่าวอย่างมีนัยสำคัญ โปรดตรวจสอบส่วนโซลูชันที่ใช้คลาวด์ตามอุปกรณ์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการลดต้นทุน
วิดีโอถัดไปแสดงตัวอย่าง Recognizer ที่ทำงานบน Windows:
รหัสถูกเร่งด้วย CPU , GPU , VPU และ FPGA , ขอบคุณ CUDA, Nvidia Tensorrt และ Intel Openvino
นอกเหนือจากการจดจำป้ายทะเบียน (LPR) เรายังสนับสนุนการเพิ่มประสิทธิภาพของภาพสำหรับการมองเห็นตอนกลางคืน (IENV), การระบุประเทศป้ายทะเบียนบริการ (LPCI), การจดจำสีของยานพาหนะ (VCR), การจดจำแบบจำลองยานพาหนะ (VMMR), การจดจำสไตล์ร่างกายยานพาหนะ (VBSR), การติดตามทิศทางยานพาหนะ (VDT) และการประเมินความเร็วของยานพาหนะ
ในระดับไฮเอนด์ GPU เช่น Tesla V100 อัตราเฟรมคือ 315 fps ซึ่งหมายถึงเวลาการอนุมาน 3.17 มิลลิวินาที ในซีพียูระดับสูงเช่น Intel Xeon อัตราเฟรมสูงสุดอาจสูงถึง 237fps ขอบคุณ OpenVino ในซีพียูต่ำสุดเช่น Raspberry Pi 4 อัตราเฟรมเฉลี่ยคือ 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: เกณฑ์มาตรฐาน, Videoparallel, VideoCeentive และ ImagesNap
แอปพลิเคชันนี้ใช้เพื่อตรวจสอบทุกอย่างก็โอเคและทำงานได้เร็วเท่าที่คาดไว้ ข้อมูลเกี่ยวกับอัตราเฟรมสูงสุด ( 237fps บน Intel Xeon, 64fps บน Khadas Vim3 และ 12fps บน Raspberry Pi 4) สามารถตรวจสอบได้โดยใช้แอปพลิเคชันนี้ เป็นโอเพ่นซอร์สและไม่จำเป็นต้องลงทะเบียนหรือคีย์ใบอนุญาต
แอปพลิเคชันนี้ควรใช้เป็นรหัสอ้างอิงโดยนักพัฒนาที่พยายามเพิ่ม UltimateAlpr ลงในผลิตภัณฑ์ของพวกเขา มันแสดงวิธีการตรวจจับและรับรู้แผ่นป้ายทะเบียนแบบเรียลไทม์โดยใช้สตรีมวิดีโอสดจากกล้อง โปรดตรวจสอบส่วนการประมวลผลแบบขนานกับลำดับสำหรับข้อมูลเพิ่มเติมเกี่ยวกับโหมด Parellel
เช่นเดียวกับ Videoparallel แต่ทำงานกับโหมด Sequential ซึ่งหมายถึงช้าลง แอปพลิเคชันนี้มีไว้เพื่อความสะดวกในการเปรียบเทียบโหมด: แบบขนานกับลำดับ
แอปพลิเคชันนี้อ่านและแสดงสตรีมวิดีโอสดจากกล้อง แต่จดจำภาพจากสตรีมตามความต้องการเท่านั้น
หากต้องการลองใช้แอปพลิเคชันตัวอย่างบน Android:
เปิด Android Studio และเลือก "เปิดโครงการ Android Studio ที่มีอยู่"
นำทางไปยัง Ultimatealprpr-sdk/ตัวอย่าง เลือกโฟลเดอร์ Android แล้วคลิก ตกลง
เลือกตัวอย่างที่คุณต้องการลอง (เช่น videoparallel ) แล้วกด 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' ]
}
}
}มันยากที่จะหายไปเมื่อคุณพยายามใช้ API เนื่องจากมีเพียง 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 ...
แอปพลิเคชันนี้ใช้เพื่อตรวจสอบทุกอย่างก็โอเคและทำงานได้เร็วเท่าที่คาดไว้ ข้อมูลเกี่ยวกับอัตราเฟรมสูงสุด ( 237fps บน Intel Xeon, 47fps บน Snapdragon 855, 152fps บน Jetson NX, 64fps บน Khadas Vim3, 30fps บน Jetson Nano และ 12fps บน Raspberry Pi 4) สามารถตรวจสอบได้โดยใช้แอปพลิเคชันนี้ เป็นโอเพ่นซอร์สและไม่จำเป็นต้องลงทะเบียนหรือคีย์ใบอนุญาต
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างและเรียกใช้ตัวอย่างนี้โปรดตรวจสอบตัวอย่าง/C ++/Benchmark
นี่คือแอปพลิเคชันบรรทัดคำสั่งที่ใช้ในการตรวจจับและรับรู้ป้ายทะเบียนจากรูปภาพ 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 ของเรา