Hugging Face推出SLM SmolVLM2讓影像理解模型進入到設備


隨著人工智慧技術的快速發展,視訊理解模型正變得越來越重要。Hugging Face 推出的 SmolVLM2 系列,憑藉其高效能與小型化設計,為視訊理解樹立了新標杆。本文將帶你快速了解 SmolVLM2 的核心技術、應用場景及其在視訊理解領域的突破。


SmolVLM2 的願景與目標

SmolVLM2 的使命是將視訊理解的能力帶到每一台設備,無論是手機還是伺服器。與傳統需要大量計算資源的大型模型不同,SmolVLM2 將高效模型與小型化設計結合,實現了低資源環境下的高效視訊處理。

目前,SmolVLM2 提供三種不同規模的模型:

  • 2.2B 模型:專為高效視訊和圖像理解而設計,是整個系列的旗艦。
  • 500M 模型:在小型化與效能之間取得良好平衡。
  • 256M 模型:實驗性質的極小型模型,探索小型模型的極限。

這些模型均可通過 Python 和 Swift API 使用,並且支持 Hugging Face 的 Transformers 框架。


核心技術與性能

SmolVLM2 2.2B:視覺與視訊的領先模型

2.2B 模型在多項基準測試中表現卓越,特別是在 Video-MME 基準上超越了所有現有的 2B 模型。該模型能夠:

  • 解決圖像中的數學問題。
  • 讀取照片中的文字。
  • 理解複雜圖表及科學視覺問題。

其記憶體效率極高,甚至可以在免費的 Google Colab 環境中運行。

更小巧的 500M 和 256M 模型

  • 500M 模型 提供了接近 2.2B 的視訊理解能力,但參數量僅為後者的四分之一。
  • 256M 模型 則是一個實驗性版本,旨在探索小型模型的應用潛力,適合創新應用和專門的微調項目。

應用場景:SmolVLM2 的多功能演示套件

為了展示 SmolVLM2 的多樣化應用,Hugging Face 開發了多個演示應用程式:

1. iPhone 影片理解

SmolVLM2 的 500M 模型已被整合到 iPhone 應用中,用戶可以直接在本地設備上分析視訊內容,無需依賴雲端運算。

2. VLC 媒體播放器集成

與 VLC 媒體播放器的合作,實現了智慧視訊片段描述和語義搜尋功能,用戶可以根據自然語言描述直接跳轉到影片中的相關部分。

3. 影片精彩片段產生器

這個應用程式可以從長達數小時的影片中自動提取最重要的時刻,適用於足球比賽等長時間的活動摘要。


與 Transformers 和 MLX 的結合

SmolVLM2 與 Hugging Face 的 Transformers 框架無縫集成,支持多種推理場景:

  • 影片推理:用戶可以通過簡單的聊天模板,讓模型生成對影片的詳細描述。
  • 多幅圖像推理:支援對多張圖片進行對比分析。
  • MLX 支持:在 Apple Silicon 裝置上運行 SmolVLM2 的高效推理,適合 Swift 開發者。

此外,SmolVL

SmolVLM2:將視訊理解帶入每台設備

隨著人工智慧技術的快速發展,視訊理解模型正變得越來越重要。Hugging Face 推出的 SmolVLM2 系列,憑藉其高效能與小型化設計,為視訊理解樹立了新標杆。本文將帶你快速了解 SmolVLM2 的核心技術、應用場景及其在視訊理解領域的突破。


SmolVLM2 的願景與目標

SmolVLM2 的使命是將視訊理解的能力帶到每一台設備,無論是手機還是伺服器。與傳統需要大量計算資源的大型模型不同,SmolVLM2 將高效模型與小型化設計結合,實現了低資源環境下的高效視訊處理。

目前,SmolVLM2 提供三種不同規模的模型:

  • 2.2B 模型:專為高效視訊和圖像理解而設計,是整個系列的旗艦。
  • 500M 模型:在小型化與效能之間取得良好平衡。
  • 256M 模型:實驗性質的極小型模型,探索小型模型的極限。

這些模型均可通過 Python 和 Swift API 使用,並且支持 Hugging Face 的 Transformers 框架。


核心技術與性能

SmolVLM2 2.2B:視覺與視訊的領先模型

2.2B 模型在多項基準測試中表現卓越,特別是在 Video-MME 基準上超越了所有現有的 2B 模型。該模型能夠:

  • 解決圖像中的數學問題。
  • 讀取照片中的文字。
  • 理解複雜圖表及科學視覺問題。

其記憶體效率極高,甚至可以在免費的 Google Colab 環境中運行。

