主頁 > 區塊鏈 > 用Python解決女朋友看電影沒字幕的需求

用Python解決女朋友看電影沒字幕的需求

2020-09-29 03:03:09 區塊鏈

用Python解決女朋友看電影沒字幕的需求

文章目錄

  • 用Python解決女朋友看電影沒字幕的需求
    • 一、故事情節
    • 二、開發前的準備作業
    • 三、開發程序詳細介紹
      • (一)介面規范說明
      • (二)專案開發
        • 1、界面部分的實作
        • 2、處理音視頻功能開發
        • 3、發送資料翻譯功能的開發
    • 四、效果展示
    • 五、總結

一、故事情節

是這樣子的,女朋友晚上突然翻到了自己喜歡看的一個電影,但是沒有字幕,這讓她很苦惱,

我急中生智,緊急的解決了我女朋友的需求,

想到了使用Python做一個可以識別語音,然后翻譯出來文字的軟體,

在這里插入圖片描述

如下圖就是本片文章所要完成的效果,哈哈,是不是還不錯,很棒的樣子,

如果有興趣可以給我點個贊,之后帶來更多好玩、有趣的demo和實作的教程,

《甄嬛傳》第一集的某一小段:

在這里插入圖片描述

其實,是這樣子的:

最近劇荒,偶然翻出了曾經下載的電視劇回味一番,經典就是經典,不論是劇情還是臺詞,都那么有魅力,咦?等等,臺詞,臺詞……作為一個IT從業者,我忽然靈光一現——現在語音識別技術這么發達,能否有什么辦法能幫我保存下一些精彩橋段的臺詞呢?或許我也可以是個野生字幕君:p ,似乎也可以在此基礎上順手再翻譯一下個別難懂的臺詞!

略加思索,我大概有了個想法——做個視頻中提取音頻的程式,而后去請求一個開放的語音識別API來幫我把語音轉為文字,鑒于之前呼叫有道智云的愉快經驗,我決定再次拿來為我所用,很快做出了這個demo(請忽略這丑丑的界面布局,能用就行……),

在這里插入圖片描述

歡迎關注我,一塊來履行我之前的承諾連更一個月之內,把幾篇寫完,

序號預計完成時間開發dome名字以及功能&發布文章內容是否已寫完文章鏈接
19月3文本翻譯,單文本翻譯,批量翻譯demo,已完成CSDN:點我直達
微信公眾號:點我直達
29月11OCR-demo,完成批量上傳識別;在一個demo中可選擇不同型別的OCR識別《包含手寫體/印刷體/身份證/表格/整題/名片),然后呼叫平臺能力,具體實作步驟等,已完成CSDN:點我直達
微信公眾號:
310月27語音識別demo,demo中上傳—段視頻,并截取視頻中短語音識別-demo的一段音頻進行短語音識別CSDN:
微信公眾號:
49月17智能語音評測-demoCSDN:
微信公眾號:
59月24作文批改-demoCSDN:
微信公眾號:
69月30語音合成-demoCSDN:
微信公眾號:
710月15單題拍搜-demoCSDN:
微信公眾號:
810月20圖片翻譯-demoCSDN:
微信公眾號:

二、開發前的準備作業

首先,是需要在有道智云的個人頁面上創建實體、創建應用、系結應用和實體,獲取呼叫介面用到的應用的id和密鑰,具體個人注冊的程序和應用創建程序詳見文章不到100行代碼搞定Python做OCR識別身份證,文字等各種字體

在這里插入圖片描述

三、開發程序詳細介紹

下面介紹具體的代碼開發程序,

(一)介面規范說明

首先分析有道智云的API輸入輸出規范,根據檔案來看,呼叫介面格式如下:

有道語音識別API HTTPS地址:

https://openapi.youdao.com/asrapi

介面呼叫引數:

欄位名型別含義必填備注
qtext要翻譯的音頻檔案的Base64編碼字串True必須是Base64編碼
langTypetext源語言True支持語言
appKeytext應用 IDTrue可在 應用管理 查看
salttextUUIDTrueUUID
curtimetext時間戳(秒)true秒數
signtext簽名,通過md5(應用ID+q+salt+curTime+密鑰)生成True應用ID+q+salt+curTime+密鑰的MD5值
signTypetext簽名版本Truev2
formattext語音檔案的格式,wavtruewav
ratetext采樣率, 推薦 16000 采用率true16000
channeltext聲道數, 僅支持單聲道,請填寫固定值1true1
typetext上傳型別, 僅支持base64上傳,請填寫固定值1true1

其中q為base64編碼的待識別音頻檔案,“上傳的檔案時長不能超過120s,檔案大小不能超過10M”,這點需要注意一下,

