GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux

您所在的位置:网站首页 gec6818开发板 GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux

2023-03-14 09:29| 来源: 网络整理| 查看: 265

GEC6818开发板JPG图像显示 | 开发板实现录音一.GEC6818开发板JPG图像显示1.jpg图片特性2.如何解压缩jpg图片1.对jpegsrc.v8c.tar.gz进行arm移植2.进入~/jpeg-8c对jpeg库进行配置3.编译4.安装,将动态库存放到 /home/gec/armJPegLib5.清空编译记录6.自己查看下 /home/gec/armJPegLib目录下是否有4个目录7.将图片和程序下载到开发板运行即可二.开发板设置ip三.tftp使用四.运行程序显示图片的时候遇到以下问题五.禁用开发板开机自动执行原QT程序六.科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序六.开发板实现录音1.将alsa.tar.gz下载到开发板并解压到根目录2.设置alsa库环境变量3.生效该脚本文件4.查看环境变量有没有alsa库5.指定ALSA库的配置文件6.在开发板创建脚本 vi installAlsaNote.sh ,按i按键添加以下内容,然后按:wq退出7.修改脚本权限8.运行脚本,注意每次掉电后需要重新运行9.录音10.播放音频源码asr_offline_sample.cmyhead.hMakefile

一.GEC6818开发板JPG图像显示1.jpg图片特性

体积小,使用到数据结构里面的霍夫曼树(哈夫曼树)对数据进行压缩

2.如何解压缩jpg图片1.对jpegsrc.v8c.tar.gz进行arm移植

移植方式如下: 1.将jpegsrc.v8c.tar.gz解压缩到ubuntu ~

tar-zxvf jpegsrc.v8c.tar.gz -C ~ // -C 指定解压缩的位置2.进入~/jpeg-8c对jpeg库进行配置./configure --host=arm-linux --prefix=/home/gec/armJPegLib--host=arm-linux : 指定编译的环境,arm平台--prefix=/home/gec/armJPegLib : 指定动态库存放的路径3.编译make4.安装,将动态库存放到 /home/gec/armJPegLibmakeinstall5.清空编译记录make clean6.自己查看下 /home/gec/armJPegLib目录下是否有4个目录bin include lib share 7.将图片和程序下载到开发板运行即可二.开发板设置ip// 临时静态设置ip设置,每次都需要设置ifconfig eth0 192.168.24.xxx(自己分配的ip)// 永久ip设置 vi /etc/profile 设置ip ifconfig eth0 192.168.24.xxx(自己分配的ip) 参数如下: ifconfig lo 127.0.0.1 up ifconfig eth0 up ifconfig eth0 192.168.24.xxx 保存退出,重启开发板 // 自动获取ip(慎重使用) udhcpc三.tftp使用

1.从飞秋下载tftp工具,解压,打开tftp32.exe 2.点击浏览选择需要下载的文件所对应的目录 3.在开发板CRT软件,执行一下命令进行下载程序

tftp 192.168.1.xxx -g-r main(需要下载的程序)

解释:

192.168.1.xxx : 电脑主机ip,注意不是开发板的ip -g-r : 从电脑下载内容到开发板 -p-l : 将文件从开发板上传到电脑四.运行程序显示图片的时候遇到以下问题/main: error while loading shared libraries: libjpeg.so.8: cannot open shared object file: No such file or directory

将 libjpeg.so.8下载到开发板的/lib

tftp 192.168.1.xxx -g-r libjpeg.so.8cp libjpeg.so.8 /lib五.禁用开发板开机自动执行原QT程序vi /etc/profile将以下两行程序注释#cd /IOT#./iot &保存退出,重启开发板 reboot六.科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序

1.进入Linux_aitalk_exp1227_1398d7c6/asr_offline_sample/asr_offline_sample

2.sudo cp Linux_aitalk_exp1227_1398d7c6/libs/x64/libmsc.so /lib 只需要拷贝一遍即可

3.编译程序

./64_bitmake.sh

4.编译后生成的可执行程序存放在 Linux_aitalk_exp1227_1398d7c6/bin

5.进入 Linux_aitalk_exp1227_1398d7c6/bin执行asr_offline_sample程序