更小巧的 500M 和 256M 模型

  • 500M 模型 提供了接近 2.2B 的視訊理解能力,但參數量僅為後者的四分之一。
  • 256M 模型 則是一個實驗性版本,旨在探索小型模型的應用潛力,適合創新應用和專門的微調項目。

應用場景:SmolVLM2 的多功能演示套件

為了展示 SmolVLM2 的多樣化應用,Hugging Face 開發了多個演示應用程式:

1. iPhone 影片理解

SmolVLM2 的 500M 模型已被整合到 iPhone 應用中,用戶可以直接在本地設備上分析視訊內容,無需依賴雲端運算。

2. VLC 媒體播放器集成

與 VLC 媒體播放器的合作,實現了智慧視訊片段描述和語義搜尋功能,用戶可以根據自然語言描述直接跳轉到影片中的相關部分。

3. 影片精彩片段產生器

這個應用程式可以從長達數小時的影片中自動提取最重要的時刻,適用於足球比賽等長時間的活動摘要。


與 Transformers 和 MLX 的結合

SmolVLM2 與 Hugging Face 的 Transformers 框架無縫集成,支持多種推理場景:

  • 影片推理:用戶可以通過簡單的聊天模板,讓模型生成對影片的詳細描述。
  • 多幅圖像推理:支援對多張圖片進行對比分析。
  • MLX 支持:在 Apple Silicon 裝置上運行 SmolVLM2 的高效推理,適合 Swift 開發者。

此外,SmolVLM2 還支持在視訊數據上的微調,用戶可以根據自己的需求進一步優化模型。


為未來創造更多可能

SmolVLM2 的推出標誌著視訊理解模型進入了一個新時代。它不僅在效能上實現了突破,還通過小型化設計使模型更加普及,適用於更多場景和設備。

如果你對 SmolVLM2 感興趣,歡迎探索以下資源:

M2 還支持在視訊數據上的微調,用戶可以根據自己的需求進一步優化模型。


為未來創造更多可能

SmolVLM2 的推出標誌著視訊理解模型進入了一個新時代。它不僅在效能上實現了突破,還通過小型化設計使模型更加普及,適用於更多場景和設備。

如果你對 SmolVLM2 感興趣,歡迎探索以下資源:

地震警報批次檔通知到line notify或官方推播方式

最近地震頻傳,但因為工作關係不見得都在電腦旁~於是思考另一種方式。把程式另存成ansi的bat檔案

一、使用line notify

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Notify
set LINE_TOKEN=你的line notify token

:: 準備訊息內容
set "message=地震警報! 震度: %magnitude%, 預計抵達時間: %seconds%秒"

:: 使用 curl 發送 LINE Notify
curl -X POST https://notify-api.line.me/api/notify ^
-H "Authorization: Bearer %LINE_TOKEN%" ^
-F "message=%message%"

if %ERRORLEVEL% EQU 0 (
echo LINE通知發送成功!
) else (
echo LINE通知發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)
goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

二、官方帳號推播給個人

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Messaging API 設定
set CHANNEL_TOKEN=你的chaneel token
set USER_ID=你的id

:: 使用 curl 發送訊息 (使用單引號並直接寫入JSON)
curl -v -X POST https://api.line.me/v2/bot/message/push ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer %CHANNEL_TOKEN%" ^
-d "{\"to\":\"%USER_ID%\",\"messages\":[{\"type\":\"text\",\"text\":\"地震警報!震度:%magnitude%,預計抵達時間:%seconds%秒\"}]}"

if %ERRORLEVEL% EQU 0 (
echo LINE訊息發送成功!
) else (
echo LINE訊息發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)

goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

25 個 JavaScript 新特性,讓你的程式碼更簡潔、更強大!

JavaScript 作為最受歡迎的程式語言之一,隨著 ECMAScript 標準的持續更新,為開發者帶來了許多實用又強大的新功能。不管你是新手還是老手,這些新特性都能幫助你寫出更簡潔、更高效的程式碼!以下精選了 25 個超實用的 ES 新特性,一起來看看吧!


1. 可選鏈操作符(Optional Chaining)

告別繁瑣的空值檢查,只需用 ?. 就能輕鬆處理物件屬性訪問。

javascript

// 傳統寫法
const street = user && user.address && user.address.street;

// 新寫法
const street = user?.address?.street;


2. 空值合併運算符(Nullish Coalescing)

?? 處理 nullundefined 的預設值設定。

javascript

const value = null;
const defaultValue = value ?? 'default'; // 結果為 'default'

3. 私有類字段(Private Class Fields)

