合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)

简介: 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)


基于ARM语音识别的智能家居系统

我们上一篇,我们实现在Linux系统下编译程序,我们首先通过两个小练习来熟悉一下如何去编译。今天,我们来介绍一下LCD屏幕基本使用。

一、LCD屏幕基本使用

如何使用LCD屏幕?

   1、打开开发板LCD设备驱动文件。  (/dev/fb0)

   2、准备颜色数据。

   3、写入颜色像素点数据。

   4、关闭设备文件。

示例代码:

#include <stdio.h> 
#include <sys/types.h>  //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>    //write()
 
int main()  
{
  //1、打开开发板LCD设备驱动文件。  (/dev/fb0)
  int lcd_fd = open("/dev/fb0", O_RDWR);
  if(lcd_fd == -1)
  {
    perror("open lcd_fd failed!");  //通过错误码打印错误信息
    return -1;   //程序非正常结束
  }
  
  //2、准备颜色数据。
  int buf[1024*600] = {0};        //像素数据缓冲区
  // A R G B :  0 255 0 0  -----> 0x00FF0000;
  int R = 0x00FF0000;
  
  int i;
  for(i = 0; i<1024*600; i++)
  {
    buf[i] =  R;
  }
  
  //3、写入颜色像素点数据。
  int w_size = write(lcd_fd, buf, 1024*600*4);
  
  //4、关闭设备文件。
  close(lcd_fd);
 
  return 0;
}

二、开发板运行程序

1、在Ubuntu平台上使用交叉编译器arm-linux-gcc 编译程序。

2、下载程序到开发板。

3、给予权限,运行程序。

三、界面显示(bmp图片)

bmp:BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式。


它是用位映射存储的方式的图片格式,图像数据中的RGB数据直接可以使用。

1、图片准备

2、显示bmp图片

1、打开开发板LCD设备驱动文件。  (/dev/fb0)

2、打开bmp图片文件。

3、读取bmp图片像素颜色数据。

4、写入颜色像素点数据到LCD。

5、关闭设备关闭文件。

头文件:

   #include <unistd.h>

函数原型:

   ssize_t read(int fd, void *buf, size_t count);

   从文件描述符fd指代的文件中,读取count字节数据存入buf指向缓冲区中。

参数列表:

   int fd:读取的目标文件的文件描述符。

   void *buf:存储读到的数据的内存缓冲区。

   size_t count:要读取的字节数。

返回值:

   成功: 成功读取的字节个数。

   失败: -1,并且errno被设置。

示例代码:

#include <stdio.h> 
#include <sys/types.h>  //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>    //write()
 
int showBmp(char *bmp_path)
{
  //1、打开开发板LCD设备驱动文件。  (/dev/fb0)
  int lcd_fd = open("/dev/fb0", O_RDWR);
  if(lcd_fd == -1)
  {
    perror("open lcd failed!");  //通过错误码打印错误信息
    return -1;   //程序非正常结束
  }
  
  //2、打开bmp图片文件。
  int bmp_fd = open(bmp_path, O_RDWR);
  if(bmp_fd == -1)
  {
    perror("open bmp failed!");  //通过错误码打印错误信息
    return -1;   //程序非正常结束
  }
  
  //3、读取bmp图片像素颜色数据。
  //文件偏移量(光标),从文件开始位置偏移54字节,去除无效数据。
  char buf[54] = {0};
  read(bmp_fd, buf, 54);
    
  char bmp_buf[1024*600*3] = {0};
  read(bmp_fd, bmp_buf, 1024*600*3);
  
  //3.1数据处理
  //将3字节的bgr 的bmp图像像素点数据处理为 lcd 屏幕所需要的 argb像素数据
  int lcd_buf[1024*600] = {0};  //lcd 像素数据缓冲区
  
  int i, j = 0;
  for(i = 0; i<1024*600; i++, j+=3)
  {
    //  ARGB        b         g         r       a
    lcd_buf[i] = bmp_buf[0+j]<<0 | bmp_buf[1+j]<<8 | bmp_buf[2+j]<<16 | 0x00<<24;
  }
  
  //3.2 图片上下翻转
  int show_buf[1024*600] = {0};  //lcd 像素数据缓冲区
  int x, y;
  for(y = 0; y<600; y++)
  {
    for(x = 0; x<1024; x++)
    {
      show_buf[y*1024+x] = lcd_buf[(599-y)*1024+x];
    }
  }
  
  //4、写入颜色像素点数据到LCD。
  write(lcd_fd, show_buf, 1024*600*4);
  
  //5、关闭设备,关闭文件。
  close(lcd_fd);
  close(bmp_fd);
  
  return 0;
}
 
