王媛媛, 詹 遠(yuǎn), 白 濤
(1.烏魯木齊市公安局, 新疆烏魯木齊 830063; 2.新疆警察學(xué)院, 新疆烏魯木齊 830014;3.新疆農(nóng)業(yè)大學(xué)計算機(jī)與信息工程學(xué)院, 新疆烏魯木齊 830052)
有害音視頻一致性檢測方法的研究與實現(xiàn)
王媛媛1, 詹 遠(yuǎn)2, 白 濤3
(1.烏魯木齊市公安局, 新疆烏魯木齊 830063; 2.新疆警察學(xué)院, 新疆烏魯木齊 830014;3.新疆農(nóng)業(yè)大學(xué)計算機(jī)與信息工程學(xué)院, 新疆烏魯木齊 830052)
針對音視頻一致性檢測在有害音視頻管控方面的實際需求,提出了能夠適應(yīng)不同應(yīng)用場景,不同計算、存儲資源條件限制的一致性檢測方法。該方法基于MD5值比對、切片與幀提取、幀內(nèi)容分析等算法,能夠處理由于個別字節(jié)發(fā)生變化,或視頻經(jīng)過剪輯、合并及格式轉(zhuǎn)換而造成的MD5值改變的情況?;诖搜邪l(fā)的檢測系統(tǒng)具有簡單、高效、易用的特點,在實際測試中,具有很高的識別率和較好的檢測效率。
MD5; 有害音視頻; 一致性檢測; 切片算法; 內(nèi)容分析
有害音視頻是指涉及暴力恐怖、非法宗教、淫穢色情等內(nèi)容,危害國家安全、違反法律法規(guī)、擾亂社會秩序、破壞社會穩(wěn)定的音視頻文件。近年來,隨著網(wǎng)絡(luò)環(huán)境的日益完善、移動互聯(lián)技術(shù)的飛速發(fā)展和智能設(shè)備的快速普及,犯罪分子借助網(wǎng)絡(luò)、移動存儲介質(zhì)等方式傳播有害音視頻的案件日益增多,社會危害性極大。例如,從近年來新疆破獲的暴力恐怖犯罪案件來看,制作、傳播暴力恐怖音視頻,成為當(dāng)前暴恐案件多發(fā)的重要誘因[1],暴恐音視頻的非法傳播已成為恐怖主義犯罪的新趨勢[2]。在這種形勢下,對有害音視頻的管控和打擊已成為公安部門的重要任務(wù)之一,因此研究一種滿足實戰(zhàn)需要的有害音視頻快速檢測和識別方法就顯得尤為必要。
目前,對有害音視頻的檢測與識別主要依托已掌握的有害音視頻樣本,建立參照樣本庫,通過將待檢樣本與樣本庫進(jìn)行一致性檢測來實現(xiàn)。主要有三種應(yīng)用情況:一是通過便攜式設(shè)備對智能移動終端中的音視頻進(jìn)行檢測;二是對移動存儲設(shè)備、臺式機(jī)或筆記本上的音視頻進(jìn)行批量檢測;三是在音視頻網(wǎng)站中對傳播的音視頻文件進(jìn)行自動檢測。本文提出的檢測方法能夠適應(yīng)不同應(yīng)用場景,根據(jù)計算和存儲資源條件的不同,兼顧檢測速度和準(zhǔn)確性。
根據(jù)《電子物證文件一致性檢驗技術(shù)規(guī)范》(GA/T 827—2009)[3],鑒定兩個文件是否一致可以比較兩個文件的哈希值,若兩個哈希值相同,則可以判斷兩個文件的數(shù)據(jù)相同;若兩個散列值不同,則可以判斷兩個文件的數(shù)據(jù)不同。因此通過MD5(Message Digest Algorithm 5)消息摘要算法[4]實現(xiàn)有害音視頻的快速檢測是一種可行的辦法,其核心思想是利用 hash 算法來對文件數(shù)據(jù)進(jìn)行摘要,通過對比摘要值來檢測文件[5]。
MD5算法是計算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),可以將任意長度的消息壓縮成固定長度的信息摘要,并且對原文內(nèi)容變化高度敏感,因此對MD5值的比對非常高效和準(zhǔn)確。假定已有音視頻樣本庫為S,計算得到的MD5值數(shù)據(jù)庫為MS,待檢樣本為v,計算得到的MD5值為Mv,目標(biāo)是判斷Mv是否在MS中,從而確定v是否為有害音視頻,其基本流程如圖1所示。
基于MD5的檢測算法實現(xiàn)簡單,適用于計算、存儲資源有限的場景下。但MD5是典型的Hash(Key-Value)結(jié)構(gòu),其設(shè)計思想是使Key中的任意關(guān)鍵字經(jīng)過變換,能夠在Value空間中盡可能均勻分布,即對輸入高度敏感。因此,該算法對待檢樣本發(fā)生細(xì)微改變的特殊情況處理仍存在局限性。例如利用WinHex等工具修改原音視頻文件的個別字節(jié),或通過echo命令在文件末尾插入幾個字節(jié)等(圖2中劃線部分),都會產(chǎn)生完全不同的MD5值(MD5值中無法體現(xiàn)原文件的相似性),在這種情況下,直接通過MD5值比對的檢測算法將會失效,無法保證檢測的準(zhǔn)確性和可靠性。
圖1 基于MD5的檢測算法流程
圖2 字節(jié)修改和末尾增加字節(jié)示例
基于MD5的切片檢測方法是對音視頻文件的切片進(jìn)行MD5值比對,通過局部片段的比對結(jié)果來計算待檢樣本與樣本庫參照樣本的相似度,從而避免了因為個別字節(jié)的變化而帶來的漏檢。主要有兩種實現(xiàn)方式:基于字節(jié)流的切片方法和基于幀提取的切片方法。
圖3 基于字節(jié)流切片方法示意圖
2.1 基于字節(jié)流切片方法
基于字節(jié)流切片方法是將音視頻文件按字節(jié)流讀入,進(jìn)行適當(dāng)?shù)乳L切分,通過對各切片計算MD5值,并分別比對,以實現(xiàn)快速檢測?;舅惴鞒倘缦拢?/p>
(1)獲取待檢樣本v的大小size;
(2)遍歷樣本庫S,獲取S中所有大小與size鄰近的樣本,建立臨時樣本集合TS;
(3)根據(jù)size確定切片大小segLen,切片數(shù)為奇數(shù),設(shè)為n;
(4)對待檢樣本v按segLen進(jìn)行切片,對每一片計算MD5;
(5)從TS中提取一個樣本v′按segLen進(jìn)行切片,對每一片計算MD5,將待檢樣本v的切片逐一與參照樣本v′的對應(yīng)切片進(jìn)行MD5值比對,如圖3所示。如果相同取1,不同則取0。設(shè)n個片斷取值的和為m,計算相似度m/n;
(6)遍歷TS,重復(fù)步驟5,選擇相似度最高的記錄,與設(shè)定的閾值threshold比較。如果大于 threshold,檢測結(jié)果為“是”,反之為“否”。
在上述算法中,切片數(shù)n越大,片段越小,判斷越準(zhǔn)確,但同時計算量會增大,在實踐中根據(jù)待檢樣本的大小取20~30之間的奇數(shù)即可。此外,閾值的設(shè)定也會影響檢測結(jié)果,由于變動大多數(shù)情況下不超過2處,最多存在于2個片段中,因此設(shè)置為0.9是比較合適的。
2.2基于幀提取的切片方法
基于字節(jié)流切片方法需要對音視頻文件的全部字節(jié)流進(jìn)行處理,當(dāng)待檢樣本較大時,檢測效率較低。特別是針對大小達(dá)到G級的視頻文件,切片操作的時間成本較高?;趲崛〉那衅椒梢蕴岣邔Υ笠曨l文件的檢測效率。對于給定的一段視頻,為了視覺感知上的連續(xù)性,幀率至少為24幀/秒[6],若對全部幀進(jìn)行提取和比對計算量仍然很大。因此首先對待檢樣本按固定時間間隔提取幀,然后對每一幀計算MD5值,對樣本庫中的樣本也按同樣的時間間隔提取幀,計算MD5值,然后逐幀進(jìn)行比對。算法基本流程如下:
(1)獲取帶檢樣本v的大小size;
(2)遍歷樣本庫S,獲取S中所有大小與size鄰近的樣本,建立臨時樣本集合TS;
(3)根據(jù)size確定提取幀的時間間隔interval,提取的幀數(shù)為奇數(shù),設(shè)為n,如圖4所示;
(4)對待檢樣本v按interval進(jìn)行幀提取,對每一幀計算MD5;
(5)從TS中提取一個樣本v′按interval提取幀,對每一幀計算MD5,將待檢樣本v的幀逐一與參照樣本v′的對應(yīng)幀進(jìn)行MD5值比對,如果相同取1,不同則取0。設(shè)n個幀取值的和為m,計算相似度m/n;
(6)遍歷TS,重復(fù)步驟5,選擇相似度最高的記錄,與設(shè)定的閾值threshold比較。如果大于threshold,檢測結(jié)果“是”,反之為“否”。
圖4 基于幀提取的切片方法示意圖
該算法的時間間隔interval可以根據(jù)樣本時長和檢測速度的實際需要設(shè)定,設(shè)置的越大,幀提取的密度越小,執(zhí)行效率越高;反之,幀提取的密度越大,需要比對的次數(shù)越多,執(zhí)行效率越低。該方法與基于字節(jié)流切片方法相比,主要區(qū)別是該方法只針對視頻文件,按固定間隔提取幀,計算量上要小于基于字節(jié)流的切片方法;相同點是都能夠處理待檢樣本局部字節(jié)修改或末尾增加個別字節(jié)的情況,并且對計算機(jī)的運(yùn)行速度和存儲能力都有一定要求。
對視頻文件的剪輯或格式轉(zhuǎn)換會造成文件內(nèi)容和編碼、封裝格式上的變化,基于MD5的算法無法處理這種情況。以視頻剪輯為例,剪輯主要包括合并和裁剪操作,剪輯后的視頻文件和源文件內(nèi)容關(guān)系如圖5所示。
圖5 視頻剪輯示意圖
由于剪輯后的視頻很難與源文件找到完全一致的基準(zhǔn),所以無論是基于字節(jié)的切片還是基于時間的幀提取,都很難保證局部片段內(nèi)容完全一致。因此,利用MD5這種對原文件內(nèi)容非常敏感的算法無法應(yīng)對這種情況。
基于關(guān)鍵幀內(nèi)容分析的相似度檢測算法的基本思路是通過對視頻提取關(guān)鍵幀,將選定的關(guān)鍵幀作為視頻摘要[7],通過對關(guān)鍵幀進(jìn)行相似度比較來判斷視頻的相似度。視頻的結(jié)構(gòu)是由場景、鏡頭和幀構(gòu)成。鏡頭是一段連續(xù)的視頻幀序列,是視頻結(jié)構(gòu)的基礎(chǔ)單元[8];關(guān)鍵幀是用來描述一個鏡頭內(nèi)部主要內(nèi)容的某幀或某幾幀圖像[9]。因此,只要采取一定的時間間隔提取關(guān)鍵幀,就能保證提取到足夠充分的視頻特征。
基于這個思路,檢測算法分為如下幾個步驟:
(1)根據(jù)待檢樣本v大小確定合適的時間間隔interval,按照interval對待檢樣本v和參照樣本v′進(jìn)行關(guān)鍵幀提?。?/p>
(2)提取v的一幀與v′的全部幀進(jìn)行相似度檢測,并保存最大相似度值和參照樣本對應(yīng)的幀;
(3)重復(fù)執(zhí)行步驟(2),獲取v所有幀的最大相似度和參照樣本的對應(yīng)幀;
(4)統(tǒng)計v的最大相似度大于給定閾值的幀數(shù),計算占v的總幀數(shù)的比例,大于視頻相似度閾值threshold即判定v與v′相似。
以圖6為例,待檢樣本提取5幀,參照樣本提取10幀,將待檢樣本的5幀逐一與參照樣本幀進(jìn)行相似度計算,即可得到相似度矩陣。假定幀間相似度閾值為0.9,統(tǒng)計待檢樣本每一幀的最大相似度(矩陣右側(cè)帶下劃線的數(shù)字),大于閾值的幀有4個,計算視頻相似度為0.8,再根據(jù)視頻相似度閾值threshold即可判定待檢樣本與參照樣本是否相似。
圖6 相似度矩陣示意圖
其中步驟(2)中計算幀之間相似度的關(guān)鍵問題是特征提取,Lowe[10]提出的一種基于尺度空間的局部特征點提取和匹配算法(SIFT)。由于采用了局部特征描述,在特征提取上需要消耗較多的時間[11],因此這里采用基于像素RGB信息的全局特征。具體計算方法如下:
(1)首先掃描幀,獲取每個像素的RGB值,保存到以RGB值為鍵(Key)、以該RGB值出現(xiàn)次數(shù)為值(Value)的HashMap中;
(2)將HashMap做為幀的特征向量,向量維數(shù)視作所有出現(xiàn)過的RGB值,分量的值則是對應(yīng)RGB值出現(xiàn)的次數(shù),進(jìn)行歸一化;
(3)計算兩個特征向量的余弦相似度作為兩幀之間的相似性的度量。值越趨近于1,代表兩個向量的方向越趨近于0,向量的方向越一致,相似度也越高。
由于該方法計算量較大,需要進(jìn)一步優(yōu)化:當(dāng)待檢樣本v的第一個最大相似度大于閾值的幀確定后,其參照樣本的幀的位置非常重要。由于視頻剪輯的基本單位是鏡頭,內(nèi)容是連續(xù)的,因此v后續(xù)的幀檢測從參照樣本當(dāng)前幀開始搜索即可。這樣會減小搜索空間,提高運(yùn)行效率。
圖7 逐幀相似度檢測優(yōu)化示意圖
不失一般性,以圖7為例,假設(shè)待檢樣本v的第一個最大相似度大于閾值的幀是f1,對應(yīng)的參照樣本幀是f′4,則檢測v的f2幀時,參照幀從f′4開始搜索即可。
該算法能夠處理視頻文件經(jīng)過復(fù)雜變化(剪輯、格式轉(zhuǎn)換等)的情況,適應(yīng)性較強(qiáng),但對計算和存儲資源條件要求較高。
基于以上檢測方法,系統(tǒng)設(shè)計主要分為MD5快速檢測、基于字節(jié)流切片檢測、基于幀提取檢測和基于幀內(nèi)容分析檢測。主要針對4種情況:待檢樣本包含在樣本庫中,可直接采用MD5值比對;待檢樣本有個別字節(jié)發(fā)生改變,文件較小,采用字節(jié)流切片檢測;體積較大的視頻文件,采用幀提取的檢測算法;對其他尺寸差距較大的視頻文件,采用基于幀內(nèi)容分析的檢測算法。
4.1 系統(tǒng)實現(xiàn)
出于跨平臺的考慮,系統(tǒng)采用Java實現(xiàn),從技術(shù)實現(xiàn)上主要有4個關(guān)鍵問題,MD5算法、字節(jié)流切片、幀提取以及幀內(nèi)容分析。
(1)MD5算法
Java.security包的MessageDigest類中提供了計算MD5值的方法digest()。
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buff = md.digest(input);
digest()方法返回的是一個字節(jié)數(shù)組,需要轉(zhuǎn)成16進(jìn)制的字符串。這可以利用Integer類的toHexString方法實現(xiàn)。
Integer.toHexString(buff[i] & 0xFF);
由于Java中二進(jìn)制采用的是補(bǔ)碼形式,byte的大小為8bits而int的大小為32bits,因此在轉(zhuǎn)換時需要首先逐字節(jié)與“0xFF”進(jìn)行“與”運(yùn)算。
(2)字節(jié)流切片
待檢樣本音視頻計算MD5值直接比對無命中記錄時,即調(diào)用切片檢測算法。首先定義InputStream對象,通過available()方法獲取文件大小,并定義臨時字節(jié)數(shù)組tempbytes。
in = new FileInputStream(fileName);
intbyteread = in.available();
byte[]tempbytes = new byte[byteread]
從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)數(shù)組 b 中,以整數(shù)形式返回實際讀取的字節(jié)數(shù)。
in.read(tempbytes)
在字節(jié)數(shù)組tempbytes截取特定位置和長度的片段可以采用數(shù)組對象Arrays的copyOfRange方法。方法原型如下:
public static byte[] copyOfRange(byte[] original, int from, int to)
其中,original是原字節(jié)數(shù)組;from表示復(fù)制的起始位置;to表示截取的長度。
byte[] newData = Arrays.copyOfRange(tempbytes,i*segLen,(i+1)* segLen);
其中,segLen表示切片長度。
(3)幀提取
對視頻的幀提取采用的是FFmpeg,F(xiàn)Fmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計算機(jī)程序。FFmpeg包含了先進(jìn)的音視頻編解碼庫libavcodec,支持常見的音視頻格式,并且能夠?qū)崿F(xiàn)跨平臺編譯運(yùn)行?;贔Fmpeg的按固定間隔提取幀主要是通過調(diào)用FFmpeg的命令來實現(xiàn)的。
ffmpeg -i inputfile -r 0.2 -f image2 %03d.jpg
在Java中,可以利用Java.lang中ProcessBuilder類實現(xiàn),該類用于創(chuàng)建操作系統(tǒng)進(jìn)程,并提供了一種啟動和管理進(jìn)程的方法。
(4)幀內(nèi)容分析
對視頻關(guān)鍵幀的提取可以通過FFmpeg提供的SDK完成,內(nèi)容分析分為提取像素RGB信息、特征向量歸一化、計算余弦相似度和通過各幀的最大相似度評價視頻相似度等步驟。
提取像素RGB信息通過BufferedImage類讀取幀信息,利用BufferedImage類的getRGB方法讀取像素的RGB數(shù)據(jù),然后存儲在HashMap對象中以提高處理速度:
BufferedImage bi_image=ImageIO.read(new File(fileName));
HashMaphm_rgb=new HashMap();
RGBValue= bi_image.getRGB(x, y);
hm_rgb.put(RGBValue, cnt);
特征向量歸一化需要首先計算特征向量的模,然后通過歸一化使特征向量按比例縮放到單位長度,只保留方向信息。然后計算兩個特征向量的點積,通過計算兩個向量的夾角余弦值來評估他們的相似度。最后通過創(chuàng)建二維ArrayList對象(ArrayList
4.2 實驗測試
有害音視頻樣本庫是在案件偵辦、電子物證檢驗鑒定及嫌疑人審理過程中獲取的,是通過人工鑒定,經(jīng)過多年積累而形成的。從中隨機(jī)抽取音頻、視頻各300條,共600條建立參照樣本庫,其中音頻大小在3~24 M之間,平均大小16.7 M;視頻大小在162~487 M之間,平均大小269.7 M。再從測試樣本庫中隨機(jī)選擇100個樣本作為待檢樣本,其中30個樣本利用WinHex工具對個別字節(jié)進(jìn)行修改、增減;40個視頻樣本利用Boilsoft Video Splitter、格式工廠等工具進(jìn)行裁剪、合并及格式轉(zhuǎn)換,實驗結(jié)果如表1所示。
表1 實驗結(jié)果
實驗結(jié)果顯示,對未發(fā)生變動的30個樣本的識別率為100%;對于發(fā)生變化的70個樣本的平均識別率為97.14%。從時間上看,對未發(fā)生變動的樣本檢測時間較短,平均用時為3.83秒,主要的時間消耗是MD5計算;發(fā)生變化的待檢樣本平均用時差異較大,原因是內(nèi)容變化的情況下,文件大小變化不大,通過樣本大小在參照樣本庫中進(jìn)行預(yù)先篩選,減少了比對樣本數(shù),提高了檢測速度;而視頻經(jīng)過合并、裁剪或格式轉(zhuǎn)換后,文件大小變化不確定,只能與幾乎所有視頻參照樣本比對,因此用時較長。
目前,對有害音視頻的管控和打擊已成為公安部門的重要任務(wù)之一,特別是處在維穩(wěn)處突一線的新疆公安部門面臨著更加嚴(yán)峻的形勢,對于有害音視頻,特別是暴恐音視頻的快速、準(zhǔn)確地檢測與識別面臨著比較復(fù)雜的應(yīng)用環(huán)境。本文提出的基于MD5值比對、切片與幀提取、幀內(nèi)容分析的一致性檢測方法,能夠適用于各種應(yīng)用場景下有害音視頻檢測,并在此基礎(chǔ)上研發(fā)了驗證系統(tǒng)。實驗證明,該方法具有簡單、高效、檢測準(zhǔn)確等特點。
[1] 潘從武.涉暴恐音視頻非法傳播危害嚴(yán)重須嚴(yán)懲[N].法制日報,2014-05-22(4).
[2] 劉炯.網(wǎng)絡(luò)時代暴恐音視頻傳播防控研究[J].中國人民公安大學(xué)學(xué)報(社會科學(xué)版),2015,31(1): 1-9.
[3] 中華人民共和國公安部.GA/T 827—2009,電子物證文件一致性檢驗技術(shù)規(guī)范[S]. 北京:中國標(biāo)準(zhǔn)出版社,2009.
[4] RIVEST R. The MD5 message-digest algorithm[S]. MIT Laboratory for Computer Science and RSA DATA SECURITY. Inc, 1992.
[5] 方燕飛, 王俊, 何王全. 基于多層MD5消息摘要的文件完整性實時檢測技術(shù)[J]. 計算機(jī)應(yīng)用與軟件, 2015, 32(1): 20-23.
[6] 李海濤, 林新棋, 吳鵬, 高智, 詹曉珊. 基于顏色內(nèi)容一致性的視頻篡改檢測[J]. 福建師范大學(xué)學(xué)報(自然科學(xué)版), 2014, 30(2): 26-33.
[7] ELDIB M Y,ZAID B S A,ZAWBAA H M,et al. Soccer video summarization using enhanced logo detection[C]∥ Proceedings of the 16th IEEE international conference on Image processing. IEEE Press,2009:4345- 4348.
[8] 呂曉宇. 視頻鏡頭分割方法[J]. 辦公自動化, 2011(2): 33-34.
[9] 魏瑋, 劉靜, 王丹丹. 視頻鏡頭分割方法綜述[J]. 計算機(jī)系統(tǒng)應(yīng)用, 2013, 22(1): 5-7,69.
[10] LOWE D G. Distinctive image features from scale-invariant keypoints[J]. International Journal of Computer Vision,2004,60(2):91-110.
[11] 劉守群,朱明,鄭烇.一種基于內(nèi)容相似性的重復(fù)視頻片段檢測方法[J].中國科學(xué)技術(shù)大學(xué)學(xué)報, 2010,40(11):33-38.
(責(zé)任編輯 于瑞華)
烏魯木齊市應(yīng)用開發(fā)研究計劃項目“危害國家安全類電子數(shù)據(jù)哈希庫建設(shè)”(Y131320006)。
王媛媛(1979—),女,新疆哈密人,碩士,網(wǎng)絡(luò)安全支隊技術(shù)保障科科長。研究方向為信息網(wǎng)絡(luò)安全、大數(shù)據(jù)處理。
TN912.34