上個週末(10月24,25號)第一次參加了黑客馬拉松(hackathon),其實以前或多或少都瞭解過一些,此次比賽是偶然間上sf看到的,我幾乎沒多想就報名參加了,期間慫恿了幾名同事一塊兒去玩一下無奈他們都是比較懶的人,因此此次的比賽我獨身一人前往前端
因爲這是我第一次參加hackathon,以前經過看2014比賽的視頻發現了有一些參賽者是開發智能硬件這塊的,起初我覺得大賽的主辦方會提供一些智能硬件和API供咱們選擇使用。等到比賽開始才知道原來hackathon就是任意發揮,不過今年仍是有主題的:技術與生活。java
此次因爲是一我的來參加的,我是直接在現場組隊,很是幸運的遇到了「陸熠」,「Arthur yang」,「老方」,「小江」,他們都是很是優秀有潛力的hacker,雖然最後沒有獲獎有點遺憾,可是一塊兒codeing真的是很是享受的一件事。附一張合照:mysql
此次比賽咱們的做品是「智能抓拍」,就是利用「陸熠」同窗帶來的「直升飛機」飛行拍攝視頻,經過人臉識別將頭像顯示到網頁上。程序員
起初咱們的想法是拍攝照片而後將人身上的服飾抓取出來,而後經過數據庫匹配相應的服飾(好比找到某寶的同款)無奈隊伍裏沒有對圖像算法很是精通的人,因此咱們只能改變計劃算法
主要的功能實現有3塊sql
1:將直升飛機拍攝的視頻轉化爲圖片數據庫
2:將圖片進行人臉識別後端
3:將人臉圖片進行展現api
直升飛機視頻轉化圖片的模塊由「陸熠」,「Arthur yang」,「老方」合做完成,大概就是使用OpenCV的api將視頻流(RTSP協議傳輸)轉化爲圖片,而後以5秒左右的時間發送到服務器(爲何這裏要5秒左右,是由於視頻流是連續的,若是不間斷的發送圖片就會致使人臉識別的重複,雖然代碼是這麼寫的,可是實際效果仍是重複的居多),大體的過程以下:服務器
直升機->iPhone: 利用wifi發送視頻流(RTSP協議) iPhone->服務器: 發送圖片(間隔5秒)
服務器模塊是我實現的,大概流程就是將iPhone傳輸過來的圖片,上傳到阿里百川的CDN上,而後再調用Face++的接口將圖片的信息解析出來
服務器->百川CDN: 上傳圖片 服務器->Face++API: 發送圖片url Face++API->服務器: 返回相關信息
後端代碼是直接使用java+mysql實現的,並無什麼太多的難度。代碼就不上傳了,由於時間緊寫的也比較醜陋
最後就是前端顯示的模塊,因爲我平時寫前端很少,因此此次的大多數時間都花在前端調試上面,就是將識別出人臉的圖片實時的更新到「1024」的字幕上,最終效果以下:
其實還有一個前端展現的模塊就是:iPhone傳輸圖片後,將識別出的人臉的信息發佈到網頁上(性別,年齡,狀態)這裏是直接調用了Face++的api,由於沒有時間給咱們本身hack圖像識別的算法
關於人臉識別重複的問題,最後因爲網絡的io時間過長,我不想每次都匹配CDN中的圖片致使實時性的降低就放棄這個操做,因此最後獲得的圖片效果並不佳
很是惋惜因爲次日下午有事,我不能和組員一塊兒參與做品的展現,仍是很是高興能參與hackathon這樣的活動,可是之後估計不會再熬夜Coding了,身體有點小吃不消,下次有機會仍是會來繼續hack,最後附一張彩蛋:(廣大程序員的夢想)