网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

基于OpenCV开源库开发的在OpenHarmony中实现车牌识别

时间:2022-06-30 11:16

人气:

作者:admin

标签: opencv  OpenHarmony  车牌识别 

导读:  张荣 OpenHarmony 知识体系工作组 介绍 本车牌识别项目是基于开源项目 EasyPR(Easy to do Plate Recognition)实现。EasyPR 是一个开源的中文车牌识别系统,基于 OpenCV 开源库开发。 本项目使用...

张荣

OpenHarmony 知识体系工作组

介绍

本车牌识别项目是基于开源项目 EasyPR(Easy to do Plate Recognition)实现。EasyPR 是一个开源的中文车牌识别系统,基于 OpenCV 开源库开发。本项目使用润和 HiSpark Taurus AI Camera(Hi3516DV300) 摄像头开发板套件(以下简称 Hi3516)实现拍照车牌并显示识别结果。采用的系统是 OpenAtom OpenHarmony (简称“OpenHarmony”) 3.1 Release 小型系统。首先将 Hi3516 中的摄像头对准车牌,其距离约为 60cm~70cm 如下所示:

5a7ade88-f3be-11ec-ba43-dac502259ad0.png

运行程序后按下 1 拍照、按 2 输出识别结果如下所示:

5a9fb172-f3be-11ec-ba43-dac502259ad0.png

开发流程

本车牌识别项目使用 OpenHarmony 中的媒体子系统实现。代码基于停车场景下的本地车牌识别。进行讲解,其代码结构如下:

三方库移植

EasyPR 实现是基于 OpenCV 实现,因此实现 EasyPR 首先得移植 OpenCV。移植的方式采用 Gn 调用 Shell 脚本,Shell 脚本调用 Makefile 实现。
├── BUILD.gn├── include │   ├── camera.h                                       // 摄像头定义│   ├── local_net_communication.h          // 设备协同主要功能定义│   ├── local_net_def.h                             // 设备协同打印日志│   ├── local_net_dlist.h                            // 设备协同设备列表定义│   ├── local_net_message.h                    // 设备协同传输消息定义│   ├── local_net_udp.h                             // 设备协同udp协议定义│   ├── local_net_utils.h                            // 设备协同通用工具定义│   ├── log.h                                              // 打印日志定义│   └── wpa_work.h                                   // wifi设置定义└── src    ├── base64.cpp                                     // 图片转base64格式功能代码     ├── camera.cpp                                     // 摄像头实现    ├── local_net_communication.c            // 设备协同主要功能实现    ├── local_net_dlist.c                              // 设备协同设备列表实现    ├── local_net_message.c                      // 设备协同传输消息实现    ├── local_net_udp.c                              // 设备协同udp协议实现    ├── local_net_utils.c                              // 设备协同通用工具实现    ├── main.cpp                                         // 主程序└──wpa_work.c//wifi设置实现
下面介绍移植的大致流程,具体细节可参考小型系统上运行开源项目车牌识别及移植 opencv 库。

移植OpenCV

下载源码

获取源码将 OpenCV 库源码放在 OpenHarmony 根目录下的 third_party 下:

生成Makefile

在 OpenCV 源码根目录新建 build 目录生成 Makefile 文件:

使用 cmake-gui 来配置编译环境:

cd buildmake-gui..

显示的 UI 界面如下图:

5abeabcc-f3be-11ec-ba43-dac502259ad0.png

点击 Configure 进行配置,选择第四个选项进行配置,如下图:

配置工具链:

点击 Generate 生成 Makefile。

创建 Shell 脚本

在 OpenCV 源码根目录新增 build_opencv.sh:

touch build_opencv.shchmod 777 build_opencv.shvim build_opencv.sh##添加如下内容#!/bin/shprocessor=`cat /proc/cpuinfo|grep processor | sort -u | wc -l`cd buildmake -j$processorcplib/*$1/libs/

创建Gn文件

在 OpenCV 源码根目录新增 BUILD.gn 将 OpenCV 库加入编译构建:

移植EasyPR

下载源码

获取源码 EasyPR 库源码放在源码根目录下的 third_party 下:

生成Makefile

在 EasyPr 源码根目录新建 build 目录:

mkdir buildcd buildcmake-gui..
显示的 UI 界面如下图: 5abeabcc-f3be-11ec-ba43-dac502259ad0.png

点击 Configure 进行配置,选择第四个选项进行配置,如下图:

