本项目是 PaddlePaddle 2.0 动态图实现的 CRNN 文字识别模型,可支持长短不一的图片输入。CRNN 是一种端到端的识别模式,不需要通过分割图片即可完成图片中全部的文字识别。CRNN 的结构主要是 CNN+RNN+CTC,它们分别的作用是,使用深度 CNN,对输入图像提取特征,得到特征图。使用双向 RNN(BLSTM)对特征序列进行预测,对序列中的每个特征向量进行学习,并输出预测标签(真实值)分布。使用 CTC Loss,把从循环层获取的一系列标签分布转换成最终的标签序列。
这个模型类型 CRNN,前面使用卷积层提前图像特征,后面用一个 GRU,他是 LSTM 的变种,最后的全连接层,输出的大小为词汇表 +1,因为还有一个空格字符,这个是 CTC 需要的。
查看大佬 GitHub 上全部项目的 Star 数量,需要手动修改 user
参数,该参数为用户的 GitHub ID
MTCNN,Multi-task convolutional neural network(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在了一起,总体可分为 P-Net、R-Net、和 O-Net 三层网络结构。它是 2016 年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。这三个级联的网络分别是快速生成候选窗口的 P-Net、进行高精度候选窗口过滤选择的 R-Net 和生成最终边界框与人脸关键点的 O-Net。和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。
在数据预处理方便,本项目主要是将音频执行梅尔频率倒谱系数(MFCCs)处理,然后在使用出来的数据进行训练,在读取音频时,使用 librosa.load(wav_path, sr=16000)
函数读取音频文件,再使用 librosa.feature.mfcc()
执行数据处理。MFCC 全称梅尔频率倒谱系数。梅尔频率是基于人耳听觉特性提出来的, 它与 Hz 频率成非线性对应关系。梅尔频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的 Hz 频谱特征,主要计算方式分别是预加重,分帧,加窗,快速傅里叶变换(FFT),梅尔滤波器组,离散余弦变换(DCT),最后提取语音数据特征和降低运算维度。本项目使用的全部音频的采样率都是 16000Hz,如果其他采样率的音频都需要转为 16000Hz,create_manifest.py
程序也提供了把音频转为 16000Hz。
在 Android 中使用 Netty-Socket 互相发送图片和文字,
首先是服务端,服务端的应用在 server 下,其中最重要的是 NettyServerUtil.java
,这里包含了服务的启动和发送数据,这数据包括文字和图像。
这段代码是启动 Netty 服务的,其中非常重要的是 ch.pipeline().addLast(new ByteArrayEncoder());
和 ch.pipeline().addLast(new ByteArrayDecoder());
,因为我们要传输的都是基于 byte[] 的,同时还要 LineBasedFrameDecoder
设置最大包的长度。
Android 使用 CameraX 实现相机快速实现对焦和放大缩小,本教程介绍如何使用 CameraX 实现相机点击对焦和放大缩小,单击对焦指定位置,使用双指放大缩小图像。下面是页面代码,使用 PreviewView 预览相机图像,然后使用 FocusImageView 自定义 View 来显示对焦框。CameraXPreviewViewTouchListener.kt
点监听事件,用于监听屏幕的点击监听动作。
CameraX 是谷歌提供的相机框架,这个框架非常强大,可以实现很方便点击对焦,放大缩小,保存优质的图像等等。最重要的是 androidx.camera.view.PreviewView
控件,这个可以实现预览图像,点击监听事件等操作都可以在这里完成。不过这里只介绍预览图像和拍照保存。startCamera()
方法可以实现预览操作,代码都有注释。CameraX 提供了 imageCapture.takePicture()
接口用于保存图像。
CameraKit 框架是一款极其简单的 Android 相机框架,代码量比使用原生的少很多。本章教程我们就来使用 CameraKit 搭建一个简单的相机,并实现点击保存图像。
Java 代码就简单很多了,其中要在 Activity 生命周期中也添加 CameraKitView 的什么周期。CameraKit 也提供了动态权限申请接口,使用 cameraKitView.onRequestPermissionsResult()
接口实现动态权限申请,这样就完成了相机预览功能。拍照保存也很简单,使用 cameraKitView.captureImage()
就可以保存图像到本地了。这也太简单了。
天授 是一个基于 PyTorch 的深度强化学习平台。
CartPole-v0 是一个很简单的离散动作空间场景,DQN 也是为了解决这种任务。在使用不同种类的强化学习算法前,您需要了解每个算法是否能够应用在离散动作空间场景 / 连续动作空间场景中,比如像 DDPG [LHP+16] 就只能用在连续动作空间任务中,其他基于策略梯度的算法可以用在任意这两个场景中。
conda create -n 【环境名称】 --clone 【被克隆环境路径】
如下:
conda create -n Pytorch --clone ./envs/Pytorch
一行代码实现人脸检测,人脸关键点检测和戴口罩检测。
本项目是使用 Paddle Lite 的 C++ 实现的人脸检测,人脸关键点检测和戴口罩检测,并将编译好的动态库和静态库部署在 Android 应用上,在 Android 设备上实现人脸检测,人脸关键点检测和戴口罩检测,所以本应不会使用到 C++ 开发,可以只使用笔者提供的 JNI 接口实现这些功能。在 ai
这个 module 是笔者在开发时使用到的,读者在使用这个项目时,完全可以删除掉,如果是看 C++ 实现,也可以看这个 module 的源码。
TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN 框架在原有 Rapidnet、ncnn 框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。
MNN 是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN 已经在阿里巴巴的手机淘宝、手机天猫、优酷等 20 多个 App 中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT 等场景下也有若干应用。
下面就介绍如何使用 MNN 在 Android 设备上实现图像分类。
PP-YOLO 是 PaddleDetection 优化和改进的 YOLOv3 的模型,其精度(COCO 数据集 mAP)和推理速度均优于 YOLOv4 模型,PP-YOLO 在 COCO test-dev2017 数据集上精度达到 45.9%,在单卡 V100 上 FP32 推理速度为 72.9 FPS, V100 上开启 TensorRT 下 FP16 推理速度为 155.6 FPS。
本教程源码地址:https://github.com/yeyupiaoling/PP-YOLO
然后开始编写人脸识别和人脸注册工具类,使用 insightface.app.FaceAnalysis()
可以获取模型对象,这里包含了三个模型,首先是人脸检测模型,然后是人脸特征提取模型,和最后的性别年龄识别模型。使用 model.prepare()
可以配置 ctx_id
指定使用哪一块 GPU,如果是负数则是使用 CPU 执行预测,nms
配置的是人脸检测的阈值。load_faces()
函数是加载人脸库中的人脸,用于之后的人脸识别对比。