这些天有两个确定性:1)机器学习正在创造一套更强大的工具来完成无数复杂的任务,2)起床很难。现在,借助一些Java和Clarifai API的帮助,您可以创建一个应用程序,帮助您使用前者解决后者:一个闹钟只有在您拍摄预先指定的对象后才会关闭。例如,它在看到椅子时会关闭:

特别感谢@RedRussianBearMikhail Khrenov为这个项目所做的工作。

准备您的Clarifai用户帐户

Clarifai提供深度学习驱动的计算机视觉和图像识别服务。您的第一步应该是注册免费的Clarifai帐户。

创建帐户后,您需要通过开发人员界面使用Clarifai创建应用程序:

然后,选择您的应用程序并单击“创建API密钥”。这将是您的应用程序用于访问Clarifai的ID。

您需要记下此API密钥以便稍后使用。保持安全!

创建Android闹钟应用

我们将在Android Studio官方IDE中开发应用程序的其余部分。如果您还没有,请下载并进行设置。本教程将一次引导您完成应用程序的一个部分,但您可以在GitHub上下载所有代码。

我们将创建一个新的空白Android项目,该项目应该包含一个名为“MainActivity”的初始空白活动。在项目完成并初始Gradle构建完成后,我们将进行一些额外的设置。

首先,添加行...

api'com.clarifai.clarifai-api2:core:2.3.0'

...到应用程序级build.gradle的末尾。这将告诉Gradle,构建系统,包括Clarifai并让我们访问Clarifai的库。

接下来,我们将在res / xml / create_paths.xml下创建一个新文件,其内容如上所示。稍后我们将需要它来存储用户相机将拍摄的照片。

最后,我们将对应用程序的清单进行两次添加:首先,在< application>内部。阻止,我们将添加< provider>如上所示,我们可以访问我们拍摄的照片。

然后,在清单块的外面,我们将添加三个< uses - *>声明。第一个告诉Android我们的应用程序需要一个摄像头(为了拍照),第二个告诉Android,在某些SDK版本上我们的应用程序需要访问文件的权限(为了存储它们),最后一个告诉Android我们的应用程序需要互联网(与Clarifai交谈)。

现在,到应用程序本身。除了MainActivity,我们还将添加另一个名为AlarmActivity的活动。要执行此操作,请在Android Studio中右键单击app / java,选择new-> Activity-> Blank Activity。虽然MainActivity将成为首次启动应用程序和设置闹钟的用户界面,但AlarmActivity将是用户在闹钟响起时看到的内容,并且需要将其停用。

创建应用程序布局

我们将首先设计每个活动中可用的布局和输入。 res / layouts / activity_main.xml的蓝图模式应如下所示:

从上到下,输入元素是名为'object'的纯文本,名为'date'的日期,分别名为'hour'和'minute'的两个Number输入,以及名为'button'的Button。虽然您可以根据需要命名它们,但您需要更改一些以后的代码才能匹配。此视图上的输入将允许我们的用户输入他们想要查找的对象,警报何时应该关闭,并触发设置警报的功能。

同时,activity_alarm.xml应如下所示:

我们将TextView放在名为infoText的顶部,将中心的Button命名为photoButton。我们将使用前者通知用户Clarifai处理状态,后者用于拉起相机。

如果您不想使用布局编辑器,只需将activity_main.xml和activity_alarm.xml的内容复制到项目文件中即可。

我们的res / values / strings.xml文件应如下所示,以设置所有UI元素的默认值:

将UI连接到代码

现在我们已经构建了应用程序的用户界面,我们可以获得处理程序代码。在开始之前,请在相应文件的顶部包含以下导入:

我们将首先解决MainActivity问题。在此活动中,用户将决定时间和要检测的对象作为设置警报的参数。为了解决这个问题,我们将添加一个新方法setAlarm():

首先,我们通过id检索所有视图输入。然后我们将date,hour和minute的值编译成单个字符串,我们将其解析以创建一个Date对象,该警报将参考

