0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

手语翻译系统系列之使用旭日X3派实时识别播报手语

地瓜机器人 ? 2022-12-20 09:24 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、准备工作

硬件部分:旭日X3派,USB免驱摄像头,电源适配器,烧录Ubuntu系统的SD卡,USB扬声器,显示屏(或者VNC/SSH远程连接)

软件部分:Thonny IDE集成开发环境

1.jfif

首先,关于Ubuntu系统镜像的烧录官方有详细的教程,这里不再赘述,我自己是选择桌面Ubuntu 20.04,大家选择最新的即可。如果是第一次进入系统,记得使用命令行更新一下软件源等,使用快捷键ctrl+alt+T打开命令行,输入以下命令:

# 更新软件源 apt-get update # 更新升级所有软件 apt-get upgrade

接下来就可以开始安装Thonny IDE,作为一款轻量化的python集成开发环境,对新手十分友好,简单易上手,后续安装各种python依赖库也相当方便。安装方式Thonny官方网址提供了三种Linux的命令行下载方式,大家可以根据自己的情况进行选择。

flatpak install org.thonny.Thonny //Flatpak sudo apt install thonny //Debian,Raspbian,Ubuntu,Mintand others sudo dnf install thonny //FedoraFedora

耐心等待程序安装即可,如果中途出现异常大概率是网络不稳定导致,检查网络连接并再次运行命令行即可。由于Ubuntu系统不会自动生成快捷方式,所以安装成功后在命令行输入Thonny即可启动IDE。

重头戏来了,安装项目依赖库。启动Thonny IDE后,选择左上方工具>>管理包,根据附件中提供的程序开始安装python依赖库。过程可能会比较漫长,这取决于当前网络情况,还有部分库文件可能会出现下载失败的情况,请耐心多尝试几次。

2.jfif

import os import threading import cv2 import mediapipe as mp import time import torch as t from model import HandModel from tools.landmark_handle import landmark_handle from tools.draw_landmarks import draw_landmarks from tools.draw_bounding_rect import draw_bounding_rect import numpy as np from tools.draw_rect_text import draw_rect_txt from PIL import Image, ImageFont, ImageDraw import pyttsx3 # 大家可以根据这个来添加项目依赖

(PS.cv2是opencv-python的缩写,在import的时候采用这种缩写,但添加库的时候不能直接搜索cv2,而是要打全称opencv-python。)

二、实现原理

智能手语识别系统共包括语音播报模块,模型训练模块,手势识别模块,文字转写模块,一共可识别播报“也”、“吸引”、“美丽的”、 “相信”、“的”、“怀疑”、“梦想”、“表达”、“眼睛”、 “给”、“很难”、“有”、“许多”、“我”、“方法”、“不”, “只有”、“超过”、“请”、“放”、“说”、“微笑”、“星星”、“十分”、“看”、“你”等27个国家通用手语。

model_path = 'checkpoints/model_test1.pth' label = ["也", "吸引", "美丽的", "相信", "的", "怀疑", "梦想", "表达", "眼睛", "给", "很难","有","许多","我", "方法", "不", "只有", "结束", "请", "放", "说", "微信", "星星", "十分","看","你"]

语音播报模块采用pyttsx3第三方库,它是一个用于文字转语音的第三方python库,还可实现对音量,声源,语速的调整,可脱机工作,兼容python2和python3

def run(): str_show = this_label star_date = open("2.txt", "w", encoding="utf-8") star_date.write(str_show) star_date.close() star_data = open("2.txt", "r", encoding="utf-8") star_read = star_data.readlines() star_data.close() file = "2.txt" res = open(file, encoding="utf-8").read() engine = pyttsx3.init() content = res engine.say(content) engine.runAndWait() time.sleep(1)

模型训练模块采用torch第三方库,torch广泛运用深度学习。它能够帮助我们构建深度学习项目,强调灵活性,而且允许使用我们习惯的python表示方法来表达深度学习模型。算力高,易学习,比较容易入门。

