最近闲来无事,研究研究在安卓上跑 Python,想起以前玩过的 kivy 技术,kivy 是一个跨平台的 UI 框架,当然对我们最有用的是,kivy 可以把 Python 代码打包成安卓应用。

但是由于安卓打包的工具链很长,包括 Android Sdk 打包 Java 代码、NDK 编译 Python、 编译各种 Python 依赖包,经常花一整天从入门到放弃。

私信小编01 领取全套教程!

这次使出认真研究的心态,终于找到一个解决方案,于是有了这篇文章。

  • 只要会 Python 就能写安卓 App,无需安卓开发基础,无需编译
  • 手机上也有交互式 Python 解释器,直接调试 Python 代码
  • 可以使用各种 Python 库,包括 numpy/opencv 等机器学习包
  • 可以与安卓接口交互,使用手机硬件,比如摄像头

那么我们就以人脸识别 App 为例,看看如何简单几步搞定,先看看成品的效果。

1、安装 airport.apk

AirPort 是我编译好的一个安卓 App,里面包含了 Python 解释器和一些常用的依赖库。

2、连接手机的 Python 解释器

启动手机上的 AirPort 应用,就会运行 Python 解释器,为了调试的方便,应用内置了一个 ssh 服务器,启动的时候会显示手机的 IP 地址。

在电脑上使用 ssh 命令,就可以连接到手机。

ps: 注意:确保你的手机和电脑在同一局域网中。

# 在电脑上连接手机,注意这里ip需要替换成AirPort显示的ipssh -p 8000 admin@192.168.31.101# 输入密码,这里密码是固定为:meteorixmeteorix

然后你就可以在手机上尽情使用 Python 了。

3、摄像头的 App

在 kivy 的官方文档中,我们可以找到这样一个摄像头的 example

代码非常简单,Builder.load_string 函数加载了一段配置,这是 kivy 提供的 UI 定义语言 kivy language。

点击 UI 上创建的 Capture 按钮,回调 CameraClick.capture() 函数,用 Python 实现函数功能。

from kivy.app import Appfrom kivy.lang import Builderfrom kivy.uix.boxlayout import BoxLayoutimport timeBuilder.load_string(''': orientation: 'vertical' Camera: id: camera resolution: (640, 480) play: False ToggleButton: text: 'Play' on_press: camera.play = not camera.play size_hint_y: None height: '48dp' Button: text: 'Capture' size_hint_y: None height: '48dp' on_press: root.capture()''')class CameraClick(BoxLayout):def capture(self):''' Function to capture the images and give them the names according to their captured time and date. ''' camera = self.ids['camera'] timestr = time.strftime("%Y%m%d_%H%M%S") camera.export_to_png("IMG_{}.png".format(timestr)) print("Captured")class TestCamera(App):def build(self):return CameraClick()TestCamera().run()

将这段代码保存为 kvmain.py 文件,我们可以直接在电脑上运行,如果你的电脑有摄像头,就可以看到摄像头 App 的效果。

4、推送代码到安卓手机

这一步需要做的就是,把这个摄像头 App 推送到安卓手机上,然后启动 AirPort 应用,将 kvmain.py 推送到手机 /sdcard/kv/kvmain.py 路径,然后启动 AirPort 应用,就会加载这个路径下的 Python 代码。

adb shell mkdir -p /sdcard/kvadb push kvmain.py /sdcard/kv/kvmain.py

重新启动手机上的 AirPort 应用,即可看到我们的摄像头 App 运行在手机上了。

5、增加人脸识别功能

这一步,我们主要用到了 opencv 的人脸识别接口。

import cv2detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')img = cv2.imread('faces.jpg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector.detectMultiScale(gray, 1.3, 5)print(faces)

最后修改 App 代码,读取摄像头的图片,调用 opencv 人脸识别接口,将识别出来的人脸坐标,画到手机屏幕的对应位置上。

bbox = BoundingBox(name=face_name, size_hint=(None, None))...for loc in faces:# calculate position of the face x, y, w, h = loc t = int(anchor_t - y*sh) b = int(anchor_t - (y+h)*sh) r = int(anchor_l + x*sw) l = int(anchor_l + (x+w)*sw)# update bounding box bbox.pos = (int(l), int(b)) bbox.size = (int(r-l), int(t-b)) ...

当然,我们还需要针对安卓手机进行一些调试,我们再次推送代码到手机上。