# 宣告私有字段,讓封裝性更強。

javascript

class Person {
#name;
constructor(name) {
this.#name = name;
}

getName() {
return this.#name;
}
}


4. 動態匯入(Dynamic Import)

按需載入模組,提升應用效能。

javascript

button.addEventListener('click', async () => {
const module = await import('./feature.js');
module.doSomething();
});

5. Array.prototype.flat() 和 flatMap()

輕鬆展平嵌套陣列。

javascript

const nested = [1, [2, 3], [4, [5, 6]]];
const flattened = nested.flat(2); // 結果為 [1, 2, 3, 4, 5, 6]

6. 物件字面量增強

更簡潔的物件屬性與方法定義。

javascript

const name = 'Tom';
const age = 18;
const person = {
name,
age,
sayHi() {
console.log('Hi!');
}
};

7. Promise.allSettled()

等待所有 Promise 完成,不管成功或失敗。

javascript

const promises = [
fetch('/api/1'),
fetch('/api/2'),
fetch('/api/3')
];

const results = await Promise.allSettled(promises);


8. BigInt

處理超大整數。

javascript

const bigNumber = 9007199254740991n;
const result = bigNumber + 1n;

9. globalThis

統一的全域物件存取方式。

javascript

console.log(globalThis);

10. String.prototype.matchAll()

更強大的字串匹配功能。

javascript

const str = 'test1test2test3';
const regexp = /test(\d)/g;
const matches = [...str.matchAll(regexp)];

11. 邏輯賦值運算符

簡化條件賦值操作。

javascript

複製
x &&= y; // 等同於 x && (x = y)
x ||= y; // 等同於 x || (x = y)
x ??= y; // 等同於 x ?? (x = y)

12. Promise.any()

返回第一個成功的 Promise。

javascript

const promises = [
fetch('/api/1'),
fetch('/api/2'),
fetch('/api/3')
];

try {

const first = await Promise.any(promises);
console.log(first);
}
catch (error) {
console.log('All promises rejected');
}

13. 數字分隔符

提高大數字的可讀性。

javascript
const billion = 1_000_000_000;
const bytes = 0xFF_FF_FF_FF;

14. String.prototype.replaceAll()

一次替換字串中所有的匹配項。


15. WeakRef 和 FinalizationRegistry

更好的記憶體管理方式。


16. 頂層 await

在模組的頂層直接使用 await


17. 類靜態初始化塊

更靈活的類靜態成員初始化。


18. at() 方法

更直觀的陣列索引訪問。

javascript
const arr = [1, 2, 3];
console.log(arr.at(-1)); // 結果為 3

19. Object.hasOwn()

更安全的屬性檢查方法。


20. 錯誤原因(Error Cause)

更好的錯誤追蹤。


21. Array.prototype.group()

方便的陣列分組操作。


22. 正則表達式命名捕獲組

更清晰的正則匹配結果。


23. Promise.withResolvers()

更優雅的 Promise 操控方式。


24. Array 複製方法

不修改原陣列的情況下進行操作。

javascript

const arr = [1, 2, 3];
const copy = arr.toReversed(); // 複製並反轉
const sorted = arr.toSorted(); // 複製並排序

25. 裝飾器

增強類與類成員的功能。

javascript

function logged(target, context) {
return class extends target {
exec(...args) {
console.log('Starting execution...');
const result = super.exec(...args);
console.log('Finished execution.');
return result;
}
};
}

@logged
class Example {
exec() {
// ...
}
}


這 25 個 JavaScript 新特性不僅讓程式碼更簡潔,也讓開發過程更加流暢!快把它們用到你的專案中,提升程式碼品質吧!

理解c# 程式非同步async 跟await

隨著軟體開發的進步,以及硬體效能不斷增加,非同步程式設計是現代程式開發很重要的技術。在c# 主要以async 與await 二個關鍵字,讓非同步更直觀與容易管理。

非同步程式設計是允許程式在等待其他非阻塞任務操作完成時,能繼續執行其他任務的一個技術。能提高系統的回應性以及性能,尤其在處理高併發請求或者是耗時間的操作上。

async關鍵字

這個關鍵字主要用宣告這個方法是非同步的,但它不會去啟動一個新的執行緒,而是告訴compiler該下來的方法會有await的關鍵字,compiler需要為這個方法支持非同步的操作。

而async主要是宣告方法,而且只能回傳Task、Task<TResult>、void一起使用,但不建議void。

await關鍵字

awiat 是用來等待非同步操作完成用的關鍵字,只能在有宣告asyncASYNC的方法內部,compliler遇到await ,會將方法中其他部門註冊為等待任務延續,然後立既返回user。


