AI语音识别神器Openai Whisper对中文的支持如何?

news2024/11/15 21:22:01

文章目录

  • 前言
  • 一、资料准备
  • 二、Whisper环境搭建
    • 第一步:安装whisper
    • 第二步:安装ffmpeg
  • 三、Whisper测试
  • 总结
    • 其他相关


前言

语音识别一直以来都是人工智能领域中一个不容忽视的技术,随着大模型时代的到来,这项技术也发生了质的变化。凡是在AI相关的讨论中,语音识别绝对是一个高热的话题。

目前开源的语音识别软件中,Openai Whisper绝对是霸主的存在,他在这方面的表现甚至超越了很多商用的产品,那么Openai Whisper对中文的支持如何呢,今天我们来简单测试一下。


一、资料准备

因为今天我们主要研究中文识别,所以这里我准备了一个比较有特色的音频。语音文件如下面所示:

  • 一年级-小青蛙(标准普通话):1.mp3(532K) 点击下载

内容如下:

河水清清天气晴,小小青蛙大眼睛。保护禾苗吃害虫,做了不少好事情。请你爱护小青蛙,好让禾苗不生病。

  • 三字经素读11(标准普通话):2.mp3(533K) 点击下载

内容如下:

读史者,考实录。通古今,若亲目。昔仲尼,师项橐。古圣贤,尚勤学。赵中令,读鲁论。彼既仕,学且勤。披蒲编,削竹简。彼无书,且知勉。头悬梁,锥刺股。彼不教,自勤苦。如囊萤,如映雪。家虽贫,学不辍。如负薪,如挂角。身虽劳,犹苦卓。

  • 一段粤语(和普通话接近度很低):3.mp3(306K) 点击下载

内容如下:

广式粤语和港式粤语作为粤语地区最有代表性的两种,到底有没有区别?那它们又是不是相通的呢?接下来,我就用它们当中比较独特的表达随机采访了几位路人,看下他们对广式粤语和港式粤语的态度是怎么样的呢?

  • 李伯伯的一段评书(四川话-和普通话接近度较高):4.mp3(1.4M) 点击下载

内容有点长,后面再看看识别情况

二、Whisper环境搭建

目前Openai Whisper是人气最高的开源的语音识别项目,项目地址:【https://github.com/openai/whisper】从名字就可以看出,它是有openai开源出来的,主要利用大模型来训练。支持99 种语言,特别是对英语的支持错误率很低。Whipser 推出了 tiny、base、small、medium、large 5 个档次的模型。

模型大小英语多语言所需显存相对速率
tiny39 Mtiny.entiny~1 GB~32x
base74 Mbase.enbase~1 GB~16x
small244 Msmall.ensmall~2 GB~6x
medium769 Mmedium.enmedium~5 GB~2x
large1550 MN/Alarge~10 GB1x

Whisper的错误率如下图所示:
在这里插入图片描述

下面我来看看如何安装,安装Whipser需要Python环境,所需要的环境如下:

  1. Python 3.9.9+
  2. pip 24.0+
  3. ffmpeg

首先检查电脑环境是否满足,如果已经满足,执行以下命令:

第一步:安装whisper

pip install -U openai-whisper

当看到有类似下面的输出表示安装成功:

Building wheels for collected packages: openai-whisper
  Building wheel for openai-whisper (pyproject.toml) ... done
  Created wheel for openai-whisper: filename=openai_whisper-20231117-py3-none-any.whl size=801358 sha256=9c53589d5935329764df742678ccdf63238285771a946ef7157912e71a623bb3
  Stored in directory: /root/.cache/pip/wheels/0f/3e/0a/683df97c94e7b6f0818ba78f0177ebe638c30d192bdd39f399
Successfully built openai-whisper

第二步:安装ffmpeg

安装ffmpeg,这里不一样的系统安装方式也不一样,下面给出了几种系统的安装方式:

# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg

# on Arch Linux
sudo pacman -S ffmpeg

# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg

# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg

# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg

如果你是centos,在centos7上安装ffmpeg还需要多几个步骤,具体如下:
导入Nux Dextop仓库:

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

安装

sudo yum update -y
sudo yum install ffmpeg -y

安装成功后验证ffmpeg

ffmpeg -help

三、Whisper测试

