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

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

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

只要会 Python 就能写安卓 App,无需安卓开发基础,无需编译

手机上也有交互式 Python 解释器,直接调试 Python 代码

可以使用各种 Python 库,包括 numpy/opencv 等机器学习包

可以与安卓接口交互,使用手机硬件,比如摄像头

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

1、安装 airport.apk

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

2、连接手机的 Python 解释器

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

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

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

# 在电脑上连接手机,注意这里ip需要替换成AirPort显示的ip

ssh -p 8000 admin@192.168.31.101

# 输入密码,这里密码是固定为:meteorix

meteorix

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

3、摄像头的 App

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

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

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

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.boxlayout import BoxLayout

import time

Builder.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 cv2

detector = 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 效果了。

https://www.jianshu.com/p/f3b64d3456be

Python量化投资网携手4326手游为资深游戏玩家推荐:《无敌的椅子下载》

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

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

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

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

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

  3. python 模拟微信浏览器请求_python+requests对app和微信小程序进行接口测试

    对于web端和app端的接口测试来说,他们都是通过请求方法,url和传递的body参数进行接口请求,区别web和app的区别就是header请求的不同.不同的地方在于header中的User-Agen ...

  4. python人脸识别解锁电脑_python人脸识别

    人脸识别功能的实现. 1,下载 "haarcascade_frontalface_default.xml" , 这个xml文件是opencv在github共享出来普适的人脸特征分类 ...

  5. 通过python实现linux切换用户_Python实现在Linux系统下更改当前进程运行用户

    在上一篇文章中,我们讲了如何在linux上用python写一个守护进程.主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程.细心观察的可能会发现 ...

  6. python可以操作word吗_python实现在windows下操作word的方法

    import win32com from win32com.client import Dispatch, constants w = win32com.client.Dispatch('Word.A ...

  7. python编程处理excel数据_python实现对excel进行数据剔除操作实例

    前言 学习Python的过程中,我们会遇到Excel的各种问题.下面这篇文章主要给大家介绍了关于python对excel进行数据剔除操作的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详 ...

  8. Python可以调用Gpu吗_python可以开发app吗

    python可以开发app吗? python是可以开发app的,例如我们可以使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点 ...

  9. python编程狮苹果系统_Python编程狮app下载-Python编程狮苹果版v1.0

    Python编程语言现在越来越流行了,在编程语言中的地位也越来越重要了,今天小编就把推荐给大家这个软件可以帮助大家去很好的学习Python编程语言,这个软件轻松的将用户领进们,让大家可以体验到Pyth ...

最新文章

  1. 机器学习中使用的交叉熵(cross entropy)透彻分析
  2. Linux 历史命令巧用
  3. jQuery 效果函数(三)
  4. 2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)
  5. 06链队列_LinkQueue--(栈与队列)
  6. ioslabel阴影,UILabel的内阴影
  7. 【JS 逆向百例】XHR 断点调试,Steam 登录逆向
  8. 《剑指offer》第二十八题(对称的二叉树)
  9. 领域驱动设计DDD之读书笔记
  10. 走在网页游戏开发的路上
  11. 安卓自定义相机拍照功能全解(不调用系统相机)
  12. nodejs后台系列--第三篇-最简单的全栈demo:koa2+mysql+vue
  13. 计算机网络中数据通讯方式有哪些,常见的数据通信方式原理是什么
  14. 用Python有限元框架Feon求解弹簧支座二维杆问题
  15. C#设置文件夹权限,处理为Everyone所有权限
  16. 导航标签html,导航标签
  17. java写 狐狸找兔子_狐狸找兔子(java 版)
  18. 复旦大学《数学分析》教学大纲,读后有感
  19. 【Python爬虫】| XPANX获取抖音APP小视屏
  20. nginx关闭/重启/启动的操作方法

热门文章

  1. C语言指针,数组,函数
  2. 最新版FusionCharts2D面积图
  3. Oracle日期函数add_months()、last_day()、months_between()的用法
  4. 初识Mongdb之数据查询篇(二)
  5. linux查看是centos几版本
  6. 圣思园——Java SE Lesson 6
  7. 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法
  8. 软件工程-----人员组织方式
  9. echarts中每个数据项特定的tooltip设定
  10. 字符串逆序输出c语言,5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。...