using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args) // Main也可以非同步的
{
try
{
string content = await DownloadContentAsync(“https://example.com”);
Console.WriteLine(content.Substring(0, 100));
}
catch (Exception ex)
{
Console.WriteLine($”An error occurred: {ex.Message}”);
}
}

static async Task DownloadContentAsync(string url)
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(url); // 透過非同步取得
response.EnsureSuccessStatusCode(); // 確定回應碼是是正確
return await response.Content.ReadAsStringAsync(); // 透過非同步取得回傳內容作回應
}
}
}

上面的例子中,透過await 關鍵字 donwloadcontentasync 的方法,不會阻塞主執行緒,而是允許程式在等網路回應時繼續執行其他任務

非同步的異常處理

在處理非同步的異常,可以用try catch 來await 。而非同步方法在拋出異常時,會封裝在回傳的Task 裡。

注意的事

避免在非同步用.Result 跟 wait() 會導致死結與效能問題

非同步方法會盡可能快速回傳,避免在非同步的方法裡執行需長時間運行的同步程式,會造成執行緖阻塞。
確實處理非同步中會發生的異常,避免程式崩潰與資料損毀

團購、直播下單使用google 表單並即時mail/SMS通知

google 有一個apps script的服務,可以結合表單 。

 

function sendEmailOnNewEntry(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
var row = range.getRow();

var emailAddress = sheet.getRange(row, 2).getValue();
var ordername =sheet.getRange(row, 3).getValue();
var ordernum = sheet.getRange(row,5).getValue();
var ordergetdate = sheet.getRange(row,6).getValue();
var mobileNumber = sheet.getRange(row, 4).getValue();

var subject = '【豐原團購】甲竹園玫瑰檸檬塔訂購成功';
var message = ordername+'您好:提醒您玫瑰檸檬塔訂購成功. 訂購數量為'+ordernum+'盒,預計取貨日為:'+ordergetdate;

if (emailAddress) {
MailApp.sendEmail(emailAddress, subject, message);
}
// 發送簡訊
if (mobileNumber) {
var smsMessage = ordername+'您好,玫瑰檸檬塔訂購成功。數量為' + ordernum + '盒,取貨日為:' + ordergetdate;
sendSMS(mobileNumber, smsMessage);
}
var lineMessage= ordername+'您好,玫瑰檸檬塔訂購成功。數量為' + ordernum + '盒,取貨日為:' + ordergetdate;
sendLineNotify(lineMessage);
}

function sendLineNotify(message) {

var lineNotifyToken = 'xxxxxxxxxxxx';
var url = 'https://notify-api.line.me/api/notify';
var options = {
'method': 'post',
'payload': 'message=' + message,
'headers': {
'Authorization': 'Bearer ' + lineNotifyToken
}
};
UrlFetchApp.fetch(url, options);
}

function sendSMS(mobile, message) {
var url = 'http://api.twsms.com/json/sms_send.php';
var username = 'xxxxxxxx'; // 替換為你的用戶名
var password = 'xxxxxxxxxx'; // 替換為你的密碼

var payload = {
username: username,
password: password,
mobile: mobile,
message: encodeURIComponent(message)
};

var options = {
method: 'post',
payload: payload
};

UrlFetchApp.fetch(url, options);
}

有趣的.net core 後端人員AI面試

昨天晚上,wil 保哥發了一則貼文。就是用gpt4訓練了一個.net core 後端工程師的面試line。主要是透過問答方式,瞭解像.net core與.net framework的異同、restful api的設計原則、非同步、DI、memorycache、middleware、entity framework。

wil保哥徵才原貼

gpt 多奇 AI 面試官 ( .NET )

line官方帳號  @290quxfz

地震使用業務型無線電防災

2017年辦市集時,前小編建議的無線電
用的時間不多,但為了怕電池問題 三不五時都帶出來
這次地震,剛好就拿到公司做防震的一個宣導
在地震當下會有停電,這時候依靠基地台的手機通訊僅能撐一小時
而一般無線電1800毫安(mah),以接收的耗電量100ma來計算。可以待機18小時(電池續航力 = 電池容量 (mAh) / 負載電流 (mA)),以救難整點呼救的慣例,可以有至少一週的電量。
而這種免考照的UHF業務型無線電,依台灣發給的FRS從467.5125~467.6750共14頻道以及38組CTCSS (Continuous Tone-Coded Squelch System),也是很容易找得到。缺點是聽不到收音機而已~ 但這頻率對於室內的穿透性是很高的