使用 ML.NET 識別樂高顏色塊

2021-01-20 移動開發和人工智慧

每一個樂高迷都擁有很多的顏色塊,需要進行排序和按類型分揀,按照《Organizing your LEGO Bricks》或許有所幫助,但這不是一個簡單的任務,因為有很多顏色塊有非常微妙的差異。如果換作一個典型的程式設計師可以做什麼來解決這個問題呢?你猜對了 - 建立一個程序使用 ML.NET 來識別樂高的顏色塊。

首先,我們將創建一個控制臺應用並添加所需的包

> dotnet new console
> dotnet add package Microsoft.ML
> dotnet add package Microsoft.ML.Vision
> dotnet add package Microsoft.ML.ImageAnalytics
> dotnet add package SciSharp.TensorFlow.Redist

在項目文件夾的根目錄中,我將創建一個名為 pieces 的子文件夾,並在此文件夾中創建一些顏色分類的子文件夾,放置訓練集中的每種顏色的圖片。

使用時,我們需要定義輸入和輸出模型(分類器提供分類結果)。

public class ModelInput
{
public string Label { get; set; }
public string ImageSource { get; set; }
}

public class ModelOutput
{
public String PredictedLabel { get; set; }
}

為了訓練模型,我們首先創建一個由目錄中的圖像組成的輸入數據集,並將其作為標籤分配它們位於的目錄的名稱。在此之後,我們創建訓練管道,最後,使用數據進行訓練以創建模型。

static void TrainModel()
{
// Create the input dataset
var inputs = new List<ModelInput>();
foreach (var subDir in Directory.GetDirectories(inputDataDirectoryPath))
{
foreach (var file in Directory.GetFiles(subDir))
{
inputs.Add(new ModelInput() { Label = subDir.Split("\\").Last(), ImageSource = file });
}
}
var trainingDataView = mlContext.Data.LoadFromEnumerable<ModelInput>(inputs);
// Create training pipeline
var dataProcessPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label", "Label")
.Append(mlContext.Transforms.LoadRawImageBytes("ImageSource_featurized", null, "ImageSource"))
.Append(mlContext.Transforms.CopyColumns("Features", "ImageSource_featurized"));
var trainer = mlContext.MulticlassClassification.Trainers.ImageClassification(new ImageClassificationTrainer.Options() { LabelColumnName = "Label", FeatureColumnName = "Features" })
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel", "PredictedLabel"));
IEstimator<ITransformer> trainingPipeline = dataProcessPipeline.Append(trainer);
// Create the model
mlModel = trainingPipeline.Fit(trainingDataView);
}


現在,使用這個訓練模型,我們可以嘗試對一個新圖像進行分類。通過為其中一個圖像創建模型輸入,然後將它傳遞到使用分類器構建的模型創建的預測引擎。


static ModelOutput Classify(string filePath)
{
// Create input to classify
ModelInput input = new ModelInput() { ImageSource = filePath };
// Load model and predict
var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel);
return predEngine.Predict(input);
}


最後讓我們用4種不同的顏色來測試這一點。


