pos機(jī)語音芯片

 新聞資訊2  |   2023-08-01 10:43  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)語音芯片,FastASR+FFmpeg的知識,也有很多人為大家解答關(guān)于pos機(jī)語音芯片的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機(jī)語音芯片

2、芯片銀行卡在POS機(jī)上怎么刷卡,能把步驟告訴我嗎

pos機(jī)語音芯片

一、音視頻處理基本梳理1.多媒體文件的理解1.1 結(jié)構(gòu)分析

多媒體文件本質(zhì)上可以理解為一個容器容器里有很多流每種流是由不同編碼器編碼的在眾多包中包含著多個幀(幀在音視頻的處理中是最小單位)

1.2 封裝格式

封裝格式(也叫容器) 就是將已經(jīng)編碼壓縮好的視頻流、音頻流及字幕流按照一定的方案放到一個文件中,便于播放軟件播放。一般來說,視頻文件的后綴就是它的封裝格式。封裝格式不一樣,后綴名也就不一樣(xxx.mp4 xxx.FLV)。

1.3 音視頻同步

Audio Master:同步視頻到音頻

Video Master: 同步音頻到視頻

External Clock Master: 同步音頻和視頻到外部時鐘

1.4 音視頻錄制原理

1.5 音視頻播放原理

1.6 音視頻播放原理

2.音視頻的基礎(chǔ)概念2.1 聲音

對自然界的聲音進(jìn)行采樣,采樣就是在時間軸上對信號進(jìn)行數(shù)字化信號,即按照一定時間間隔t在模擬信號x(t)上逐點采取其瞬時值。采樣率越高,聲音的還原程度越高,質(zhì)量就越好,同時占用空間會變大。

量化:用有限個幅度近似原來連續(xù)的幅度值把模擬信號的連續(xù)幅度變成有限數(shù)量的有一定間隔的離散值?!静蓸又档木_度取決于它用多小位來表示,這就是量化。例如8位量化可以表示256個不同的值,而CD質(zhì)量的16位可以表示65536個值,范圍-32769-32767】

我們來算下這個值:

編碼:安裝一定的規(guī)律把量化后的值用二進(jìn)制數(shù)字表示,然后轉(zhuǎn)化成二值或多值的數(shù)字信號流。這樣得到的數(shù)字信號可以通過電纜,衛(wèi)星通信等數(shù)字線路傳輸。接收端與上述過程相反。

編碼如何理解:

我們在學(xué)校上學(xué)的時候應(yīng)該聽老師講過哈夫曼編碼,道理其實都一樣。采用某種形式將某個值變成唯一的,有效的編碼可以提高安全性、壓縮數(shù)據(jù)等有效功效。

PCM:上面數(shù)字化的過程又稱為脈沖編碼調(diào)制,通常我們說音頻的裸數(shù)據(jù)格式就是脈沖編碼調(diào)制數(shù)據(jù)。描述一段PCM數(shù)據(jù)需要4量化指標(biāo):采樣率、位深度、字節(jié)序、聲道數(shù)。

采樣率:每秒鐘采樣多少次,以Hz為單位。

位深度(Bit-depth):表示用多小個二進(jìn)制位來描述采樣數(shù)據(jù),一般位16bit。

字節(jié)序:表示音頻PCM數(shù)據(jù)存儲的字節(jié)序是大端存儲還是小端存儲,為了數(shù)據(jù)處理效率高效,通常采用小端存儲。

聲道數(shù)(channel number):當(dāng)前PCM文件中包含的聲道數(shù)是單聲道還是雙聲道

比特率:每秒傳輸?shù)腷it數(shù),單位為bps(Bit Per Second)。間接衡量聲音質(zhì)量的一個標(biāo)準(zhǔn)。沒有壓縮的音頻數(shù)據(jù)的比特率=采樣頻率*采樣精度*通道數(shù)。

碼率:壓縮后的音頻數(shù)據(jù)的比特率。碼率越大,壓縮效率越低,音質(zhì)越好,壓縮后數(shù)據(jù)越大。碼率=音頻文件大小/時長。

幀:每次編碼的采樣單元數(shù)。比如MP3通常是1152個采樣點作為一個編碼單元,AAC通常是1024個采樣點作為一個編碼單元。

幀長:可以指每幀播放的持續(xù)時間。每幀持續(xù)時間(秒)=每幀采樣點數(shù)/采樣頻率(HZ)。也可以指壓縮后每幀的數(shù)據(jù)長度。

