管理員
統計數據
原文網址 石小川 2020-03-22 15:02:17
近期為了ROS(機器人作業系統)相關專案,於是想起了以前的小玩具 - ROVIO,塵封已久的路威機器人在倉庫找了許久,終於抓到這隻小烏龜了,檢查電池、發現零組件狀況不錯,可見保存很好,這個ROVIO機器人麻雀雖小卻五臟俱全,看看下面硬體規格就知道。分享給有興趣製作機器人的朋友做參考。 Rovio機器人主要特點: 內含麥克風及喇叭可以雙向語音交談 可以遙控攝影機頭上下移動 可以手機和電腦或者Pad遠程網路控制 可以自動充電 雷達偵測障礙 硬體規格: 是以三大電路板結合而成: (1)主ARM 板 Main Processor —科宇KOI-MP802 蓋面 實際為華邦 W99702 內建mpeg壓縮 跑 WEB server ,rtsp , and 主機總控 制 "spook" media streaming server ( [Spook Live Video Streamer] ( http://www.litech.org/spook/ ) ) Clock frequency 200Mhz Main Memory — 8MB RAM USB ttl port 與電腦通訊 (以W99100DG實現,負責isp下載) Audio chip WM8976 Web cam video chip OV7670 SPI FLASH(W25X16) 2MB OS Open-source "eCos" (2)充電電路板:專用NiMH充電管理芯片LS2516,PWM恆流方式, 電流不詳,穩壓二極體用的是1N5822,估計>1A。 (3)驅動板 MCU:4路BJT H電橋,3個輪子用光柵反饋,攝像頭升降用 可變電阻反饋,紅外線訊號和主控板通過串口通訊。 自動導航電路以紅外線感應運算 充電基座會投射出紅外線導航點,車上再以紅外線感應器做幾何 定位.定位程式由專門晶片負責.再送出串口訊號回應給上位機定位訊息
海闊天 2020-03-22 15:42:03
這台夢幻超跑要賣多少錢啊?小川哥!
海闊天 2020-03-22 15:42:32
海闊天 2020-03-22 15:42:44
石小川 2020-03-22 17:31:46
2013年露天買的, 3000多台幣, 拿來解剖研究用! 哈哈!
詹俊英 2020-03-24 20:58:27
原文網址 石小川 2020-03-18 19:49:48
Android Studio是Google官方自家推出的免費開發工具,學習Android程式設計當然首選是Android Studio。 現在智慧手機功能強大, 多核心、影像、語音、通訊、GPS該有的都有了,隨身攜帶配合不同Sensor,想到智慧手機就有128種用途,不好好利用它實在浪費,計畫開相關Android軟/硬體實作課程。有興趣的同學可先下載Android Studio熟悉一下開發環境。 p.s. 因為Android Studio主要是用Java語言來開發程式,下次再貼文如何用Python結合Android Studio開發應用程式的方法。 注意,必須先安裝JDK,再安裝Android Studio。 步驟1. JDK下載與安裝: 須確定你的作業系統是32位元或64位元,然後選擇32位元或 64位元。 https://www.oracle.com/java/technologies/javase-jdk14-downloads.html 因為我的OS是Win10 64位元,故選 jdk-14_windows-x64_bin.exe 圖1 ? 步驟2. 確認JDK安裝版本是否正確 進入命令列視窗後輸入「java -version」指令,即可查詢目前java運作的版本。 圖2 ? 步驟3. Android Studio下載與安裝 請到下面官網Android Developers 下載,安裝很簡單,按Next鍵就對了。 https://developer.android.com/studio ? 圖3 步驟4. Android Studio IDE 如圖開發環境特寫。 ? 圖 4
原文網址 石小川 2020-03-14 13:57:44
今天不談神經網路的推導公式,先把它晾在一邊,我們來說說自動程式產生器應用到神經網路學習模型的開發。
深度學習已經大幅提升了影像、語音的辨識率,但實際上,底層的神經元(neuron)及網路是極度簡化下的模型,只能說還是有很大的成長空間,因此才會冠上類神經網路(ANN)模型的名稱。
圖是N年前為了做影像處理專案時設計的一個影像功能拖放(drag and drop)圖控軟體框架,主要就是將所有影像的演算法封裝在工具箱圖控(icon)元件中,使用者只要拖拉不同icon連結或直接將icon放置在圖片上就可自動影像處理,很像現在的LabVIEW,設計的理想就是做到了end user不用再寫任何影像處理有關的程式。
這跟神經網路有甚麼關係呢?
現在很多人工智慧的產品卻沒有人工智慧! 我們當然希望按一個鍵,電腦就可以幫我們完成幾百甚至上萬件事情,而不是反過來要看厚厚的手冊、學幾年的程式語言只為了完成一件事。當然上述我是有點誇張,不過我主要訴求就是要有一些人工智慧,程式就盡量自動化產生,雖然我也很愛Coding。
最後回到正題,計畫用Python 和 C++做類似圖中的圖控軟體框架,改寫成一個自適應類神經網路的專家系統,研究者只要拖拉圖控元件,讓電腦自已完成神經網路的架構及模型推論,當然我會把一些深度學習及機器學習演算法也封裝進圖控元件中,因為我這邊的超級電腦還沒搞定,所以大概只能跑一般的GPU了。
p.s. 這個版本會開源,因為只能假日抽空整理,以陸續釋放程式碼的方式為主。有興趣的朋友就當作一起線上技術交流研討^^
原文網址 石小川 2020-03-07 18:57:10
當相同類型的程式時常使用或必須重複呼叫時,這時就是考慮將副程式加進程式庫的時候,我習慣將功能相同的函式放在一起製作專用的程式庫,例如處裡影像副程式放在TImage.dll、處裡語音副程式放在 TSpeech.dll、處裡神經網路程式放在TNeuron.dll、處裡光達程式放在TLidar.dll等等 , 一旦你的程式庫累計的夠多的話,將來設計APP應用程式就會如同貼圖一樣方便,只要呼叫程式庫就好,主程式變少了。 接下來Demo一個動態程式庫TSystem.dll,裡面函式是負責儲存使用者最後操作各個視窗元件位置及大小的資訊, 請一步步看圖解。 step1. 建立新的專案。 圖1 ? step2. 選 C#類別庫, 按下一步。 圖2 ? step3. 設定新的專案, 並按建立。 圖3 ? step4. 設計程式碼TSystem.cs。 //---------------------------------------------------------------------- //動態程式庫 TSystem.dll 範例 //---------------------------------------------------------------------- using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Drawing; namespaceTSystem { public class WindowPosition { //--------------------------------------------------------------------- public void WriteSystemInfo(string FileName, Point position) { BinaryWriter WriteFile = new BinaryWriter(File.Open(FileName, FileMode.Create)); WriteFile.Write(position.X); WriteFile.Write(position.Y); WriteFile.Close(); } //------------------------------------------------------------------------ public Point ReadSystemInfo(string FileName) { if(!File.Exists(FileName)) return new Point(-1, -1); BinaryReader ReadFile = new BinaryReader(File.Open(FileName, FileMode.Open)); Point position = new Point(ReadFile.ReadInt32(), ReadFile.ReadInt32()); ReadFile.Close(); return position; } } //public class WindowPosition //------------------------------------------------------------------------- public class WindowhSize { //--------------------------------------------------------------------- public void WriteSystemInfo(string FileName, Size size) { BinaryWriter WriteFile = new BinaryWriter(File.Open(FileName, FileMode.Create)); //main form size WriteFile.Write(size.Width); WriteFile.Write(size.Height); WriteFile.Close(); } //------------------------------------------------------------------------ public Size ReadSystemInfo(string FileName) { if(!File.Exists(FileName)) return new Size(-1, -1); BinaryReader ReadFile = new BinaryReader(File.Open(FileName, FileMode.Open)); Size size = new Size(ReadFile.ReadInt32(), ReadFile.ReadInt32()); ReadFile.Close(); return size; } } //public class WindowSize } //namespace TSystem step5. 建置方案, 產生TSystem.dll。 圖4 ? step6. 產生的TSystem.dll的檔案及路徑。 圖5 ? step7. 主程式呼叫TSystem.dll, 需將產生的TSystem.dll加入參考。 圖6 ? step8. 主程式呼叫TSystem.dll( 關注//Note的地方即可 )。 //---------------------------------------------------------------------- //C# 主程式呼叫動態程式庫 TSystem.dll 範例 //---------------------------------------------------------------------- using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; using Emgu.Util; using Emgu.CV.UI; using Emgu.CV.BgSegm; using Emgu.CV.VideoSurveillance; //Note using TSystem; using TCamera; //----------------------------------------------------------------------------- namespace VT { public partial class MainForm : Form { //--------------------------------------------------------------------- public ToolboxForm CreateToolboxForm(Form parent, string text, bool bshow = true) { ToolboxForm toolboxForm; toolboxForm = new ToolboxForm(); toolboxForm.MdiParent = parent; toolboxForm.Text = text; if(bshow) toolboxForm.Show(); return toolboxForm; }//---------------------------------------------------------------------public ImageXYForm CreateImageXYForm(Form parent, int number,stringtext, bool bshow = true){ ImageXYForm imageForm; imageForm = new ImageXYForm(number); imageForm.MdiParent = parent; imageForm.Text = text; if(bshow) imageForm.Show(); return imageForm;}//---------------------------------------------------------------------public static MainForm _gmainForm = null;public static ToolboxForm _gtoolboxForm = null;public static ImageXYForm _gimageXYForm = null; //Note public WindowhSize _winSize = null;//---------------------------------------------------------------------//Main Program//---------------------------------------------------------------------public MainForm(){ InitializeComponent();}//---------------------------------------------------------------------private void MainForm_Load(objectsender, EventArgs e){ _gmainForm = this; //Note //讀取系統設定檔 _winSize = new WindowhSize(); Size size = _winSize.ReadSystemInfo(@"..\..\system\mainform.inf"); if(size.Width == -1 && size.Height == -1) this.ClientSize = new Size(1200, 700); else this.ClientSize = new Size(size.Width, size.Height);//修改mdi窗体背景色--------------------------------------------------------MdiClient ctlMDI;// Loop through all of the form's controls lookingforeach(Control ctl in this.Controls){ try { // Attempt to cast the control to type MdiClient. ctlMDI = (MdiClient) ctl; // Set the BackColor of the MdiClient control. ctlMDI.BackColor = Color.LightGray; //this.BackColor; //Color.Blue; } catch(InvalidCastException) { // Catch and ignore the error if casting failed. }} _gtoolboxForm = CreateToolboxForm(this, "工具箱"); _gimageXYForm = CreateImageXYForm(this, 0, "XY軸攝影機");} //private void MainForm_Load(object sender, EventArgs e)//--------------------------------------------------------------------- private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { //Note _winSize.WriteSystemInfo(@"....\system\mainform.inf", new Size(this.ClientSize.Width, this.ClientSize.Height)); } } //public partial class MainForm : Form } //namespace VT step9. 執行主程式成功。 圖7 ?
原文網址 石小川 2020-01-17 01:29:36
圖中程式都是早期用C++ Builder 5.0版本開發的一些語音辨識合成工具軟體,程式是用MFCC特徵處裡語音信號, 辨識引擎是用RNN神經網路。其中語料有幾萬筆,含括中英文連音、單音,詞庫等,如果有興趣用Python + GPU開發語音辨識合成的朋友可連繫我提供原始碼修改, 語料庫因為有版權無法公開放送,但可以借用!
賴建宏 2020-02-14 08:13:30
有興趣
Cheng Yu Wang 2020-02-14 19:51:11
有興趣 2
原文網址 石小川 2020-01-12 01:31:09
8耳相位麥克風陣列(Microphone Array) - 輸入音源降噪、語者定位、訊號強化 8耳相位麥克風陣列是我耳蝸(Cochlea)計畫的一部分. 早期我在做語音辨識的時候, 在實驗室明明有九成五以上辨識率, 但拿到外面吵雜環境之後辨識率急遽下滑, 甚至完全不能辨識, 有點洩氣! 其實當時我就是用遞迴類神經網路(RNN)陣列當作辨識引擎, 跟現今Apple及Google 的深度學習語音辨識結構上沒甚麼分別, 歸咎原因其實是少了多維麥克風陣列前置處理這一塊. 現在因緣際會要做機器人的聽覺系統, 剛好曾經有個專案是做主動相位陣列雷達演算法, 與類神經網路單元陣列相似, 我就湊合湊合用現成零組件拼裝成8通道麥克風相位陣列, 不計成本的 以8個核心跑400MHz的DSP模組個別處裡音源訊號, 有機會將語音/影像辨識引擎納入陣列中, 作為獨立機器人腦中的一部分. 圖中的上蓋結構是3DP列印出來的, 趕出來的品質還沒拋光有點醜醜的, 底板是CNC車銑10mm壓克力製作出來的, 其實就是一個相位陣列雷達架構, 感覺好像是宇宙戰艦的砲塔, 在半圓球裡面是裝入DSP陣列PCB電路板. p.s. 會利用在其他章節說明麥克風陣列的演算法原理和實作。
原文網址 石小川 2020-01-07 09:56:49
今天想介紹三本好書給大家參考,對於想窮盡宇宙知識的朋友來說應該是一個很好的入門書籍。影像、語音、雷達數位信號處理、神經網路底層的推導式子都是這些基本知識的延伸,立志當科學家的朋友強烈建議一定要看! (一) 數學中美麗的詩篇 - 傅立葉分析 數學中美麗的詩篇是 "傅立葉轉換",而 電磁學中美麗的詩篇是 "馬克斯威爾方程式". 今天要介紹的這本書 ~『數學中美麗的詩篇 - 傅立葉分析』, 是復漢71年出版, 是我很喜歡的一本書, 在學生時期我就對傅立葉級數很著迷, 這本書是我的心靈捕手, 它是大自然的樂譜, 描述一段段美麗的音符, 所幸找到它填補了我心靈上的空虛, 懂得能欣賞它的美是幸福的! 哈哈! 我發現我也是怪咖一個^^ 傅立葉轉換的應用範圍廣泛, 舉凡光學、聲學、電磁學、機械都可看到它的蹤跡, 我在研究語音及影像辨識的時候也是以傅立葉轉換做頻譜特徵分析的, 現在做能源更少不了它, 是非常好用的數學分析工具, 介紹給有需要的朋友! p.s. 雖然書局也有其他傅立葉相關著作, 但是我覺得這本書還是比較佳, 這是已經是絕版的書, 圖書館應該還找的到吧! 圖1 ? (二)A Student's Guide to Maxwell's Equations(中譯本: 電磁學天堂祕笈) 裡面內容淺顯易懂, 看完不會有見樹不見林的感覺, 適合想真正瞭解電磁學Maxwell's Equations涵義的人閱讀, 我教研究生及工程師時也是用此當做輔助教材, 可參考看看! 圖2、3 ? ? ( 三 ) 推薦研讀費曼物理學講義 熟讀唐詩三百首,不會吟詩也會吟。同樣的,研讀費曼物理學,不識科學也很難了。 費曼物理學講義(The Feynman Lectures on Physics)不同於其他教科書的無趣,章節精彩實用,記的年少時除了迷戀金庸小說之外,費曼物理學講義就是我最愛的章回小說了。目前工作遇上瓶頸時我會翻翻費曼物理學講義,還能找到不少線索提供研發的參考呢! 對想瞭解宇宙的朋友更值得一看,融會貫通之後就能欣賞造物者之美。我腦袋稍微開竅也是拜此書所賜。 對讀者的建議是最好有微積分的基礎較能輕鬆閱讀,亞馬遜網路書局有賣 ( http://www.amazon.com/dp/0465023827/ref=dra_a_rv_ff_fx_it_P2000_1000?tag=dradisplay-20 ), 或打上關鍵字 "The Feynman Lectures on Physics"可以完全免費線上閱讀。 圖4 ?
廖偉 2020-03-02 14:30:05
逛到這邊突然心裡也有共鳴,不知版大有無也看過這本https://www.sanmin.com.tw/product/index/001416577
石小川 2020-03-02 15:56:31
原文網址 石小川 2019-12-26 13:20:51
語音辨識是深度學習最好的磨練場所,我們先分享一下基本知識,接下來再一步步探索這個領域的相關技術。 中文約有400個字音,字音有可分為聲母(initial sub-syllable, 又稱子音或前音)及韻母(final sub-syllable, 又稱母音或後音),聲母是輔音(consonant),每個聲母都是音素(phoneme),韻母包含元音(vowel),有些韻母是單音素, 有些則由2~3個音素構成。 聲音模型 分為 21個聲母,36個韻母和一個靜音共60個音素單元。 聲母(22個) : ㄅ、ㄆ、ㄇ、ㄈ、ㄉ、ㄊ、ㄋ、ㄌ、ㄍ、ㄎ、ㄏ、ㄐ、ㄑ、ㄒ、ㄓ、ㄔ、ㄕ、ㄖ、ㄗ、ㄘ、ㄙ。 + @(sil) 韻母(38個) : ㄚ、ㄛ、ㄜ、ㄝ、ㄞ、ㄟ、ㄠ、ㄡ、ㄢ、ㄣ、ㄤ、ㄥ、ㄦ、ㄧ、ㄨ、ㄩ、ㄧㄚ、ㄧㄛ、ㄧㄝ、ㄧㄞ、ㄧㄠ、ㄧㄡ、ㄧㄢ、ㄧㄣ、ㄧㄤ、ㄧㄥ、ㄨㄚ、ㄨㄛ、ㄨㄞ、ㄨㄟ、ㄨㄢ、ㄨㄣ、ㄨㄤ、ㄨㄥ、ㄩㄝ、ㄩㄢ、ㄩㄣ、ㄩㄥ。 早期語料需要人工切割標註子音、母音位置工程浩大,現在的電腦強大以及演算法有很大的進步,這種人工切割法逐漸由電腦學習取代了,以後直接由網路抓影像和語音資料作神經網路深度學習即可。 語料經過MFCC轉換(feature extraction)成聲音的特徵(feature)後,就可輸入遞迴神經網路**RNN(Recurrent Neural Networks)**做訓練(training), 如圖( 勘誤: 圖中Z-1是接Hidden Layer Oj(n), 沒顯示出來),這個議題我們留在下回再說明。 RNN演算法如下: netk(n) = Σj WkjOj(n) (1) Ok(n) = sigmoid(netk(n))) (2) netj(n) = ΣiWjiXi(n) + ΣlrjlOl(n-1) (3) Oj(n) = sigmoid(netj(n))) (4) sigmoid(x) = 1/(1+℮^-x) (5)
原文網址 石小川 2019-12-15 18:14:44
[開發機器人工具箱- G9 Toolkit v2.0]
這個板子是我設計用來開發機器人運算核心 - G9模組的開發板, G9模組採用的是ADI公司的高速DSP晶片, 多顆G9模組陣列可平行運算, 適合跑類神經網路演算法, 目前也用在AI產品上, 希望很快能跟大家見面, 介紹給大家^^
[G9 Module (G9 類神經網路晶片模組)] CPU: ADI 高速DSP size: 3.2cm x 3.2cm
這顆是我設計的第三代類神經網路晶片模組, 既是單晶片IO控制電腦, 也是高速數位訊號處理DSP電腦, 代號我取名G9, 內部有一顆高速DSP內核, 外部輸入電壓是DC5V,DSP內核工作電壓為DC3.3V,目前設定DSP工作頻率為400MHz。可實現語音、影像、類神經網路等演算法Real time的需求。現在我的專案是把它拿來Run自動導航及光學雷達, 機器人視覺聽覺等深度學習演算法用。
主要功能是語音/影像辨識及馬達控制, 開發軟體是C語言, 可跑類神經網路(ANN)及平行處裡運算, 目前只提供員工內部教育訓練及開發產品上, 將來開發手冊完備後再Release G9 Toolkit v2.0給有興趣研發的人士.
圖1. G9 Toolkit v2.0. 圖2. G9 Module. 圖3. G9 Module可接CMOS Sensor做影像辨識.
Eric Yang 2019-12-15 20:52:56
加一
原文網址 石小川 2019-12-03 09:51:23
這些是我早期採用凌陽、旺宏、ADI等DSP晶片設計的語音晶片作品,裡面是跑RNN神經網路,還沒整理資料,我就用這個先貼文起個頭了^^
全不選 發文排行