static void Main()
{
TrainModel();

var result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Black.jpg");
Console.WriteLine($"Testing with black piece. Prediction: {result.PredictedLabel}.");
result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Blue.jpg");
Console.WriteLine($"Testing with blue piece. Prediction: {result.PredictedLabel}.");
result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Green.jpg");
Console.WriteLine($"Testing with green piece. Prediction: {result.PredictedLabel}.");
result = Classify(Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Yellow.jpg");
Console.WriteLine($"Testing with yellow piece. Prediction: {result.PredictedLabel}.");
}


結果如圖所示。

4張圖片對了3個!略微有點令人失望。但這是一個很好的開始,因為它給了我們機會去深入,並試圖了解如何改進分類,使其更準確。也許它需要更多的訓練數據,也許有更好的分類算法我們可以使用!

項目完整示例代碼和訓練數據在GIthub上:https://github.com/BeanHsiang/Vainosamples/tree/master/CSharp/ML/LegoColorIdentifier


相關焦點

  • C#使用ML.Net完成人工智慧預測
    出品 | 腳本之家(ID:jb51net)然後我們可以看到,它提供了一些方案,如語義識別,圖像識別,數值預測等。到這裡,我們ML.Net就算初步學會使用了。訓練時長模型生成器使用 AutoML 瀏覽多個模型,以查找性能最佳的模型。
  • ML.NET 0.7 發布,微軟開源的跨平臺機器學習框架
    微軟發布了 ML.NET 0.7,此版本側重於為基於推薦的機器學習任務提供更好的支持,主要實現了異常檢測、增強了機器學習 pipeline 的可定製性,並且支持在 x86 應用程式中使用等。
  • 玩轉樂高大顆粒積木(八十)——9090樂高海龜、向日葵
    樂高海龜這次的海龜使用的是純顆粒搭建的,整個作品沒有使用百變工程系列的積木,搭建海龜之前我們先來了解一下海龜,海龜生活在亞熱帶近海上層,終身生活於海洋中。大多數海龜居住在沿岸的淺灘水域,有些種類的海龜冬季居住在食物豐富的水域,到了季產卵季節會作一次長途遷徙。
  • 樂高《星際迷航》「企業號」MOC作品欣賞
    今天小編帶給大家一些星航「企業號」的樂高MOC作品,希望大家喜歡。英國人將其改名為皇家海軍企業號(HMS Enterprize)以供皇家海軍使用。第一艘使用"U.S.S Enterprise"(聯邦海軍企業號)的美國船艦是美國獨立戰爭中的一艘單桅戰船。還有二戰中的美軍功勳航空母艦(CV-6 Enterprise)。第八艘使用該名的美國船艦是世界上第一艘核動力航空母艦(CVN-65)。
  • 樂高無所不能 玩家打造《光環》士官長全套盔甲_遊俠網 Ali213.net
    但他並未就此收手,他耗時近六個月完工了用樂高打造的全套士官長盔甲。為了提高穩固性,這套盔甲的部分環節使用了膠水固定,並且可以穿在身上到處走動。這不光是一個樂高藝術品,同時也完成了一個高難度的COSPLAY。
  • 樂高集團與利勃海爾聯合開發 樂高®Technic™系列全新...
    樂高集團市場營銷總監Niels Henrik Horsted表示,「當粉絲們使用樂高®Technic™系列部件進行拼搭時,我們希望為他們提供更真實的體驗。這種全新的控制方式將物理世界和數字世界聯繫起來,使拼搭的模型與原型更加接近。」
  • 樂高副櫛龍骨架MOC圖紙分享
    今天分享給大家來自樂高玩家KONGZILLA的樂高翼龍骨架MOC圖紙,希望大家喜歡!【文中圖片以及視頻素材來自網絡,侵權刪除】添加小編微信請識別以上二維碼更多精彩內容>通過樂高人仔看星戰炮灰進化史一起看看那些經典的樂高馬裡奧作品一隻超過一萬美金?
  • SCP-387活體樂高,當你睡覺的時候,一群樂高玩具站在了你的床邊
    SCP-387活體樂高的外表SCP-387活體樂高是一罐設計正常的商業版樂高玩具。其中也包含普通玩具中所不包含的如圓形車輪和稜鏡之類形狀的積木。SCP-387活體樂高上沒有商標,在公司臥底的探員們調查的一系列公司也未曾生產過此類形狀特異的樂高玩具。當罐子未滿的時候,裡面的樂高積木將緩慢的自我複製,直到整個容器裝滿。
  • 如何使用樂高測量普朗克常數?
    正因為如此,科學家必須要收集大量基於普朗克常數的質量數據;或者反過來,從已知質量逆推得到普朗克常數相關的數值。近日,位於馬裡蘭州的國家標準與技術研究所裡,研究人員提供並解釋了一種好的解決方案:用樂高製作一套實驗儀器來幫助實驗。 該設備在原理上相當簡單單。儀器將以質量上所造成的力—物體下墜的重力與由載流線圈所產生的磁場所施予的力達成兩者平衡來加以測試。
  • 打開樂高新世界的大門——樂高科技42078鬥牛犬卡車
    2018年來啦我們的樂高也出新系列啦!在2018年上半年的樂高科技系列產品線中無疑42078是最引人注目的。這是丹麥樂高與美國馬克卡車首度合作。想必大家不知道其實在樂高的世界中卡車的地位一直是舉足輕重的,每次出新品都將是標杆,想必這次也不例外,回顧往期的樂高卡車系列285、8258、8109、8110、9397、42043......
  • 樂高海底機器人圖片大全_樂高機器人 - CSDN
    南聯盟多山、多森林的地形以及多陰雨天的氣候條件,大大影響了北約偵察衛星及高空偵察機的偵察效果,塞軍的防空火力又很猛,有人偵察機不敢低飛,致使北約空軍無法識別及攻擊雲層下面的目標。為了減少人員的傷亡,北約大量使用了無人機。科索沃戰爭是世界局部戰爭中使用無人機數量最多、無人機發揮作用最大的戰爭。
  • 100萬塊樂高積木和2300個玩具馬達,樂高布加迪直接開車走
    樂高是每個小孩童年最開心的回憶。如果你去過樂高主題樂園,一定很想使用那些樂高打造出來的火車、飛機!樂高現在就實現了很多人的願望,他們竟然真的打造出「真實版樂高超跑」,還拍了影片證明真的能開車上路!▼你沒看錯!
  • 「樂高」突然生變!全國100多家樂高活動中心面臨關停,川企出手接盤
    近日,上海三家樂高活動中心突然關閉引發關注,店家在12月16日發布的《閉店聲明》中表示,關店原因是樂高教育9月份與代理商西覓亞解約,要求門店在12月底停止樂高教育品牌使用。 紅星新聞記者了解到,這次解約波及西覓亞在全國的150多家樂高活動中心。
  • 樂高搭建《太空漫步機》---曲柄搖杆機構的運用
    圖1 小區內的太空漫步機您有使用過這種太空漫步機健身麼?您知道太空漫步機運用了什麼機械結構麼?我想您一定是猜到了,這臺太空漫步機就是運用了曲柄搖杆機構的原理而製造成的。今天我們的搭建案例就是用樂高積木復原這臺太空漫步機。圖2來源於網絡,是太空漫步機的實物照片;圖3是我們用樂高積木搭建完成的太空漫步機模型,怎麼樣,還蠻像的吧。
  • 樂高侏羅紀公園2020
    恐龍作為地球上曾經的霸主有著非常強大的能力,而在樂高侏羅紀公園2020的遊戲中玩家需要與各種各樣的恐龍鬥智鬥勇,遊戲採用了精美的3D畫面和有趣的樂高人物造型,帶領玩家走進一個不一樣的侏羅紀時代,與各種各樣的恐龍一起冒險吧。
  • 樂高科技 四 —— 磁懸浮 升降臺
    QQ查看的朋友可以把二維碼保存到手機裡用微信掃一掃識別相冊二維碼也可以直接關注啦 0^0由於樂高群人數已超100人現在只能我來拉人了,大家可掃一下二維碼加我。也可用微信搜索:lz116424lf  加我。驗證時請說明是否要加群
  • 樂高甲龍MOC圖紙分享,恐龍小分隊6隻集齊
    今天分享給大家來自樂高玩家Kongzilla的樂高甲龍MOC圖紙,希望大家喜歡。樂高副櫛龍骨架MOC圖紙分享樂高翼龍骨架MOC圖紙分享樂高劍龍骨架MOC圖紙分享樂高霸王龍骨架MOC圖紙分享樂高三角龍骨架MOC圖紙樂高積木,創意無限,分享就到這裡,如果喜歡以上內容請點擊右下角
  • 2017年聖誕節即將來臨,亞馬遜、ASOS和樂高等零售商推出11款熱銷...
    打造優質listing,經濟使用FBA,與大賣互動暢聊如何提升單量。
  • 樂高零件認識清單【收藏】
    對於剛入行機器人教育的外行的老師來說,機械方面的專業知識可能是每個老師的短板,我特意找了一下樂高的一下零件,供每個新入行的老師學習,下面的零件清單是樂高裡面的零件
  • 成都米樂高圖像科技 全息技術實現空間物聯
    ,將餐廳再度升級,將傳統餐廳轉變為數字餐廳,以數位化替換傳統裝飾,為迎合宴御高端海鮮自助的定位,以3D全息氛圍為基點,圍繞海洋的主題來營造餐廳的經營氣氛,使主題成為顧客容易識別餐廳的特徵和產生消費行為的刺激物,全方位的幫助宴御打造差異化。