- 博客(143)
- 资源 (8)
- 问答 (1)
- 收藏
- 关注
原创 音视频开发之旅(78)- Docker使用和交互流程
这通常通过一个特定的API接口实现,Docker脚本发送请求并携带自身的标识信息,以便Web服务根据Docker脚本的能力或任务处理优先级分配任务。任务队列维护:Web服务接收到任务请求后,根据任务类型和内容将任务存入相应的队列中。任务派发:Web服务根据Docker脚本的请求返回待处理的任务信息,Docker脚本接收到任务信息后,根据任务类型和所需操作调用相应的处理脚本或程序。Docker通过轻量级的容器化技术,使得应用程序及其依赖可以打包在一个可移植的容器中运行,确保应用在不同环境下的一致性和效率。
2024-03-24 22:33:22 876
原创 音视频开发之旅(77)- 训练可泛化AI数字人的中文数据集汇总
1、CMLR2、LRW-10003、其他数据集4、视频收集与处理与训练5、资料Wav2Lip实现的是视频人物根据输入音频生成与语音同步的人物唇形,使得生成的视频人物口型与输入语音同步。不仅可以基于静态图像来输出与目标语音匹配的唇形同步视频,还可以直接将动态的视频进行唇形转换,输出与目标语音匹配的视频。但是预训练模型采用的是LRS2数据集,对于中文唇音同步效果不够真实,开放的或者可申请比较大的中文数据集有CMLR和LRW-1000等。也可以自己收集数据集进行清洗处理,但时间会很长,成本比较高。
2024-03-22 08:50:38 831
原创 音视频开发之旅(76)- 图片抠图换背景-MODNet
专注于预测图像中的细节,特别是边缘区域,一边产生更精准的分割效果。它利用了低分辨率分支的输出,对该输出进行上采样(即增加分辨率)以及结合下采样后的原始图像来获取更清晰的边缘分割。该分支也有一个辅助模块Skp Link,它将网络早期层的特征传递到后面的层,因为早期层通常包含更多的原始信息,这样做更有助于恢复细节。,通过对图片的卷积缩小图像尺寸,预测大致的语义信息,即图像中哪些区域是人物。该网络用来预测显著性区域(可以简单理解为人像,但不局限于人像,比如动物前景也没问题),以便从图像中分离出前后景。
2024-03-15 15:40:55 492
原创 音视频开发之旅(75)- AI数字人进阶--GeneFace++
目录1.效果展示和玩法场景2.GeneFace++原理学习3.数据集准备以及训练的过程5.遇到的问题与解决方案6.参考资料一、效果展示AI数字人进阶--GeneFace++(1)AI数字人进阶--GeneFace++(2)想象一下,一个专为你打造的AI数字人,不仅可以代表你在屏幕上出现,还能带来实实在在的商业价值。之前。
2024-03-14 01:33:40 1130
原创 音视频开发之旅(74)- AI数字人-实现图像无缝融合
通过先下采样再上采样,然后对上采样的,得到拉普拉斯金字塔,然后再和逐级上采样的图片进行相加即可恢复为原图, 即是无损的. 如果我们对图片中变化比较小的低频分量进行剔除,只保留更多细节的高频分量(即边缘轮廓),损失一部分不明显的信息,再进行恢复 可以实现图片压缩的效果.泊松融合可以将一个图像区域无缝地融合到另一个图像中,在保持图像渐变的前提下调整图像的像素值,不仅能够保留源图像的细节和结构,又能自然地适应目标图像的颜色和亮度,使得融合区域与周围环境看起来更自热协调。
2024-03-11 23:33:29 519
原创 自动裁剪人脸:简化你的数字人素材准备
在做数字人时,需要对采集的数据进行预处理,然后才能进行模型训练, 预处理常用的操作有:去背景 音频重采样 视频裁剪 音频特征提取等等,今天我们来分享一个自动化脚本: 对原图/视频进行人脸检测并根据目标尺寸以人脸为中心进行裁剪.获取视频的第一帧,进行人脸关键点检测,作为后续所有帧的人脸坐标(所以采集的视频人脸进来不要动作太大)图片的处理比较简单: 读取图片,进行人脸检测,根据un人脸中心点坐标和目标尺寸对原图进行裁剪。比如最近做的下面这个数字人效果,在训练阶段就用到了该脚本对视频进行自动裁剪。
2024-03-10 00:38:23 240
原创 音视频开发之旅(72)- AI数字人-照片说话之SadTalker
最后,将生成的3DMM系数映射到面部渲染器的三维关键点空间,以生成最终的视频。seamlessClone 驱动口型动的是256*256的人头区域,最终想输出full的视频,需要把上面的头部视频加上mmmmmmmmmmmmmmmmbn 原始图片根据mask和location进行合并成新的视频,这个可以优化,通过线程池进行加速,耗时可以从40s减少到20s。AI数字人目前做的最好的无疑是heygen,但是费用也是很贵,也有一些其他的商业应用,比如:微软小冰、腾讯智影、万兴播爆和硅基智能等。
2024-03-02 08:54:21 527
原创 音视频开发之旅(71)- 人脸修复画质增强之GFPGAN
它由一个U-Net模块和一个预训练的人脸GAN模型组成。GFP-GAN中为了保证人脸变清晰同时保持真实性,有四个loss1. “Reconstruction Loss” 使用预训练的 VGG-19 网络来完成分辨率的增强2. “Adversarial Loss” 使用 StyleGAN2 中类似的方法来生成逼真的纹理;3. “Facial Component Loss” 为了让面部细节真实,使用辨别器单独生成和应用面部区块的补丁,特别处理了眼睛、嘴巴等局部细节;
2024-02-27 13:52:45 973
原创 音视频开发之旅(70)- 人脸修复画质增强之CodeFormer
见https://github.com/sczhou/CodeFormer Readme。
2024-02-26 08:36:29 677
原创 音视频开发之旅(69)-SD图生图
SD UNet 中的所有参数被冻结,并克隆一份(trainable copy)到 ControlNet. 这些 trainable copy 通过一个外部条件向量(external condition vector)进行训练.下图从整体上说明了 ControlNet 和 Stable Diffusion 如何在推理过程(采样)中协同工作。
2024-02-25 22:53:20 680
原创 音视频开发之旅(68)-SD文生图
Low-Rank Adaptation of Large Language Models,冻结预训练好的模型权重参数,然后在每个Transformer(Transforme就是GPT的那个T)块里注入可训练的层,可以理解为大模型的一个小模型。LoRA模型可以应用于各种不同的领域和用途,比如:角色lora、风格lora和服装lora等。:这个是一个比较有意思的参数,通过随机种子生成一张高斯噪声图片,通过迭代步数不断的进行去噪,而提示词引导系数直接决定了生成的图片受prompt影响的程度,一般设置为6-7.
2024-02-24 13:58:09 825
原创 音视频开发之旅(67) - 变速不变调之sonic源码分析
上一篇我们学习了音频变速不变调的原理以及WSOLA波形相似叠加算法进行时域压扩处理。其中在寻找相似帧方面,Sonic采用AMDF(平均幅度差函数法)方法来进行寻找。图片来自:[清音or浊音 ]浊音的发音过程是:来自肺部的气流冲击声门,造成声门的一张一合,形成一系列准周期的气流脉冲,经过声道(含口腔、鼻腔)的谐振及唇齿的辐射最终形成语音信号。故浊音波形呈现一定的准周期性。所谓基音周期,就是对这种准周期而言的,它反映了声门相邻两次开闭之间的时间间隔或开闭的频率。基音周期是语音信号最重要的参数之一,但是基
2022-08-12 12:59:53 1679 1
原创 音视频开发之旅(64) - 部分android手机编码的视频在ios上无法播放
目录 问题描述 问题分析 问题原因 问题解决 资料 收获 一、问题描述用小米11 录制视频上传后,在iPhone的Safari浏览器或者应用的H5中无法播放,而android设备上的确实可以正常播放。同样的操作,在一些其他android的手机上传的视频,在ios端却可以正常播放。二、问题分析拿到(能播放和不能播放)两个视频。分析下这两个视频有什么差异。通过MediaInfo查看两个视频的基本信息不能播放的视频{"
2022-01-23 23:43:43 4036
原创 音视频开发之旅(63) -Lottie 源码分析之动画与绘制
目录动画和绘制的流程 LayerView树 ShapeLayer的分析 Lottie优劣以及rLottie、PAG的介绍 资料 收获上一篇我们学习分析了Lottie的json解析部分. 这篇我们分析的动画和渲染部分。分析的重点:如何组织多图层layer的关系,控制先后处理不同图层的绘制以及动画。一、动画和绘制的流程我们通过入口API函数(LottieDrawable#setComposition、LottieDrawable#playAnimation)来进行分析。1.1 L
2022-01-16 08:15:51 438
原创 音视频开发之旅(62) -Lottie 源码分析之json解析
目录Lottie能做什么 Lottie 动画使用调用流程 Json字段介绍 解析为LottieComposition 资料 总结一、Lottie能做什么在实现动画方面,原生的方式开发成本比较高,airbnb开源的lottie有Android、iOS、RN等多个版本的支持,设计师通过AE设计好动画后,通过AE插件Bodymovin导出json和素材文件。可以上https://lottiefiles.com/popular看看一些流行的 Lottie 动效客户端通..
2022-01-09 17:35:40 3335
原创 音视频开发之旅(61)- 分析FFmpeg (解码部分的)常用结构体
上一篇我们分析了解封装部分的常用结构体,这篇我们来学习分析解码部分的常用结构体。目录断点分析ffplay解码流程及关键结构体 (解码部分)常用结构体以及之间的关系分析 资料 收获一、断点分析ffplay解码流程及关键结构体还是从read_thread进行分析 stream_component_open(is, st_index[AVMEDIA_TYPE_AUDIO]); ret = stream_component_open(is, st_inde
2021-12-05 09:54:22 459
原创 音视频开发之旅(60) -调试分析FFmpeg (解封装部分的)常用结构体
目录ffplay的断点调试 (解封装部分)常用结构体以及之间的关系分析 资料 收获工欲善其事,必先利其器,断点调试,对我们梳理流程排查问题十分重要,可以ffmpeg的调试可以在XCode、VS code以及QT等ide上进行方便的调试分析。本篇我们以XCode为例来先介绍下ffplay的断点调试,以ffmpeg4.4版本来进行分析。一、ffplay的断点调试首先下载和编译ffmpeg,具体可以参考音视频开发之旅(33) -交叉编译android使用的FFmpeg(3.x和4.x)区别在
2021-12-04 07:53:00 172
原创 音视频开发之旅(59)- 捕获收集、定位分析 Native崩溃
目录Native崩溃有哪些类型 如何捕获收集Native崩溃 如何分析定位Native崩溃 资料 收获我们知道Java崩溃是在Java代码中出现了未捕获异常,导致程序异常退出,常见的异常有:NPE、OOM、ArrayIndexOutOfBoundsException、IllegalStateException、ConcurrentModificationException等等。还有一类崩溃,也是我们不得不关注,那就是Native层崩溃,这类崩溃不像Java层崩溃那样比较清晰的看出堆栈信息以及
2021-11-28 15:51:13 3684
原创 FFmpeg X264编码参数
原文章是台湾省的音视频前辈翻译而来,其中用到了一些词语稍微有些不同,为了更好的阅读和理解,进行了修改替换,具体如下:位元率 —〉比特率片子 —〉 slice位元数 —〉比特数资料 —〉数据资料流 —〉数据流视讯 —〉视频弹性 —〉自适应支援 —〉支持装置 —〉设备筛选 —〉滤波器巨集区块 —〉宏块动态向量 —〉运动向量动态估算 —〉运动估计解复用器 —〉解复用器副文件名 —〉后缀名档案 —〉文件资讯 —〉信息旗标 —〉标记档名 —〉文件名多工器 —〉复用器http:
2021-09-16 00:53:00 2465
原创 音视频开发之旅(58) -H.264 帧内预测
目录编码流程和数据格式回顾 4 × 4亮度块的9中预测模式 16 × 16亮度块的4种预测模式 8 × 8 色度块的4种预测模式 JM代码 资料 收获一、编码流程和数据格式回顾我们先看下下图来回顾下编码流程一个编码图像通常划分一个或多个片,每个片又可以划分成若干宏块组成,一个宏块由一个 16×16 亮度像素、一个 8×8 Cb以及一个 8×8 Cr 彩色像素块组成,即常见的420采样格式,如下图:我们通过H264visa码流分析工具看下H264数据的第一帧数据,
2021-09-11 23:34:00 295
原创 音视频开发之旅(57) -如何方便的查看AndroidNative源码
目录 背景 Android源码下载 源码编译及遇到的问题 使用CLion 导入 资料 收获 一、背景对Framework层的了解学习是我们进阶的一个重要阶段。通过 AS 查看 Framework 代码体验非常好,无论是索引还是界面都让人很满意,但是当你跟踪代码,发现进入 native 逻辑时,就会发现 Android Studio 对 native 代码的支持非常不好,不能索引不支持符号搜索不能跳转等。网页上可以通过cs.android.c
2021-09-09 00:19:40 426
原创 音视频开发之旅(56) -H264/AVC基本结构
从这篇开始,我们进入H264的学习实践,主要分三个阶段 学习H264基本结构; 了解具体编码压缩技术; 分析了解相关开源库 x264和h264bitstream。 这篇我们来一起学习H264的基本结构目录 H264/AVC的目标和方案 H264分层结构- VCL和NAL NALU HEAD解析 NALU payload I/P/B帧的特点 切片Slice和宏块 资料 收获 一、H264/AVC的
2021-09-04 16:45:50 397
原创 音视频开发之旅(55)-阻塞队列与无锁并发容器
目录阻塞队列的定义和使用场景 阻塞的队列的实现原理 简单学习无锁并发容器之ConcurrentLinkedQueue和CAS 资料 收获一、阻塞队列的定义和使用场景阻塞队列(BlockingQueue)在队列Queue的基础上增加了两个场景的阻塞当队列满时,再向队列添加数据会阻塞,直到队列不满时 当队列为空时,再向队列获取数据会阻塞,直到队列变为非空阻塞队列常用于生产者消费者的场景下面我们先来Queue和BolckingQueue接口的定义//java.util.Qu
2021-08-29 13:07:51 202
原创 音视频开发之旅(54) - Lock、重入锁、读写锁和Condition
目录Lock的意义和使用 同步器AbstractQueuedSynchronizer 重入锁ReentrantLock 读写锁ReentrantReadWriteLock Condition一、 Lock的意义和使用在Java 1.5之前java程序是通过synchronized来实现锁功能的。Java1.5引入了Lock接口以及相关的实现类,提供了和synchronized类似的同步功能。相比synchronized的隐式加锁和释放。Lock需要手动操作。少了便捷性,但却可以更加灵活和高
2021-08-22 21:34:03 182
原创 音视频开发之旅(53) - Java并发编程 之 synchronized
目录synchronized的使用方式 synchronized的原理 线程的等待、中断与唤醒 资料 收获一、synchronized的使用方式关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块.有如下三种常见的使用:修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 synchronized void syncIncrease4Obj(){ synchronized (this){...
2021-08-17 22:31:25 174
原创 音视频开发之旅(52) - Java并发编程 之内存模型与volatile
目录 JVM内存结构和内存模型 并发编程中的三个概念与重排序 happens-before原则 volatile原理 volatile使用场景 资料 收获 一、JVM内存结构和内存模型1.1 JVM内存结构图片来自图书《深入理解Java虚拟机》Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机方法区属于线程共享的内存区域,主要用于存储已被虚拟机加载的类信息、常量.
2021-08-14 21:53:29 201
原创 音视频开发之旅(51)-M3U8边缓存边播放
目录MP4的“问题” m3u8是什么 m3u8的好处 源码分析 扩展思考:mp4能不能像m3u8一样进行分片缓存呐? 资料 收获一、MP4的“问题”我们上面两篇边缓存边播放之AndroidVideoCache和边缓存边播放之缓存分片都针对MP4格式进行缓存处理,由于很多视频都是mp4格式,所以市面上商用的或者开源的播放器和缓存项目都是只支持MP4. 但是mp4格式有两个弊端(当然也是有办法进行优化的)1.1 moov在mdat后影响秒开率Mp4格式是一个个Box,其中moov存
2021-08-12 08:34:48 2513
原创 音视频开发之旅(50)-边缓存边播放之缓存分片(1)
目录什么是缓存分片 为什么要缓存分片 如何实现 资料 收获一、什么是缓存分片我们在上一篇介绍AndroidVideoCache时,知道它会一直下载数据直到完全下载。这会带来流量的浪费。比如一个5MB的视频,码率是2Mb/s,共有5Mx8/2=20秒。如果带宽是5MB/s,一个5M的视频1秒钟就下载完了,但是用户也许只看到了2秒钟因为不感兴趣划走了,这样就造成了两个弊端 流量的浪费和LRU缓存策略的漏洞。这个问题我们可以通过限速以及缓存LRU策略的调整来进行优化。同时还存在另外一个问题
2021-08-09 13:11:09 951 1
原创 音视频开发之旅(49)-边缓存边播放之AndroidVideoCache
目录背景 AndroidVideoCache简单使用 实现原理 源码分析 AndroidVideoCache的不足 资料 收获一、背景播放音视频时,播放器数据的请求是由播放器内部发起的,我们只是提供了一个url,而不能控制数据的请求过程,都是要先进行下载,下载到一定量之后播放器再开始播放,当下载进度减去播放进度小于一定阀值,进入缓冲状态。比如MediaPlayer的最小缓存大小是4M,最大20M//framework/av/media/libdatasource/in..
2021-08-01 15:49:56 727
原创 Android基础进阶 - 消息机制 之Native层分析
目录基础知识简介 Linux eventfd事件等待/响应机制 Linux IO多路复用epoll Android消息机制Native层分析 nativeInit流程 nativePollOnce流程 nativeWake流程 资料 收获上一篇中关于ThreadLocal的使用,遗漏了一个点:ThreadLocal的回收,使用不当会操作内存泄漏。通过上一篇的分析我们知道了ThreadLocalMap.Entry中的key时ThreadLocal的弱引用,而value需要在
2021-06-13 13:04:20 653 2
原创 Android基础进阶 - 消息机制 之ThreadLocal
目录ThreadLocal是什么 如何使用ThreadLocal ThreadLocal源码分析 消息机制中Looper中的ThreadLocal使用 资料 收获上一篇我们分析了Anrdoid消息机制的实现,其中关于ThreadLocal以及Native层的还没有搞清楚,这篇我们来一起学习分析下ThreadLocal的作用。一、ThreadLocal是什么ThreadLocal 线程局部变量 是一个泛型类,可以接受任何类型的对象,一般ThreadLocal的类型的变量时static类
2021-06-08 01:10:18 129 1
原创 音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)
通过上一篇的学习实践,我们了解了ExoPlayer的优缺点以及基本用法,今天我们进入ExoPlayer的音频播放实践,我们来一起实现一个简单的音频播放器。目录媒体播放框架MediaSession MediaSession框架+ExoPlayer 简单音乐播放器实践播放网络音乐 播放/暂停 歌曲切换 倍速播放资料 收获一、媒体播放框架MediaSession音频播放器并不总是需要使其UI可见。一旦开始播放音频,播放器就可以作为后台任务运行。用户可以切换到另一个应用程序,并继续听。
2021-05-29 17:41:27 1309 1
原创 音视频开发之旅(44)-ExoPlayer介绍及简单使用
目录ExoPlayer基本介绍 ExoPlayer的基本使用 遇到的问题 资料 收获从这篇开始我们进入阶段四 —— 一些音视频开源项目的学习使用分析,今天我们进入ExoPlayer部分的学习实践一、ExoPlayer基本介绍1.1 ExoPlayer优缺点ExoPlayer是谷歌开源的一个应用级的音视频播放器。ExoPlayer 支持基于 HTTP 的动态自适应流 (DASH)、SmoothStreaming 和通用加密、以及可以很好的支持播放队列、播放源的无缝切换等功能。它采用易于
2021-05-15 20:00:44 867 3
原创 音视频开发之旅(43)-光照基础(二)
目录实践(环境光、漫反射光、镜面反射光) 资料 收获上一篇我们学习实践了关照基础的基本概念和立方体的实现。有不清楚的可以先进行回看。这篇我们来光照基础的具体实践一、光照基础实践原始立方体效果1.1、环境光(Ambient Lightiing)//顶点着色器uniform vec3 lightColor;void main(){... // 环境光 //光照强度 float ambientStrength = 0.3; am..
2021-04-24 09:02:48 211
原创 音视频开发之旅(42)-光照基础(一)
目录光照相关基本知识 实践 资料 收获效果如下:一、光照相关基本知识经典光照模型通过单独计算光源成分得到综合光照效果,然后添加到材质表面上特定点。这些成分包括环境光(Ambient Lighting)、漫反射光(Diffuse Lighting)和镜面反射光(Specular Lighting)。image图片来自:基础光照1.1 环境光(Ambient Lightiing)环境光(Ambient Lightiing)不来自任何特定方向的光,在经典..
2021-04-19 00:27:11 231
原创 音视频开发之旅(41)-天空盒
目录天空盒的实现原理 具体代码实现 资料 收获效果如下今天我们学习实践天空盒,天空盒的技术本身比较简单,但是却可以做出来很多比较天空、大山、大海、以及VR看房等效果。可以作为背景动态移动,也可以跟随手势或者传感器等进行移动变换。一、立方体贴图和天空盒所谓的天空盒其实就是将一个立方体展开,然后在六个面上贴上相应的贴图天空盒的效果正如开篇动画中展示的效果一样,从一个视点,旋转视角看天空,呈现出来不同画面。我们可以想象成我们自己就位于一个三维空间的内部中心点,四周是一个大的立.
2021-04-12 00:17:13 374
原创 音视频开发之旅(40)-贝塞尔曲线和曲面
目录贝塞尔曲线基本知识 画贝塞尔曲线 让曲线动起来 画贝塞尔曲面 资料 收获本篇最终实现效果如下:篇外说明:由于有必要学习使用下kotlin,后续的java层代码实现尽量采用kotlin一、贝塞尔曲线基本知识贝塞尔曲线法国汽车工程师Pierre Bézier在1962年在对汽车主体进行设计时的发明,通过贝塞尔曲线可以设计出优美的车身。在PS、Sketch等图形软件上我们也经常会看到通过钢笔icon进行贝塞尔曲线的绘画。贝塞尔曲线至少有一个开始点和结束点,以及n个.
2021-04-02 05:09:40 479 2
原创 音视频开发之旅(39)- 高斯模糊实现与优化
目录高斯模糊的原理 GPUImage模糊的实现分析 高斯模糊优化 资料 收获我们在平时的开发中模糊是非常常用的技能,在android中有java的开源方案,也有RenderScript方案,今天我们来学习实践通过OpenGL如何实现高斯模糊。在工作中用到的高斯模糊,也只是做到基本的简单实用,为什么能实现以及是否可以性能优化点提升速度降低内存,之前都欠考虑。通过这篇我们来学习高斯模糊的原理、实现以及优化,我们的旅程开启。一、高斯模糊的原理这一小节会涉及到一些数学中基本概念,正态分布、
2021-03-25 09:22:21 329
原创 音视频开发之旅(38) -使用FBO实现渲染到纹理(Render to texture)
目录FBO基本知识 FBO实现渲染到纹理的流程 实践 遇到的问题 资料 收获在之前的学习实践中我们把图片、视频、图形等渲染到屏幕时,采用的是直接屏幕上即默认的帧缓冲区,如果我们在渲染时不想直接渲染到屏幕,而是把一些列的filter处理好之后,在渲染到屏幕上,比如,绘制一个图形,然后给这个图形/片依次做特效1、特效2… 然后在渲染到屏幕上。再比如,从camera采集到的视频数据,不直接渲染到屏幕上,而是经过美颜、滤镜、特效等处理后再在屏幕上渲染这时我们就需要用FBO的技术,先把素材渲染到
2021-03-15 07:27:07 756
Synergy_linux_mac_windows.zip
2020-04-05
pager-sliding-tab-strip-demo
2015-05-24
apktool-v2.00rc2
2015-01-28
ubuntu apktool
2015-01-15
android主题加透明属性 点击视频全屏后,导致其上级重新加载,导致内容空白。
2015-01-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人