# 模型保存地址 targetX = [0 for xx in range(label_num)] target = [] for xx in range(label_num): target_this = copy.deepcopy(targetX) target_this[xx] = 1 target.append(target_this) # 独热码 lr = 1e-3 # learning rate model_saved = 'checkpoints/model' # 模型定义 model = HandModel() optimizer = t.optim.Adam(model.parameters(), lr=lr) criterion = nn.CrossEntropyLoss() loss_meter = meter.AverageValueMeter() epochs = 40 for epoch in range(epochs): print("epoch:" + str(epoch)) loss_meter.reset() count = 0 allnum = 1 for i in range(len(label)): data = np.load('./npz_files/' + label[i] + ".npz", allow_pickle=True) data = data['data'] for j in range(len(data)): xdata = t.tensor(data[j]) optimizer.zero_grad() this_target = t.tensor(target[i]).float() input_, this_target = Variable(xdata), Variable(this_target) output = model(input_) outLabel = label[output.tolist().index(max(output))] targetIndex = target[i].index(1) targetLabel = label[targetIndex] if targetLabel == outLabel: count += 1 allnum += 1 output = t.unsqueeze(output, 0) this_target = t.unsqueeze(this_target, 0) loss = criterion(output, this_target) loss.backward() optimizer.step() loss_meter.add(loss.data) print("correct_rate:", str(count / allnum)) t.save(model.state_dict(), '%s_%s.pth' % (model_saved, epoch))

准备好数据集就可以开始进行模型训练,模型推荐在电脑上进行训练,我自己的电脑是win10的系统,用的pycharm IDE的集成开发环境,如果只是想体验一下的话也可以直接使用附件里训练好的模型。

3.png

手势识别模块采用Mediapipe和OpenCV库对人手进行特征提取与骨骼绑定,旭日X3派根据摄像头捕捉的关键帧的进行特征提取,基于PyTorch模型进行推理,并将推理翻译结果显示到屏幕上,同时将翻译结果以txt文件形式进行保存和API接入后上传到百度语音开发平台,由平台进行人声的合成,然后将生成的mp3文件下载到旭日X3派终端用扬声器进行播放,实现了为语言障碍人士发声,为“碍”发声。

# 百度大脑AI开放平台API接入实现语音合成的示例 def fetch_token(): print("fetch token begin") params = {'grant_type': 'client_credentials', 'client_id': API_KEY, 'client_secret': SECRET_KEY} post_data = urlencode(params) if (IS_PY3): post_data = post_data.encode('utf-8') req = Request(TOKEN_URL, post_data) try: f = urlopen(req, timeout=5) result_str = f.read() except URLError as err: print('token http response http code : ' + str(err.code)) result_str = err.read() if (IS_PY3): result_str = result_str.decode() print(result_str) result = json.loads(result_str) print(result) if ('access_token' in result.keys() and 'scope' in result.keys()): if not SCOPE in result['scope'].split(' '): raise DemoError('scope is not correct') print('SUCCESS WITH TOKEN: %s ; EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in'])) return result['access_token'] else: raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response') """ TOKEN end """ if __name__ == '__main__': token = fetch_token() tex = quote_plus(TEXT) # 此处TEXT需要两次urlencode print(tex) params = {'tok': token, 'tex': tex, 'per': PER, 'spd': SPD, 'pit': PIT, 'vol': VOL, 'aue': AUE, 'cuid': CUID, 'lan': 'zh', 'ctp': 1} # lan ctp 固定参数 data = urlencode(params) print('test on Web Browser' + TTS_URL + '?' + data) req = Request(TTS_URL, data.encode('utf-8')) has_error = False try: f = urlopen(req) result_str = f.read() headers = dict((name.lower(), value) for name, value in f.headers.items()) has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0) except URLError as err: print('asr http response http code : ' + str(err.code)) result_str = err.read() has_error = True save_file = "error.txt" if has_error else 'result.' + FORMAT with open(save_file, 'wb') as of: of.write(result_str) if has_error: if (IS_PY3): result_str = str(result_str, 'utf-8') print("tts api error:" + result_str) print("result saved as :" + save_file) # 骨架绑定的可视化 draw_landmarks(frame, hand_local) brect = draw_bounding_rect(frame, hand_local)

