職場
離開北京回西安,求職四處碰壁,最終入職潤基,從事機器人開發,工資經常拖欠
12月28號公司從長安產業園搬家到位於市內自己開發的樓盤九錦臺,好把長安產業園的寫字樓租給別人,新辦公地點原是做黃金交易的,已名存實亡整一年,營業場所根本不是爲寫字樓設計,非常不便。且九錦臺離我家非常遠,決定辭職
項目
智能家居控制系統,文件式語音識別系統(基於訊飛+圖靈),錄音收集系統,機器人wifi自助配置系統,流式語音識別系統
做法是先將pocket sphinx的詞彙表中單個漢字的記錄抽取出來作爲字典,然後對輸入句子用jieba分詞,循環遍歷jieba生成的詞語列表,如果是詞典裏有的,直接輸出音標,如果沒有,則遍歷詞語裏每一個漢字,根據之前生成的字典輸出音標(可能有多音字問題)第三個任務是根據物聯通智能家居手機控制app的開發文檔編寫python版實現,沒有任何源代碼可參考
先通過python的socket庫連上網關屏(智能家居的控制中心),然後嘗試用python的struct庫實現物聯通自定義的二進制應用層協議,發現了物聯通的一個BUG(在網關屏上反覆發送開關吊燈指令,屏跟智能開關間的通訊會故障),解決了網關屏在動態分配IP的wifi網絡中自動確定其IP的問題(將屏的Linux某個內核開關打開,使其能響應廣播包,然後讓機器人ping廣播地址,然後讓機器人挨個連接應答IP,能連上的就是屏),還推動各方人員完成機器人控制電視機功能(關鍵是給物聯通的紅外轉發器對碼,本例中,就是用電視機的遙控器來對碼)第四個任務是基於訊飛的語音識別系統。因爲核心技術都是訊飛的,我主要負責實現根據用戶話音自動分段並生成錄音文件,然後調用訊飛雲服務識別,最後接收識別結果。
熟悉了port audio庫(用來捕捉麥克風輸入併產生音頻流)和audio op庫(用來對PCM編碼阿音頻數據做簡單變換),解決了話音斷句功能(用audio op的cross方法檢測音頻樣點的過零次數,低於某個閾值2秒以上就認爲是說話間隔,此發對麥克風比較敏感,不同麥克風底噪不一樣)。後來發現SoX工具,可能方便的錄音和消除底噪。該系統未能正式使用,因爲延遲太大。第五個任務是開放式聊天功能。就是用戶隨便說什麼話,機器人都能給出合理的答覆,這個問答系統用的圖靈機器人的雲服務,我只是根據圖靈返回結果的類型,掛接不同的處理函數,例如將返回的長度、格式做些調整什麼的
第六個任務是成語接龍功能
先做數據準備工作(從網上搜到一個mdb後綴的詞典文件,再用某個軟件將其內容導出爲csv格式,再在Linux下將其內碼轉換成UTF-8)。然後是業務邏輯,就是按接龍規則查找應答,以及檢測用戶的接龍是否合法,另外爲了避免機器人回覆的成語千篇一律,還引入隨機,即每次從候選應答中隨機返回一個。其實,還有一部分體力活,即將成語詞典中的詞條由13000條精簡爲3500條不這樣幹用戶一個回合也撐不住第七個任務是錄音收集系統,這是個大工程。任務背景是我們要開發自主知識產權的語音識別系統,而識別算法需要用大量的錄音數據來訓練,之前收集錄音都是找人對着機器人念,唸完一句後重啓錄音工具,再念下一句,現在想着能用手機app來錄音就好了。
首先考慮框架,決定做成CS架構,客戶端是一個消息循環,先從後臺獲取要讀的句子,然後錄製用戶的讀音,再將讀音轉換成wav文件,再將wav文件發送給訊飛識別,識別無誤則將wav文件及對應的句子發送給後臺,後臺將錄音儲存至指定句子的名下第八個任務是機器人wifi自助配置系統,也是個大工程,任務背景是機器人第一次進入用戶家中,需要連到家裏wifi,但沒有方便的方法輸入wifi密碼(排除了諸多選項),思慮一番決定先將機器人wifi芯片切換到熱點模式,用戶用手機連上該熱點,並打開機器人web頁面,輸入家裏wifi的名稱和密碼後,機器人記錄下來生成連接配置文件,再將wifi芯片切換到客戶端模式,連接家裏wifi
然後是開發客戶端,爲此將後臺功能(語句獲取和錄音存儲)全部打樁,客戶端選擇android平臺。之前從沒做過安卓,java知識也就08年摸過倆月,只好從零開始。先切換到win xp下安裝android studio,然後用demo程序摸索安卓開發流程(常用控件、工程組織結構、各種配置文件和選項、調試工具連手機的用法),然後從網上找示例代碼弄懂安卓讀取麥克風輸入的流程,然後將訊飛的安卓SDK導入工程,並將SDK自帶的示例代碼中語音聽寫部分擇出來合入工程,最後在調試中將工程劃分爲4個線程:主線程(顯示UI界面)、語句線程(下載句子,上傳錄音和句子)、錄音線程(用戶按下按鈕開始錄音,鬆開按鈕停止錄音並生成wav文件)、識別線程(調用訊飛雲服務識別wav文件內容),4個線程間通過message queue通信,消息處理採用handler機制
最後開發服務端,先考慮數據庫該如何設計,想好了後設計數據表,以及相應業務邏輯的sql語句,然後用python的mysql綁定庫操作數據庫,測試無誤後,開始打通前後臺,決定用http通信,於是用apache做web服務器,用mod_python模塊實現apache解析python腳本功能
爲了讓用戶手機能連到機器人創建的熱點並輸入wifi密碼,使用hostapd程序來實現熱點wpa鑑權,使用dnsmasq來實現dhcp功能(比dhcpd配置簡單多了),使用cherrypy實現web服務器(比apache維護簡單多了)第九個任務是流式語音識別系統,之前分析過文件式語音識別系統延遲大的原因,經過一系列實驗及討論,認定爲識別算法是在錄音完畢之後才工作,如果改成邊錄音邊識別,則延遲會大大減小。決定先在機器人平臺實現流式語音識別
因爲機器人基礎平臺是ubuntu linux,所以下載訊飛的linux SDK,只有C語言版,爲其添加python綁定短期內不太現實,決定全部採用C++實現
先編寫最簡C++版ros節點。熟悉C++版cmake構建流程。然後修改訊飛SDK示例代碼,改成流式,但輸入流打樁成wav文件,經測試OK
再編寫音頻流產生代碼,基於port audio,編寫過程中發現示例代碼涉及資源分配之處太多goto語句,決定用C++的RAII加異常機制來消除goto語句,並根據信息流上下游模型對代碼進行模塊化封裝,最後分成3個模塊,從上到下依次是:port audio對象(產生音頻流)、訊飛識別對象(產生識別字符串)、ros節點對象(廣播字符串),下游模塊先構造,然後作爲構造函數入參實現上游模塊的構造,以此消除回調函數,因爲回調函數破壞了this指針機制
調試port audio對象時,將訊飛識別對象打樁成文件寫入,目前port audio對象有丟音頻數據的BUG,還未解決
生活
從北京搬回西安,租住老婆單位附近小區,趕走傳銷租客,清理裝修房子,喬遷,考駕照(通過科目二)
3月12號回北京退房子,順便幫老婆辦公積金支取手續,手續辦妥了,但退房子時找不到押金條,一個月押金被扣下了
3月中旬收到自己房子上一層業主的投訴,說我們家的租戶油煙通過窗戶排出來,嗆得不行,讓我檢查下排煙管道是否有洞,因爲他家就有該問題,找過多次物業才修好。我去租戶家剛好碰上吃飯,十幾號人圍一卓,關鍵是全不認識,而承租人卻找不着,感覺不對勁,讓房屋中介來看,說是傳銷團伙,經過一番鬥爭,在4月份將這夥人趕走,同時開始軟裝
軟裝期間發現這個傳銷團伙把家裏搞的烏煙瘴氣,爲了掩人耳目,他們從來不開窗戶,人很多飯菜也要多做,但排煙管道故障油煙根本排不出去,抽油煙機裏積累厚厚一層,厚度達到1釐米,方太的師傅都說這是他幾年來見過的最髒的
5月份聯繫中興通訊HR,想將公積金轉出,告知必須先將戶籍和檔案遷出,費了一番力氣後將戶籍和檔案都掛靠到高薪區人才市場
6月份找潤基hr辦公積金轉入,自己拿着省管的接收函跑到市管去辦
7月份軟裝完畢,搬進自己家,兩邊父母過來住了聚了幾天,然後老婆父母在家呆了3禮拜,期間享受了岳父大人美味的湘菜,也帶他們逛了城牆和兵馬俑華清池
自己家離潤基近(這也是我去潤基的原因之一),所以打算騎自行車上下班,買了個死飛,裝的時候粗心沒緊固右側腳蹬,導致螺絲滑了,只好焊死
8月份在華津駕校報名考駕照,月底通過科目一。
9月2號公司最後一次發工資,3號回老家慶祝反法西斯勝利70週年
10月份去寧夏玩,先到交界的內蒙通湖草原體驗了騎駱駝、沙漠衝浪(就是坐着敞棚越野卡車翻越沙丘,俯衝時非常刺激),沙漠摩托等,再去沙坡頭體驗了下羊皮筏子,第二天逛了沙湖(就是紫霞仙子出場的蘆葦蕩),下午趕場逛了西部影視城(大話西遊拍攝地),還意外看到了古裝戲劇組,以及男主角
11月份陰雨連綿,沒幾天晴,沒學過車
12月中旬通過科目二考試,結果不錯但過程虐心,見微博
12月中旬想將省管的公積金取出來補貼家用,告知因公司拖欠中融款項,錢就算省管發下來,估計也不能從公司對公帳戶打到我個人帳戶
12月28號提出離職,16年1月6號流程全部結束,就等離職證明了