目录

夜雨飘零

记录精彩的程序人生

标签: Android (26)

基于TNN在Android手机上实现图像分类

TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。

基于MNN在Android手机上实现图像分类 有更新!

MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。

一行代码Android上实现人脸检测、关键点检测、口罩检测 有更新!

一行代码实现人脸检测,人脸关键点检测和戴口罩检测。

Android基于图像语义分割实现人物背景更换 有更新!

本教程是通过PaddlePaddle的PaddleSeg实现的,该开源库的地址为:http://github.com/PaddlPaddle/PaddleSeg ,使用开源库提供的预训练模型实现人物的图像语义分割,最终部署到Android应用上。关于如何在Android应用上使用PaddlePaddle模型,可以参考笔者的这篇文章《基于Paddle Lite在Android手机上实现图像分类》。

基于Paddle Lite在Android手机上实现图像分类 有更新!

Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,在多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力,有效解决手机算力和内存限制等问题,致力于推动AI应用更广泛的落地。

Mediapipe框架在Android上的使用 有更新!

MediaPipe是用于构建跨平台多模态应用ML管道的框架,其包括快速ML推理,经典计算机视觉和媒体内容处理(如视频解码)。下面是用于对象检测与追踪的MediaPipe示例图,它由4个计算节点组成:PacketResampler计算器;先前发布的ObjectDetection子图;围绕上述BoxTrakcing子图的ObjectTracking子图;以及绘制可视化效果的Renderer子图。

双目摄像头测量距离 有更新!

在计算机视觉中,可以通过双目摄像头实现,常用的有BM 算法和SGBM 算法等,双目测距跟激光不同,双目测距不需要激光光源,是人眼安全的,只需要摄像头,成本非常底,也用于应用到大多数的项目中。本章我们就来介绍如何使用双目摄像头和SGBM 算法实现距离测量。

Android使用AIUI快速搭建智能助手 有更新!

目前大部分的手机都有语音助手,例如小米手机的小爱同学,VIVO的小V等等,通过智能助手我们可以快速询一些资讯或者操作手机,例如询问天气,发送微信给你的好友等等。这篇文章就来介绍如何使用AIUI快速搭建类似这样的智能助手。

Android使用webrtc实现检测用户是否在说话 有更新!

我们在Android应用做语音识别的时候,一般是用户唤醒之后开始说话。当用户超过一定的时候没有说话,就停止录音,并把录音发送到语音识别服务器,获取语音识别结果。本教程就是解决如何检测用户是否停止说话,我们使用的是WebRTC架构的源代码中的vad代码实现的。 VAD算法全称是Voice Activity Detection,该算法的作用是检测是否是人的语音,使用范围极广,降噪,语音识别等领域都需要有vad检测。webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带:80Hz——250Hz,250Hz——500Hz,500Hz——1K,1K——2K,2K——3K,3K——4K。分别计算这六个子带的能量。然后使用高斯模型的概率密度函数做运算,得出一个对数似然比函数。对数似然比分为全局和局部,全局是六个子带之加权之和,而局部是指每一个子带则是局部,所以语音判决会先判断子带,子带判断没有时会判断全局,只要有一个通过认为是语音。

使用TensorFlow Lite在Android手机上实现图像分类 有更新!

前言 TensorFlow Lite是一款专门针对移动设备的深度学习框架,移动设备深度学习框架是部署在手机或者树莓派等小型移动设备上的深度学习框架,可以使用训练好的模型在手机等设备上完成推理任务。这一类框架的出现,可以使得一些推理的任务可以在本地执行,不需要再调用服务器的网络接口,大大减少了预测时间。在前几篇文章中已经介绍了百度的paddle-mobile,小米的mace,还有腾讯的ncnn。这在本章中我们将介绍谷歌的TensorFlow Lite。 Tensorflow Lite的GitHub地址:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite Tensorflow的版本为:Tensorflow 1.14.0 转换模型 手机上执行预测,首先需要一个训练好的模型,这个模型不能是TensorFlow原来格式的模型,TensorFlow Lite使用的模型格式是另一种格式的模型。下面就介绍如何使用这个格式的模型。 获取模型主要有三种方法,第一种是在训练的时候就保存tflite模型,另外一种就是使用其他....

在Android手机上使用腾讯的ncnn实现图像分类 有更新!

前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用腾讯的开源手机深度学习框架ncnn来实现在Android手机实现图像分类,这个框架开源时间比较长,相对稳定很多。 ncnn的GitHub地址:https://github.com/Tencent/ncnn 使用Ubuntu编译ncnn库 1、首先要下载和解压NDK。 wget https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip unzip android-ndk-r17b-linux-x86_64.zip 2、设置NDK环境变量,目录是NDK的解压目录。 export NDK_ROOT="/home/test/paddlepaddle/android-ndk-r17b" 设置好之后,可以使用以下的命令查看配置情况。 root@test:/home/test/paddlepaddle# echo $NDK_ROOT /hom......

在Android手机上使用MACE实现图像分类 有更新!

前言 在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用小米的开源手机深度学习框架MACE来实现在Android手机实现图像分类。 MACE的GitHub地址:https://github.com/XiaoMi/mace 编译MACE库和模型 编译MACE库和模型有两种方式,一种是在Ubuntu本地上编译,另一种是使用docker编译。下面就介绍使用这两种编译方式。 使用Ubuntu编译 使用Ubuntu编译源码比较麻烦的是就要自己配置环境,所以下面我们就来配置一下环境。以下是官方给出的环境依赖: 所需依赖 SoftwareInstallation commandTested version Python 2.7 Bazelbazel installation guide0.13.0 CMakeapt-get install cmake>= 3.11.3 Jinja2pip install -I jinja2==2.102.10 PyYamlpip install....