4.png

文字转写模块通过旭日X3派外接麦克风进行收音,API接入后将录制的mp3文件上传,通过云端语音平台实时转写为文字后显示到旭日X3派终端的屏幕上。最后利用python的多线程将手势识别,语音播报,文字转写同时运行,至此,实现了聋哑人士与普通人的双向无障碍沟通交流。

三、效果展示

得益于旭日X3派的强大算力,系统对手势的识别展示并播报十分灵敏,画面流程度也得到保障(温馨提示:长时间运行请准备小风扇给开发板降温哦)。

5.jfif


6.jfif

四、性能测试

系统测试方案:将训练好模型导入旭日X3派中,接入电源后等待初始化完成,由小组成员们随机在镜头前做出27个国家通用手语,将翻译终端识别播报的准确率记录,同时将识别的总时长记录收集。

测试数据如下:

7.jfif


8.jfif

结果分析:实验数据表明,27个国家通用手语随机检验的识别准确率均在90%以上,单次执行时间也均在1秒之内。

结论:手语翻译终端有很高的实时性,充分保障聋哑残障人士的无障碍沟通交流。

本文转自地平线开发者社区
原作者:鑫辰大海王

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5158

    文章

    19735

    浏览量

    318720
  • python
    +关注

    关注

    56

    文章

    4831

    浏览量

    87441
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在树莓5上使用YOLO进行物体和动物识别-入门指南

    大家好,接下来会为大家开一个树莓5和YOLO的专题。内容包括四个部分:在树莓5上使用YOLO进行物体和动物识别-入门指南在树莓5上开启YOLO人体姿态估计
    的头像 发表于 07-17 17:16 ?289次阅读
    在树莓<b class='flag-5'>派</b>5上使用YOLO进行物体和动物<b class='flag-5'>识别</b>-入门指南

    树莓分类器:用树莓识别不同型号的树莓

    在本教程系列的第一部分中,您将学习如何使用树莓AI摄像头来检测不同的树莓型号。本系列由DavidPlowman创建,他是树莓工程师,专
    的头像 发表于 06-13 16:39 ?497次阅读
    树莓<b class='flag-5'>派</b>分类器:用树莓<b class='flag-5'>派</b><b class='flag-5'>识别</b>不同型号的树莓<b class='flag-5'>派</b>!

    韵乐Vinal X3/X5卡拉OK音频处理器调音软件简介

    韵乐Vinal X3/X5卡拉OK音频处理器调音软件软件简介韵乐Vinal X3/X5调音软件具有音箱处理器功能的卡拉ok效果器每个功能部分都独立可调且有相应的PC界面可直观调节易于操
    发表于 05-16 15:33 ?1次下载

    搭建树莓网络监控系统:顶级工具与技术终极指南!

    树莓网络监控系统是一种经济高效且功能多样的解决方案,可用于监控网络性能、流量及整体运行状况。借助树莓,我们可以搭建一个网络监控系统实时
    的头像 发表于 05-14 15:32 ?720次阅读
    搭建树莓<b class='flag-5'>派</b>网络监控<b class='flag-5'>系统</b>:顶级工具与技术终极指南!

    RDK X3 带飞的智能护理系统:让机器人秒变贴心小棉袄

    济往开来团队带着超燃黑科技来了!基于 RDK X3 开发的老年智能监控系统,跌倒秒报警、手势一键呼叫、还能陪唠嗑!最绝的是 开源代码直接甩链接 ,技术党狂喜!
    的头像 发表于 05-09 21:53 ?312次阅读
    RDK <b class='flag-5'>X3</b> 带飞的智能护理<b class='flag-5'>系统</b>:让机器人秒变贴心小棉袄

    车牌识别新花样:树莓打造智能车牌监控系统

    树莓是创客们打造家庭安防系统的热门选,这得益于其具备运用人工智能(AI)的能力。AI系统识别潜在威胁,在此情境下,还能
    的头像 发表于 04-26 09:03 ?291次阅读
    车牌<b class='flag-5'>识别</b>新花样:树莓<b class='flag-5'>派</b>打造智能车牌监控<b class='flag-5'>系统</b>!

    HMC-XTB110 无源x3倍频器,24-30GHz输入技术手册

    HMC-XTB110是一款单芯片x3无源倍频器,采用GaAs肖特基二极管技术,具有低转换损耗和高度Fo隔离。 这款宽带x3倍频器无需直流电源,适用于低频率的3倍频率比直接生成高频率更加经济的大规模
    的头像 发表于 04-16 16:15 ?380次阅读
    HMC-XTB110 无源<b class='flag-5'>x3</b>倍频器,24-30GHz输入技术手册

    百度AI手语数字人助力听障人士“听见”声音

    近几年,百度先后与天津理工大学、鲸言科技合作,共同研发出百度智能云曦灵AI手语平台与双向手语翻译机,让手语的“声音”,被更多人听见。
    的头像 发表于 02-21 11:29 ?924次阅读

    “你的钱来了”:财神1号,RDK X3驱动,自动捡钱不手软!

    采用 RDK X3 打造无情的捡钱机器,每天8亿纸币掉在路面上,财神1号帮你捡个够!
    的头像 发表于 02-18 11:15 ?641次阅读
    “你的钱来了”:财神1号,RDK <b class='flag-5'>X3</b>驱动,自动捡钱不手软!

    全平台搭载旭日5!科沃斯GOAT智能割草机器人全新系列正式开售

    科沃斯GOAT全新系列产品全平台搭载地瓜机器人全新推出的旭日5智能计算芯片
    的头像 发表于 02-18 11:03 ?870次阅读
    全平台搭载<b class='flag-5'>旭日</b>5!科沃斯GOAT智能割草机器人全新<b class='flag-5'>系列</b>正式开售

    AI助力实时翻译耳机

    是一种能够实时将一种语言翻译成另一种语言的耳机设备。它通常由一个耳机和一个配套的应用程序组成,用户可以通过应用程序选择需要翻译的语言,并通过耳机听到翻译结果。 2
    的头像 发表于 01-24 11:14 ?1822次阅读
    AI助力<b class='flag-5'>实时</b><b class='flag-5'>翻译</b>耳机

    Cadence推出Palladium Z3与Protium X3系统

    楷登电子(Cadence)公司近日宣布,正式推出新一代Cadence? Palladium? Z3 Emulation和Protium? X3 FPGA原型验证系统。这一组合标志着数字孪生
    的头像 发表于 01-07 13:48 ?1144次阅读

    HarmonyOS NEXT 应用开发练习:AI智能语音播报

    (Text-To-Speech,文本转语音)技术将文本转换为语音进行播报。 当然除了基本的文本输入和播报功能外,我们还增加了语音识别的功能,允许用户通过语音输入要播报的文本。 还优化了
    发表于 01-06 15:33

    英飞凌AURIX? TC3x MCU系列新增FreeRTOS支持

    全球功率系统和物联网领域的半导体领军企业英飞凌科技股份公司,近日宣布其AURIX? TC3x微控制器(MCU)系列新增了对FreeRTOS的支持。这一举措标志着AURIX? TC3x
    的头像 发表于 12-11 14:06 ?858次阅读

    中山大学:基于定制裂纹设计的超灵敏透气水凝胶纤维应变传感器及无线手语识别应用

    和地域多样性可能会给不懂手语的人造成交流障碍。目前,各种识别人类手势的技术,包括视觉图像处理、肌电图和可穿戴应变传感器,在改善聋哑人群体的沟通方面发挥了重要作用。特别地,视觉图像处理在手语识别
    的头像 发表于 12-02 17:29 ?944次阅读
    中山大学:基于定制裂纹设计的超灵敏透气水凝胶纤维应变传感器及无线<b class='flag-5'>手语</b><b class='flag-5'>识别</b>应用