Android模拟器

人脸智能跟踪识别

原创不易,转载请注明出处。

故事开始

智能识别,并没有你想象的那么神秘。

很久以前,那时还没有新冠,我和几个大学同学聚会,其中某大型国企的信息中心主任说他们公司上班打卡用人脸识别,可先进了。我问他花了多少预算,他说软件加硬件一共50W,管200人的刷脸考勤。我说你把这套系统退了吧,给我3个月,我给你一套更新进的智能识别系统,只要给我十分之一,5W。他说你开玩笑吧。我说其实也不要5W,你给我买个摄像头,50块的就行,他没有再说话。没多久,我收到了他寄给我的一个快递,是个摄像头,包邮共计30块,瞬间,我明白了一切,于是,我默默地打开电脑开始Debug。

智能跟踪识别效果

智能跟踪识别现场演示

 

智能,只需要一个摄像头

以下就是本文需要购买的全部硬件清单,对,就一个摄像头(当然,UP主假定你已经拥有一台能用的电脑了,否则,你又是怎么看到这篇博文的呢,难道是用手机,那就当我没说)。

实现进度

本文主要工作量在于Android模拟器和操作系统的定制。刚开始的时候打算用Google自带的模拟器,以缩短开发周期。于是经过近一个月的搜索下载和测试,Android自带的模拟器根本就不能用,要么就是对Linux内核和驱动不支持,要不就是对Android版本不执行。所以,最后决定放弃,直接去官网下了一个开源模拟器源代码,花了两个月修改,总算能在上面跑Android了。

以下是各个功能模块的定制开发

Android模拟器定制

本想实现一个Android全版本的模拟器,就像Google官方的模拟器即支持ARM平台,又支持Intel平台。但最后只做出了一个版本:Intel-x86,64位。原因是我想在Linux平台的Ubuntu系统上跑模拟器。不做ARM版的另一个原因是Intel平台支持KVM,ARM不支持。是否支持KVM对于模拟器运行性能来说天差地别。

最终实现的Android模拟器如下:

CPU:Intel 440X; RAM:2048M

GPU:OpenGL;USB:EHCI,USB2.0;NET:Socket, TCP/IP

Linux内核定制

为了支持USB摄像头,选择了Linux3.0以上的版本。从Google官网下了一个支持Android7.1的版本。修改的重点是USB2.0的主机驱动方面,将USB2.0的数据包(控制,同步,批量,中断)全部重定向到模拟器的IO读写。摄像头的驱动则使用Linux自带的UVC模块,调用方式为V4L2的多媒体框架。内核启动时生成设备文件:/dev/video0,以供Android底层驱动调用。

Android框架定制

由于Android7.1及其后的各个版本的摄像头(Camera)驱动是模拟一个假的摄像头设备:FakeCamera实现的,所以,直接把这个模拟摄像头模块改成调用我在上一步生成的设备文件:/dev/video0,将调用结果(摄像头拍摄的数据帧)通过Android共享内存(shmem)传递给编解码模块(codec),将摄像头的YUV数据编码为RGBA,再向上传给Android系统服务:Camera Server,以供上成APP显示和存储。

Android App定制

终于到应用层,心情也变的愉悦起来,坐下喝杯茶(酒)再继续Debug吧。

刚开始的时候,我想App嘛,直接用Android模拟器自带的Camera就行了,不用自己再开发了,事实证明我想多了(喝多了)。Android自带的Camera App启动后只剩一片漆黑,什么都没有。于是,我开始找问题在哪。首先,我修改了Android的防火墙设置(System/Sepolicy),解决了各种Denied问题,然后我跟踪Debug了Framework的SurfaceFlinger显示模块,还Debug了编解码和共享内存模块,结果都是没有找到问题的根源。好吧,我承认,我头晕了。最后,我查了一下Android 的API,哎,原来Android自带的Camera App并不支持Android自带的FakeCamera,原因是Camera App用到的预览UI是SurfaceText,而这个SurfaceText只能跑在真实的智能手机或平板电脑上的,因为它需要硬件GUP的支持。这也就是为什么我们在真实的智能设备上调用摄像头App没问题,而当你用Android自带模拟器运行摄像头App时却是一片空白。到此,我脑海里有一个很大的问号,Google的工程师是怎么测试自家的FakeCamera,同时,我心中奔跑过一万匹草泥马。最后,我决定自己写个App。

