如果有一台會自動判斷你是誰的打卡系統, 是不是比一般打卡系統方便呢?
https://www.youtube.com/watch?v=q9Ci9cUbv4w <= 人生有限公司
藉著這次 CADTC 的 人臉辨識專題進行,
實作的打卡系統使用OPENCV的 人臉辨識
系統架構及軟體架構
流程:
先讓 TARGET 的 WIFI UP, 與AP進行WIFI 連結
在面板上按下登入或登出的按鈕, 使用人臉辨識後, 辨識出是誰要使用打卡系統
傳送登入或登出的文字字串過去利用WIFI 傳送到PC端,在PC端儲存, 同時擷取第一張有辨識出的照片並傳送
此時擷取系統時間及登入登出字串並且把兩者印在檔名
(謎之聲:如果有人拿同事的照片來打卡呢?)
軟體部份:
在target 面板上移植入touch panel 的驅動程式, 並用兩個process,
一個偵測面板是否有touch,另一個持續偵測圖片並且傳送偵測到的第一張
傳送檔案使用老師介紹的 使用 socket 的檔案寫入跟寫出來實作
即File_Copying_Using_Socket_server(client).c
Server 端(PC) 必須先開啟, 然後Client端每次要傳送時就連結上
傳送完再斷開連結
OpenCV detect 和 training的部份放在另外一篇
Limitation:
1. 最關鍵的人臉辨識並沒有實際執行,目前只能做到人臉偵測的階段 QQ
2. 目前wifi傳送是使用固定IP(寫在FC.c裏面), 沒有尋找特定裝置
3. 每次執行FCEXE後 經過1~2分鐘就會出現insufficient memory的問題
可能是因為儲存的圖片佔用記憶體沒有release的緣故
workaround : 在rcS 裏面寫一個while loop 過一段時間就做重啟的動作
4. 偵測人臉並秀在螢幕上會有明顯的延遲, 可能是因為辨識的過程或是秀在螢幕上的程式
老師有提到可以用多process(thread?) 前後圖的概念來加速, 若前圖在辨識的過程中, 後圖已經開始擷取
另外在touch 和 detect 也可以使用multi-thread 的概念實作, 就可以共用變數, 也可能比較快
以及在執行Client 端copy的動作可以用exe 的方式而不用 system的方式, 不用按時序跑到底, 或是用library的型式即可
這樣也不會有code 不同編譯器會有error的情況
Implementation Problem:
1. 編譯MPlayer時
./configure 後會有 undefined function "clock_gettime" google 後 發現是make時少了 -lrt
在config.mak 裡 -lncurses -l....之前加上 -lrt
還是一樣?
Ans: 因為-lrt 不能放在最前面編譯會錯誤, 加在Extra library 的最後面,然後使用./configure
再 make即可
2. Insert Wifi module時使用 depmod或 modprobe
會出現error : depmod: chdir(3.5.0-FriendlyARM): No such file or directory
只有使用insmod 並指定資料夾才能用
原來是因為kernel 是按照3.5.0-FriendlyARM的版本去建立的
但是modprobe或depmod 在/lib/module/裏面找不到 3.5.0-FriendlyARM資料夾
才會fail, 創建資料夾後就可以了
3. 在使用 File Server Receive 的時候, 如果想要儲存下來的檔案可以直接被使用者開啟
而不用再多用一個chmod 來修改權限, 就必須指定write的模式 #define MODES S_IRUSR|S_IWUSR
編譯時就必須有定義這個S_IRUSR|S_IWUSR, 程式中是用到 avilib.c 來做定義
4. target 無法使用ramdisk開機, 可能是因為 bootcmd中只開啟Kernel的緣故
第一次設定可以, 但之後就無法再開機, 這部份需要再請教老師