2017年3月6日 星期一

抓老鼠的文件說明


這個演算法基本上是去利用 老鼠的顏色和消去背景法去判斷出老鼠...

同時再利用老鼠的形狀幾何再判斷一次...

可以調的參數


1.    binary_thr_tor  :   老鼠顏色的容忍度,

2.   subtract_background_frame_cnt:   幾張之後背景演算法才會穩定

3.    area_thr   :  老鼠面積的低標

4.    area_thr_max :  老鼠面積的高標

5.    dist_thr      :  距離的高標

6.    mouse_end_en  :  老鼠跑到終點後要不要停止

7.   mouse_end_point_dist_thr  :   老鼠到終點的距離半徑, 越大越容易停止







程式碼的說明









一開始會先去抓  老鼠的顏色thr value

binary_thr = get_mouse_grayval(frame,sx,sy) + binary_thr_tor



binary_thr_tor = 20;
這個數值是  可以手動調整的


def get_mouse_grayval(frame,sx,sy):
     image = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
     val_c = image[sy,sx]
     val_r = image[sy,sx+1]
     val_l = image[sy,sx-1]
     val_t = image[sy-1,sx]
     val_b = image[sy+1,sx]
     val = (int(val_c) + int(val_r) + int(val_l) + int(val_t) + int(val_b))/5

這個類似一個low pass 取平均的做法...抓到老鼠的灰階數值...




接下來就一個大的loop 

去掃每一張 frame

while(1):

        ret, frame = cap.read()   ->    frame 就是input frame的地方

        if(ret == False):
            break


        # 利用  thr 去判斷老鼠在那裏
        im = image_preprocess(frame,file_index,binary_thr)

        #  利用 opencv subbackground algorithm 去除背景
        im2 = image_background_subtract(frame,file_index)

        #  把上述兩個方法一起判斷
        im_and = image_and(im,im2,file_index)

        (get_mouse, cx,cy,area)    = draw_contour(im_and,area_thr,area_thr_max,dist_thr,sx,sy)

.....




def image_preprocess(frame,file_index,thr):

        global kernel
        frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        filename = "./bg_subtract/source/out{0:05d}.jpg".format(file_index)
        cv2.imwrite(filename,frame)   #  debug used


        #  thr 就是一開始算出來的 thr,
        ret,fgmask = cv2.threshold(frame,thr,255,cv2.THRESH_BINARY_INV)

        #  THRESH_BINARY_INV,  就是說小於這個thr的pixel留下來,  大於這個thr移除掉


        #  remove noise
        fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
       #   dilate
        fgmask = cv2.dilate(fgmask,kernel,iterations = 1)


        filename = "./bg_subtract/result_binary/out{0:05d}.jpg".format(file_index)
        cv2.imwrite(filename,fgmask)
        return fgmask


def  image_background_subtract(frame,file_index):
        global kernel
        global fgbg
        frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)


        fgmask = fgbg.apply(frame)

        #  remove noise
        fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)


       #   dilate
        fgmask = cv2.dilate(fgmask,kernel,iterations = 1)

        #  remove some shadow
        ret,fgmask = cv2.threshold(fgmask,140,255,cv2.THRESH_BINARY)

        filename = "./bg_subtract/result_subtract/out{0:05d}.jpg".format(file_index)
        cv2.imwrite(filename,fgmask)
        return fgmask



def  image_background_subtract(frame,file_index):
        global kernel
        global fgbg
        frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)


        fgmask = fgbg.apply(frame)

        #  remove noise
        fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)


       #   dilate
        fgmask = cv2.dilate(fgmask,kernel,iterations = 1)

        #  remove some shadow

        #  這邊也是一個可以調的參數,  建議是不要去動他
        ret,fgmask = cv2.threshold(fgmask,140,255,cv2.THRESH_BINARY)

        filename = "./bg_subtract/result_subtract/out{0:05d}.jpg".format(file_index)
        cv2.imwrite(filename,fgmask)
        return fgmask


#  
def   image_and(frame1,frame2,file_index):
        global subtract_background_frame_cnt

        # 這個演算法是利用iteration的方式找出不會動的背景,
        #  所以一開始會找不到老鼠
        #  只好小於subtract_background_frame_cnt 的frame都判斷可以找到老鼠
        if(file_index < subtract_background_frame_cnt):
            fgmask = frame1
        else:
            ret,mask = cv2.threshold(frame1,10,255,cv2.THRESH_BINARY)
            fgmask = cv2.bitwise_and(frame2,frame2,mask = mask)
        filename = "./bg_subtract/result_and/out{0:05d}.jpg".format(file_index)
        cv2.imwrite(filename,fgmask)
        return fgmask