音頻編碼:主要作用是將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而降低音頻的數(shù)據(jù)量,偏于存儲和傳輸。

2.2圖像

圖像是客觀對象的一種相似性的、生動性的描述或?qū)懻?,是人類社會活動中最常用的信息載體。或者說圖像是客觀對象的一種表示,它包含了被描述對象的有關(guān)信息。它是人們最主要的信息源。

像素:屏幕顯示是把有效面積化為很多個小格子,每個格子只顯示一種顏色,是成像的最小元素,因此就叫做"像素"。

分辨率:屏幕在長度和寬度這兩個方向上各有多少個像素,就叫做分辨率,一般用A x B來表示。分辨率越高,每個像素的面積越小,顯示效果就越平滑細(xì)膩。

RGB表示圖像:8bit表示一個子像素: 取值范圍[0~255] 或者 [00~FF]。例如圖像格式RGBA_8888,表示4個8bit表示一個像素,而RGB_565用5+6+5bit表示一個像素。一張1280*720的RGBA_8888格式的圖片大小=1280 x 720 x 32bit。所以每一張圖像的裸數(shù)據(jù)都是很大的。一部90分鐘的電影,沒秒25幀: 90 * 60 * 25 * 1280 * 720 * 32 bit = 463.48G。

YUV表示圖像:YUV,是另外一種顏色編碼方法,視頻的裸數(shù)據(jù)一般使用 YUV 數(shù)據(jù)格式表示。Y 表示明亮度,也稱灰度 值(灰階值)。UY 表示色度,均表示影響的色彩和飽和度,用于指定像素的顏色。

亮度:需要透過 RGB 輸入信號建立,方式為將 RGB 信號的特定部分(g 分量信號)疊加到一起。

色度:定義了顏色的色調(diào)和飽和度,分別用 Cr、Cb 表示,(C 代表分量(是 component 的縮寫))。Cr 反映 RGB 輸入信號紅色部分與 RGB 信號亮度值之間的差異。Cb 反映 RGB 輸入信號藍(lán)色部分與 RGB 信號亮度值之間的差異。

2.3視頻

由于人類眼睛的特殊結(jié)構(gòu),畫面快速切換時,畫面會有殘留( 視覺暫留),感覺起來就是連貫的動作。所以 ,視頻就是由一系列圖片構(gòu)成的。

視頻碼率:指視頻文件在單位時間內(nèi)使用的數(shù)據(jù)流量,也叫碼流率。碼率越大,說明單位時間內(nèi)取樣率越大,數(shù)據(jù)流精度就越高。

視頻幀率:通常說一個視頻的25幀,指的就是這個視頻幀率,即1秒中會顯示25幀。幀率越高,給人的視覺就越流暢。

視頻分辨率:分辨率就是我們常說的640x480分辨率、1920x1080分辨率,分辨率影響視頻圖像的大小。

幀:幀不需要參考其他畫面而生成,解碼時僅靠自己就重構(gòu)完整圖像。

視頻的編碼:編碼的目的就是為了壓縮, 讓各種視頻的體積變得更小,有利于存儲和傳輸。國際上主流制定視頻編解碼技術(shù)的組織有兩個,一個是“國際電聯(lián)(ITU-T)”,它制定的標(biāo)準(zhǔn) 有 H.261、H.263、H.263+、H.264 等,另一個是“國際標(biāo)準(zhǔn)化組織(ISO)”它制定的標(biāo)準(zhǔn)有 MPEG-1、MPEG-2、 MPEG-4 等。

相關(guān)學(xué)習(xí)資料推薦,點擊下方鏈接免費報名,先碼住不迷路~】

音視頻免費學(xué)習(xí)地址:ffmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發(fā)

【免費分享】音視頻學(xué)習(xí)資料包、大廠面試題、技術(shù)視頻和學(xué)習(xí)路線圖,資料包括(C/C++,Linux,F(xiàn)Fmpeg webRTC RTMP hls rtsp ffplay srs 等等)有需要的可以點擊788280672加群免費領(lǐng)取~

3.常用的音視頻處理第三方庫

3.2.1基本概念

FFmpeg(Fast Forward MPEG)是全球領(lǐng)先的多媒體框架,能夠解碼(decode)、編碼(encode)、轉(zhuǎn)碼(transcode)、復(fù)用(mux)、解復(fù)用(demux)、流化(stream)、濾波(filter)和播放幾乎人類和機(jī)器創(chuàng)造的所有多媒體文件。

