XiaoHu日志 6/29~7/30
6/29 今天我準備給XiaoHu添加語音識別功能,這個語音識別我在之前版本的XiaoHu上實現(xiàn)過,當時用的是itchat庫獲取微信語音消息數(shù)據(jù),把數(shù)據(jù)下載下來后用訊飛的語音識別來轉(zhuǎn)成文字,然后再當做正常的文字處理。下載微信數(shù)據(jù)需要token,為了獲取這種token,我需要調(diào)用微信的api。但是微信的api有一個白名單機制。我的服務器在內(nèi)網(wǎng),所以ip不是固定的,它必須需要一個固定的ip才能把服務器的ip綁定在白名單里。于是我托毛老師向網(wǎng)管咨詢了一下,網(wǎng)管就把我的ip改成固定的了,所以我就能完整地獲取到微信的語音數(shù)據(jù)。有了token的話,還需要下載語音。但是現(xiàn)在我并沒有找到對應的下載api,我就在微信的開發(fā)者文檔里去找。沒有api,反而看到了微信自帶的語音識別功能,只需要打開開關,它就可以附帶一個語音識別在每條消息里。我現(xiàn)在相當于不需要再去下載消息了,直接獲取到語音消息,然后取得他的識別結果,就可以當做一個文字消息去處理。
6/30 今天希悅的工程師把過評項的api發(fā)給了我,但是這個api是面對前端的,后端用起來就比較復雜,要先打開一個希悅的鏈接,然后給他一個跳轉(zhuǎn)的網(wǎng)址,輸入賬號密碼后,它就會自動跳轉(zhuǎn)到我的網(wǎng)址里,然后把他的token傳到我的網(wǎng)址的URL里。這樣我就有了一個獲取用戶信息的token,然后再用get請求把token和其他參數(shù)發(fā)給過評api。這個api本來是給前端用的,但是我在后端需要這個功能,就只能在后端通過selenium來模擬打開瀏覽器訪問這個api。經(jīng)過我的一些嘗試,我發(fā)現(xiàn)這個跳轉(zhuǎn)的url不能使本機的網(wǎng)頁地址,而需要是localhost或者一個網(wǎng)頁鏈接。我先寫了一個網(wǎng)頁,獲取傳到自己url上的token信息,然后通過socket.io和服務器建立一個短連接,把token信息發(fā)過去,服務器就能獲得token信息。Socket.io是我慣用的多端通訊模塊,非常熟悉。在本機上測試無誤,我就把網(wǎng)頁放到了hty的網(wǎng)站服務器上,但是一到服務器它就無法索引到socket.io.js的文件。控制臺的報錯顯示在https連接禁用了我的http地址索引。這個js是socket.io的服務器動態(tài)生成的,所以我把服務器的協(xié)議改成了https,但是這樣XiaoHu的服務器就不能與socket.io服務器連接了。后來hty一語道破天機“他們都在一個服務器上啊”我就直接改成了文件路徑索引。本來以為又解決了一個大問題,誰知雖然索引成功了,但是socket.io與服務器的連接也是http的,又無法連接了。我差點卡在這上面,不過晚上我突然想到,既然都是用服務器selenium來打開了,那么為什么還要拿socket來通信呢?他們兩個是類似于主進程和子進程的關系。所以我直接刪除了所有socket的代碼,網(wǎng)頁上console.log出token,后端獲取log,就輕松達成了目的。我在錯誤的方法上浪費了幾個小時的時間,在準備用一個方法解決問題前,我應該想想有沒有更優(yōu)的方法。
7/15~7/29 期末考試加出游的原因讓我一個月沒有更新日志。小虎在這個假期要完成三個東西:前端,希悅過評,物聯(lián)網(wǎng)。我干的第一件事是前端。我之前就看中了劉雨辰的點名系統(tǒng),我們也早已談妥達成了合作。于是現(xiàn)在我把他的代碼要了過來,他的程序是用js書寫,加上一個構造網(wǎng)頁桌面程序的庫。他的系統(tǒng)使用本地數(shù)據(jù)來實現(xiàn)點名,和XiaoHu聯(lián)動后,它可以直接從XiaoHu服務器上獲取當前老師當前課的學生數(shù)據(jù),不再需要老師手動輸入學生姓名。這個前端還是XiaoHu輔助教學系統(tǒng)的載體,我通過這個程序來打開老師本地的教案。這個前端還能搭載一些如小測計時這種實用的小功能,人臉識別簽到的結果也會在這上面顯示。我先寫了自動打開教案的程序,通過“打開分子結構的ppt”的指令,程序會取得“關鍵詞”,關鍵詞集是指令詞集與教案庫詞集的交集。XiaoHu會在老師之前設定的教案文件夾里找到包含關鍵詞最多的文件并打開。但是老師有時候會給出不完全“正確”的指令,比如文件夾里可能并沒有同時包含“分子”“結構”的文件,而存在“分子應用”“結構科學”這樣的文件。為了解決這種情況,我之前打算為每個文件名的每個詞語給定一個相關度權值,并返回權值和最大的文件。但是我不能保證這個方法的正確度和魯棒性,而且如果打開的文件不是老師想要的,那么反而又會耽誤老師的時間。于是我使用一個折中的辦法,如果有包含關鍵詞數(shù)量最多且數(shù)量相同的文件,就彈窗讓老師選擇。這樣雖然有些時候無法實現(xiàn)全自動,但是也比老師在幾十個文件叢中尋找一個文件要好得多,XiaoHu已經(jīng)排除了絕大部分文件,只給出兩三個文件供老師選擇。而在絕大多數(shù)情況下,老師給出正確的描述,XiaoHu就會一次性自動地打開。我寫好代碼后,交給了劉雨辰來完成前端,他會在八月中完成。
????? 希悅的過評查詢是我一直想要實現(xiàn)的功能,我繼續(xù)調(diào)試了那個前端的api,照著工程師給的參數(shù)示例傳了參,等到的卻是未授權操作。我又問了工程師,他思索了一陣子后發(fā)現(xiàn)是api給錯了。于是他又給我了一個api,當然這個api還是需要那個token。我拿來之后,發(fā)現(xiàn)果然好使了。它能夠獲取到我最近10天的過評更新信息,這讓我喜出望外。因為我之前了解到的過評api一次只能獲取一個最近的過評,因此我還需要不斷的循環(huán)獲取每個人的過評來把一個個過評“疊”成一個庫,這樣的時間復雜度非常大,消耗非常多的系統(tǒng)資源。但是現(xiàn)在我不需要了,一個api就搞定。但是token的獲取慢的問題還是存在,因為需要各種跳轉(zhuǎn)和加載網(wǎng)頁,一個token需要5秒的時間來獲取,還只針對一個人,如果在用戶請求后獲取token,會耽誤用戶5秒的時間。所以我計劃開一個新的程序,每24小時循環(huán)獲取一遍所有用戶的token,因為token的有效時間是24小時,就不用現(xiàn)去獲取了。
XiaoHu還有一個重要的功能,是教室內(nèi)人臉識別簽到。這個功能我在半年前調(diào)試得差
不多了。通過網(wǎng)絡攝像頭獲取到教室內(nèi)的大圖片,然后在圖片內(nèi)進行m:n的人臉識別。我為了增加識別的準確度加了一個小優(yōu)化,我先用一個api獲取到大圖片里的所有人臉,然后把這些人臉截取出來變成小圖片,然后再針對這些小圖片進行人臉識別比對。但是最近我在調(diào)試時,發(fā)現(xiàn)這個api有了一個每秒調(diào)用的限制。而且這個QPS如果購買的話時非常貴的。這意味著我不能一秒內(nèi)多次調(diào)用他們的api,我在他們的文檔里找到了一個m:n識別的api,也是多人臉環(huán)境下的批量識別,測試后該api表現(xiàn)良好。我又想到了一個問題,目前人臉識別的準確度不能保證絕對準,而XiaoHu還要在全校這樣大范圍的人臉庫里做檢測,很容易識別錯誤。所以我計劃以班為單位建立各個人臉庫,這樣能減少程序的選擇量,提高準確度。
總結
以上是生活随笔為你收集整理的XiaoHu日志 6/29~7/30的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer 导入mdf和ldf文
- 下一篇: 【数字图像处理】图像感兴趣区域与图像放大