發表文章

透過 C# 動態建立 Zoom會議

圖片
我們可以使用 Zoom SDK,搭配C#即可透過程式碼建立線上會議,並且發送通知。若能實現這一點,我們就可以搭配 Chat Bot在群組對談中,透過自然語言對LINE會議小幫手來下達開會通知,請會議小幫手幫我們建立Zoom會議,並且把會議連結傳遞出來,例如,我們可以在群組中對機器人說: 請幫我建立一個週四下午3:30分的zooom線上會議,並且把會議連結傳送給資訊部門所有人,同時幫我設定開會前的通知提醒。 就可以實現一個聽得懂自然語言控制的會議助理。 要實現這件事,必須先要能夠透過程式碼控制Zoom,目前Zoom官方有提供 Rest API 讓開發者使用,如果想要更簡單的透過C#程式碼呼叫Zoom的各種功能,可以參考底下這套 Nuget 套件: https://www.nuget.org/packages/ZoomNet 你可以在專案中透過CLI指令引用: dotnet add package ZoomNet -- version 0.58 . 0 目前支援 .net framework 4.8, .net 3.x, .net 6,7 這幾個版本。 在使用前,你必須先具備 Zoom 的帳號,並且在Zoom的開發人員後台上登入( https://marketplace.zoom.us/ ),接著透過底下網址,建立一個 Zoom App: https://marketplace.zoom.us/user/build 第一次進入會出現要求你同意使用條款的畫面,畫面如下: 接著點選 Build App: 這邊會出現讓你建立 Zoom App的畫面: 有幾種 App 類型你需要注意: Zoom Apps 是屬於崁入在 Zoom Client端的App,一般來說是讓第三方開發團隊用來擴充 Zoom 功能用的。 JWT 是傳統的伺服器端App,不過已經快要淘汰(2023/6),所以不理它。 OAuth 是走標準的第三方應用程式類型,如果你想做一個網站,在該網站中,想幫特定用戶建立會議、列出會議清單、抓取會議錄影資料…就用這種App。 其實我們想要整合在 Chat Bot 裡面的功能,本來應該採用上述 2. 這個類型的App,但Zoom官方說要停用了,因此我們採用底下這個新的類型: 當你按下Create鈕,會出現: 直接輸...

敏捷小學堂 Part II - Azure Board Work Itmes的使用

圖片
A> B> C> D>

非常擬真的文字轉聲音服務(TTS)

