AI视界引擎 | ​基于 YOLOv8 和计算机视觉 CV 的实时识别系统!

本文来源公众号“AI视界引擎”,仅用于学术分享,侵权删,干货满满。

原文链接:​基于 YOLOv8 和计算机视觉 CV 的实时识别系统!

技术进步和创新正在尽可能地推进作者的日常生活,但仍有很大一部分社会群体因为身体障碍而无法享受到这些好处。为了真正收获利益,并让更广泛的社会群体能够无障碍地使用这些创新,这些具有特殊才能和天赋的人们也应该在没有障碍的情况下使用这些创新。

如今开发的许多应用程序都在解决这些挑战,但本地社区和其他受限制的语言群体可能发现使用它们存在困难。马拉雅拉姆语是一种在印度喀拉拉邦使用的达罗毗荼语系语言,是印度官方认定的二十二种语言之一。近年来,针对喀拉拉邦的需求,马拉雅拉姆语系统的开发和应用工具激增,但其中许多并没有以同理心设计来满足听障人士的需求。

主要的挑战之一是马拉雅拉姆语手语数据的有限或无法获取,且在这方面没有付出足够的努力。为此,本文提出了一种利用先进的深度学习和计算机视觉技术对马拉雅拉姆语手语进行识别的方法。

作者从开发一个标记的马拉雅拉姆字母数据集开始,并使用先进的深度学习技术如YOLOv8和计算机视觉进行识别。实验结果表明,该识别准确度与其他手语识别系统相当,其他在手语识别领域的研究行人可以将该模型作为开发更先进模型的 Baseline 。

1 Introduction

在当今技术创新的背景下,各领域的进步已经改变了人类的存在方式,从教育(Abulibdeh等人,2024年)和医疗保健(Younis等人,2024年)到娱乐(Takale等人,2024年)和通信(Gholami和Al Abdwani,2024年)。尽管这些变革性的进步已经发生,但某些社区仍然面临阻碍他们获得基本特权的障碍。

通信是人类互动的重要方面,对于听障或言语障碍的人来说,手语是表达思想和观点的至关重要方式(Almufareh等人,2024年)。

直到最近,喀拉拉邦的手语使用者还面临着依靠更广泛的手语,如印度手语(ISL)、美国手语(ASL)或其他地区性手语进行有效沟通的挑战(Renjith和Manazhy,2024年;Priya和Sandesh,2024年)。缺乏一种专门针对喀拉拉邦的语言和文化细微差别而设计的手语,这对该地区聋人社区的顺畅沟通构成了障碍。

位于特里凡得琅的国家语音听力研究所(NISH)1,一直致力于言语语言和听力障碍人士的教育和康复工作,于2021年9月推出了马来亚拉姆手语(MSL),这是包容性和可及性的一大进步。这个项目旨在通过部署一个复杂的手语识别模型,为喀拉拉邦的听障和听力受损社区赋权。

本研究的主要目标是开发一个健壮的人工智能模型,能够从实时视频中识别特定于马来亚拉姆手语的静态手势。通过利用计算机视觉的高级功能,该模型生成相应的字幕,为听力和言语障碍社区内的个体提供增强的沟通手段。马来亚拉姆手语于2021年9月在喀拉拉邦推出,为听障或言语障碍人士带来了欣慰的改善。Issac等人(2023年)对此进行了详细阐述,并介绍了一个使用TensorFlow进行迁移学习的实时手语识别系统。

它使用网络摄像头检测并解释MSL中的马来亚拉姆字符,旨在改善言语障碍人士的沟通。Praneel等人(2023年)也讨论了同样的问题,提出了一个使用修改后的Inception V4模型的手势识别系统,以准确识别MSL通信中的九个马来亚拉姆字符。该系统的性能超越了其他最先进的方法,达到了17.7%的Top-1错误率和3.8%的Top-5错误率。Salim等人(2023年)也使用迁移学习来解释MSL中的字符。他们提出的方法使用ResNet50对静态手语字母图像进行分类,训练准确率达到97%。