API的回傳內容較為簡單:

欄位含義
errorCode識別結果錯誤碼,一定存在, 詳細資訊參加 錯誤代碼串列
result識別結果,識別成功一定存在

(二)專案開發

這個專案使用python3開發,包括maindow.pyvideoprocess.pysrbynetease.py三個檔案,

界面部分,使用python自帶的tkinter庫,提供視頻檔案選擇、時間輸入框和確認按鈕;

videoprocess.py:來實作在視頻的指定時間區間提取音頻和處理API回傳資訊的功能;

srbynetease.py:將處理好的音頻發送到短語音識別API并回傳結果,

1、界面部分的實作

界面部分代碼如下,比較簡單,

root=tk.Tk()
root.title("netease youdao sr test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')

btn_get_file = tk.Button(frm, text='選擇待識別視頻', command=get_file)
btn_get_file.grid(row=0, column=0,  padx='10', pady='20')
path_text = tk.Entry(frm, width='40')
path_text.grid(row=0, column=1)

start_label=tk.Label(frm,text='開始時刻:')
start_label.grid(row=1,column=0)
start_input=tk.Entry(frm)
start_input.grid(row=1,column=1)

end_label=tk.Label(frm,text='結束時刻:')
end_label.grid(row=2,column=0)
end_input=tk.Entry(frm)
end_input.grid(row=2,column=1)

sure_btn=tk.Button(frm, text='開始識別', command=start_sr)
sure_btn.grid(row=3,column=0,columnspan=3)
root.mainloop()

其中sure_btn的系結事件start_sr()做了簡單的例外處理,并通過彈窗列印最終的識別結果:

def start_sr():
    print(video.video_full_path)
 if len(path_text.get())==0:
        sr_result = '未選擇檔案'
    else:
        video.start_time = int(start_input.get())
        video.end_time = int(end_input.get())
        sr_result=video.do_sr()

    tk.messagebox.showinfo("識別結果", sr_result)

2、處理音視頻功能開發

(1)在videoprocess.py中,我用到了python的moviepy庫來處理視頻,按指定起止時間截取視頻,提取音頻,并按API要求轉為base64編碼形式:

def get_audio_base64(self):
    video_clip=VideoFileClip(self.video_full_path).subclip(self.start_time,self.end_time)
    audio=video_clip.audio
    result_path=self.video_full_path.split('.')[0]+'_clip.mp3'
    audio.write_audiofile(result_path)
    audio_base64 = base64.b64encode(open(result_path,'rb').read()).decode('utf-8')
    return audio_base64

(2)處理好的音頻檔案編碼傳到封裝好的有道智云API呼叫方法中:

def do_sr(self):
    audio_base64=self.get_audio_base64()
    sr_result=srbynetease.connect(audio_base64)
    print(sr_result)
    if sr_result['errorCode']=='0':
        return sr_result['result']
    else:
        return "Something wrong , errorCode:"+sr_result['errorCode']

3、發送資料翻譯功能的開發

srbynetease.py中封裝的呼叫方法比較簡單,按API檔案“組裝”好data{}發送即可:

def connect(audio_base64):
    data = {}
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(audio_base64) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['q'] = audio_base64
    data['salt'] = salt
    data['sign'] = sign
    data['signType'] = "v2"
    data['langType'] = 'zh-CHS'
    data['rate'] = 16000
    data['format'] = 'mp3'
    data['channel'] = 1
    data['type'] = 1

    response = do_request(data)

    return json.loads(str(response.content,'utf-8'))

四、效果展示

隨手打開《甄嬛傳》第一集的某一小段試試:

在這里插入圖片描述

效果可以,斷句的一點小瑕疵可以忽略,沒想到這短語音識別API博古通今,古文語音識別也這么溜,厲害厲害!

五、總結

一番嘗試帶我打開了新世界的大門,從今天開始我可以是一個不打字卻能搬運字幕的野生字幕君了,后面再有時間可以試試識別完翻譯成其他語言的操作,嗯,是技術的力量!

專案地址:https://github.com/LemonQH/SRFromVideo

關注我微信公眾號第一時間推送給你哦:

回復選單,更有好禮,驚喜在等著你,

在這里插入圖片描述

快來我粉絲群:每天歡快的玩耍
在這里插入圖片描述

TrueDei CSDN認證博客專家 Linux 分布式 Java
不荒廢現在,不畏懼未來!我認為把知識給別人講會,講明白,自己才徹底明白,努力把文章寫好,寫明白每一篇文章,分享給更多人,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/136490.html

標籤:區塊鏈

上一篇:邏輯回歸預測癌癥分類

下一篇:不會吧?這么做15分鐘就能入門Python了!——寫給其他編程語言成手的快速入門教程

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more