Azure Speech服務除了可以將語音轉為文字,當然也可以從文字輸出語音。 我們看執行的結果:(有聲音) 上面這個影片當中,你會同時看到文字轉語音和語音轉文字,一開始的時候,我們讓電腦說出: 請透過語音下達指令…, 直到說 ‘我要離開’ 執行的是底下這段程式碼: await Speak ( speechConfig , "請透過語音下達指令..., 直到說 '我要離開'" ) ; 而Speak方法的內容如下: async static Task Speak ( SpeechConfig speechConfig , string text ) { // Configure speech synthesis speechConfig . SpeechSynthesisLanguage = "zh-TW" ; speechConfig . SpeechSynthesisVoiceName = "zh-TW-HsiaoChenNeural" ; //女生 speechConfig . SpeechSynthesisVoiceName = "zh-TW-YunJheNeural" ; //男生 using SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer ( speechConfig ) ; // Synthesize spoken output SpeechSynthesisResult speak = await speechSynthesizer . SpeakTextAsync ( text ) ; if ( speak . Reason != ResultReason . SynthesizingAudioCompleted ) { Cons...

非常厲害的語音轉文字(語音識別, STT)服務

在Azure的cognitive services當中,也有非常厲害的語音轉文字(語音識別)服務,從底下的這個 Console程式中你可以發現,語音服務幾乎完整的辨識筆者講的話,甚至速度加快也可以,中英文夾雜也可以: 要使用此服務相當簡單,同樣在Azure Portal上申請即可: 申請完成之後,取得 key 和 location,即可透過 .net SDK來開發。 例如,如果你想做一個語音助理,希望寫程式來識別用戶說的話,其實程式碼可能只有類似底下這幾行: using System ; using System . Text ; using System . Threading . Tasks ; using Microsoft . CognitiveServices . Speech ; using Microsoft . CognitiveServices . Speech . Audio ; namespace STT_example { class Program { async static Task FromMic ( SpeechConfig speechConfig ) { using var audioConfig = AudioConfig . FromDefaultMicrophoneInput ( ) ; using var recognizer = new SpeechRecognizer ( speechConfig , "zh-tw" , audioConfig ) ; Console . WriteLine ( "嗨~ 請透過語音下達指令..., 直到說 '我要離開' " ) ; var text = "" ; while ( ! text . Contains ( "離開" ) ) { var result = await...

使用Azure Cloud Shell

圖片
Cloud Shell是雲端的CLI環境,你可以從Azure Portal上直接啟動該環境: 這麼做的好處是,你即便在本機電腦(筆電)上沒有安裝AZ CLI,也可以透過網頁即可以命令列模式來管理雲端的資源。 另外,使用雲端版本的CLI還有一些額外的好處,諸如: 無須登入(az login…),因為你使用Cloud Shell的時候,本來就有登入Azure Portal。 無須安裝其餘CLI工具或SDK,諸如 git, dotnet , python, docker, kubectl…這些內建通通都有。甚至,還有網頁(陽春)版的VS Code!!! 底下影片介紹如何操作Cloud Shell,第一次進入的時候,會讓你選擇一個Azure 儲存體(Storage),並且選擇Linux或Windows環境: 所以,Cloud Shell內建就有Windows與Linux雙模式,你可以透過左上角的選項切換: 其實,Cloud Shell本身就是一個儲存體,你可以在該環境中建立資料夾,新增檔案,除非你刪除或無法存取該訂閱,否則這些資源都會保留在雲端儲存體中: 一般來說,如果要對雲端的Azure資源進行操作,我們常常會直接在Cloud Shell中,下CLI或Power Shell/Bash指令,省去在用戶端還需要安裝 CLI 並且做 az login 動作的麻煩。 有操作Azure的開發或維運人員,是一定得要試試看這個好工具的。

使用AI服務擷取文章重點

圖片
在Azure Cognitive Services 服務當中,文字分析(Text Analysis)服務可以針對用戶上傳的文字進行剖析,例如『文字情緒分析』、『關鍵字詞擷取』、『文字摘要』…等。這些服務都以rest api的形式出現,你只需要先取得呼叫API所需的金鑰與端點即可。 底下影片展示如何從 Azure Portal 建立『文字分析服務』,並且找到金鑰與端點: 有了金鑰與端點後,就可以透過程式碼來呼叫其功能。 例如其中的『擷取文章摘要』,是文字分析服務中剛推出沒多久的新功能,可以針對一篇文章、一段文字,抓取其中的重點。 呼叫的endpoint如下: POST { Endpoint } /language/:analyze-text?api-version = 2022-10-01-preview 除了header要傳遞key(金鑰)之外,body要符合底下json格式: { "displayName" : "Document ext Summarization Task Example" , "analysisInput" : { "documents" : [ { "id" : "1" , "language" : "zh" , "text" : "(要分析的文章)" } ] } , "tasks" : [ { "kind" : "ExtractiveSummarization" , "taskName" : "Document Extractive Summarization Task 1" , "parameters" : { "sentenceCount" : 3 } ...

使用Azure APIM 中的 Polices微調API的行為

圖片
最近這幾年,愈來愈多的網站改以前後端完全分離的架構來開發,而微服務盛行,許多後端應用、AI服務、甚或是商業邏輯,都改以WebAPI的方式來實作,更別說為數眾多的手機行動裝置App也需要以呼叫後端API的方式與伺服器端溝通,來完成各種功能。 因此,API開發成為最近幾年的顯學,API First也在許多場合被提起。Azure的APIM服務,就在這樣的情況下誕生了。 使用APIM服務 Azure APIM可以幫我們把企業內部的多組API打散或重新包裝,改以同一個endpoint對外,好讓使用者更方便使用,讓管理者更方便控制與管理。 另外,採用APIM還有一個好處,我們可以隔開用戶和真正的API,這樣除了可以保護後端真正的API,也可以在用戶透過APIM呼叫後端真正的API前,可以對往來(與回覆)的數據做一些加工處理,已達成我們需要的安全性或是API行為的改變,也更容易統一的進行全縣控制…等。 建立APIM 底下影片示範如何建立APIM服務,請注意APIM服務的建立,會花比較長的時間,可能會長達半小時以上: 完成之後,就可以建立好APIM服務了。 建立API集合 建立好APIM服務之後,接著可以在Azure Portal中,建立API集合,前面說過,我們會把實際上開發好的API,先整理成API集合,然後再包裝成產品(Product),釋出給客戶。 底下的說明,我們將示範如何將現有的API(在具備spec definition的狀況下),整理成待會要釋出的產品。我們以底下這組微軟官方的測試API為例: https://conferenceapi.azurewebsites.net?format=json 如果你點選上面這個網址,會發現,它出現的是json格式的API規格: 這是標準的 swagger 2.0規則,一般我們撰寫WebAPI之類的後端API服務,都可以透過工具自動產生這些規格文件。若具備這些規格文件。 你可以直接將API透過Import的方式匯入,請看底下操作影片: 從上面的影片當中,你會看到,我們利用 swagger 的json規格定義,把上面的微軟測試API,重新透過APIM封裝,建立另出了一組 endpoint 。 你可以發現API中有一個 GetSpeakers 方法,當我們運行(呼叫)這個方法,會以JSON格式回傳...

使用Computer Vision中的OCR文字辨識功能

圖片
OCR(Optical Character Recognition)指的是識別圖片中的文字,如果你先前已經成功使用Computer Vision API做影像識別(Image Analysis),那使用Computer Vision API做OCR肯定也難不倒你。 請參考同樣的文件: https://westus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-2/operations/56f91f2e778daf14a499f20d 你會發現,ORC的API與先前我們介紹過的影像分析幾乎一模一樣,唯一差別是要給定的endpoint URL,最後的結尾是『ocr』。設定如下: 另外,如果要辨識中文,建議要給定language這個queryString參數,值為『zh-Hant』。 有這些資訊就夠了,我們一樣透過postman來測試,關鍵的資訊如下: 關鍵資訊 值 endpoint https://你的endpoint.cognitiveservices.azure.com/vision/v3.2/ocr?language=zh-Hant Ocp-Apim-Subscription-Key(http Header) 你的key Http body {“url”:“要辨識的圖片url”} 透過這些,我們就可以嘗試辨識了。透過Rest API將要辨識的有像位置(url)傳遞過去,辨識的結果會以JSON回傳。 操作影片如下: 影片中,辨識的文件是底下這張圖: 該圖片的網址為: https://i.imgur.com/PWQDiRj.png 你也可以自行試試看,你會發現,中文的辨識度其實非常高,幾乎正確的辨識出每一組文字。 回傳的物件是JSON格式,由於圖片上的文字可能有橫有直,辨識出的結果會是以 Regions, Lines, Words, Text 為結構回傳: 透過 computer Vision 中的 ocr API,取得圖片上的文字變得非常輕鬆。 tags: 電子書 - Azure Cognitive Services

Azure Cosmos DB 建立與使用

圖片
什麼是非關聯式資料庫? 最近這幾年,非關聯式資料庫開始成為許多大型系統的架構考慮之一,原因有很多,但歸根究底核心原因我覺得是『全球化』。 過去企業(即便是大型的全球化企業)在建立資訊系統的時候,大部分都是以集中式為主的架構,也就是說,核心的資料庫只會有一份,頂多加上異地備援機制。 在傳統的企業營運需求上,這樣的設計完全沒問題,而且關聯式資料庫的特性就是 ACID ,有著結構清晰的資料表,經過正規化,存入的資料欄位都是固定的,這確保了資料的高可靠性與正確性,對企業應用系統來說,恰是所需。 但對於全球化的網際網路需求,可就不一定了。 當前的關聯式資料庫儲存資料有幾種類型,像是底下這樣: 你發現,這些資料的結構跟過去方方正正的資料表很是不同,現實生活中,有很多類似這樣的資料,例如: 若我們想表達一位用戶的朋友、資源、行事曆、檔案…等資訊,結構上就很可能不是傳統關聯式資料表所能表達的,這時候非關連式資料庫就開始派上用場。 除此之外,另外一個主因是 --『同步一致性』。 資料的同步問題 在企業內,資料的一致性似乎很重要,但一致性並非沒有代價,假設資料庫採分散式架構,在全球3-5個點都有資料庫,彼此之間進行同步抄寫。 這樣的架構底下,要維持一致性是很困難的,這也是大部分企業應用都採集中式架構的原因,但集中式架構最大的缺點是,如果總部斷線,就意味著全球各地區都別運作了。 但真實世界中,我們真的需要在全球有數個彼此同步抄寫的資料庫嗎? 過去沒有,但現在可能到處都是,最明顯的例子就是像FB之類的社群網站。 社群網站每秒中有數以萬計的留言對話,可能同時需要存入資料庫,如果採用傳統的關聯式資料庫,又是集中式設計,很可能根本無法運作,因為資料庫的loading太大了,光寫入資料就沒時間了,更何況還要承擔全球性的讀取。 所以非常有可能採用全球數個資料庫彼此抄寫的狀況,但這時候,『資料同步』將是個問題。 我鍵入一筆留言,在台灣的資料中心可以即時看到並回應,但在地球另一端的資料庫中卻可能還沒出現,因此我在國外的友人會隔一段時間才看到(需要等資料抄寫過去),然後他才能回應,同樣的當國外的友人回應,在台灣的我可能也不會立刻看到,而會延遲一段時間。 這就是分散式資料庫可能會碰到的問題。 這對於開發人員來說,是兩難。因為 集中式效率會變低,分散式會導致資料的精確性或...

建立與使用Computer Vision(電腦視覺)服務

Computer Vision 是Azure Cognitive Services中,一組作影像識別辨識的API,功能強大,可以進行圖片內容(意義)的識別。也可以找出圖片中的人臉,並且判斷年紀、性別。還可以進行OCR,找出圖片中的文字…等,該服務的官方網站位於: https://learn.microsoft.com/zh-TW/azure/cognitive-services/computer-vision/ 申請使用金鑰 使用上很簡單,可透過SDK或Rest API來呼叫,由於我們要透過程式碼來呼叫使用該服務,因此得先從Azure平台上申請一組Key,並取得Rest API的Endpoint。 請參考影片中的操作: 上面的影片中,你看到我們申請好Computer Vision服務,並取得金鑰與端點的位置。 使用Rest API呼叫識別服務 取得金鑰與端點之後就好辦了,參考官方文件,你會明白如何呼叫,以及API的詳細使用說明。 簡單的說,我們可以把圖片上傳給剛才我們建立好的服務端點(endpoint),然後雲端AI服務就幫我們辨識出圖片的結果(以JSON回傳),而呼叫的時候,需要一個key,僅此而已。 我在上課時,會刻意帶學員從網上找到底下這分文件,並且整個看過一次: https://westus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-2/operations/56f91f2e778daf14a499f21b 因為呼叫方式雖然常常快速迭代改版,但其實Azure Cognitive Services中幾乎每一個服務都有清晰的文件,只要能找到並看懂文件,抓到重點,呼叫上非常方便。 底下影片介紹你如何在文件中找到幾個關鍵,例如呼叫的參數、呼叫時的http method,以及上傳檔案給endpoint的方法: 看懂文件,你應該知道如何透過rest api呼叫該服務了(使用SDK的方式以後再談),接著,我們可以透過免費的postman工具,來嘗試呼叫該影像辨識服務。 postman是網路上免費可下載的 rest api呼叫測試工具,非常簡單好用。下載位置位於: https://www.postman.com/ 取得postman之後,就可以透過該工具,來...