adb push src/* /sdcard/kv/

重启应用就可以看到上文展示的 GIF 效果了。

java人脸识别_Python 实现在 App 端的人脸识别!手机解锁人脸识别相关推荐

  1. python人脸识别解锁电脑_Python 实现在 App 端的人脸识别!手机解锁人脸识别!

    最近闲来无事,研究研究在安卓上跑 Python,想起以前玩过的 kivy 技术,kivy 是一个跨平台的 UI 框架,当然对我们最有用的是,kivy 可以把 Python 代码打包成安卓应用. 但是由 ...

  2. 应用移动端银行卡识别技术,实现APP端快捷绑定银行卡号

    手机支付.网络支付已经非常成熟,消费者已经习惯了使用手机支付宝进行支付,用手机银行进行消费和转账.但是,整个线上支付流程中,还存在一个关键的步骤:输入绑定银行卡卡号.于是对于商业移动应用服务商来说,个 ...

  3. Java支付宝支付接口对接(app端)

    前言:大致说一下流程,其实支付宝官方文档写的很清楚了,还有就是下面我写的一些描述可能转载了其他博客的内容. 用户在app端提交订单--->选择支付方式即支付宝付款(调用了商家端的付款接口,调用之 ...

  4. 实现在App端授权qq/微信/微博登录

    App端登陆相关的SDK需要在manifest中配置: 打开 manifest.json -> App模块权限配置,勾选 OAuth(登陆鉴权). 打开 manifest.json -> ...

  5. 苹果手机人脸识别不了是什么原因_iPhone和安卓手机的人脸识别有什么区别?

    文/极客修小编 iPhone怎么识别人脸 今天一则新闻引起了我的注意 苹果供应商AMS宣布,推出全新的"behind OLED"红外接近传感器.刘海中的红外传感器TCS3701,能 ...

  6. python 3.8.5 打包_骚操作 | Python 实现在 App 端的人脸识别

    最近闲来无事,研究研究在安卓上跑 Python,想起以前玩过的 kivy 技术,kivy 是一个跨平台的 UI 框架,当然对我们最有用的是,kivy 可以把 Python 代码打包成安卓应用.但是由于 ...

  7. python开发app的软件_python可以写APP吗(python能做手机软件吗)

    一枚程序媛程序媛2 人赞同了该文章用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲这里介绍几款可以在手机上编程的a ...

  8. 手机python软件哪个好_python可以写APP吗(python能做手机软件吗)

    原博文 2020-09-22 20:15 − 一枚程序媛程序媛2 人赞同了该文章用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB ...

  9. python制作手机软件_python可以写APP吗(python能做手机软件吗)

    原博文 2020-09-22 20:15 − 一枚程序媛程序媛2 人赞同了该文章用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB ...

最新文章

  1. 针对IE6\7\8\9\10浏览器的CSS hack大全详解
  2. android音频开发6,Android 音视频开发(一) : 通过三种方式绘制图片
  3. oracle 数据库备份恢复
  4. OpenCV TSP(TravelingSalesman Problem)的实例(附完整代码)
  5. iOS之深入解析多环境配置的实现方案
  6. LeetCode 421. 数组中两个数的最大异或值
  7. 鼠标右键添加项目 注册表 注意
  8. mysql数据库熟悉表空间数据文件_Oracle表空间和数据文件
  9. 什么是Cookie对象,Session对象,Application对象等问题
  10. h5页面禁止复制_H5移动端页面禁止复制技巧
  11. Mysql 函数入门
  12. 记录一次线上事故:SparkStreaming 写入 Hive 延迟
  13. 添加附件列表的方法 (数组或)arraylist为datalist的datasource时 datalist中的绑定方式
  14. 送给那些有代码基础但仍旧不会学自动化测试的朋友们
  15. html中元素的几种居中方法
  16. xshell卸载注册表删除问题
  17. 面试必备 | 带你彻底搞懂 Python 生成器。
  18. 【HDOJ 5336】XYZ and Drops
  19. 16、可靠数据传输(rdt)的原理
  20. 【历史上的今天】8 月 18 日:硅谷神话的衰落;微软发布 QuickBASIC;Adobe Audition 问世

热门文章

  1. [Oracle] CPU/PSU补丁安装详细教程
  2. 通过调整Linux内核参数提升网络性能
  3. bzoj 1901: Zju2112 Dynamic Rankings
  4. 忙~~~~~~~~~~~~~~~~~
  5. 程序包 javax.servlet 不存在 解决办法
  6. 2020年余丙森概率统计强化笔记-第三章 二维随机变量及其分布- 第四章 数字特征
  7. 2019年上海市数学建模讲座笔记(2)概率统计模型
  8. 里面如何创建新的module_硬盘分区:如何一次为新硬盘创建多个分区?
  9. Linux信号 五 信号挂起与信号掩码操作接口集
  10. java选填,java选择填空 - osc_ug2wy0bi的个人空间 - OSCHINA - 中文开源技术交流社区