最近研究了一下AWTK (Toolkit AnyWhere)这个GUI。发现功能挺强大,为了感受一下这个与Minigui的差别,所以做了一个在视频流上面增加人脸跟随框的功能。

实现期间,发现两个GUI还是有一些差别,所以写个文档记录一下实现的方法。

下载代码与搭建环境的事情这里就不做赘述了。

1.开启宏WITH_LCD_CLEAR_ALPHA

因为我的是linux设备,所以修改awtk-linux-fb目录下的awtk_config.py文件,增加
宏定义:

COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_LCD_CLEAR_ALPHA '

如果不知道位置在哪里,文件里搜索COMMON_CCFLAGS关键字,在后面追加即可。

2.设置窗口背景色

在窗口初始化的时候,需要把窗口的bg_color设置为透明的颜色。如:

widget_t* win = window_create(NULL, 0, 0, 0, 0);
cameraWin = canvas_widget_create(win, 0, 0, win->w, win->h);
widget_set_style_color(win, "bg_color", 0x00000000);

这里一开始的时候看文档,使用了这个接口设置:

widget_set_opacity(win, 0);

这个接口虽然可以把窗口设置为透明,但是后面无法正常画人脸框。所以不能使用这个接口。具体原因尚未研究。

3.使用离线画布绘制

我们这个业务场景是:视频流单独一个视层,独立于fb之外。gui创建在fb上面。在gui的应用中,需要显示视频流时,把窗口设置透明即可显示下面的视频流。

所以,我们的绘制人脸框的思路是:

清空画布 >> 绘制人脸框 >> 清空画布 >> 绘制人脸框…

初次实现,我们放在控件的paint事件中实现:

//离线画布
static ret_t on_paint_vgcanvas(void* ctx, event_t* e) {widget_t* widget = WIDGET(e->target);paint_event_t* evt = paint_event_cast(e);/* 设置离线的 canvas 为当前绘图的画布 */canvas_t* c = canvas_offline;canvas_offline_clear_canvas(c);      //清空画布,避免矩形框重叠/* 获取离线的 canvas 对应的离线 bitmap */bitmap_t* offline_bitmap = canvas_offline_get_bitmap(canvas_offline);/* 开始离线 canvas 绘图 */canvas_offline_begin_draw(canvas_offline);vgcanvas_t* vg = canvas_get_vgcanvas(c);vgcanvas_save(vg);vgcanvas_set_line_width(vg, 5);point_t leftTopCorner = {0};leftTopCorner.x = faceRect.x;leftTopCorner.y = faceRect.y;widget_to_local(widget, &leftTopCorner);vgcanvas_rect(vg, leftTopCorner.x, leftTopCorner.y, faceRect.w, faceRect.h); vgcanvas_set_stroke_color(vg, color_init(0xff, 0xff, 0, 0xff));vgcanvas_stroke(vg);     //画线vgcanvas_restore(vg);/* 结束离线 canvas 绘图 */canvas_offline_end_draw(canvas_offline);/* 把显存中的 bitmap 显示到在线的 canvas 中 */rect_t r = rect_init(0, 0, offline_bitmap->w, offline_bitmap->h);canvas_draw_image_ex(evt->c, offline_bitmap, IMAGE_DRAW_DEFAULT, &r);return RET_OK;
}

实现前期,一直使用画布与在线画布,想着每次使用透明色填充整个控件的矩形来清空画布,发现这样做是不行的,无法清空背景。而且,窗口的背景色也需要设置。

