IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android模拟器实现人脸智能跟踪识别 -> 正文阅读

[移动开发]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,我会再发几期相关的文章,把每一个模块的核心功能从源代码出发,给大家详细分析。

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

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:27:58  更:2021-08-05 17:28:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:28:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码