草庐IT

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

HMS Core 2023-03-28 原文

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

而有这么一群人,每天都在与这世界无声交流着,他们就是听力障碍人士。据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();
}

了解更多详情>>

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

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

有关关爱2700多万听障者,手语服务助力无声交流的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

  9. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  10. ruby TFTP 服务器 - 2

    我将以下代码放在一起用于一个简单的RubyTFTP服务器。它工作正常,因为它监听端口69并且我的TFTP客户端连接到它,我能够将数据包写入test.txt,但我不只是写入数据包,我希望能够从我的客户端通过TFTP传输文件到/temp目录。预先感谢您的帮助!require'socket.so'classTFTPServerdefinitialize(port)@port=portenddefstart@socket=UDPSocket.new@socket.bind('',@port)whiletruepacket=@socket.recvfrom(1024)putspacketFile

随机推荐