62%,验证准确率为92.35%。YOLO是一种最先进的目标检测算法,因其实时处理能力而受到欢迎,能够在单次传递中准确地识别和定位图像或视频内的多个目标(Redmon等人,2016年)。YOLOv8是这个模型系列中的最新款,与早期版本相比,其准确度、速度和多功能性都有所提升。Tyagi等人(2023年)探讨了将这些模型应用于检测美国手语(ASL)手势。它比较了不同的YOLO版本,强调YOLOv8在精确度和平均精度(mAP)方面的优势。该模型在美式手语字母数据集上进行训练和测试,实现了95%的精确度,97%的召回率,以及96%的mAP@0.5。Jia和Li提出了一种增强的SLR-YOLO网络,用于高效的手语识别。

针对传统方法的挑战,该模型在YOLOv8的基础上进行改进,如用RFB模块替换SPPF模块以增强特征提取,并引入BiFPN和Ghost模块以改善特征融合并减少网络权重。通过在训练过程中采用Cutout方法增强数据泛化能力,从而在验证集上提高了准确性:美式手语字母的准确度为90.6%,孟加拉手语字母的准确度为98.5%,超过了原版YOLOv8的表现。

改进后的模型实现了1.3%的准确度提升,11.31%的参数减少和11.58%的FLOPs降低。Vidhyasagar等人(2023年)关注手语识别研究的快速增长。

使用Roboflow数据集和YOLOv8的迁移学习,研究提出了一种在实时会议或视频会议中进行ASL手势(A到Z)实时转录的系统。该模型通过从输入视频帧中提取关键组成部分,并基于神经网络比较进行手势分类,实现了有效的沟通。本文提出了一种识别视频中的马来语手语字符并易于解释的模型。本文的主要贡献总结如下:

  • 讨论了手语识别对听力障碍人士的相关性。

  • 回顾了一些最先进的手语识别方法。

  • 提出了一种使用YOLOv8和计算机视觉技术进行马来语手语识别的方法。

  • 实验验证了所提出的系统,展示了其在开发包容性人工智能应用程序中的实用性。

2 Materials and Methods

以下是“材料与方法”部分的开始部分。

2.1 Roboflow

Roboflow,可在https://roobflow.com/访问,是一个计算机视觉平台,通过提供改进的数据收集、预处理和模型训练方法,使用户能够高效地构建模型。对于希望简化和改进预处理和数据处理繁琐过程的计算机视觉研究者和开发者来说,这是一个极其有用的工具。管理和准备机器学习模型的数据集是一项具有挑战性的任务,这正是Roboflow的基本宗旨。

易于与知名的计算机视觉框架如TensorFlow、PyTorch和YOLO集成,是它的一个突出特点。通过让用户可以选择使用各种模型架构和框架,这种集成促进了在快速发展的计算机视觉领域中创新和适应性的提升。数据增强和预处理是提高数据集质量和多样性的关键过程,这直接影响机器学习模型的性能。

Roboflow在这些领域表现出色,提供了一系列丰富的增强策略来丰富数据集。

该平台的用户友好界面使用户能够轻松应用变换、调整图片大小和其他预处理程序,在数据准备工作流程中节省了宝贵的时间。Roboflow在复杂的计算机视觉领域中效率的典范。由于其集成能力、数据集管理工具以及对通过增强和预处理提高数据质量的承诺,它是学术界和开发者的首选。随着技术的发展和机器学习应用的日益复杂,Roboflow继续作为一个可靠的伙伴,使用户能够自信且轻松地处理数据准备工作的复杂性。

2.2 Ultralytics

Ultralytics,可在https://www.ultralytics.com/获取,是一个适用于计算机视觉的多功能工具箱,与PyTorch和TensorFlow等流行框架兼容。它通过用户友好的界面简化了模型开发和训练,并支持各种模型架构以满足不同项目需求。Ultralytics YOLOv8(https://www.ultralytics.com/yolo),一个高级目标检测模型,是该工具箱中的关键组成部分,以其实时效率和高度准确性而闻名。与Ultralytics生态系统无缝集成,YOLOv8因其多功能性而脱颖而出,适应于自动驾驶、监控和工业自动化等领域的多样化目标检测任务。该模型具有增强型架构,融入了CSPDarknet53主干网和PANet等元素以改进特征提取,从而提高了准确性和鲁棒性。得益于Ultralytics工具箱中的优化技术,YOLOv8采用混合精度训练和分布式训练,即使在大量数据集上也能加快训练收敛和高效资源利用。其在现实世界应用中的成功证明了在各个领域检测目标的效力。YOLOv8保持了用户友好的界面,符合Ultralytics对简洁性的承诺,同时没有牺牲在复杂计算机视觉任务中模型的深度。该模型与Ultralytics社区的积极参与确保了持续改进,体现了其韧性和用户友好的特点。总之,Ultralytics YOLOv8在目标检测模型方面迈出了重要的一步,为研究行人和开发行人提供了一个强大的工具,以应对多样化和具有挑战性的现实世界场景。

2.3 YOLOv8

YOLOv8是一种基于深度学习和计算机视觉前沿进展的实时目标检测和图像分割模型,提供卓越的速度和准确性。其简化的架构适用于广泛的应用,并且易于扩展到各种硬件平台,从边缘设备到云API。

以下是其关键组件的分解:

  • 修改后的CSPDarknet53:YOLOv8的核心在于其主干网络,即修改版的CSPDarknet53架构。这个网络包含53个卷积层,这些层经过精心选择和优化,以平衡性能和内存占用。

  • 跨阶段部分连接(CSP):这种创新技术减少了冗余计算,同时保持了网络中的信息流。

  • SPPF和新型CSP-PAN:这一部分连接了主干网络和 Head ,进一步丰富了空间特征并增强了特征传播。

  • 预测边界框和类别概率:在 Neck 之后,附加的卷积层和全连接层处理信息,并预测检测到的物体的边界框、目标性和类别概率。

YOLOv8使用 Anchor-Free 点模型和分离 Head 独立处理目标性、分类和回归任务。这种设计让每个分支能够专注于自己的任务,并提高了模型的整体准确性。在YOLOv8输出层,使用了sigmoid函数作为目标性得分的激活函数,表示边界框包含物体的概率。

它使用softmax函数来表示属于每个可能类别的物品的概率。YOLOv8使用CIoU[68]和DFL[108]损失函数进行边界框损失,以及用于分类损失的二元交叉熵。这些损失提高了目标检测性能,特别是在小物体方面。与典型的YOLO Neck 架构不同,主干网络是一个CSPDarknet53特征提取器,后面跟着一个C2f模块。在C2f模块之后是两个分割 Head ,它们学习预测输入图像的语义分割 Mask 。该模型具有与YOLOv8类似的检测 Head ,包括五个检测模块和一个预测层。YOLOv8-Seg模型在各种目标识别和语义分割基准测试中实现了尖端性能,同时保持了快速和高效。

2.4 Dataset

该数据集包含了从视频帧中提取的图像,捕捉了20个不同手势的马来语手语静态标志。这些视频以每秒60帧的速度转换成帧,每个手势产生了100张照片。在预处理阶段,对图像进行了调整大小,引入了5%的噪声,并在数据增强过程中应用了十度的旋转范围。预处理后,数据集包含了5900个数据点,包括正向和负向旋转,增强了数据集的多样性和鲁棒性,以便有效训练模型。作者使用Roboflow进行标注过程,将数据格式化为YOLO格式

3 Proposed Methodology

本节详细介绍了作者提出的方法,该方法使用卷积神经网络和YOLOv8来自动检测车辆并识别车牌。所提出方法的总体工作流程如图4所示。

为了保持更好的准确性,作者为项目开发了一个特定的数据集。通过以60 fps和4k分辨率录制视频,从20个不同的人那里收集了20个手势。每个手势大约包含300帧,整个数据集由5900个数据点组成。在预处理阶段,将图像调整为432 x 256像素,以减小数据集的大小,从而使得计算更加容易。数据增强是深度学习中使用的一种技术,用于提高训练模型所使用的数据质量。它通过对现有数据样本添加小变化来实现这一点。

这有助于防止模型过拟合并提高模型准确性。作者使用了两种增强技术:噪声——向手势图像添加随机噪声,以及旋转——将图像向右或向左旋转一个指定角度。

通过利用来自YOLOV8模型的预训练权重,它实现了迁移学习,加速了模型收敛并提高了泛化能力。这种初始化帮助YOLOv8模型掌握常见模式,减少了对大量训练迭代的需求。

特别是在YOLOv8架构中,加载预训练权重允许模型利用更广泛的目标检测任务的洞察,从而提高了它在特定图像中识别和识别物体的能力。

预初始化权重提供了一个强有力的起点,与随机初始化相比,显著减少了训练时间。继承的知识通常会导致新模型具有更高的准确性,因为它利用了已经发现的特征和关系。

新模型继承了预训练模型对在自身训练过程中未遇到的新数据的泛化能力。这导致了在多种任务和情境下的性能提升。现在,使用YOLOv8格式的增强数据集用预训练的YOLOv8模型进行训练。稍后启动的训练过程调整了周期并评估了模型性能。

4 Experiments

这个项目是在一台配备了Intel Core i5处理器的系统上运行的Windows 11系统完成的。代码在支持GPU的Google Colab中执行。最初,作者如第2节所述,从20个不同的人那里收集了近2000张20种不同手势的图像。随后,作者将图像大小调整为432x256像素。下一步涉及数据增强。

4.1 Data Augmentation

在训练数据集通过添加小扰动转换为新的合成数据样本的过程中,称为数据增强。这通过应用噪声注入和旋转来实现。这样做是为了使模型对那些扰动不变,并提高其泛化能力。在这个数据集中,作者对数据集添加了5%的噪声以及正负10度的旋转(参见第??节)。

4.2 Load and build Ultralytics YOLOv8 model

Ultralytics YOLOv8是一个开源的深度学习框架,专为目标检测和更复杂的任务设计。基于YOLO架构,Ultralytics的YOLOv8以其在实时目标检测中的效率和速度而闻名。它融合了模型架构、训练策略和部署选项的进步,使其成为计算机视觉应用中的热门选择。该框架使用PyTorch实现,并提供用户友好的界面,使研究行人和开发行人能够轻松地训练和部署具有高准确性和性能的目标检测模型。

最初,作者加载了一个预训练的YOLOv8模型。随后,作者将自定义数据集输入到预训练模型中,开始了YOLOv8目标检测模型的训练过程。'model'目标,假定为YOLOv8的一个实例,通过'train'方法被调用。'data'参数指向一个YAML文件,可能包含数据集配置详情,如文件路径和类别标签。

训练被设置为运行100个周期,使用10个周期的耐心值实现早停。详细设置表明了训练进度的详细信息,包括损失值和指标。'best.pt'文件夹是YOLO自动生成的,其中存储的权重位于'runs/train/weights'路径下。最佳权重以'best.pt'的名字保存。'best.pt'预训练权重是根据在验证集上达到的预定义指标(如准确度或损失)来选择的。通过选择这个预训练权重进行部署,代码确保在生产中使用的模型是效果最好的版本,这是由其在未见数据上的表现决定的。

5 Results and Discussions

图5展示了使用YOLOv8在验证数据上对20个类别/标志进行分类的混淆矩阵。

预测类别在垂直轴上,而真实情况沿水平轴。可以观察到,除了“va”类别的值为0.97外,大多数类别都被YOLOv8正确分类。在热力图中,从左上角到右下角的对角线单元格代表正确的预测。

这些单元格颜色越深,模型表现越好。显然,混淆矩阵的所有对角线单元格都比其他单元格颜色深,这意味着模型表现良好且预测准确。

最初,在第一个时期,训练损失相对较低。这是因为模型尚未在数据中学习到任何模式。随着训练的进行(从第2个时期到第8个时期),训练损失迅速增加,从第9个时期开始减少。这表明模型正在改善其对训练数据的拟合,并且在其中识别模式的熟练度在提高。

同样,验证损失在第1个时期也是从较低的值开始,因为模型尚未接触到验证数据。然而,随着训练的继续(从第2个时期到第8个时期),验证损失最初增加,然后从那里开始减少。这是一个积极的迹象,表明模型对未见数据的泛化效果很好。同时,平滑的下降趋势线表明模型正在学习和改进。

这意味着其预测与真实情况之间的误差随时间减少。平均精度(mAP)是用于评估目标检测模型的指标。它权衡了精确度和召回率,同时考虑了假阳性和假阴性。这一特性使得mAP成为大多数检测应用中合适的指标。如图**??**所示,在整个训练过程中,尽管偶尔有波动,mAP仍有明显且一致的上升。

该模型达到了大约83.9%的mAP值。

图7显示了验证数据中标志的相应标签,由边界框表示,而图8则展示了正确预测标志的概率。大多数概率在0.8到0.9的范围内,这表明模型的准确度很高。

6 Conclusions and Future Work

本研究旨在构建一个先进的马拉雅拉姆手语识别系统,旨在有效地检测静态手势。该系统不仅仅将这些手势翻译成字幕,而且还实现了实时操作,利用计算机视觉和深度学习的力量达到了令人满意的准确度。在未来范围方面,计划的扩展工作包括增强系统的功能,以涵盖动态手势。

该模型的潜在应用广泛且影响深远。除了其直接实用性之外,该系统可以集成到紧急响应系统中,为在关键时刻提供重要的通讯工具。此外,在视频通话中的实施可以促进包容性沟通,为听力受损者消除障碍。

该模型的适应性也延伸到教育环境,为使用马拉雅拉姆手语的群体提供一个包容的学习环境。此外,它还可能在开发针对马拉雅拉姆手语社区独特沟通需求创新技术方面发挥关键作用。

7 参考

[1].Malayalam Sign Language Identification using Finetuned YOLOv8 and Computer Vision Techniques.

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自研Eclipse插件的生成及安装和使用

说明: 本处是使用个人自研的Eclipse插件为例,创建了一个菜单式的插件组,插件组下,有一个生成右击Jakarta EE服务端点类后,生成端点对应的Restful客户端。有什么问题,欢迎大家交流!!…

cython 笔记

数据类型 # bool 类型 // bool_type_ptactice.pyx cdef bint a 123 # 非0 为 真 , 0 为假 cdef bint b -123 cdef bint c 0 py_a a # cdef 定义的内容没法直接在python中直接引用 py_b b py_c c// main.py import pyximport pyximport.install(language_le…

教您设置打开IDM下载浮动条的快捷键 全网最强下载神器idm怎么使用教程 idm浮动条不显示怎么办

很多人都知道Internet Download Manager(以下简称IDM)是一款非常优秀的下载提速软件。它功能强大,几乎能下载网页中的所有数据(包括视频、音频、图片等),且适用于现在市面上几乎所有的浏览器,非常受大家欢迎。 在使用I…

面向对象和面向过程编程的区别

引言 小伙伴们,当你们看到这章的时候,显然你们已经跨过了来自指针给你们带来的麻烦,唔~真棒呢,但是我们只学会一些基础的C语法并不能帮我们解决问题,甚至是稍微难一些的题目我们都没办法解决,那怎么办呢&am…

多机调度问题

#include<iostream> #include<string> using namespace std; struct work {int time;int number; }; int setwork0(int m,int n,int a[],struct work w[]) {int maxtime0;for(int i1; i<m; i){cout<<i<<"号设备处理作业"<<w[i].num…

