天天看點

關愛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();
}