Firefly开源社区

12
发表新贴
打印 上一主题 下一主题

[应用开发] RKmedia教学(zbar 二维码识别)

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

RKmedia教学(zbar 二维码识别)

发表于 2021-5-27 10:54:25      浏览:23984 | 回复:51        打印     [复制链接] 楼主
本帖最后由 板蓝根 于 2021-5-27 10:59 编辑

  • 介绍
要想更好的使用 1126/1109 的硬件资源就必须掌握一套媒体框架。此贴会已一个智慧金融的应用场景,介绍一下 RKmedia 的,VI 、VO、RGA 模块以及 zbar 的使用。应用功能:通过 RGB 摄像头识别二维码。



  • 代码
gitlab 仓库地址: https://gitlab.com/firefly-linux/app/firefly_rkmedia_demo

源码文件:firefly_rkmedia_demo/rkmedia_vi_zbar_test.c


  • 编译
  • 由于官方使用的是 buildroot 系统,所以你需要先编译一遍官方的 SDK,来构建依赖环境。下面是编译官方 SDK 的 WIKI 链接。https://wiki.t-firefly.com/zh_CN/CAM-C11262U/Source_code.html,注意,编译之前你需要打开 buildroot 的 zbar 支持,否则后续无法编译通过。需要找到自己的使用的 config 文件并且修改。
    1. diff --git a/configs/firefly_rv1126_rv1109_uvcc_defconfig b/configs/firefly_rv1126_rv1109_uvcc_defconfig
    2. index cbf9af861e..8cfb2980dc 100644
    3. --- a/configs/firefly_rv1126_rv1109_uvcc_defconfig
    4. +++ b/configs/firefly_rv1126_rv1109_uvcc_defconfig
    5. @@ -124,3 +124,4 @@ BR2_PACKAGE_RKNPU_USE_RKNN_API=y
    6. BR2_PACKAGE_RKNPU_USE_MINI_DRIVER=n

    7. BR2_PACKAGE_ARCUVC=y
    8. +BR2_PACKAGE_ZBAR=y
    复制代码

  • 编译完成后你会在 buildroot 仓库下找到文件系统编译依赖环境 sdk/buildroot/output/firefly_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/
  • 把 SDK 的绝对路径和依赖环境的相对路径填入 RKmedia 二维码识别仓库的 build.sh 文件中
    1. # SDK 目录                                                                                                                                                                                                           
    2. SDK_PATH="/home/daijh/daijhfs/daijh/p/rk-rv1109/gitlab_merge/"     
    3.    
    4. # 编译完 buildroot 后的 sysroot 目录     
    5. sysroot="$SDK_PATH/buildroot/output/firefly_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/"
    复制代码

  • 执行脚本编译,生成可执行文件 rkmedia_vi_zbar_test
    1. ./build.sh rkmedia_vi_zbar_test.c
    复制代码

  • 设备升级你刚刚编译出来的固件,升级方法 WIKI 链接 https://wiki.t-firefly.com/zh_CN/CAM-C11262U/upgrade.html,然后把 rkmedia_vi_zbar_test 通过 adb push 到设备中,就可以运行了
    1. adb push rkmedia_vi_zbar_test /
    复制代码


  • 效果
可以安装一个浏览器域名二维码生成插件,到任意网站生成二维码传到手机中。运行程序
  1. ./rkmedia_vi_zbar_test -a /oem/etc/iqfiles
复制代码
然后把二维码放到摄像头前,打印信息就会识别出网站域名。




  • 源码分析

我会在源码上更新注释,也可以查看 WIKI RKmedia 讲解。https://wiki.t-firefly.com/zh_CN/CAM-C11262U/Rkmedia.html

回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-22 09:22:03      沙发
ubuntu 发表于 2021-7-20 09:21
您的话和我说的是一个东西吗?
zbar.h的生成方法 和 buildroot 存在什么联系呢?

你不把 zbar 相关依赖编译进 buildroot 怎么会有对应头文件呢?
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-22 15:24:16      板凳
VI[1]:"rkispp_scale0" buffer may be occupied by other modules or apps, try again...
这里已经说了 VI 被占用了,真个固件只有 RkLunch.sh 调用了摄像头。
你确定 ./RkLunch-stop.sh 之后还是报这个 log 吗?传一下完整 log
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-28 15:33:04      地板
ubuntu 发表于 2021-7-28 14:18
@板蓝根 log看到了吗?

参考 9 楼,Rklunch-stop.sh 关闭了应用了吗?
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-28 17:44:26      5#
本帖最后由 板蓝根 于 2021-7-28 18:04 编辑
ubuntu 发表于 2021-7-28 17:17
您在#9 楼是说要提供关闭后的log.
首先, 我已经关闭了.
其次, log我也在#10 楼提供了

[size=15.5556px]双目和单目的 AIQ 初始化不一样,请问你用的是哪款设备,是CAM-CRV1126S2U 吗?


  1. SAMPLE_COMM_ISP_Init(1,hdr_mode, fec_enable, iq_file_dir)
  2. SAMPLE_COMM_ISP_Run(1);