安装成功后,我们可以直接在控制台使用:

whisper --help 

如果我们要进行识别操作,具体命令如下:

whisper audio.mp3 --命令参数

常用参数说明:

–task

指定转录方式,默认使用 --task transcribe 转录模式,–task translate 则为翻译模式,目前只支持英文。

–model

指定使用模型,默认使用 --model small,Whisper 还有英文专用模型,就是在名称后加上 .en,这样速度更快。默认采用base

–language

指定转录语言,默认会截取 30 秒来判断语种,但最好指定为某种语言,比如指定中文是 --language Chinese。

–device

指定硬件加速,默认使用 auto 自动选择,–device cuda 则为显卡,cpu 就是 CPU, mps 为苹果 M1 芯片。

output_format

识别结果输出格式(txt,vtt,srt,tsv,json,all),默认为:all

output_dir

识别结果输出目录

除了在控制台直接使用外,也可以在Python中使用,Python的示例代码如下:

# coding=utf-8

import whisper

if __name__ == '__main__':
    model = whisper.load_model("tiny")

    audio = whisper.load_audio("1.mp3")
    audio = whisper.pad_or_trim(audio)
    
    mel = whisper.log_mel_spectrogram(audio).to(model.device)

    _, probs = model.detect_language(mel)

    options = whisper.DecodingOptions()
    result = whisper.decode(model, mel, options)

    print(result.text)

当然也可以直接在控制台来测试,这里我整理了测试的结果如下图:
在这里插入图片描述
这里我是直接输出的txt格式,如果输出vtt格式,可以看到响应的时间点,类似下面:
在这里插入图片描述

这里我编写了一个自动化测试的shell脚本,方便大家来做相关测试:

#!/bin/sh

suffixes=("mp3")

models=("tiny" "base" "small" "medium" "large")

# models=("tiny" "base")

