• 关爱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 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();
    }
    

    了解更多详情>>

    访问华为开发者联盟官网
    获取开发指导文档
    华为移动服务开源仓库地址:GitHubGitee

    关注我们,第一时间了解 HMS Core 最新技术资讯~

  • 相关阅读:
    数据在内存中的存储(2)
    EMNLP2023 | 让模型学会将提示插入到合适的中间层
    CCNP-第十九篇-ISIS(二)
    【手写Nacos系列】上厕所的功夫,带你手写一个注册中心的服务注册功能
    C语言之使用memcpy函数实现小数组数据不覆盖地复制到大数组
    Neo4j安装(Docker中安装Neo4j)
    基于FPGA的正弦PWM产生系统verilog实现
    模拟实现string类
    Git 我配置了ssh key,还是报错让我输入密码
    GPT学习-使用embedding做回归(regression)预测
  • 原文地址:https://www.cnblogs.com/hmscore/p/16725802.html