复制代码


[size=15.5556px]请在代码中找到以上两行做一下尝试:
[size=15.5556px]1.[size=15.5556px]fec_enable 设置成 RK_TRUE 看看行不行。
[size=15.5556px]2.如果 step1 还是不可以,在 step1 的基础下再把这两行的 1 改成 0 再试试行不行。


回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-29 09:03:57      6#
ubuntu 发表于 2021-7-29 08:59
1. 我CAM-CRV1126S2U Core-1126-JD4两套设备都买了. 目前用Core-1126-JD4 测试的.
2. 您贴的code 和我用 ...

你贴的是 rkmedia_vi_get_frame_test.c , 你是要调试这个还是 zbar ?
把硬件型号,固件版本,确认一下,我复现一下
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-29 11:12:06      7#
ubuntu 发表于 2021-7-29 11:01
谢谢回复.
我要调试的是zbar, 刚贴错成rkmedia_vi_get_frame_test.c 了.

zbar 的话请参考  14 楼测试过吗?
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-29 11:30:21      8#

根据14 楼,有修改过吗?
[size=15.5556px]根据14 楼,有修改过吗?
[size=15.5556px]根据14 楼,有修改过吗?
[size=15.5556px]根据14 楼,有修改过吗?
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-29 13:04:52      9#
把我的修改贴给你,如本帖图片所示,示例在双目运行的,”camera id  1 是 彩色摄像头,camera id 0 是 黑白摄像头“ 如果你在 core-1126-jd4 上运行只有 1 个摄像头, 所以 camera id 要改成 0.

同时应用和 Rklunch 的 VO 冲突了。你需要先执行以下步骤:

./Rklunch-stop.sh
dbserver &
ispserver &
./rkmedia_vi_zbar_test -a /oem/etc/iqfiles/


diff --git a/rkmedia_vi_zbar_test.c b/rkmedia_vi_zbar_test.c
index 010857c..96ea1ea 100644
--- a/rkmedia_vi_zbar_test.c
+++ b/rkmedia_vi_zbar_test.c
@@ -13,7 +13,7 @@
#include "rkmedia_api.h"
#include "rkmedia_venc.h"

-#if 0
+#if 1
#define DBG(x...) printf(x)
#else
#define DBG(x...) do {} while(0)
@@ -170,11 +170,11 @@ int main(int argc, char *argv[])
   RK_MPI_SYS_Init();
#ifdef RKAIQ
   rk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;
-  RK_BOOL fec_enable = RK_FALSE;
+  RK_BOOL fec_enable = RK_TRUE;
   int fps = 30;

-  SAMPLE_COMM_ISP_Init(1,hdr_mode, fec_enable, iq_file_dir);
-  SAMPLE_COMM_ISP_Run(1);
+  SAMPLE_COMM_ISP_Init(0,hdr_mode, fec_enable, iq_file_dir);
+  SAMPLE_COMM_ISP_Run(0);
   SAMPLE_COMM_ISP_SetFrameRate(fps);
#else
   (void)argc;
@@ -189,8 +189,8 @@ int main(int argc, char *argv[])
   vi_chn_attr.u32Height = 1080;
   vi_chn_attr.enPixFmt = IMAGE_TYPE_NV12;
   vi_chn_attr.enWorkMode = VI_WORK_MODE_NORMAL;
-  ret = RK_MPI_VI_SetChnAttr(1, 1, &vi_chn_attr);
-  ret |= RK_MPI_VI_EnableChn(1, 1);
+  ret = RK_MPI_VI_SetChnAttr(0, 1, &vi_chn_attr);
+  ret |= RK_MPI_VI_EnableChn(0, 1);
   if (ret) {
     printf("Create vi[1] failed! ret=%d\n", ret);
     return -1;
回复

使用道具 举报

1万

积分

14

威望

13

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
11139

优秀版主

发表于 2021-7-29 15:09:21      10#
本帖最后由 板蓝根 于 2021-7-29 15:11 编辑

1.如本帖展示图所示,demo 是通过 VO (mipi 屏幕)预览的,如果要推流的话可能需要自己去修改了
2.“为什么需要开 dbserver 和 ispserver”。因为编译 demo 默认没有定义 RKAIQ 宏,默认没有初始化 ISP ,所以需要运行 ispserver,而 运行 ispserver 前需要运行 dbserver 不然会被刷屏。为什么 CAM-CRV1126S2U 不用,因为 CAM-CRV11262U 的 Rklunch.sh 没有占用 VO 所以不会冲突,不需要关闭。而 Rklunch 本身就帮我们初始化好 ISP了就不需要再初始化了。
3.为什么识别不了二维码?这个要调试一下 zbar 模块,demo 只在双目上测试过。core-1126-jd4 不行很有可能是 id 为 0 的摄像头默认前置摄像头模式图片被镜像了。你可以加一些代码在图片送入 zbar 之前保存下来,看看图片有什么异常,用手机扫扫这张图片的二维码看看能不能识别。
回复

使用道具 举报

返回列表
12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表