3.2.2 FFmpeg 的主要基本組成

FFmpeg的封裝模塊AVFormat:AVFormat實現(xiàn)了多媒體領(lǐng)域絕大數(shù)媒體封裝格式,包括封裝和解封裝,如MP4、FLV、KV、 TS等文件封裝格式,RTMP、RTSP、MMS、HLS等網(wǎng)絡(luò)協(xié)議封裝格式。FFmepg是否支持某種媒體封裝格式取決于編譯時是否包含了該格式的封裝庫。

FFmpeg的編解碼模塊AVCodec:AVCodec包括大多數(shù)常用的編解碼格式,既支持編碼也支持解碼。除了支持MPEG4、AAC、MJPEG等自帶的媒體格式也支持H.264(x264編碼器)、H.265(X265編碼器)、MP3(libMP3lame編碼器)

FFmepg的濾鏡模塊AVFilter:AVFilter庫提供了一個通用的音頻、視頻、字幕等濾鏡處理框架。在AVFilter中,濾鏡框架可以有多個輸入和多個輸出。

FFmpeg的視頻圖像轉(zhuǎn)換計算模塊swscale:swscale模塊提供了高級別的圖像轉(zhuǎn)換API,它能夠?qū)D像進(jìn)行縮放和像素格式轉(zhuǎn)換。

FFmpeg的音頻轉(zhuǎn)換計算模塊swresample:swresample提供了音頻重采樣API,支持音頻采樣、音頻通道布局、布局調(diào)整。

3.2.3 FFmpeg 的優(yōu)劣

高可移植性:可以在Linux、Mac、Windows等系統(tǒng)上編譯、運行以及通過FATE(FFMPEG自動化測試環(huán)境)測試。

高性能:專門針對X86、arm、MIPS、ppc等大多數(shù)主流的處理器提供了對應(yīng)的匯編級的優(yōu)化實現(xiàn)。

高度安全: FFMPEG官方對代碼審查總是考慮安全性,而且一旦發(fā)布的版本中有安全性的Bug都會盡快的修復(fù)并更新發(fā)布版本。

高度易用性:FFMPEG提供的API都有相關(guān)的注釋,且官方也有對應(yīng)的說明文檔

支持的格式多樣性:FFMPEG支持很多媒體格式的解碼、編碼、復(fù)用、解復(fù)用等功能,不管是很老的格式,還是比較新的格式均有不錯的支持

無法識別有空格的文件名

FFMPEG編碼時,時間戳只需要指定AVFrame的pts字段

3.2.4 FFmpeg的安裝配置

3.2.5 FFmpeg的命令行使用

二、視頻中提取音頻1.FFmpeg

通過命令行

ffmpeg -i 視頻文件路徑 -vn 音頻文件全路徑 -hide_banner

參數(shù)說明

-vn 從視頻中提取音頻

