如果有一天,周遭的世界突然變得很安靜,動聽美妙的音樂,在你看來只是沉寂;振奮人心的演講,對你而言只是默劇;大自然的千里鶯啼,於你來說也只是畫卷。你會不會感到害怕?
而有這麼一群人,每天都在與這世界無聲交流著,他們就是聽力障礙人士。據2006年第二次全國殘疾人抽樣調查顯示,我國的聽力殘疾人約2780萬,佔全國殘疾人的30%以上,而且資料每年都在增加。受限於發病原因及家庭情況,能夠使用助聽器、人工耳蝸的聽障人士佔比較少,其他人不僅面臨著生活中的種種不便,也難以感受到世界的精彩紛呈,所以手語成了他們與人們的主要溝通橋樑。
但是手語看不懂、專業知識不夠、翻譯技巧不夠、體態不夠生動、手語翻譯在翻譯的過程中有存在幫助聾人回答問題的現象……這些暴露的問題都極大的影響了聽障人士在翻譯服務中的使用者體驗。據殘聯統計,我國專業的手語翻譯不足1萬人,難以滿足聽障人士參與社會生活時的溝通需求。這就需要一些App能夠新增將文字翻譯成手語的能力,在手語翻譯有限的情況下,滿足聽障人士的基本生活和學習的需要。
每年9月的第四個星期日是國際聾人日,為了關愛聽障人士,華為手語服務(SignPal Kit)提供手語生成能力,將文字實時翻譯為流暢、自然且符合聽障人士表達習慣的手語動作資料,能夠輕鬆構建資訊無障礙創新應用,構築無縫交流的世界。可用於家庭日常生活交流、教育學習、外出購物、媒體播報等場景。例如在教學場景中,可幫助聽障兒童學習閱讀,實現手語教學。
基於深度神經網路技術,實時將輸入文字翻譯為時序穩定、連貫且符合聽障人士表達習慣的手語動作資料。
手語生成不僅包括手部動作和身體姿態,還支援面部表情,包括開心、憤怒、傷心、疑惑等基本表情資訊,以及皺眉、鼓腮等多種非手控表情。
手語生成支援符合聽障人士表達習慣的口動。
手語服務能將輸入文字轉化為手語動作資料,可用於家庭日常生活交流、教育學習、外出購物、媒體播報等場景。運用手語動作及面部表情,手語服務精準流暢地傳遞講師的授課內容,讓處在無聲世界的特教學院聽障學生,也能實現無障礙網課學習。
自然流暢:手語動作流暢、自然,符合手語表達習慣。
詞彙覆蓋廣:按照中國國家通用標準有1萬多個詞彙,滿足多場景應用。
手語表達豐富:手語動作包括手部動作、身體姿態、面部表情和口型驅動。
在開始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 最新技術資訊~