./asr_offline_sample

报错 ./asr_offline_sample: error while loading shared libraries: libmsc.so: cannot open shared object file: No such file or directory注意将

sudocp Linux_aitalk_exp1227_1398d7c6/libs/x64/libmsc.so /lib

然后重新执行程序即可

六.开发板实现录音/alsa/bin --> arecord 录音/alsa/bin --> aplay 播放

alsa库移植

1.将alsa.tar.gz下载到开发板并解压到根目录tftp 192.168.24.xxx -g-r alsa.tar.gz2.设置alsa库环境变量/etc/init.d/rcS 与 /etc/profile#最大的区别就是,添加完环境变量以后不需要重启开发板,只需要执行source /etc/init.d/rcS # 即可vi /etc/init.d/rcS #添加以下内容exportLD_LIBRARY_PATH=/alsa/lib:$LD_LIBRARY_PATHexportPATH=$PATH:/alsa/bin 3.生效该脚本文件source /etc/init.d/rcS 4.查看环境变量有没有alsa库env5.指定ALSA库的配置文件将/alsa/share/alsa/拷贝到/usr/share/,方法如下:cp /alsa/share/alsa/ /usr/share/ -r将/alsa拷贝到/home/gec/,方法如下:cp /alsa /home/gec/ -rf ---> 如果/home/gec不存在,则需要创建6.在开发板创建脚本 vi installAlsaNote.sh ,按i按键添加以下内容,然后按:wq退出mkdir /dev/sndcd /dev/sndmknod dsp c 143 mknod audio c 144mknod mixer c 140mknod controlC0 c 1160mknodseq c 1161mknod pcmC0D0c c 11624mknod pcmC0D0p c 11616mknod pcmC0D1c c 11625mknod pcmC0D1p c 11617mknod timer c 11633 7.修改脚本权限chmod777 installAlsaNote.sh8.运行脚本,注意每次掉电后需要重新运行./installAlsaNote.sh 9.录音

(注意录音的时候不需要接耳机,因为开发板自带有麦克风,麦克风的位置在耳机口后面)