#   找出老鼠,  這裡還會用面積的方是在判斷一次
def    draw_contour(im,area_thr,area_thr_max,dist_thr,sx,sy):
        dst ,contours, hierarchy = cv2.findContours(im,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

        get_mouse = 0

        cx = 0
        cy = 0
        area = 0
        for i in range(len(contours)):
                cnt = contours[i]
                M = cv2.moments(cnt)
                area = cv2.contourArea(cnt)

                perimeter = cv2.arcLength(cnt,True)
                x,y,w,h = cv2.boundingRect(cnt)

                (cx,cy),radius = cv2.minEnclosingCircle(cnt)
                center = (int(cx),int(cy))
                start = (sx,sy)
                radius = int(radius)
                dist = distance(sx,sy,int(cx),int(cy))

                # area_thr  ->  一定要大於  area_thr,   
                #  這裏我假設老鼠有慣性,  不會這張找到的老鼠和上一張找到得老鼠
                #  跳太遠,  設了一個 高標 dist_thr,  一定要小於這個 dist_thr
                #   area_thr_max,  但是老鼠也不能太大隻,  所以設了一個thr
                if( (area > area_thr) & (dist < dist_thr) & (area < area_thr_max) ):
                        print "area : " + str(area)
                        get_mouse = 1









2016年11月7日 星期一

網路行銷



開了官網做生意,必須不斷去做的事情很多。
剛開的時候想辦法找流量,流量進來了想辦法提高轉換,為了轉換要高,使用者介面要友善,不要有太繁瑣的會員登入,網頁下載速度不能太慢,商品規格內容要盡可能的一目了然,客服回覆速度不能太慢,這些是基本功,十年前跟十年後的現在都一樣。
在來是盡可能的優化廣告,調整文案、圖片、影音等相關內容,讓人家看到廣告會想去點它,這些跟文案有關的內容都沒問題了,接著就是學習找到對的方法,去降低廣告成本。
上面都做到很好了,接著就是回到生意的本質,去檢查客戶回購率有沒有逐步上升,平均客單價有沒有逐步提高,回購率提高,代表你的老客戶越來越多,客戶越來越相信你,那麼廣告成本自然就會降低,而客單價提高,代表購買你商品的人從原本買少少,到後來敢買得比較多,就算每天都是一樣的人數購買你的商品,但你的整體營業額還是會持續成長。
上面講的這些其實都不是什麼太難的道理,也不用都要很完美才能出來做電商的生意,只要有意識有方向的做這些事情,其實一點一點地去完善就好。

2016年10月4日 星期二

自製大頭照

Ref: http://gigikaren1104.pixnet.net/blog/post/383578103-%E3%80%8Ediy%E3%80%8F%E7%9C%81%E9%8C%A2%E5%B0%8F%E6%92%87%E6%AD%A5%EF%BC%9A%E8%87%AA%E8%A3%BD%E8%87%AA%E6%8B%8D%E8%AD%B7%E7%85%A7%E5%A4%A7%E9%A0%AD%E7%85%A7%E4%B8%8D%E6%B1%82

Ref : http://www.mrsbanana.com/p/873


影片連結
Ref :  https://www.youtube.com/watch?v=GBn7Kf1Q1rQ

在拍攝時候,請先了解規格說明喔!
大致上就是
1.需脫帽
2.眼睛不能被遮住(建議戴眼鏡者不要戴眼鏡拍)
3.露出眉毛與耳朵
4.不能露齒笑
5.不要帶變色片、放大片(我自己就是很假會帶放大片,結果照片不過...)









我拍攝完成的照片兒 接下來就是要修照片囉!

我是使用Power point修我的照片
以兩吋的照片為例(4.5*3.5)
所以我在剪裁時,以4.5:3.5剪裁一個較大的檔案13.7:11.7(大約接近比例即可)


螢幕快照 2014-08-07 下午10.20.57  


選好之後按下裁剪
螢幕快照 2014-08-07 下午8.53.24.png



裁剪完成後,我將檔案先縮到2吋大頭照大小(約4.5*3.5cm)
螢幕快照 2014-08-07 下午10.20.45



接下來是去背
選擇“移除圖片背景
你的照片會變得如下圖
螢幕快照 2014-08-07 下午8.59.35.png 


把上圖中間的方筐
拉寬到你整個身體(把你整個人放進方筐裡)
螢幕快照 2014-08-07 下午9.00.46.png 



按下enter 去被大頭照就完成囉!
螢幕快照 2014-08-07 下午9.00.57.png 




如果你覺得你膚色太黑,還可以用PPT內建的色調來調整膚色

螢幕快照 2014-08-07 下午9.04.50.png  


最後使用好後,用小畫家開啓4 X 6   10.2 X 15.2 (公分) 1205 X 1795 (像素) 大小的圖檔,把你在Power Point用好的照片 複製 起來,貼到小畫家去排版,
大約可以排8張左右(如下圖)
螢幕快照 2014-08-07 下午10.18.21  


最後!!就是列印相片啦~
我自己列印大頭照的經驗是,有些相館蠻小氣 不會幫你印,不然就是要你消費到某一定的金額才要幫你列印,而且等他們印最少也要一小時~
之後我發現 有些萊爾富有hi立即沖印機(超級方便!!!!!!!!!!!!!!!!!!)
螢幕快照 2014-08-07 下午10.57.48  

這真的是立可得,而且印一張4*6的只要6元,又只要8秒
推薦給大家!!!!!!!!!!!


====================================================================



拍完照片確定要哪張後,就可以開啟修圖軟體準備裁切正確尺寸大小,
我是先拿外交部的範本來將頭頂及下巴的對準位置標示好!


將拍好的照片置入,
一開始拍的照片解析度調到最大,所以通常照片置入進來會超大張,
所以就慢慢的縮小照片,慢慢對準位置!千萬不要任意的放大(以免照片因為放大糊掉)


像我設定這兩條橫線是對準頭頂跟下巴的,
只要把照片檔縮到剛剛好,再將色調稍稍調亮,大頭照就搞定了!
(這就是事先用壁報紙不用事後電腦去背的好處,修片耗時不到5分鐘)


像這種兩吋的大頭照尺寸與解析度是:寬3.5公分x高4.5公分、解析度300dpi
大家也可以直接另存上面這張透明png圖檔去對位置,別跟我客氣嘿!
(可下載自行使用,若是公開分享請註明出處來源)


做好個別大頭照後,再開一般洗4*6照片的尺寸圖檔:1800像素x1200像素、解析度300dpi
大約2吋大頭照可以拼上8張,另存成圖檔就可以拿去洗啦!!!


影片網址:http://youtu.be/GBn7Kf1Q1rQ
新增用PHOTOSHOP修圖軟體製作拼版之影片(滿滿台中腔發音)
建議用全螢幕觀看比較清楚,
希望大家可以更清楚做法,不會的可以再留言問我:)


