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

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

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

1311ab60cffb421231c1fa852d3a7aee.png

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

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

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

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

33ae96d5c088456442e466b97e36ec2a.gif

1、安装 airport.apk

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

2、连接手机的 Python 解释器

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

41f23ecbff9716aee0fcecf22e69f7e8.png

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

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

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

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

3、摄像头的 App

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

a9864f4d4074d540709a76445f493963.png

代码非常简单,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 效果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值