| |
|
开发:
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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/19 2:02:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |