乐趣区

关于android:关爱2700多万听障者手语服务助力无声交流

如果有一天,周遭的世界忽然变得很宁静,难听美好的音乐,在你看来只是寂静;振奋人心的演讲,对你而言只是默剧;大自然的千里莺啼,于你来说也只是画卷。你会不会感到胆怯?

而有这么一群人,每天都在与这世界无声交换着,他们就是听力阻碍人士。据 2006 年第二次全国残疾人抽样调查显示,我国的听力残疾人约 2780 万,占全国残疾人的 30% 以上,而且数据每年都在减少。受限于发病起因及家庭状况,可能应用助听器、人工耳蜗的听障人士占比拟少,其他人不仅面临着生存中的种种不便,也难以感触到世界的精彩纷呈,所以手语成了他们与人们的次要沟通桥梁。

然而手语看不懂、专业知识不够、翻译技巧不够、体态不够活泼、手语翻译在翻译的过程中有存在帮忙聋人答复问题的景象……这些裸露的问题都极大的影响了听障人士在翻译服务中的用户体验。据残联统计,我国业余的手语翻译有余 1 万人,难以满足听障人士参加社会生存时的沟通需要。这就须要一些 App 可能增加将文本翻译成手语的能力,在手语翻译无限的状况下,满足听障人士的根本生存和学习的须要。

每年 9 月的第四个星期日是国内聋人日,为了关爱听障人士,华为手语服务(SignPal Kit)提供手语生成能力,将文本实时翻译为晦涩、天然且合乎听障人士表白习惯的手语动作数据,可能轻松构建信息无障碍翻新利用,构筑无缝交换的世界。可用于家庭日常生活交换、教育学习、外出购物、媒体播报等场景。例如在教学场景中,可帮忙听障儿童学习浏览,实现手语教学。

手语生成

  1. 手语动作生成

基于深度神经网络技术,实时将输出文本翻译为时序稳固、连贯且合乎听障人士表白习惯的手语动作数据。

  1. 手语表情生成

手语生成不仅包含手部动作和身材姿势,还反对面部表情,包含开心、愤恨、伤心、纳闷等根本表情信息,以及皱眉、鼓腮等多种非手控表情。

  1. 手语口型生成

手语生成反对合乎听障人士表白习惯的口动。

手语服务能将输出文本转化为手语动作数据,可用于家庭日常生活交换、教育学习、外出购物、媒体播报等场景。使用手语动作及面部表情,手语服务精准流畅地传递讲师的授课内容,让处在无声世界的特教学院听障学生,也能实现无障碍网课学习。

劣势特点

  1. 天然晦涩:手语动作晦涩、天然,合乎手语表白习惯。
  2. 词汇笼罩广:依照中国国家通用规范有 1 万多个词汇,满足多场景利用。
  3. 手语表白丰盛:手语动作包含手部动作、身材姿势、面部表情和口型驱动。

开发步骤

在开始 App 开发工作之前,您须要实现必要的开发筹备工作,确保您的工程中曾经配置 AppGallery Connect、集成 HMS Core SDK、配置混同脚本以及增加权限。

1、开明鉴权。须要应用“agconnect-services.json”里的 api_key 值,在利用初始化时通过 AccessToken 或者 api_key 来设置利用鉴权信息,AccessToken 的优先级较高。

通过 setAccessToken() 办法设置 Access Token,在利用初始化时设置即可,如果 Token 过期了,须要更换 Token 从新设置。

SignPalApplication.getInstance().setAccessToken("your 
AccessToken");

通过 setApiKey() 办法设置 api_key,在利用启动时初始化设置一次即可,无需屡次设置。

SignPalApplication.getInstance().setApiKey("your api_key");

当您在 AppGallery Connect 上注册您的利用时,零碎会给您的利用调配 api_key,可参见增加以后利用的 AppGallery Connect 配置文件。

2、创立手语生成实例。能够通过手语生成自定义配置类 GeneratorSetting 创立手语生成 SignGenerator 实例。

// 1. 创立新的配置项,不是必须设置,不设置则应用默认值
GeneratorSetting 
setting
 = new GeneratorSetting()
    .setLanguage(GeneratorConstants.CN_CSL)

// 2. 配置办法
 // a. 初始化时设置
  SignGenerator 
signGenerator
 = new SignGenerator(setting);
   // b. 过程中更新
   
signGenerator
.updateSetting(setting);

3、给 SignGenerator 实例设置手语生成回调 GeneratorCallback,用于解决手语生成后果。

signGenerator
.setCallback(new GeneratorCallback() {
    @Override
    public void onEvent(String taskId, int eventId, Bundle bundle) {switch (eventId){
        // 以下回调事件类型是在应用手语生成过程中须要关注的
        case GeneratorConstants.EVENT_START:
            // 工作开始回调
            break;
        case GeneratorConstants.EVENT_DOWNLOADING:
            // 工作下载中
            break;
        case GeneratorConstants.EVENT_STOP:
           // 工作进行回调
            boolean isInterrupted = bundle.getBoolean(GeneratorConstants.EVENT_STOP_INTERRUPTED);
            break;
        default:
           break;
        }
    }


    @Override
public void onSignDataAvailable(String taskId, SignMotionFragment signFragment, Pair<Integer, Integer> range, Bundle bundle) {
        // 获取手语动作数据
        ArrayList<Map<String,float[]>> motionDataList= signFragment.getSignMotionDataMap();
        // 获取表情数据
        int[] faceArr = signFragment.getFaceMotion();
        // 获取口型 BlendShape 驱动数据,如果不设置开启则为空数组
        float[] faceBlendShape = signFragment.getFaceBlendShapeArray();
        // 手语动作表情绘制,须要您自行实现
       
    }


    @Override
    public void onError(String taskId, SignPalError err){// 手语生成失败解决}
    @Override
    public void onWarning(String taskId,SignPalWarning warning){// 告警解决(不影响业务逻辑)}
});

4、调用 text2SignMotion() 办法进行手语生成,text 取值为字符串类型。

String 
id
 = 
signGenerator
.text2SignMotion(
text
, GeneratorConstants.QUEUE_MODE);

5、进行以后正在执行的手语生成工作,并清空队列中的所有工作与缓存。

signGenerator
.stop();

6、合成完结后,开释资源。

if (
signGenerator
!= null) {
    
signGenerator
.shutdown();}

理解更多详情 >>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

退出移动版