AWTK离线画布的应用 --- 绘制人脸框相关推荐

  1. ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三)

    ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三) 要检测出人脸并且还要识别出这个人是谁,就得用到人脸算法,这个算法如果你足够牛X的话可以自己写出来,当然,如果像我一样是个小菜鸟的话就得领悟 ...

  2. Android人脸识别绘制人脸框自定义View显示

    创建一个自定义的View,它将绘制人脸框,并重写 onDraw 方法以绘制矩形. 下面是一个示例代码: public class FaceBoundsView extends View {privat ...

  3. android 贝塞尔曲线 人脸,贝塞尔曲线绘制人脸框(框内全透明,框外半透明)

    参考CropImage 制作截取头像框https://github.com/cokeduo/CropImage https://www.jianshu.com/p/c883fbf52681 //贝塞尔 ...

  4. Qt音视频开发44-实时人脸框

    一.前言 在人脸识别到以后,需要在实时视频上将所有人脸框绘制出来,一把来说识别人脸会有多种选择,一个是识别最大人脸,这种场景主要用于刷脸门禁,还有一种是识别所有人脸,这种场景主要用于人脸识别摄像机,就 ...

  5. ps修改dds贴图_ZBrush建模师教你zbrush与Photoshop绘制人脸贴图,听仔细了哈

    绘制写实的人脸贴图,是我们在次世代游戏角色制作流程中经常遇到的.我们可以在mudbox或者zbrush中把照片上的人脸映射到模型上面.在这里我主要介绍下zbrush结合Photoshop绘制人脸贴图. ...

  6. 3D建模贴图不会做?看这里,使用zbrush与Photoshop绘制人脸贴图教程

    绘制写实的人脸贴图,是我们在次世代游戏角色制作流程中经常遇到的.我们可以在mudbox或者zbrush中把照片上的人脸映射到模型上面.在这里我主要介绍下zbrush结合Photoshop绘制人脸贴图. ...

  7. iOS 人脸识别(一)-人脸框检测(基于iOS原生)

    点击上方"iOS开发",选择"置顶公众号" 关键时刻,第一时间送达! 作者:会飞的大马猴  來源:简书 文:https://www.jianshu.com/p/ ...

  8. android 人脸识别边框_人脸框抠图如何实现

    最近在尝试做一个人脸识别项目,在对比几款主流人脸识别SDK后,采用了虹软的Arcface SDK,因为它提供了免费版本,并且可以离线使用,接入难度也比较低.项目中有一个需求就是显示检测到的人脸,但是如 ...

  9. 头歌 python 绘制人脸与人眼区域

    import cv2 # 读取图片 img = cv2.imread('step2/image/girl.jpg') # 转换为灰阶图片 gray = cv2.cvtColor(img, cv2.CO ...

最新文章

  1. 家庭局域网开启AP隔离利用无线路由器互连
  2. socket网络编程——多进程、多线程处理并发
  3. Linux的rsync远程数据同步工具
  4. ASP.NET MVC3书店--第五节 表单编辑(第二部分)(转)
  5. C语言中的“悬空指针”和“野指针”是什么意思?
  6. 误删docker0网桥之后怎么办呢?
  7. 【objectMapper实体转换异常】 com.fasterxml.jackson.databind.exc.MismatchedInputException
  8. 【思维】Iranian ChamPions Cup
  9. 分析:新建短信,当我们接受人RecipientsEditor中输入+86的时候,系统会自己主动在+86后增加空格...
  10. 4408: [Fjoi 2016]神秘数
  11. [译]快照技术综述 Ⅰ
  12. WCF创建Rest服务(附:.net2.0创建Rest服务)
  13. Multi-task Learning and Beyond: 过去,现在与未来
  14. java velocity 语法_Velocity语法
  15. Mac SecureCRT 8.0.2破解版
  16. cypress 安装
  17. Android应用内跳转Scheme协议
  18. 电信获取光猫超级密码
  19. 原创 | k8s系列教程一:开篇
  20. 这些电脑软件堪称惊艳,你一定用得上【建议收藏】

热门文章

  1. 传统机器学习笔记6——回归树模型
  2. js逆向播放量增加,增加视频热度,uuid,sid,buvid3,aid,b_lsid, b_nut 还原实现过程
  3. 2020.12.25十六进制转八进制
  4. java程序之出差补助计算
  5. python项目开发常用的目录结构
  6. java 修改文件创建时间_Java如何更改文件的最后修改时间?
  7. 【细节很多的dp】Educational Codeforces Round 133 (Rated for Div. 2) C. Robot in a Hallway
  8. SpringBoot配置全局日期格式转换器
  9. 【OpenGL(SharpGL)】支持任意相机可平移缩放的轨迹球实现
  10. mycat学习笔记3:分库分表