html嵌入python代码(python做人脸识别)

最近闲来无事,研究研究在安卓上跑Python。想起以前玩过的kivy技术,kivy[1]是一个跨平台的UI框架。当然对我们最有用的是,kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长,包括androidsdk打包java代码、ndk编译python、编译各种python依赖包,经常花一整天从入门到放弃。这次使出认真研究的心态,终于找到一个解决方案,于是有了这篇文章:…

大家好,又见面了,我是你们的朋友全栈君。

最近闲来无事,研究研究在安卓上跑Python。

想起以前玩过的kivy技术,kivy[1]是一个跨平台的UI框架。当然对我们最有用的是,kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长,包括android sdk打包java代码、ndk编译python、 编译各种python依赖包,经常花一整天从入门到放弃。这次使出认真研究的心态,终于找到一个解决方案,于是有了这篇文章:

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

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

3e7c42dec941c637727247fc9c52dc965d3.gif

第一步:安装airport.apk

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

airport.apk现在先放在我的微信公众号Meteorix,回复apk即可下载

第二步:连接手机的python解释器

启动手机上的AirPort应用,就会运行python解释器。我内置了一个ssh服务器,用于调试代码非常方便。应用启动时会显示手机的ip地址。

11459118cdaa25903ec7bf168d9419116da.jpg

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

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

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

然后你就可以在手机上尽情使用python了,比如试试

>>>import os>>>os.getcwd()’/data/data/org.airtest.airport/files/app’>>>import requests>>>r = requests.get(“https://www.baidu.com”)>>>r.status_code200

第三步: 一个摄像头的App

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

e14cc53b5341a2a1223c3eaec5e858dc8bb.jpg

代码非常简单,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: cameraresolution: (640, 480)play: FalseToggleButton:text: ‘Play’on_press: camera.play = not camera.playsize_hint_y: Noneheight: ’48dp’Button:text: ‘Capture’size_hint_y: Noneheight: ’48dp’on_press: root.capture()”’)class CameraClick(BoxLayout):def capture(self):”’Function to capture the images and give them the namesaccording 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的效果。

第四步:推送代码到安卓手机

这一步需要做的就是,把这个摄像头App推送到安卓手机上,然后启动AirPort应用。

如果你对安卓手机有一丢丢的了解,你应该用过adb工具。这里原理就是使用adb连接手机,将kvmain.py推送到手机/sdcard/kv/kvmain.py路径。然后启动AirPort应用,就会加载这个路径下的python代码。

1.可以从这里[3]下载对应操作系统的adb工具。2.用usb线将手机连接到电脑,打开手机的开发者选项/usb调试开关,然后检查adb连接。看到device就说明连接正常,如果是其他状态,需要稍微检查一下手机配置。

adb devices # 查看adb连接List of devices attachedABCDEFGHIJK device

3.将kvmain.py推送到手机/sdcard/kv/kvmain.py路径

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

如果你不知道上面在说什么,可以先google/baidu一下adb使用教程。

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

第五步:增加人脸识别功能

这一步,我们主要用到了opencv的人脸识别接口,详细原理参考opencv tutorial[4]

对我们来说,这里只用了以下简单的代码

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:

1.读取摄像头的图片,调用opencv人脸识别接口2.将识别出来的人脸坐标,画到手机屏幕的对应位置上

bbox = BoundingBox(name=face_name, size_hint=(None, None))…for loc in faces:# calculate position of the facex, y, w, h = loct = 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 boxbbox.pos = (int(l), int(b))bbox.size = (int(r-l), int(t-b))…

当然,我们还需要针对安卓手机进行一些调试。最终的代码我放在了github仓库airface[5]https://github.com/Meteorix/airface

再次,我们推送代码到手机上

adb push src/* /sdcard/kv/

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

What’s Next?

Python本来就能做很多有趣的事情,现在python开发者也能直接写安卓App啦。

我们稍微开点脑洞:

•训练一个识别你家所有人脸的分类器,甚至是猫脸(对,opencv内置了猫脸识别)•用python写个语音助手的app,私人定制的小爱同学

脑洞更大点:

•在手机上用python跑TensorFlow?•写一个真正的手机微信机器人?

目前我在使用这种方式,写写人工智能的安卓demo。也欢迎大家尝试用python写安卓app,探索更多可能性,有问题留言交流。

References

[1] kivy: https://github.com/kivy/kivy[2] 摄像头的example: https://kivy.org/doc/stable/examples/gen__camera__main__py.html[3] adb下载: https://github.com/AirtestProject/Airtest/tree/master/airtest/core/android/static/adb[4] opencv tutorial: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html[5] 源码仓库: https://github.com/Meteorix/airface

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128338.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java中map转json[通俗易懂]

    java中map转json[通俗易懂]在日常的使用中,我们一般会遇到map转json,如果遍历的话会浪费大量的时间,其实我们拥有这样的jar包Themethod ***isundefinedforthetypeJSONObject缺哪个包——json-lib.jar这样还是不行的需要一个依赖的jar包要不然会报错java.lang.ClassNotFoundException:

  • expect中的正则匹配[通俗易懂]

    expect中的正则匹配[通俗易懂]文档原文:xpect_out(x,string)expect_out(x,start|end)如果expect匹配是采用高级正则表达式的话(-re参数表示高级正则表达式方式匹配),那么每个子模式都有一个序号,序号从1-9,如:setoutput”abbbcabkkkka”expect-indices-re”b(b*).*(k+)”$output那么:setexpect_out(0,start)==>

    2022年10月23日
  • 苹果x蓝牙打不开一直转圈圈(苹果7p蓝牙一直转圈打不开)

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。iphonex蓝牙一直转的解决方法是:1、重启手机;2、如果不行备份数据恢复手机的出厂设置;3、仍旧不行,可能是WiFi模块接接触不良,可能是因为进水或者摔过,建议去苹果直营店检修。iPhoneX(英语读音为iPhoneten)是北京时间2017年9月13日凌晨1点在ApplePark新总部史蒂夫・乔布斯剧院2017苹果秋季新品发…

  • 用JAVA判断一个数是否为素数(质数)

    素数(primenumber)又称质数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。有时经常遇到用java判断素数的问题,为大家贴上怎么用java判断出一个数是否为素数。publicstaticbooleanisPrime(intN){if(Nfor(inti=2;i*iif(N%i=

  • 17款漂亮的 HTML5 网站模板免费下载「建议收藏」

    17款漂亮的 HTML5 网站模板免费下载「建议收藏」在过去的几年,设计师们已开始关注和使用HTML5了,如今HTML5得到了更加广泛的应用。今天,本文与大家分享17款免费的HTML5网站模板,看看有没自己喜欢的。

  • 匹配滤波器及matlab仿真

    匹配滤波器及matlab仿真随机信号处理笔记:匹配滤波器——南京理工大学顾红老师的《随机信号处理》浅析文章目录随机信号处理笔记:匹配滤波器1.线性滤波器输出端信噪比2.匹配滤波器的传输函数和冲激响应2.1复函数的施瓦兹不等式2.2传输函数求解3.匹配滤波器的性质3.1匹配滤波器的最大峰值信噪比3.2匹配滤波器的幅频特性相频特性3.3匹配滤波器的物理可实现性3.4输出信号和噪声3.5匹配滤波器的时延适应性3.6匹配滤波器的频移不适应性3.7输出信号频谱与输入信号频谱关系4.匹配滤波器的信号处理SNR增益4.1matlab仿真匹配

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号