配置工具链:

点击 Generate 生成 Makefile。

创建Shell脚本

在 EasyPR 源码根目录新增 build_easypr.sh:

创建Gn文件

在 EasyPR 源码根目录新增 BUILD.gn 加入至编译构建:

vim BUILD.gn
#BUILD.gn中添加如下内容import("//build/lite/config/component/lite_component.gni")import("//build/lite/ndk/ndk.gni")
root_build = rebase_path(root_build_dir)
build_ext_component("easypr_lib") {    command = "sh build_easypr.sh $root_build"    exec_path = "$root_build/../../../third_party/EasyPR"}
lite_component("easypr") {    deps = [        "//third_party/opencv:opencv",        ":easypr_lib"    ]    features = []}
最终 OpenCV 与 EasyPR 在 third_party 目录如下图所示:

5ae51d84-f3be-11ec-ba43-dac502259ad0.png

在 OpenHarmony 实现 EasyPR 需要主要分为如下三步:

1.GN 构建,将 EasyPR 加入编译构建;

2.拍照,调用 OpenHarmony 拍照接口,拍摄车牌;

3.EasyPR 本地识别,调用 EasyPR 识别车牌接口并返回识别结果。

GN构建

GN 构建中包含了 EasyPR 的头文件路径 、链接 EasyPR 动态库、编译依赖 EasyPR。如下所示:

5afe8170-f3be-11ec-ba43-dac502259ad0.png

拍照

拍照功能是基于官方文档拍照开发指导开发的,其 demo 样例在如下目录:

5b0d61c2-f3be-11ec-ba43-dac502259ad0.png

在停车场景中二维码识别与车牌识别共用同一份拍照代码 ,为提高二维码识别率在拍照初始化时须将分辨率设置为 1280*720。该改动在进行车牌识别时不会影响 ,初始化拍照代码如下图:

设置照片保存路径在文件 camera.h 下:

因为在停车场景中二维码扫码与车牌识别都会调用拍照接口,因此使用 s_runAi 作区分:

int main(int argc,char **argv){    int ret;    char licensePlate[32] = {0};    char input;    InitCamera();    PlateInit();    while(cin >> input) {        switch (input) {            case '1':                RunAICamera();                                                  // 拍照                break;            case '2':                memset(licensePlate, 0, sizeof(licensePlate));                ret = GetPlateString(IMG_PATH, licensePlate);   // 识别车牌                SAMPLE_INFO("ret -> %d, licensePlate->%s", ret, licensePlate);                break;            case 's':                PlateDeinit();                ExitCamera();                return 0;            default:                SAMPLE_ERROR("input Error");                break;        }    }    return 0;}

5b1c69e2-f3be-11ec-ba43-dac502259ad0.png

进行拍照后会进入拍照数据处理,当 s_runAi 为 false 说明是二维码识别,直接调用二维码识别接口即可。当 s_runAi 为 true 时须将拍照的数据保存为图片:

5b290bd4-f3be-11ec-ba43-dac502259ad0.png

将拍照数据以图片保存路径为“/sdcard/CaptureAi.jpg” 。

EasyPR本地识别

编写主程序 main.cpp 设置程序功能为按 1 拍照、按 2 显示结果 :

编译烧录

前文大致概括了 OpenCV 和 EasyPR 的移植步骤,更详细的关于环境搭建、烧录以及项目源码构建的步骤,请查看参考文章本地车牌识别。

总结

编写车牌识别库对外接口,相关接口使用可以参考作者文章介绍;本文章的源码参考本地车牌识别。丰富多样的 OpenHarmony 开发样例离不开广大合作伙伴和开发者的贡献,如果你也想把自己开发的样例分享出来,欢迎把样例提交到 OpenHarmony 知识体系 SIG 仓来,共建开发样例请参考如何共建开发样例。

车牌识别器(OpenCV版本)

https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/GreyWolf_ImageRecognition_LocalAI

车牌识别器

https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/GreyWolf_EasyPR/readme.md

拍照开发指导

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/guide/device-camera-control-demo-photoguide.md

作者文章列表

https://gitee.com/link?target=https%3A%2F%2Fwww.cnblogs.com%2Fsubconscious%2Fp%2F3979988.html

源码参考

https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/GreyWolf_ImageRecognition_LocalAI

构建开发样例

https://gitee.com/openharmony-sig/knowledge/blob/master/docs/co-construct_demos/README_zh.md


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信