风语的专栏

仗剑天下,快意恩仇

移动端算法加速总结

性能加速,即对于给定的输入,用更短的时间获得我们想要的输出。 总的来说有两个思路: 降低计算量 提高计算速度。 各种优化技术基本上都是围绕这两点展开的。 降低计算量 优化算法或模型,使得用更少的计算量就可以达到同样的效果 简化算法或模型,使得在牺牲部分...

2018-09-04 18:03:44

阅读数 398

评论数 0

关于Android端相机应用涉及到的技术

目前AI视觉以及短视频相关的应用都和相机有关,涉及到相机的调用,Surface渲染,视频录制等功能,这里做了一个Demo项目,基本包含了Android相机应用涉及的所有技术。 https://github.com/dingjikerbo/Android-Camera Android Camera ...

2018-12-28 20:47:32

阅读数 82

评论数 0

VLC卡死内存溢出解决

SurfaceTexture不直接显示图像流,而是转为GL外部纹理,因此可用于图像流数据的二次处理(如Camera滤镜,桌面特效等)。比如Camera的预览数据,变成纹理后可以交给GLSurfaceView直接显示,也可以通过SurfaceTexture交给TextureView作为View he...

2018-11-23 21:08:50

阅读数 827

评论数 0

NEON优化——OpenCV WarpAffine最近邻

warpAffine一种典型的应用场景是将camera拍到的图像中人脸抠出来,通过变换输出一张正脸,然后再做一些人脸识别,关键点检测之类的运算。所以通常是输入尺寸固定,输出尺寸也固定,变的是转换矩阵。 最近邻的优势是计算量小,速度较快,问题是放大的情况下锯齿较明显,对于通常是缩小的应用场景最近邻...

2018-11-23 21:07:30

阅读数 311

评论数 0

NEON优化——OpenCV WarpAffine双线性插值

算法要点 warpAffine双线性插值和最近邻的区别 根据目标图像的某点坐标算出原始图像对应的点坐标后,最近邻是向下取整,双线性插值需要获得相邻的四个点坐标以及纵横方向的权重 最近邻直接拷贝原始图像点即可,双线性插值需要横竖加权 很显然计算量要比最近邻大一些,但是效果会更好,对于...

2018-11-23 21:04:34

阅读数 516

评论数 0

NEON优化——OpenCV Resize双线性插值

算法要点 一、基本原理 具体原理可以自行搜索,这里只大致描述一下,目标图像上某一个点按比例映射到原始图像上某一点,不过通常计算得到的原始点坐标不是整数,最近邻的做法是向下取整,而双线性差值的做法是取与该坐标最接近的上下左右四个点来线性加权,在放大的时候不会像最近邻那样锯齿严重,但是计算量会大不...

2018-11-23 20:59:50

阅读数 1027

评论数 1

Android Camera源码分析

回顾这半年做的项目基本都跟Camera有关,从手势识别控制空调,到人脸识别的门禁,都是围绕相机的数据处理和渲染。这里相机不限于本地的相机,还包括远程的RTSP相机,要将数据流拉到本地进行渲染。 这两天好好读了一下Camera的源码,大概理清了整体架构,总结了一下,其实没多少东西,Android的各...

2018-11-23 20:55:40

阅读数 425

评论数 0

Android视觉应用性能优化

计算机视觉在移动端的应用,典型的如手势识别,人脸识别,流程都差不多,都是利用移动端的相机采集数据,丢给算法层,根据识别的结果来做一些业务,中间可能还要做一些图形的渲染。 本文主要讨论这中间涉及到的一些问题以及优化的思路,算是对过往工作的总结吧。大致问题有以下五点: 一,相机采集数据的格式是NV...

2018-11-23 20:50:05

阅读数 71

评论数 0

Android BufferQueue原理分析

在Android中,BufferQueue是Surface实现本地窗口的关键,驻留在SurfaceFlinger进程中进行服务,下面从BufferQueue的结构开始分析, class BufferQueue : public BnGraphicBufferProducer, ...

2018-11-23 20:48:25

阅读数 555

评论数 0

从Camera源码看如何从Jni回调到Java层

通常设备层有数据或事件要通知到应用层是通过回调来完成的,可以采用的方式是直接调用java层类静态函数,或者调用java层某个对象的普通函数, 涉及几个问题: 1,内存泄露,引用问题 2,多线程问题 首先研究一下Camera的实现,首先打开Camera返回一个Camera对象,setPreviewC...

2018-11-23 20:45:15

阅读数 124

评论数 0

VLC RTSP视频播放终极解决方案

VLC播放RTSP视频流遇到的问题摄像头是RTSP协议的,需要在Android端实时显示摄像头视频流,这里采用了开源的VLC播放器,可能会有如下需求: 一、有截屏的需求 二、有屏幕录制的需求 三、视频本来是横的,但是现在要竖屏显示,如何旋转视频,另外旋转后视频会拉伸,因此需...

2017-10-12 20:23:27

阅读数 6561

评论数 1

关于Grafika的RecordFboActivity

这个是为了展示通过FBO录制视频的三种方式,先总结一下,采用SurfaceView加单个EGLContext,两个Surface,一个是Display Surface,另一个是Video Surface。三种方式如下:一、多次绘制,即先切到Display Surface绘制,然后再切到Video ...

2017-08-15 17:18:45

阅读数 389

评论数 0

采用Parcelable实现对象的深度拷贝

public class ParcelHelper { public static <T> T copy(Parcelable input) { Parcel parcel = null; try { parcel = Par...

2017-08-03 11:52:58

阅读数 1025

评论数 0

ProgressButton的实现

一向对UI不是太感兴趣,不过项目中遇到了还是得去做,做这个ProgressButton还是费了不少功夫,不过效果还可以,这里先记下,以后可能还会用到。只贴代码,原理就不多说了。public class ProgressButton extends Button { public static...

2017-03-30 10:21:10

阅读数 605

评论数 0

谈Android PowerManager的Hook技术

在插件中,需要禁止插件调用系统原生接口持有WakeLock,Hook技术是不错的解决方案。通过阅读系统源码,可以了解到PowerManager持有WakeLock操作最后都通过Binder跨进程调到系统服务中,我们只要拦截这个Binder的所有调用即可。思路是先通过反射拿到这个IPowerMana...

2017-03-29 11:20:15

阅读数 932

评论数 5

getSystemService的奇怪问题

先看如下代码,这两个PowerManager不是同一个对象,PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); PowerManager manager2 = (PowerManager)getApplica...

2017-03-28 20:45:22

阅读数 1211

评论数 0

用happen-before规则重新审视DCL

编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线程程序的测试就是不必要的。传统上,对多线程程序的分析是通过分析操作之间可能的执行先后顺序,然而程序...

2017-03-16 17:55:09

阅读数 341

评论数 0

Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由...

2017-03-16 17:17:23

阅读数 1036

评论数 0

Retrofit源码解析

Retrofit代码不多,设计得很精巧,非常值得借鉴。首先看Retrofit是如何创建的:public <T> T create(final Class<T> service) { return (T) Proxy.newProxyInstance(service....

2017-01-16 12:02:23

阅读数 559

评论数 0

Android蓝牙源码分析——GKI定时器

GKI定时器初始化在gki_ulinux.c中的GKI_init中,如下:void GKI_init(void) { ...... struct sigevent sigevent; memset(&sigevent, 0, sizeof(sigevent)); ...

2016-09-08 13:02:33

阅读数 1596

评论数 1

提示
确定要删除当前文章?
取消 删除
关闭
关闭