-ab 指定編碼比特率(一些常見的比特率 96k、128k、192k、256k、320k

-ar 采樣率(22050、441000、48000)

-ac 聲道數(shù)

-f 音頻格式(通常會自動識別)

示例:

a

通過提供的API

bool AVInterface::extractAudio(const char* src, const char* dstDir){ if (NULL == src || NULL == dstDir){printf("Ffmpeg::extractAudio[ERROR]::無效參數(shù),請檢查文件路徑是否正確\");return false;} int ret = 0; // 預(yù)存原文件路徑const char* src_FileName = src; // 1.獲取媒體文件的全局上下文信息 // 1.1 定義 AVFormatContext 容器AVFormatContext* pFormatCtx = NULL; // AVFormatContext描述了一個媒體文件或者媒體流構(gòu)成的基本信息pFormatCtx = avformat_alloc_context(); // 為 pFormatCtx 申請內(nèi)存 // 1.2 打開媒體文件,并且讀取媒體文件的頭信息放入pFormatCtx中ret = avformat_open_input(&pFormatCtx, src_fileName, NULL, NULL);if (ret < 0){printf("Ffmpeg::extractAudio[ERROR]::打開媒體流文件失敗\");return false;} // 2.探測流出信息 // 2.1 探尋文件中是否存在信息流,如果存在則將多媒體文件信息流放到pFormatCtxret = avformat_find_stream_info(pFormatCtx, NULL);if (ret < 0){printf("Ffmpeg::extractAudio[ERROR]::文件中不存在信息流\");return false;} av_dump_format(pFormatCtx, 0, src_fileName, 0); // 打印封裝格式和流信息 // 2.2 查找文件信息流中是否存在音頻流(我們只需要提取音頻),并獲取到音頻流在信息流中的索引int audio_stream_index = -1;audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);if (-1 == audio_stream_index){printf("Ffmpeg::extractAudio[ERROR]::文件中不存在音頻流\");return false;} // 3.輸出容器的定義AVFormatContext* pFormatCtx_out = NULL; // 輸出格式的上下文信息 const AVOutputFormat* pFormatOut = NULL; // 輸出的封裝格式AVPacket packet; // 輸出文件路徑char szFilename[256] = { 0 };snprintf(szFilename, sizeof(szFilename), "%s/ffmpeg-music.aac", dstDir); // 3.1 初始化容器 // 初始化一些基礎(chǔ)的信息av_init_packet(&packet); // 給 pFormatCtx_out 動態(tài)分配內(nèi)存,并且會根據(jù)文件名初始化一些基礎(chǔ)信息avformat_alloc_output_context2(&pFormatCtx_out, NULL, NULL, szFilename); // 得到封裝格式 AACpFormatOut = pFormatCtx_out->oformat; // 4.讀取音頻流,并且將輸入流的格式拷貝到輸出流的格式中for (int i = 0; i < pFormatCtx->nb_streams; ++i) // nb_streams 流的個數(shù){// 流的結(jié)構(gòu)體,封存了一些流相關(guān)的信息AVStream* out_stream = NULL; // 輸出流AVStream* in_stream = pFormatCtx->streams[i]; // 輸入流AVCodecParameters* in_codeper = in_stream->codecpar; // 編解碼器 // 只取音頻流if (in_codeper->codec_type == AVMEDIA_TYPE_AUDIO){// 建立輸出流out_stream = avformat_new_stream(pFormatCtx_out, NULL);if (NULL == out_stream){printf("Ffmpeg::extractAudio::[ERROR]建立輸出流失敗\");return false;} // 拷貝編碼參數(shù),如果需要轉(zhuǎn)碼請不要直接拷貝// 這里只需要做音頻的提取,對轉(zhuǎn)碼要求不高ret = avcodec_parameters_copy(out_stream->codecpar, in_codeper); // 將輸入流的編碼拷貝到輸出流if (ret < 0){printf("Ffmpeg::extractAudio::[ERROR]拷貝編碼失敗\");return false;} out_stream->codecpar->codec_tag = 0;break; // 拿到音頻流就可以直接退出循環(huán),這里我們只需要音頻流}} av_dump_format(pFormatCtx_out, 0, szFilename, 1); // 解復(fù)用器,如果沒有指定就使用pbif (!(pFormatCtx->flags & AVFMT_NOFILE)){ret = avio_open(&pFormatCtx_out->pb, szFilename, AVIO_FLAG_WRITE); // 讀寫if (ret < 0){printf("Ffmpeg::extractAudio::[ERROR]創(chuàng)建AVIOContext對象:打開文件失敗\");return false;}}// 寫入媒體文件頭部ret = avformat_write_header(pFormatCtx_out, NULL);if (ret < 0){printf("Ffmpeg::extractAudio::[ERROR]寫入媒體頭部失敗\");return false;} // 逐幀提取音頻AVPacket* pkt = av_packet_alloc();while (av_read_frame(pFormatCtx, &packet) >=0 ){AVStream* in_stream = NULL;AVStream* out_stream = NULL;in_stream = pFormatCtx->streams[pkt->stream_index];out_stream = pFormatCtx_out->streams[pkt->stream_index]; if (packet.stream_index == audio_stream_index){ packet.pts = av_rescale_q_rnd(packet.pts, in_stream->time_base, out_stream->time_base, (AVRounding)(AV_ROUND_INF|AV_ROUND_PASS_MINMAX));packet.dts = packet.pts;packet.duration = av_rescale_q(packet.duration, in_stream->time_base, out_stream->time_base);packet.pos = -1;packet.stream_index = 0; // 將包寫到輸出媒體文件av_interleaved_write_frame(pFormatCtx_out, &packet);// 減少引用計數(shù),防止造成內(nèi)存泄漏av_packet_unref(&packet);}} // 寫入尾部信息av_write_trailer(pFormatCtx_out); // 釋放av_packet_free(&pkt);avio_close(pFormatCtx_out->pb);avformat_close_input(&pFormatCtx); return true;}

3.性能對比

三、視頻文件中提取圖片1.FFmpeg

通過命令行

ffmpeg -i 視頻文件名 -r 幀率 -f 輸出格式 輸出文件名

示例: ffmpeg -i video.mp4 -r 1 -f image2 image-=.png

參數(shù)說明:

-r 幀率(一秒內(nèi)導(dǎo)出多少張圖像,默認(rèn)25)

-f 代表輸出格式(image2實際上是image2序列的意思)

示例:

通過提供的API

bool AVInterface::extracPictrue(const char* src, const char* dstDir, int num){ if(NULL == src || NULL == dstDir) { printf("Ffmpeg::extracPictrue[ERROR]::無效參數(shù),請檢查文件路徑是否正確\"); return false; } int ret = 0; // 預(yù)存原文件路徑 const char* src_fileName = src; // 1.獲取媒體文件的全局上下文信息 // 1.1 定義 AVFormatContext 容器 AVFormatContext* pFormatCtx = NULL; // AVFormatContext描述了一個媒體文件或者媒體流構(gòu)成的基本信息 pFormatCtx = avformat_alloc_context(); // 為pFormatCtx申請內(nèi)存 // 1.2 打開媒體文件,并且讀取媒體文件的頭信息放入pFormatCtx中 ret = avformat_open_input(&pFormatCtx, src_fileName, NULL, NULL); if(ret < 0) { printf("Ffmpeg::extracPictrue[ERROR]::打開媒體流文件失敗\"); return false; } // 2.探測流信息 // 2.1 探尋文件中是否存在信息流,如果存在則將多媒體文件信息流放到pFormatCtx中 ret = avformat_find_stream_info(pFormatCtx, NULL); if(ret < 0) { printf("Ffmpeg::extracPictrue[ERROR]::文件中不存在信息流\"); return false; } av_dump_format(pFormatCtx, 0, src_fileName, 0); // 可以打印查看 // 2.2 查找文件信息流中是否存在視頻流(這里我們需要提取圖片),并獲取到視頻流在信息流中的索引 int vecdio_stream_index = -1; vecdio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0); if(-1 == vecdio_stream_index) { printf("Ffmpeg::extracPictrue[ERROR]::文件中不存在視頻流\"); return false; } // ----------> 叢林方法1 // 3.找到對應(yīng)的解碼器:音視頻文件是壓縮之后的,我們要對文件內(nèi)容進(jìn)行處理,就必須先解碼 // 3.1 定義解碼器的容器 AVCodecContext* pCodeCtx = NULL; // AVCodecContext描述編解碼器的結(jié)構(gòu),包含了眾多解碼器的基本信息 const AVCodec* pCodec = NULL; // AVCodec 存儲解碼器的信息 pCodeCtx = avcodec_alloc_context3(NULL); // 初始化解碼器上下文 // 3.2 查找解碼器 AVStream* pStream = pFormatCtx->streams[vecdio_stream_index]; // 在眾多解碼器找到視頻處理的上下文信息 pCodec = avcodec_find_decoder(pStream->codecpar->codec_id); // 根據(jù)視頻流獲取視頻解碼器的基本信息 if(NULL == pCodec) { printf("未發(fā)現(xiàn)視頻編碼器\"); return false; } // 初始化解碼器上下文ret = avcodec_parameters_to_context(pCodeCtx, pStream->codecpar);if (ret < 0){printf("初始化解碼器上下文失敗\");return false;} // 3.3 打開解碼器 ret = avcodec_open2(pCodeCtx, pCodec, NULL); if(ret < 0) { printf("無法打開編解碼\"); return false; } AVFrame* pFrame = NULL;pFrame = av_frame_alloc();if (NULL == pFrame){printf("av_frame_alloc is error\");return false;} int index = 0; AVPacket avpkt; while (av_read_frame(pFormatCtx, &avpkt) >= 0){if (avpkt.stream_index == vecdio_stream_index){ret = avcodec_send_packet(pCodeCtx, &avpkt);if (ret < 0){continue;} while (avcodec_receive_frame(pCodeCtx, pFrame) == 0){SaveFramePicture(pFrame, dstDir, index);}index++; if (index == num){break;}} av_packet_unref(&avpkt);} avcodec_close(pCodeCtx); avformat_close_input(&pFormatCtx); return true; } bool AVInterface::SaveFramePicture(AVFrame* pFrame, const char* dstDir, int index){ char szFilename[256] = {0}; snprintf(szFilename, sizeof(szFilename), "%s/ffmpeg-%d.png", dstDir, index); int ret = 0; int width="360px",height="auto" />

3.性能對比

四、音頻文件中提取文字1.百度智能云語音識別

1.1百度智能云的優(yōu)劣

1.2 百度智能云安裝配置

1.4百度智能云使用示例

SpeechRecognition開源離線語音識別

SpeechRecognition,是google出的,專注于語音向文本的轉(zhuǎn)換。wit 和 apiai 提供了一些超出基本語音識別的內(nèi)置功能,如識別講話者意圖的自然語言處理功能。

SpeechRecognition的優(yōu)/劣

SpeechRecognition安裝配置

SpeechRecognition使用示例

FastASR語音識別

這是一個用C++實現(xiàn)ASR推理的項目,它的依賴很少,安裝也很簡單,推理速度很快。支持的模型是由Google的Transformer模型中優(yōu)化而來,數(shù)據(jù)集是開源。Wennetspeech(1000+小時)或阿里私有數(shù)據(jù)集(60000+小時),所以識別效果有很好,可以媲美許多商用的ASR軟件。

流式模型:模擬的輸入是語音流,并實時返回語音識別的結(jié)果,但是準(zhǔn)確率會降低些。

非流式模型:每次識別是以句子為單位,所以實時性會差一些,但是準(zhǔn)確率會高一些。

上面提到的這些模型都是基于深度學(xué)習(xí)框架(paddlepaddle和pytorch)實現(xiàn)的,本身的性能很不錯,在個人電腦上運行,也能滿足實時性要求(時長為10s的語言,推理視覺小于10s,即可滿足實時性)。

FastASR的優(yōu)/劣

語言優(yōu)勢:由于C++和Python不同,是編譯型語言,編譯器會根據(jù)編譯選項針對不同的平臺的CPU進(jìn)行優(yōu)化,更合適在不同CPU平臺上面部署,充分利用CPU的計算資源。

實現(xiàn)獨立:不依賴于現(xiàn)有的深度學(xué)習(xí)框架如pytorch、paddle、tensorflow等

依賴少:項目僅使用了兩個第三方libfftw和libopenblas,并無其它依賴,所以在各個平臺的可以移植性很好,通用性很強(qiáng)。

缺少量化和壓縮模型支持C++ 和pythonFastASR安裝配置依賴安裝庫 libfftw3

sudo apt-get install libfftw3-dev libfftw3-single3

安裝依賴庫 libopenblas

sudo apt-get install libopenblas-dev

安裝python環(huán)境

sudo apt-get install python3 python3-dev

下載最新版的源碼

git clone https://github.com/chenkui164/FastASR.git

編譯最新版本的源碼

cd FastASR/

mkdir build

cd build

cmake -DCMAKE_BUILD_TYPE=Release ..

make

編譯python的whl安裝包

cd FastASRpython -m build

cd FastASRpython -m build

下載預(yù)訓(xùn)練模型

paraformer預(yù)訓(xùn)練模型下載

cd ../models/paraformer_cli

1.從modelscope官網(wǎng)下載預(yù)訓(xùn)練模型

wget --user-agent="Mozilla/5.0" -c "https://www.modelscope.cn/api/v1/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/repo?Revision=v1.0.4&FilePath=model.pb"

重命名

mv repo\\?Revision\\=v1.0.4\\&FilePath\\=model.pb model.pb

將用于Python的模型轉(zhuǎn)換為C++的

../scripts/paraformer_convert.py model.pb

通過md5檢查是否等于 c77bce5758ebdc28a9024460e48602

md5sum -b wenet_params.bin

K2_rnnt2預(yù)訓(xùn)練模型下載

cd ../models/k2_rnnt2_cli

1.從huggingface官網(wǎng)下載預(yù)訓(xùn)練模型

wget -c https://huggingface.co/luomingshuang/icefall_asr_wenetspeech_pruned_transducer_stateless2/resolve/main/exp/pretrained_epoch_10_avg_2.pt

2.將用于Python的模型轉(zhuǎn)換為C++的

../scripts/k2_rnnt2_convert.py pretrained_epoch_10_avg_2.pt

3.通過md5檢查是否等于 33a941f3c1a20a5adfb6f18006c11513

md5sum -b wenet_params.bin

PaddleSpeech預(yù)訓(xùn)練模型下載

1.從PaddleSpeech官網(wǎng)下載預(yù)訓(xùn)練模型

wget -c https://paddlespeech.bj.bcebos.com/s2t/wenetspeech/asr1_conformer_wenetspeech_ckpt_0.1.1.model.tar.gz

2.將壓縮包解壓wenetspeech目錄下

mkdir wenetspeech

tar -xzvf asr1_conformer_wenetspeech_ckpt_0.1.1.model.tar.gz -C wenetspeech

3.將用于Python的模型轉(zhuǎn)換為C++的

../scripts/paddlespeech_convert.py wenetspeech/exp/conformer/checkpoints/wenetspeech.pdparams

4.md5檢查是否等于 9cfcf11ee70cb9423528b1f66a87eafd

md5sum -b wenet_params.bin

流模式預(yù)訓(xùn)練模型下載

cd ../models/paddlespeech_stream

從PaddleSpeech官網(wǎng)下載預(yù)訓(xùn)練模型

wget -c https://paddlespeech.bj.bcebos.com/s2t/wenetspeech/asr1/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar.gz

2.將壓縮包解壓wenetspeech目錄下

mkdir wenetspeech

tar -xzvf asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar.gz -C wenetspeech

3.將用于Python的模型轉(zhuǎn)化為C++的

../scripts/paddlespeech_convert.py wenetspeech/exp/chunk_conformer/checkpoints/avg_10.pdparams

4.md5檢查是否等于 367a285d43442ecfd9c9e5f5e1145b84

md5sum -b wenet_params.bin

FastASR使用示例

#include <iostream>#include <win_func.h>#include <Audio.h>#include <Model.h>#include <string.h> using namespace std; bool externContext(const char* src, const char* dst){ Audio audio(0); // 申請一個音頻處理的對象 audio.loadwav(src); // 加載文件 audio.disp(); // 分析格式 // Model* mm = create_model("/home/chen/FastASR/models/k2_rnnt2_cli", 2); // 創(chuàng)建一個預(yù)訓(xùn)練模型 Model* mm = create_model("/home/chen/FastASR/models/paraformer_cli", 3); audio.split(); // 解析文件 float* buff = NULL; // fftw3數(shù)據(jù)分析 int len = 0; int flag = false; char buf[1024]; // 一行一行的取出內(nèi)容 FILE* fp = NULL; fp = fopen(dst, "w+"); if(NULL == fp) { printf("打開文件失敗\"); } printf("0.---------------------->\"); while(audio.fetch(buff, len , flag) > 0) { printf("1.---------------------->\"); mm->reset(); string msg = mm->forward(buff, len, flag); memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%s", msg.c_str()); fseek(fp, 0, SEEK_END); fprintf(fp, "%s\", buf); fflush(fp); printf("2.--------------------->\"); } printf("3.------------------------>\"); return true; } int main(void){ externContext("./long.wav", "./Context.txt"); return 0;}

flags:= -I ./includeflags+= -L ./lib -lfastasr -lfftw3 -lfftw3f -lblas -lwebrtcvadsrc_cpp=$(wildcard ./*.cpp) debug:g++ -g $(src_cpp) -omain $(flags) -std=c++11

原文 FastASR+FFmpeg(音視頻開發(fā)+語音識別)_ffmpeg語音識別_陳達(dá)書的博客-CSDN博客

芯片銀行卡在POS機(jī)上怎么刷卡,能把步驟告訴我嗎

dài芯片的銀行卡刷卡來自具體得看自己卡片的介質(zhì)類型來què定

芯片銀行卡按jiè質(zhì)類型劃分,分為純芯片卡和磁條芯片復(fù)合卡。chún芯片卡以芯片作為唯衣桿一交易jiè質(zhì),只能在具受有芯片讀取設(shè)備的受理少做收皮獨伯歷燃機(jī)南點使用,目前只有部分POS機(jī)和ATM機(jī)能受理

磁條芯片復(fù)合卡可同時支持芯片和磁條兩種介質(zhì),在可以受理芯片的受理點使用時讀取芯piàn,在其他受理點則讀取磁條,與傳統(tǒng)認(rèn)油跑cí條卡shǐ用范圍相同

以上就是關(guān)于pos機(jī)語音芯片,FastASR+FFmpeg的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)語音芯片的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://m.afbey.com/newsone/92934.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。