在Android手机上使用PaddleMobile实现图像分类 有更新!

前言 现在越来越多的手机要使用到深度学习了,比如一些图像分类,目标检测,风格迁移等等,之前都是把数据提交给服务器完成的。但是提交给服务器有几点不好,首先是速度问题,图片上传到服务器需要时间,客户端接收结果也需要时间,这一来回就占用了一大半的时间,会使得整体的预测速度都变慢了,再且现在手机的性能不断提高,足以做深度学习的预测。其二是隐私问题,如果只是在本地预测,那么用户根本就不用上传图片,安全性也大大提高了。现在的手机深度学习会计有很多,比如百度的paddle-mobile、小米的MACNE、腾讯的NCNN、谷歌的TensorFlow lite,而我们在本章使用的是百度的paddle-mobile。 PaddleMobile的GitHub地址:https://github.com/PaddlePaddle/paddle-mobile 编译paddle-mobile库 想要使用paddle-mobile,就要编译Android能够使用的CPP库,在这一部分中,我们介绍两种编译Android的paddle-mobile库,分别是使用Docker编译paddle-mobile库、使用Ubunt....

Android的单个或多个权限动态申请 有更新!

前言 在Android 6.0(API 级别 23)以下申请权限是非常简单的,直接在AndroidManifest.xml这个配置文件中加入申请权限的列表就可以了,比如我要申请四个权限,如下: <!--打电话--> <uses-permission android:name="android.permission.CALL_PHONE" /> <!--使用相机--> <uses-permission android:name="android.permission.CAMERA" /> <!--写入内存卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读取内存卡--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 但是在Android 6.0(API 级别 23)以.....

Android网络框架OKhttp3学习笔记 有更新!

OKhttp3是一个非常强大的Android网络框架,它是由Square公司开发并开源的,很大Android开发者都会使用到,所以我也要来学学。 服务器 为了方便测试,我们需要一个后台服务器的的应用,下面是一个Java Web的Servlet,它的功能是接收客户端发来的登录数据,判断密码是否正确,并返回结果(JSON格式) import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; @WebServ....

Android使用SharedPreferences保存账号密码 有更新!

有很多的应用都会有保存密码和账号的功能,比如QQ。接下来就讲讲使用SharedPreferences来保存密码和账号,也许有些人会考虑的数据库,但是我个人认为对于保存简单的数据,使用的数据库就大材小用了,SharedPreferences比较轻量级 首先写好布局,只有两个输入框和一个按钮 <EditText android:id="@+id/number" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" /> <Button android:id="@+id/save" android:text="保存" android....

Android读取短信和联系人 有更新!

读取短信和联系人经常会用到,要了解的是这是内容提供者(contentProvider)的知识点,大家都知道数据库是在data-->data 对应的包目录下,其他应用是不可以访问到的,如果有些数据要提供给其他的应用,比如通信录,其他应用想获取它的数据怎么办呢,这时内容提供者就出现了,预先写好了一些操作数据库的方法,因为方法是开发这个应用的开发者提供的,所以保证了数据库的安全操作,又能共享数据。 短信 开始切入正题,先说短信,要从数据库中获取数据,就要了解其结构 短信数据库在data-->data中的下面路径 它的表结构如下,有3个是我们要注意的,这3个是我们待会要用到的,其中date是毫秒值 Java代码为      //获取内容提供者 ContentResolver contentResolver = getContentResolver(); //获取短信表的路径 Uri uri = Uri.parse("content://sms"); //设置要查询的列名 String[] line = {"address", "date", "body"}; //各个参数的意思......

Android使用Service播放音乐 有更新!

像音乐这种耗时的和适合后台操作的应当放在Service中进行操作,而不是放在Activity,下面就介绍使用Service的音乐播放器 先创建一个MusicService,在Android Studio中,点击包名右键New-->Service-->Service 如果是按照上面的方法创建的Service,配置清单中会自动生成 改Service的声明 在MusicService中的Java代码,里面包含了音乐的相关操作复写了onCreate()用于初始化播放器 public class MusicService extends Service { private String path = "mnt/sdcard/123.mp3"; private MediaPlayer player; @Override public IBinder onBind(Intent intent) { //当执行完了onCreate后,就会执行onBind把操作歌曲的方法返回 return new MyBinder(); } @Override public void onCreate(......

Android画板的实现 有更新!

这是一个常见的画板功能,常用于画画和手写输入等等,今天就教大家实现这个小功能,这个功能还是比较简单的,只有一个Java文件 先看效果图 布局代码,只有三个按钮和一张图片 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.dell.myapplication.Main2Activity"> <LinearLayout android:orientation="horiz......

Android在ImageView上直接显示网络图片 有更新!

在原生的ImageView中,没有一个方法是可以直接显示网络的图片的,当我们经常需要显示网络图片时,每次都有一大堆的操作,这会很麻烦,今天就教大家在ImageView上轻松显示网络图片。 自定义ImageView方法 写一个类让它继承ImageView,并增加一个 setImageURL(path)方法 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; imp....