python系列30:各种爬虫技术总结

1. 使用requests获取网页内容 以巴鲁夫产品为例&#xff0c;可以用get请求获取内容&#xff1a; https://www.balluff.com.cn/zh-cn/products/BES02YF 对应的网页为&#xff1a; 使用简单方法进行解析即可 import requests r BES02YF res requests.get("https://www.…

YOLOv8改进 | 卷积模块 | 分布移位卷积DSConv替换Conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效…

2024百度之星第一场-110串

补题链接&#xff1a; 码蹄集 三个状态转移的计数dp 先确定状态 n个数至多修改k次&#xff0c;保证不出现字串“110” 常规想法先把状态确定为dp[n][k][0/1]&#xff0c;前n个数&#xff0c;修改k次后&#xff0c;末尾数为0/1&#xff0c;不能转移再换思路。 初始状态设定如…

存储请求地址但是使用时请求的是端口

baseURL默认全局加载一次&#xff0c;后续直接读取缓存 解决方案&#xff1a;

类和对象(封装、继承、多态、友元)

c面相对象的三大特性为&#xff1a;封装、继承、多态 c 认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 一、类和对象&#xff08;封装&#xff09; &#xff08;一&#xff09;封装的意义 封装是c面相对象的三大特性之一 封装的意义&#xff1a; 将属性和行为…

网页如何快速被收录?

其实就是要要吸引搜索引擎爬虫更快地抓取你的网页&#xff0c;想让爬虫爬取网页&#xff0c;首要做的自然是创建并提交站点地图。站点地图是搜索引擎了解你网站结构的重要工具。它可以帮助爬虫更快地发现和抓取你网站上的所有重要页面。通过Google Search Console提交站点地图&…

6. 较全的Open3D点云数据处理(python)

注意&#xff1a;以下内容来自博客爆肝5万字❤️Open3D 点云数据处理基础&#xff08;Python版&#xff09;_python 点云 焊缝-CSDN博客&#xff0c;这篇博客写的全且详细&#xff0c;在这里是为了记笔记方便查看&#xff0c;并非抄袭。 1.点云的读写 代码如下&#xff1a; …

ARM功耗管理软件之软件栈及示例

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

python中pip换源

目录 1. 背景2. Python 的 pip 换源2.1 临时换源&#xff08;命令行中使用参数&#xff09;2.2 永久换源&#xff08;修改配置文件&#xff09;2.2.1 Windows系统2.2.2 Linux/macOS系统 2.3 使用 pip-config 命令换源&#xff08;Linux/macOS 特定&#xff09; 3. 常用的 PyPI …

深入分析 Android BroadcastReceiver (七)

文章目录 深入分析 Android BroadcastReceiver (七)1. 高级应用场景1.1 示例&#xff1a;动态权限请求1.2 示例&#xff1a;应用内通知更新 2. 安全性与性能优化2.1 示例&#xff1a;设置权限防止广播攻击2.2 示例&#xff1a;使用 LocalBroadcastManager2.3 示例&#xff1a;在…

三分钟给AI Agent应用对话增加人类情感!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

[算法]——堆排序(C语言实现)

简单的介绍一下用堆排序的算法对整形数据的数据进行排序。 一、堆的概念 堆是具有下列性质的完全二叉树&#xff1a;每个结点的值都大于或等于其左右孩子节点的值&#xff0c;称为大顶堆&#xff1b;或者每个结点的值都小于或等于其左右孩子结点的值&#xff0c;称为小顶堆。 …

GenAI 用于客户支持 — 第 1 部分:构建我们的概念验证

作者&#xff1a;来自 Elastic Chris Blaisure 欢迎来到 Inside Elastic 博客系列&#xff0c;我们将展示 Elastic 的内部运营如何解决实际业务挑战。本系列将揭示我们将生成式 AI&#xff08;gererative AI - GenAI&#xff09;集成到客户成功和支持运营中的历程&#xff0c;让…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…