Android模拟器实现人脸智能跟踪识别
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模拟器实现人脸智能跟踪识别相关推荐
- 基于Android系统的人脸识别签到软件
项目名称: 基于Android系统的人脸识别签到软件 目 录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...
- AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)
AI人工智能分析-人脸识别和分析(人脸检测跟踪.获取特征长度.提取用于人脸特征.比较相似度) 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开 ...
- android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...
本发明涉及一种基于符号的识别android应用运行在模拟器中的方法. 背景技术: 很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模 ...
- Android园区部队人脸识别源码门禁项目讲解
Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...
- android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现
摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...
- android 表情识别,基于Android平台的人脸表情识别系统的设计与实现
摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...
- 使用亚博智能K210实现人脸特征提取和识别
使用亚博智能K210实现人脸特征提取和识别 亚博智能K210开发板自带有使用C语言编程实现的人脸检测代码,即可以检测到摄像头范围内的人脸并将人脸框定出来,不能实现人脸的特征提取和人脸的识别.因此,我们 ...
- Android自带人脸识别
前言 碰到项目需求要判断上传的图片里只能有一个人,就像到了人脸识别功能,网上查资料说需要用opencv等各种图像库,项目肯定不能接受,没想到Android很早就已经集成了人脸识别的功能,这里记录一下. ...
- Android集成百度人脸识别(一)基础版SDK
首先Android Studio版本:3.2.0 1.注册百度账号并企业认证 2.创建应用生成API Key和Secret Key 3.下载对应的SDK(下载SDK的时候需要新建授权) 因为下载的时候 ...
最新文章
- 磁盘管理 ——RAID1+0卷+LVM
- java操作impala
- Java 内存模型与线程
- BigDecimal divide方法结果为无限小数问题
- [Android]ListView控件之Adapter性能优化
- 拼接字符串 新增数据方法
- 参考例子,学习FuncT, TResult委托
- Java计算时间差、日期差总结(亲测)
- 修改linux最大连接数
- [Linux基础环境/软件]Linux下安装resin web服务器(涉及gcc、jdk环境部署)
- C语言编译流程:预处理、编译、汇编、链接
- mysql 求两列数据组合_mysql – 将两个具有不同列数的查询组合在一起
- python金融数据分析电子版_python 金融大数据分析 pdf
- TP-LINK WR841N V8刷OpenWRT
- Cplex安装教程与使用介绍
- SQL Server导出MDF数据库文件
- CAD导出JPG如何控制转换质量?
- 网络爬虫法即将出台!!!小爬怡情,大爬over
- 金蝶检测服务器响应异常,连接金蝶云服务器异常 请检查
- 倒计时!「一起学」大会线下分享与社群内部直播!