完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简介
Rock-X SDK 是基于 RK3399Pro/RK1808 平台的一套 AI 组件库。开发者通过 Rock-X SDK提供的 API 接口能够快速构建 AI 应用。 Rock-X SDK 主要功能
本篇是使用Rock-X SDK进行车牌识别快速开发的过程,使用自定义或其它的模型的请使用rknn-toolkit和rknn-api进行开发 性能指标 车牌识别性能
注: 1. CCPD(Chinese City Parking Dataset)是国内车牌数据集,从中随机抽取 10000 张进行测试。 2. 支持识别国内蓝色、绿色和黄色车牌。 3. 可识别的车牌字符如下表所示。
调用过程 硬件准备 AIO-3399ProC + 摄像头 相关代码 以下为Android的相关代码,完整代码在/RockX_SDK_V1.1.0_20191115/demo/rk3399pro_android_demo/rockx-android-demo-carplate_recognition.zip。 此demo功能是从摄像头获取图像数据,检测图像中的车牌,然后进行车牌对齐和识别,最后显示识别的结果。 详细的函数定义和相关数据结构请参考:/RockX_SDK_V1.1.0_20191115/doc/rockx_api_doc/html/index.html 1. 初始化 public void create() { mModelPath = installRockxData(mContext); mRockXPlateDetectionModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_CARPLATE_DETECTION); mRockXCarplateOnetModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_CARPLATE_ALIGN); mRockXCarplateRecogModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_CARPLATE_RECOG); } 程序会调用如上实现的RockX.create()方法创建车牌检测、车牌矫正对齐和车牌识别模块。其中RockX.native_create_rockx_module()实现为Java_com_rockchip_gpadc_demo_rockx_RockX_native_1create_1rockx_1module(),其调用Rock-X的API rockx_create()生成对应模块的实例。 2. 检测车牌 程序在java层调用RockX.detectCarplate()进行检测车牌,RockX.detectCarplate()实际是RockX.native_plate_detect()的封装,实际是RockX.native_plate_detect()部分实现如下: extern "C" JNIEXPORT jint JNICALL Java_com_rockchip_gpadc_demo_rockx_RockX_native_1plate_1detect (JNIEnv *env, jobject obj, jlong handle, ***yteArray inData, jint inWidth, jint inHeight, jint inPixelFmt, jobject detectObjectList) { .. // 省略部分代码 rockx_ret_t ret = rockx_carplate_detect((rockx_handle_t)handle, &input_image, &object_array, nullptr); if (ret != ROCKX_RET_SUCCESS) { LOGE("rockx_face_detect error %dn", ret); return -1; } object_array_c2j(env, &object_array, detectObjectList, inWidth, inHeight); env->ReleaseByteArrayElements(inData, in_data, JNI_ABORT); return 0; } 程序调用的是Rock-X的API rockx_carplate_detect()进行检测车牌,省略的部分是数据结构的初始化和填充,返回的结果为object_array,通过object_array_c2j()赋值给detectObjectList传回java层。 3. 车牌对齐和识别 车牌对齐和识别分别调用的是Rock-X的rockx_carplate_align()和rockx_carplate_recognize()进行的。 在java层,程序调用RockX.recogCarplate()将检测到的车牌进行对齐和识别。 RockX.recogCarplate()的部分实现: public Map int left, int right, int top, int bottom , byte[] recog_result , float trans_alignconfidence, float a_t, float a_num, float r_t, float r_num) { ... // 省略部分代码 starttime = System.currentTimeMillis(); alignconfidence = native_get_aligned_plate(mRockXCarplateOnetModule, inData,width, height, inPixelFmt, x1, x2, y1, y2, alignconfidence , alignimg); endtime = System.currentTimeMillis(); a_t+=(endtime-starttime)/1000F; a_num++; System.gc(); Map if (alignconfidence < 0) { alignimg = null; System.gc(); result.put("alignconfidence",alignconfidence); return result; } if(alignconfidence>0.5) { //filter the case of single character starttime = System.currentTimeMillis(); float ret = native_get_recog_result(mRockXCarplateRecogModule, alignimg, inPixelFmt, recog_result); endtime = System.currentTimeMillis(); r_t+=(endtime-starttime)/1000F; r_num++; Log.d(TAG, "current_ average recog time = " + r_t/r_num); if (ret < 0) { alignimg = null; System.gc(); result.put("alignconfidence",alignconfidence); return result; } } ... // 省略部分代码 } 可以看到车牌对齐调用的是RockX.native_get_aligned_plate(),车牌识别调用的是RockX.native_get_recog_result()这两个都是native函数,其实现其它的native函数实现形式差不多,都是通过调用Rock-X的API实现相关功能的。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1988 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2490 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5272 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 22:23 , Processed in 0.651775 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号