接下来,我们创建一个Intent来打开AlarmActivity。在Extra for That Intent中,我们将放置object的内容,这是我们用户需要拍摄的对象的名称,以便禁用活动警报。

最后,我们检索AlarmManager,将各个部分放在一起设置警报,然后使用finish()函数正常退出活动。

到目前为止,我们有一个应用程序,我们可以设置闹钟以打开应用程序的另一个活动。实际的闹钟元素来自AlarmActivity:播放声音,捕捉要由Clarifai处理的照片。

创建活动时(当闹钟响起时),我们需要提供哪个对象应该停用它。我们将使用之前在onCreate()函数中设置的Intent extra来检索该参数。

接下来,我们将努力播放声音。在我们的onStart()方法中,我们设置了一个MediaPlayer对象。我们将其配置为异步工作以防止应用程序停止运行。虽然我们的MediaPlayer可以从任意URI(甚至是来自URL的流)播放,但为了简单起见,我们将检索用户默认铃声的URI并连续播放。通过此设置,我们通过infoText向用户发送消息:“Snap a [object]!”。

现在我们已经引起了用户的注意,我们需要给他们一个拍照的方法。我们通过takePicture()执行此操作,我们将它绑定到activity_alarm.xml中的photoButton的on_click字段。在此方法中,我们创建一个Intent来运行相机应用程序,创建一个文件,应用程序可以在其中放置照片,并在成员字段中存储照片的路径。

现在我们有一个闹钟让我们可以拍照,但要关闭闹钟我们需要确保照片实际上包含我们在设置闹钟时拍摄的真实物体。这就是Clarifai进来的地方!

用Clarifai解释你的照片

这是一个非常简单的部分:使用Clarifai在您的图像上运行对象识别。为了做到这一点,我们将制作私有类ClarifaiTask,它是AsyncTask的扩展。我们需要异步运行与Clarifai的通信,因为我们需要进行网络呼叫,这可能需要几秒钟。默认情况下,如果我们将Clarifai调用放在主线程上,Android甚至不会让我们的代码编译。

在ClarifaiTask中,我们需要实现两个方法:doInBackground()和onPostExecute()。在doInBackground()中,我们将通过ClarifaiClient对象连接到Clarifai(这是您之前的API密钥所在的位置 - 请务必将YOUR_API_TOKEN替换为您自己的Clarifai仪表板中的那个!)。然后,我们将照片发送到Clarifai'通用'模型,该模型识别最广泛的物体。

我们使用Clarifai发回的图像预测来查看结果是否包含我们在创建警报时指定的对象的名称。在onPostExecute()中,我们检查是否检测到我们要查找的对象,然后删除图像,因为我们不再需要它。如果我们确实检测到了正确的对象,我们将退出活动(关闭警报铃声)。如果没有,我们会提示用户再次尝试,因为未检测到该对象。

ClarifaiTask是在onResume()方法的实现中启动的。回到应用程序时,我们会检查我们的照片是否指向某个文件。如果是这样,我们刚刚从相机应用程序回来,应该将图像发送到Clarifai以检查我们是否应该关闭闹钟。

最后,我们需要确保当我们的AlarmActivity关闭时,闹钟会关闭。

哇,现在铃声终于可以停止......我们做到了!我们的Android设备上有一个视觉上可以轻松运行的闹钟,我们可以设置为foranyobject我们认为需要我们起床才能拍照。

带图像识别的后续步骤

这是您可视闹钟的入门实现。从这里您可以扩展它以允许重复警报,任意警报声音和自定义对象 - 以检测您已经使用自定义训练训练Clarifai寻找。例如,您可以训练Clarifai识别您的个人运动鞋或某些地标。图像识别功能触手可及,您已拥有自己的Android应用程序。你还在等什么?