int main()  
{
  showBmp("./1.bmp");
 
  return 0;
}

四、音视频播放:

mplayer 是一款开源的多媒体播放器,可以用来播放音视频,mplayer 自带多种格式的解码器,不需要我们再另外安装。开发板并未安装配置mplayer,需要自行移植。

直接移植我提供的mplayer:

文件使用说明:

alsa-lib--lib.tar.gz:

此为alsa-lib的编译结果 lib库文件压缩包,先把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr alsa-lib--lib.tar.gz

解压,并将此目录下的所有库文件拷贝到开发板的/usr/lib 目录下。

解压命令为: tar -zxvf alsa-lib--lib.tar.gz
进入解压目录:  cd lib/ 
拷贝到/usr/lib目录下: cp ./* /usr/lib -r

arm-alsa.tar.gz:

        此为alsa-lib编译出的配置文件压缩包,把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr arm-alsa.tar.gz

解压后,将此目录下所有文件拷贝开发板的 /usr/share/arm-alsa 目录下。(需要先在开发板根文件系统中也创建一个/usr/share/arm-alsa 目录)

  1. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p
  2. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p
  3. 拷贝到/usr/share/arm-alsa目录:    cp ./arm-alsa/* /usr/share/arm-alsa/ -r

zlib--lib.tar.gz:

此文件为zlib的编译结果lib库文件压缩包,先把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr zlib--lib.tar.gz

解压后,将此目录下的 lib 库文件拷贝到开发板根文件系统的/usr/lib 目录下。

解压命令为: tar -zxvf zlib--lib.tar.gz

拷贝到/usr/lib目录:

   cd lib/            //进入解压得到的lib目录

   cp ./* /usr/lib -r    //拷贝

mplayer:

此为mplayer的可执行文件,这就是我们需要的 mplayer播放器!将其拷贝到开发板根文件系统的/bin 目录下,并给予执行权限即可。

cd /usr/bin/

tftp下载命令为: tftp 192.168.1.100 -gr mplayer

给予执行权限: chmod +x mplayer

使用:

   mplayer是一个命令行音视频播放工具。

代码方式:

system函数

#include <stdlib.h>

int system(const char *command);

command:命令

前台播放,可以直接停掉,后台播放,只能通过发送信号来停止,暂停,继续

killall -19 mplayer        暂停

killall -18 mplayer        继续

killall -9 mplayer        杀死进程

#include <stdlib.h>
 
int main(int argc, char const *argv[])
{
 
  system("mplayer 1.mp3 </dev/null &");
  
  return 0;
}


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
3月前
|
算法 索引 智能硬件
智能家居系统
【9月更文挑战第05天】
58 5
|
4月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
948 3
|
27天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
54 5
|
2月前
|
传感器 监控 算法
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
119 6
|
2月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
数据处理
基于ARM的嵌入式原理与应用:ALU的功能与特点
基于ARM的嵌入式原理与应用:ALU的功能与特点
125 0
|
3月前
|
传感器 监控 智能硬件
我们可以构想一个智能家居场景,并通过智能家居系统来执行一系列操作
具体化到一个假设的场景或功能中,我们可以构想一个智能家居场景,并通过智能家居系统来执行一系列操作。这里,我将以“智能灯光控制”和“智能安防系统”为例,说明如何通过智能家居系统来操作这些设备。
|
3月前
|
数据安全/隐私保护 智能硬件
智能家居系统入门指南
随着科技的飞速发展,智能家居系统已不再是遥不可及的梦想。本文将带你走进智能生活的世界,从基础概念到实用设备,再到搭建步骤和常见问题解答,全方位解析如何打造一个舒适、便捷、高效的智能居家环境。让我们一起探索,如何通过简单的操作,实现家居生活的智能化升级。
|
4月前
|
传感器 监控 安全
智能家居系统:物联网技术的应用与挑战
在这篇文章中,我们将深入探讨智能家居系统背后的技术原理、实际应用以及面临的主要挑战。通过分析物联网技术如何实现家居自动化,并结合具体案例,本文旨在提供对智能家居发展现状和未来趋势的全面理解。
|
4月前
|
机器学习/深度学习 人工智能 安全
智能家居系统的未来展望
【8月更文挑战第29天】 随着科技的飞速发展,智能家居系统已从简单的遥控操作进化到能够学习用户习惯、自主决策的智能平台。本文将探讨智能家居系统的最新技术趋势、面临的挑战以及未来可能达到的新高度。通过分析当前技术进展和市场动态,我们将一窥智能家居如何塑造更加便捷、高效和可持续的生活方式。
64 4