像我就直接到好市多洗,連同小叔跟他女友總共五張4*6的拼貼大頭照,
洗起來才12.5元(洗一張4*6照片2.5元),
等於我們一小張2吋大頭照只花了3毛,是不是超級便宜!
且兩小時候就可以領照片,非常快速!(剛好在好市多吃完飯後領)


補充:
蕉媽之後辦新證件用了同樣方式,
不過這次是去全家便利超商印的,直接在店內的『印可得』機器使用
操作方法很簡單(◄◄點我進入)
不過有限定門市(◄◄點我進入)不是每家都有,大家先查看一下,才不會白跑一趟!
我洗這樣一張4X6(8張兩吋大頭照)花費6元,
但全家機器我覺得洗出來比較亮,有些許色偏,分享給大家


外頭拍證件照動輒300以上,還未必能拍到自己滿意的!
自己拍照成本只有10元壁報紙(我們五人用,一人花費2元)
加上現在人手一數位相機零成本(是說千萬別用手機拍耶,畫素不夠)
等於洗好自己八張2吋大頭照只要花費4.5元
靠!!!!!就是這樣省,鐵公雞蕉又要跩了


當天好市多一洗完,我們就直奔台中外交部中部辦事處辦理,
至於如何填寫及需要攜帶什麼,官網都寫的超級清楚!
大家可以參考這裡 http://www.boca.gov.tw/ct.asp?xItem=3935&CtNode=681&mp=1
且護照的中文譯音英文名也可以從這裡查http://www.boca.gov.tw/sp?xdURL=E2C/c2102-5.asp&CtNode=677&mp=1
甚至還能直接在線上打好申請表格,直接印出到辦事處辦理!

像我跟粉粉都是第一次辦護照,而旅太就是護照過期更換護照!
如果委託旅行社辦理護照價格約:大人1500  小孩1200
蕉媽自己去辦是:大人1300  小孩900
所以我們一家約省了700元,基本上我覺得旅行社代辦也不會特別貴,
畢竟親自去辦還要排隊之類的,就看大家要省錢還是省時了!


以上就是蕉媽的大頭照跟辦護照自己來的省錢撇步分享,
去辦護照大約五天後可領取,也可以直接用郵寄方式寄到家裡,就不用再跑一趟,
因為蕉媽之前每週一天都會到台中工作,所以我是親自去領,
全都一手包辦的護照雖省錢卻不會比較省力(還要自己拍自己去洗),
但領到後心裡的成就感倒是滿滿的,完了~''驕''媽又上身,驕傲的驕!

相關辦護照事宜都可以去外交部領事事務局官網看喔,我覺得官網還蠻詳細的!
http://www.boca.gov.tw/np.asp?ctNode=673&mp=1