AI時代的網站與手機App建置與開發Part34 - 使用Azure Content Safety實作影片審查

 l  摘要

在上一回的文章中, 我們為大家介紹了支援Microsoft Azure雲端解析影片內容的Azure Video Indexer服務(AI時代的網站與手機App建置與開發Part33 - 使用Azure Video Indexer探索影片內容), 在這一篇文章中, 我們將要整合Azure內容安全服務, 搭配Azure Video Indexer影片內容解析服務實作影片內容審查功能.

: 使用Azure Video Indexer服務實作自動化影片審查功能

l  認識Azure Content Safety內容安全服務

Microsoft Azure Content Safety內容安全服務支援審查公開發表的內容, 例如審查欲發表的文字, 圖片, 和影片, 審查欲發表的內容是否違反內容發表的規範, 約束使用者發表符合規範的文字, 圖片, 和影片的內容. 因為使用者可能於一天的任何時間發表內容, 如果使用人工進行內容審查, 將會是一個高成本, 甚至是無法負荷的任務.

企業能夠利用Azure Content Safety內容安全服務偵測可能具冒犯性或不應出現的內容, 屏蔽可能具冒犯性或不恰當的內容, 以保障文字, 圖片, 和影片的內容安全.

企業可以將Azure Content Safety內容安全服務應用在以下的場合:

1.         評論網(例如美食評論網, Google Review)的發佈評論審核

2.         圖片分享網站(例如Instagram)的圖片發佈審核

3.         社群網站(例如Facebook, 己更名為Meta)的內容發佈審核

4.         影音分享網站(例如YouTube)的影音發佈審核

5.         企業網站的員工交流園地的發言審核

6.         論壇 / 討論區 / 粉絲團的發言審核

7.         購物網站的商品討論群組的發言 / 開箱審核

8.         場域管理(例如幼兒園, 校園, 安養中心, 長照中心, 健身房場館, …)的監視影片審核

l  Azure Content Safety服務支援審核的文字, 圖片, 和影片格式

圖片內容審查限制:

ü  欲審查的圖片大小必須介於50x50~7200x7200 pixel之間

ü  欲審查的最大圖片大小為4MB

ü  欲審查的圖片格式必須是 : gif, jpg/jpeg, png, bmp, tiff, WEBP

文字內容審查限制:

ü  支援審查的最長文字長度為1024字元

ü  支援審查的文字格式 : HTML(text/html), XML(text/xml), Markdown(text/markdown), 純文字(text/plain)

影片內容審查限制:

ü  因為Azure Content Safety內容安全服務必須依賴Azure Video Indexer進行, 所以影片內容審查限制請參考Azure Content Safety內容安全服務的影片格式支援(請參考:AI時代的網站與手機App建置與開發Part33 - 使用Azure Video Indexer探索影片內容)

l  Azure Content Safety內容安全服務審核的四大目標:

Azure Content Safety內容安全服務能夠審核文字, 圖片, 和影片是否內含以下四種內容:

1.     Hate : 仇恨

2.     SelfHarm : 自殘(自我傷害)

3.     Sexual :

4.     Violence : 暴力

而且給予審核結果嚴重程度分數, 一共分為4:

0 :  無害(偵測不到危險的內容)

1 :  輕微(可能可以接受, 視場合而定)

2 :  中度(具冒犯或危險內容, 需要屏蔽或人工審查)

3 :  嚴重(具嚴重傷害性, 需要屏蔽的內容)

l  使用Azure Content Safety內容安全服務搭配Azure Video Indexer進行影片內容審查:

首先請參考上一篇文章(請參考:AI時代的網站與手機App建置與開發Part33 - 使用Azure Video Indexer探索影片內容)上傳欲審查的影片. 完成影片上傳後, 等待影片解析完成, 您就可以點選Azure Video Indexer Developer Portal(網址: https://api-portal.videoindexer.ai)[Go to the web portal]連結, 看到上傳的影片, 如圖1所示:

1: 完成上傳與解析的影片

1的左方顯示的就是影片解析的結果.

l  實作影片內容審查

請參考AI時代的網站與手機App建置與開發Part33 - 使用Azure Video Indexer探索影片內容這篇文章的範例程式, 修改: debugVideoStatus函式, 讀取影片解析到的文件內容, 修改妥debugVideoStatus函式如下:

// 判斷影片是否分析完成, 並顯示分析完成的影片的分析結果(見解)

async function debugVideoStatus(accessToken) {

try {

// 取得己上傳至Azure Video Indexer的所有影片

const videos = await listVideos(accessToken);      

     if (videos.length === 0) {       // 如果查無影片

       console.log('No videos found');

       return;

     }

     else {

      // 查詢影片的編號與狀態

       videos.forEach(async (video, index)=>{          

         console.log(`Found video: ID "${video.id}",

State: ${video.state}`);

      //如果狀態為Processed(己分析完成),則顯示分析結果

       if (video.state=="Processed") {            

         const insightsUrl = `${API_URL}/${LOCATION}/Accounts/

${ACCOUNT_ID}/Videos/${video.id}/Index?accessToken=

${accessToken}`;

         const insightsRes = await fetch(

insightsUrl, { method: 'GET' });

         const insights = await insightsRes.json();

         var topics=insights['summarizedInsights']['topics'];

         topics.forEach((value, index)=>{

            //console.log(value.name);

            moderateText(value.name, index); // 審核影片中的文字

          });

        }

      });

    }

  } catch (err) {

    console.error('error:', err.message);

}

上述的debugVideoStatus函式會將Azure Video Indexer解析影片得到的文字傳送給名稱為moderateText函式, moderateText函式叫用Azure Content Safety內容安全服務審查影片中的文字是否違反內容安全的要求, 其內容如下:

var endpoint = "Azure Content Safety內容安全服務端點";

var key = "Azure Content Safety內容安全服務金鑰";

async function moderateText(value, index){

  var body = { // 準備欲分析的目標

    "text": value,

    "categories": [

      "Hate", "Sexual", "SelfHarm", "Violence"

    ],

  };

  try{

// 執行分析

    var response=await fetch(`${endpoint}/contentsafety/

text:analyze?api-version=2024-02-15-preview`, {

        method:"POST",

        body: JSON.stringify(body),

        headers:{

          "Content-Type": "application/json",

          "Ocp-Apim-Subscription-Key": key

        }

      });

      if (response.ok){          // 如果沒有發生錯誤

        var data=await response.json();// 取得分析結果

        //alert(JSON.stringify(data));

        var hateSeverity = data["categoriesAnalysis"][0]

["severity"];// 讀取仇恨指數

        var sexualSeverity = data["categoriesAnalysis"][1]

["severity"];// 讀取色情指數

        var selfHarmSeverity = data["categoriesAnalysis"][2]

["severity"];// 讀取自殘指數

        var violenceSeverity = data["categoriesAnalysis"][3]

["severity"];// 讀取暴力指數

        console.log(`Topic ${index}:仇恨:${hateSeverity},

成人:${sexualSeverity}, 自殘:${selfHarmSeverity},

暴力:${violenceSeverity}`);          // 顯示審查結果

 

      }

    }

    catch(err){

      alert(err.message);

    }

}

執行上述的程式您將會瀏覽器的主控台頁籤看到如圖2的畫面:

2: 顯示審查影片內容是否安全的畫面

程式碼範例下載網址: https://github.com/CraigIII/VideoContentSafety.git

留言

這個網誌中的熱門文章

AI時代的網站與手機App建置與開發Part27 - ML.NET與物件偵測

AI時代的網站與手機App建置與開發Part28 - 使用YOLO模型進行物件偵測

AI時代的網站與手機App建置與開發Part24 - ML.NET與圖片異常偵測