我的App直接调用Surface显示摄像头预览数据帧,将预览数据传给OpenCV实现人脸跟踪识别。本想用Android7.1自带的OpenCV,但由于版本太旧果断放弃了,最终从官网下载了较新的版本:OpenCV4.4集成到Android系统。

总结

这个项目的应用价值主要体现在3个方面:

1、通用任何USB摄像头;

2、无需任何Android智能手机或平板电脑;

3、无需任何Android嵌入式开发板。

后续的打算是如果本文的阅读量超过了1000,我会再发几期相关的文章,把每一个模块的核心功能从源代码出发,给大家详细分析。

如果你对我的文章感兴趣,请为我点个赞。感谢各位的支持,你们的鼓励是我继续创作的最大动力。

原创不易,转载请注明出处。

Android模拟器实现人脸智能跟踪识别相关推荐

  1. 基于Android系统的人脸识别签到软件

    项目名称:   基于Android系统的人脸识别签到软件 目  录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...

  2. AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)

             AI人工智能分析-人脸识别和分析(人脸检测跟踪.获取特征长度.提取用于人脸特征.比较相似度) 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开 ...

  3. android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...

    本发明涉及一种基于符号的识别android应用运行在模拟器中的方法. 背景技术: 很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模 ...

  4. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  5. android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  6. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  7. 使用亚博智能K210实现人脸特征提取和识别

    使用亚博智能K210实现人脸特征提取和识别 亚博智能K210开发板自带有使用C语言编程实现的人脸检测代码,即可以检测到摄像头范围内的人脸并将人脸框定出来,不能实现人脸的特征提取和人脸的识别.因此,我们 ...

  8. Android自带人脸识别

    前言 碰到项目需求要判断上传的图片里只能有一个人,就像到了人脸识别功能,网上查资料说需要用opencv等各种图像库,项目肯定不能接受,没想到Android很早就已经集成了人脸识别的功能,这里记录一下. ...

  9. Android集成百度人脸识别(一)基础版SDK

    首先Android Studio版本:3.2.0 1.注册百度账号并企业认证 2.创建应用生成API Key和Secret Key 3.下载对应的SDK(下载SDK的时候需要新建授权) 因为下载的时候 ...

最新文章

  1. 磁盘管理 ——RAID1+0卷+LVM
  2. java操作impala
  3. Java 内存模型与线程
  4. BigDecimal divide方法结果为无限小数问题
  5. [Android]ListView控件之Adapter性能优化
  6. 拼接字符串 新增数据方法
  7. 参考例子,学习FuncT, TResult委托
  8. Java计算时间差、日期差总结(亲测)
  9. 修改linux最大连接数
  10. [Linux基础环境/软件]Linux下安装resin web服务器(涉及gcc、jdk环境部署)
  11. C语言编译流程:预处理、编译、汇编、链接
  12. mysql 求两列数据组合_mysql – 将两个具有不同列数的查询组合在一起
  13. python金融数据分析电子版_python 金融大数据分析 pdf
  14. TP-LINK WR841N V8刷OpenWRT
  15. Cplex安装教程与使用介绍
  16. SQL Server导出MDF数据库文件
  17. CAD导出JPG如何控制转换质量?
  18. 网络爬虫法即将出台!!!小爬怡情,大爬over
  19. 金蝶检测服务器响应异常,连接金蝶云服务器异常 请检查
  20. 倒计时!「一起学」大会线下分享与社群内部直播!

热门文章

  1. 十步杀一人,千里不留行 1
  2. 破世界纪录了!用Python实现自动扫雷
  3. C++:程序运行的开始和结束
  4. AS5045B/AS5145 零位编程 OTP
  5. 使用lws编码的注意事项
  6. 表达式求值引擎Avitor的使用
  7. 谷歌怎么隐藏地址栏_谷歌新版Chrome将隐藏详细URL地址,域名地位更加凸显
  8. php ci框架查询数据库占用大量的cpu,CodeIgniter 性能优化
  9. Jenkins Build Goals and options vars
  10. 运动无线耳机什么牌子好?六款实用性不错的运动耳机推荐