find_audio(){
  suffix=$1
  for file in ./*.$suffix; do
      if [ -f "$file" ]; then
        txt_rs=$(basename "$file")
        dir=$(basename "$file" | cut -d "." -f 1)
        for model in "${models[@]}"; do
          do_whisper $file $dir $model
        done
      fi
  done
}
do_whisper(){
  start_time=$(date +%s)
  whisper $1 --language Chinese --output_dir $2_$3 --output_format txt --model=$3
  end_time=$(date +%s)
  time_sec=$(($((end_time))-$((start_time))))
  txt="(耗时:"$time_sec"秒)"
  rs_file=$2_$3/$2.txt
  echo "$txt" >> $rs_file
}
do_report(){
  models_strs=$(printf ",%s" "${models[@]}")
  models_strs=${models_strs:1}

cat > report.csv << EOF
音频,$models_strs
EOF
  suffix=$1
  for file in ./*.$suffix; do
      if [ -f "$file" ]; then
        txt_rs=$(basename "$file")
        dir=$(basename "$file" | cut -d "." -f 1)
        for model in "${models[@]}"; do
          rs_whisper_file=$dir"_"$model/$dir.txt
          rs_whisper_file_txt=`cat $rs_whisper_file`
          rs_whisper_file_txt=$(echo "$rs_whisper_file_txt" | tr -d '\r')
          rs_whisper_file_txt=$(echo "$rs_whisper_file_txt" | tr -d '\n')
          rs_whisper_file_txt=$(echo "$rs_whisper_file_txt" | tr -d '\r\n')
          rs_whisper_file_txt='"'$rs_whisper_file_txt'"'
          txt_rs=$txt_rs","$rs_whisper_file_txt
        done
        echo "$txt_rs" >> report.csv
      fi
  done
}

for suffix in "${suffixes[@]}"; do
  find_audio ${suffix}
done

for suffix in "${suffixes[@]}"; do
  do_report ${suffix}
done

大家可以修改里面的相关参数来自己做测试。


总结

从上面的测试可以看出,对标准的普通话来说,识别已经相当成功了,同时最让我惊讶的是,他对粤语的识别竟然错误率这么低,基本上是翻译了过来。四川话因为发音比较接近普通话,但是有些地方词语差异还是很大,所以识别的时候错误率还是很高的。

总的来说,作为开源产品,whisper对中文的支持已经相当好了,甚至超越了一些国内商用的产品,我将这段粤语在几个大厂的平台上去测试了一下,大部分是识别不出来的,大家可以用我的脚本测试一下更多的方言或者不同情况的下的语音。

如果有GPU设备的可以尝试一下GPU设备下效果如何?

Openai Whisper的语音更像是大力出奇迹,利用大模型训练,涵盖了大部分的语言。同时也颠覆了传统的语音识别技术。相信很快就会有更完美的模型出来。我查看了whisper的模型下载逻辑,目前好像已经有:large-v1,large-v2,large-v3了,但是由于模型较大,我没得测试环境,大家可以自行去试试。模型下载可以源码位置:python3.12/site-packages/whisper/init.py

其他相关

如果大家觉得自己搭建环境或者使用脚本太复杂,可以试试Whisper相关的图形界面,这里给大家介绍两款图形工具:

WhisperDesktop

下载地址:https://github.com/Const-me/Whisper

Buzz

下载地址:https://github.com/chidiwilliams/buzz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决MAC电脑SVN Android studio不能提交.so文件相关

目录 前言 确认问题原因 修改 SVN 配置文件 验证配置是否生效 其他注意事项 总结 前言 在使用 macOS 进行开发时&#xff0c;可能会遇到通过 SVN 在 Android Studio 中无法提交 .so 文件的问题。这通常是由于 SVN 配置文件中的 global-ignores 设置导致的&#xff0c;…

比特币牛市将至背后

作者&#xff1a;Arthur Hayes 编译&#xff1a;Liam 「此处所表达的任何观点均为作者个人意见&#xff0c;不应作为投资决策依据&#xff0c;也不应被视为参与投资交易的推荐或建议。」 我打破常规&#xff0c;前往南半球滑雪两周&#xff0c;为北半球的暑假画上圆满的句号。我…

03. SpringBoot 项目创建

接下来我们将要完成一个基础的 Springboot 项目的创建&#xff0c;并且将项目上传到 Gitee 1. 查看官网&#xff0c;选择版本 学习任何一门技术&#xff0c;一定要学会从官网了解一手信息&#xff0c;无论是哪个博主的博客都是有时效性的&#xff0c;我们要掌握这样的习惯&…

Runtime Asset Database 运行时资产数据库

运行时资产数据库是一个库,旨在简化Unity应用程序中运行时保存和加载子系统的实现。此库复制并扩展了Unity编辑器中常见的预制件、预制件变体和资源的概念,使其在运行时比以往任何时候都更容易管理和操纵游戏资源,并在运行时动态实现与Unity编辑器类似的工作流。 Unity开发人…

晟鑫商会与家盛资本携手合作,共创金融科技新篇章

在数字化浪潮的推动下,金融科技正成为全球经济发展的新引擎。近日,晟鑫商会与家盛资本宣布达成战略合作伙伴关系,旨在通过创新合作,共同开拓市场新机遇,促进双方在数字经济领域的深入发展。两家机构的联合预示着在金融科技领域将开启一段新的旅程。 晟鑫商会,作为互联网商业合作…

做好价格监测这些点要注意

品牌在进行数据监测时&#xff0c;首要关注点在于数据本身的准确率与覆盖率&#xff0c;而在价格监测方面亦是如此。品牌需高度关注电商价格监测系统输出的价格、促销信息、销量等数据。一旦促销信息出现不准确的情况&#xff0c;到手价必然会受到影响&#xff0c;进而对后端治…

USB PHY——ULPI

ULPI协议的全称是UTMI Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。 ULPI是在UTMI的基础上封装了一层。 ULPI需要读写寄存器&#xff0c;而UTMI只需直接拉高或拉低信号线。 从这张图可以看出 ULPI 是在 UTMI level3 再往上一层 外设参考设计

ssm面向企事业单位的项目申报小程序论文源码调试讲解

2 系统实现的技术支持 2.1微信开发者工具 在传统web浏览器中&#xff0c;在加载htm15页面时先加载视图层的html和css&#xff0c;后加载逻辑层的java script&#xff0c;然后返回数据并在浏览器中展示页面。而微信开发者工具的系统层是基于Native System的&#xff0c;视图层和…

COMP9315-week2-lecture1

COMP9315 19T2 Week 2 Lecture 1_哔哩哔哩_bilibili C:\python\COMP9315-master\19T2\Lectures\weel02.pdf COMP9315 24T1 - Course Notes (unsw.edu.au) 前面三分之一时间讲week1的练习题&#xff0c;是一个存储过程 COMP9315-master\19T2\Lecture Exercises\week01\ex05\…

AcWing859. Kruskal算法求最小生成树

一定要看这个链接的讲解视频&#xff1a;强烈推荐&#xff01;&#xff01;&#xff01;【图-最小生成树-Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法】 文章目录 1.题目2.Kruskal基本思想&#xff1a;3.逐行解释代码&#xff1a; 1.题目 2.Kruskal基本思想&#xff1a; Krus…

sql-labs46-50通关攻略

第46关 一.查询数据库 http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)--http://172.16.1.142/Less-46/?sort1%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)-- 二.查表 http://172.16.1.142/Les…

Eureka:Spring Cloud中的服务注册与发现如何实现?

Eureka&#xff1a;Spring Cloud中的服务注册与发现如何实现&#xff1f; 1、什么是服务注册与发现&#xff1f;2、Eureka的工作原理3、Eureka的优势 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在微服务架构的浪潮中&#xff0c;服务注…

谷歌的 GameNGen:无需游戏引擎,人工智能模拟 “毁灭战士“,开辟新天地

谷歌公司的研究人员创建了一个神经网络&#xff0c;可以在不使用传统游戏引擎的情况下生成经典射击游戏《毁灭战士》的实时游戏&#xff0c;从而实现了人工智能领域的一个重要里程碑。这个名为 GameNGen 的系统标志着人工智能向前迈出了重要一步&#xff0c;它能在单芯片上以每…

ffmpeg教程及加速视频转码

ffmpeg教程及加速视频转码 1、ffmpeg简介&#xff1a; ffmpeg来自MPEG视频编码标准。 是一套可以用来记录&#xff0c;转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 可以轻易的实现多种视频格式之间的相互转换。 2、基础知识&#xff1a; 容器、文件…

2d像素游戏基本架构

目录 2D像素游戏的基本架构通常包括以下几个关键部分 Unity和虚幻引擎在2D游戏开发中的性能比较 Unity的2D工具设计复杂的地图和场景 创建和管理地图资源&#xff1a; 使用TileMap工具&#xff1a; 构建复杂场景&#xff1a; 添加碰撞体和物理效果&#xff1a; 优化和…

密码访问单页自定义跳转页面源码

源码介绍 密码访问单页自定义跳转页面源码&#xff0c;密码访问单页自定义跳转页面&#xff0c;修改了的密码访问单页&#xff0c;添加了js自定义密码跳转页面。需要正确输入密码才能跳转目标网址。 源码截图 源码下载 密码访问单页自定义跳转页面源码

区分wps还是office创建的文档,word、ppt和excel

手动区分 文档->右键->属性 代码实现 namespace WpsAndOfficeDifferent {internal class Program{static void Main(string[] args){string root System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase ?? "";#region 区分office和wps创建…

SELF-INSTRUCT: Aligning Language Modelswith Self-Generated Instructions 学习

指令微调就是要训练模型执行用户的要求的能力。 文章首先说“指令微调”数据集经常是人工生成&#xff0c;有数量少等缺点。文章提供了一个让语言模型自己生成指令微调数据&#xff0c;自己学习的方法。首先会让一个语言模型自己生成要求&#xff0c;输入和输出&#xff0c;然…

【SpringBoot】电脑商城-09-默认收获地址和删除收货地址

默认收货地址 1 默认收货地址-持久层 1.1 规划需要执行的SQL语句 1.将某用户的所有收货地址设置为非默认地址&#xff08;是否默认&#xff1a;0-不默认&#xff0c;1-默认&#xff09;。 update t_address set is_default0 where uid?2.将某用户指定的收货地址设置为默认…

108页PPT分享:华为流程体系及实施方法最佳实践

PPT下载链接见文末~ 华为的流程体系、流程框架及实施方法是一个复杂而精细的系统&#xff0c;旨在确保公司运作的高效性和竞争力。以下是对这些方面的详细描述&#xff1a; 一、华为的流程体系 华为的流程体系是一套全面的管理体系&#xff0c;它涵盖了企业所有的活动&#…