arecord -d3-c1-r16000-twav-fS16_LE abc.wav-d, --duration=# interrupt after # seconds ---> 录音的秒数-c, --channels=# channels ---> 音轨-r, --rate=# sample rate ---> 采样频率-t, --file-type TYPE filetype(voc, wav, raw or au) ---> 封装的格式-f, --format=FORMAT sample format(case insensitive) ---> 量化位数abc.wav : 是生成的录音文件10.播放音频aplay abc.wavabc.wav : 是生成的录音文件源码asr_offline_sample.c#include#include#include#include#include#include#include#include/* superset of previous */#include#include#include#include#include#include#include"../../include/qisr.h"#include"../../include/msp_cmn.h"#include"../../include/msp_errors.h"#defineSAMPLE_RATE_16K(16000)#defineSAMPLE_RATE_8K(8000)#defineMAX_GRAMMARID_LEN(32)#defineMAX_PARAMS_LEN(1024)constchar* ASR_RES_PATH ="fo|res/asr/common.jet";//离线语法识别资源路径constchar* GRM_BUILD_PATH ="res/asr/GrmBuilld";//构建离线语法识别网络生成数据保存路径constchar* GRM_FILE ="call.bnf";//构建离线识别语法网络所用的语法文件constchar* LEX_NAME ="contact";//更新离线识别语法的contact槽(语法文件为此示例中使用的call.bnf)typedefstruct_UserData{ int build_fini;//标识语法构建是否完成 int update_fini;//标识更新词典是否完成 int errcode;//记录语法构建或更新词典回调错误码 char grammar_id[MAX_GRAMMARID_LEN];//保存语法构建返回的语法ID}UserData;constchar*get_audio_file(void);//选择进行离线语法识别的语音文件intbuild_grammar(UserData *udata);//构建离线识别语法网络intupdate_lexicon(UserData *udata);//更新离线识别语法词典intrun_asr(UserData *udata);//进行离线语法识别constchar*get_audio_file(void){ char key =0; while(key !=27)//按Esc则退出 { printf("请选择音频文件:\"); printf("1.打电话给丁伟\"); printf("2.打电话给黄辣椒\"); printf("3.打电话给奥巴马\"); key =getchar(); getchar(); switch(key) { case'1': printf("1.打电话给丁伟\"); return"wav/ddhgdw.pcm"; case'2': printf("2.打电话给黄辣椒\"); return"wav/ddhghlj.pcm"; case'3': printf("3.打电话给奥巴马\"); return"wav/ddhgabm.pcm"; default: continue; } } exit(0); returnNULL;}intbuild_grm_cb(int ecode,constchar*info,void*udata){ UserData *grm_data =(UserData *)udata; if(NULL!= grm_data){ grm_data->build_fini =1; grm_data->errcode = ecode; } if(MSP_SUCCESS == ecode &&NULL!= info){ printf("构建语法成功! 语法ID:%s\", info); if(NULL!= grm_data) snprintf(grm_data->grammar_id, MAX_GRAMMARID_LEN -1, info); } else printf("构建语法失败!%d\", ecode); return0;}intbuild_grammar(UserData *udata){ FILE *grm_file =NULL; char*grm_content =NULL; unsignedint grm_cnt_len =0; char grm_build_params[MAX_PARAMS_LEN]={NULL}; int ret =0; grm_file =fopen(GRM_FILE,"rb"); if(NULL== grm_file){ printf("打开\"%s\"文件失败![%s]\", GRM_FILE,strerror(errno)); return-1; } fseek(grm_file,0,SEEK_END); grm_cnt_len =ftell(grm_file); fseek(grm_file,0,SEEK_SET); grm_content =(char*)malloc(grm_cnt_len +1); if(NULL== grm_content) { printf("内存分配失败!\"); fclose(grm_file); grm_file =NULL; return-1; } fread((void*)grm_content,1, grm_cnt_len, grm_file); grm_content[grm_cnt_len]='\0'; fclose(grm_file); grm_file =NULL; snprintf(grm_build_params, MAX_PARAMS_LEN -1, "engine_type = local, \ asr_res_path = %s, sample_rate = %d, \ grm_build_path = %s, ", ASR_RES_PATH, SAMPLE_RATE_16K, GRM_BUILD_PATH ); ret =QISRBuildGrammar("bnf", grm_content, grm_cnt_len, grm_build_params, build_grm_cb, udata); free(grm_content); grm_content =NULL; return ret;}intupdate_lex_cb(int ecode,constchar*info,void*udata){ UserData *lex_data =(UserData *)udata; if(NULL!= lex_data){ lex_data->update_fini =1; lex_data->errcode = ecode; } if(MSP_SUCCESS == ecode) printf("更新词典成功!\"); else printf("更新词典失败!%d\", ecode); return0;}intupdate_lexicon(UserData *udata){ constchar*lex_content ="丁伟黄辣椒"; unsignedint lex_cnt_len =strlen(lex_content); char update_lex_params[MAX_PARAMS_LEN]={NULL}; snprintf(update_lex_params, MAX_PARAMS_LEN -1, "engine_type = local, text_encoding = UTF-8, \ asr_res_path = %s, sample_rate = %d, \ grm_build_path = %s, grammar_list = %s, ", ASR_RES_PATH, SAMPLE_RATE_16K, GRM_BUILD_PATH, udata->grammar_id); returnQISRUpdateLexicon(LEX_NAME, lex_content, lex_cnt_len, update_lex_params, update_lex_cb, udata);}int tcp_socket=0;int new_socket=0;voidinit_network(){ //1.初始化网络 tcp_socket =socket(AF_INET, SOCK_STREAM,0); //2.绑定服务器 //设置链接的服务器地址信息 structsockaddr_in addr; addr.sin_family = AF_INET;//IPV4 协议 addr.sin_port =htons(50000);//端口 addr.sin_addr.s_addr =inet_addr("192.168.24.35");//服务器的IP 地址 //解决端口复用 int on=1; setsockopt(tcp_socket,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); on=1; setsockopt(tcp_socket,SOL_SOCKET,SO_REUSEPORT,&on,sizeof(on)); //2.绑定服务器地址信息 int ret=bind(tcp_socket,(structsockaddr*)&addr,sizeof(addr)); if(ret


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3