android监测闹钟,Android上的图像识别:构建一个看到的闹钟相关推荐

  1. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    原文:Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必 ...

  2. Android基础入门教程——2.4.7 构建一个可复用的自定义BaseAdapter

    Android基础入门教程--2.4.7 构建一个可复用的自定义BaseAdapter 标签(空格分隔): Android基础入门教程 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义Bas ...

  3. android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例

    近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快, ...

  4. android tv record,Android TV开发总结(一)构建一个TV app前要知道的事儿

    前言:近年来,智能电视的发展如火如荼,Googel 也在大力推进TV及穿带设备的发展,在互联网的风口,是猪也会飞,这句话并不是没有道理的.传统电视机厂商,基本都转型致力于智能电视的相关业务.处理电视硬 ...

  5. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件

    前言:剧集类控件,在TV app中非常常见,今天将介绍构建一个TV app中的剧集列表控件,此控件上传到我的Github:https://github.com/hejunlin2013/Episode ...

  6. android 床头闹钟,史上最强"叫床"闹钟!让你再也睡不着啦~~(支持 Android)

    不论是夏天吹冷气还是冬天自然凉,都让人舍不得离开最舒服的床,每天总是在不断挣扎中醒来,以前没有手机闹钟的时候,铃铃叫的闹钟一定要设个三四五六个才起的来,后来我们有了手机贪睡功能,可以无限的 repea ...

  7. android tv 菜单键,Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    前言:关于<TV Metro界面(仿泰捷视频TV版)源码解析>由于都是相关代码,就不发公众号了,有兴趣的可以看链接:http://blog.csdn.net/hejjunlin/artic ...

  8. 如何基于 Android Things 构建一个智能家居系统?

    [CSDN 编者按]Android Things 是 Google 在 2016 年底推出的基于物联网的操作系统,广泛运用于物联网设备.本文作者从其技术原理开始,详解了 Android Things ...

  9. Android官方技术文档翻译——开发工具的构建概述

    本文译自Android官方技术文档<Build Overview>,原文地址:http://tools.android.com/build. 因为<Android Lint Chec ...

最新文章

  1. 利用Arduino IDE对ATMEGA8等单片机编程
  2. boost::coroutine模块实现对称协程的测试程序
  3. dataframe只打印第一行_linux/unix下如何使用命令行删除文本文件的第一行?
  4. [BZOJ 1072] 排列perm
  5. ffmpeg second day
  6. idea创建包怎么让包分层_IDEA让包分层显示的实现方式
  7. 【Android学习】三种布局include /、merge /、ViewStub /
  8. HCIE-Security Day5:防火墙会话表和转发原理
  9. 关于水晶易表的简介及水晶易表安装初识
  10. 折腾开源WRT的AC无线路由之路-1
  11. SVG格式文件插入Word/WPS,三种简单快捷的方法,实现图片高清无损
  12. Advances in Financial Machine Learning 导言 (附pdf下载链接)
  13. 电脑史话-计算机先驱巴贝奇
  14. ClickHouse vs Elasticsearch谁更胜一筹?
  15. onload和ready的不同
  16. Word中如何创建自动编号的标题?
  17. 期刊论文发表的复制比是什么意思
  18. vue2.x版本要点(一)
  19. 如何开发优秀的新浪微博应用
  20. EXCEL按一列数值查找另一列整行数据

热门文章

  1. Vue中demo@0.1.0 serve `vue-cli-service serve`解决方法
  2. 计算机主板和单片机的区别,工控机与单片机的区别
  3. OFDM系统架构梳理(1)
  4. 省市连动,分页(无刷新)
  5. 同事离职后如何把原有的GIT变为自己的GIT
  6. python xlsx追加数据_python 实现众多excel表格中关键数据追加项目配置库台账.xlsx...
  7. ROS下配置镭神智能c16雷达信息
  8. python中常用英语口语_常用英语口语1000句最全最完整
  9. 2011年数学建模国赛B题(交巡警服务平台的设置与调度模型)论文.doc
  10. pta 7-1 求N分之一序列前N项和 (15分)