2019年8月11日 星期日

[影像處理] 製作視訊即時蜘蛛人面具

步驟:

  1. 準備人臉:用CascadeClassifier的haarcascade_frontalface_alt.xml模型來辨frame中的人臉,將人臉的擷取下來.
  2. 準備面具:讀入面具圖檔,將面具reshape成與擷取的人臉一樣大,把面具變成灰階,把面具變成兩階mask,把面具用cv2.bitwise_and()取出來.
  3. 把mask反tone,把人臉用cv2.bitwise_and()取出來.
  4. 把步驟2-3做好的面具和人臉用cv2.add()拼貼再一起,在放回frame中.
程式碼:

  1. import cv2 
  2. import numpy as np 
  3. from PIL import *
  4. from pylab import *

  5. #載入辨識人臉的classifier
  6. face_cascade = cv2.CascadeClassifier('./cascade_files/haarcascade_frontalface_alt.xml'
  7. if face_cascade.empty(): 
  8.     raise IOError('Unable to load the face cascade classifier xml file'

  9. #載入面具
  10. face_mask = cv2.imread('./images/mask_hannibal.png'
  11. h_mask, w_mask = face_mask.shape[:2

  12. #設定攝影機
  13. cap = cv2.VideoCapture(1
  14. scaling_factor = 0.5 

  15. while True
  16.     ret, frame = cap.read() 
  17.     #把讀入的frame做縮放
  18.     frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA)
  19.     
  20.     #辨識人臉 
  21.     face_rects = face_cascade.detectMultiScale(frame, scaleFactor=1.3, minNeighbors=3
  22.     
  23.     #用for迴圈讀取辨識的人臉
  24.     for (x,y,w,h) in face_rects: 
  25.         if h <= 0 or w <= 0: pass
  26.         
  27.         #微調要擷取的人臉範圍(需要和mask對齊)
  28.         h, w = int(1.4*h), int(1.0*w) 
  29.         y -= int(0.1*h)
  30.         x = int(x)
  31.         
  32.         # 擷取frame中的人臉
  33.         frame_roi = frame[y:y+h, x:x+w] 
  34.         #把面具 resize成擷取的人臉大小
  35.         face_mask_small = cv2.resize(face_mask, (w, h), interpolation=cv2.INTER_AREA) 

  36.         # 把面具轉換成灰階
  37.         gray_mask = cv2.cvtColor(face_mask_small, cv2.COLOR_BGR2GRAY) 
  38.         #把面具轉換成二階圖(binary)
  39.         ret, mask = cv2.threshold(gray_mask, 180, 255, cv2.THRESH_BINARY_INV)
  40.         mask=mask.astype('uint8')

  41.         #建立反tone的mask
  42.         mask_inv = cv2.bitwise_not(mask).astype('uint8')

  43.         # 把面具用mask擷取出來 
  44.         masked_face = cv2.bitwise_and(face_mask_small, face_mask_small, mask=mask) 
  45.         
  46.         # 把人臉用用反tone的mask擷取出來 
  47.         masked_frame = cv2.bitwise_and(frame_roi, frame_roi, mask=mask_inv) 
  48.         
  49.         
  50.         # 把擷取出的面具和人臉合併,並且拼貼回原來的frame中
  51.         frame[y:y+h, x:x+w] = cv2.add(masked_face, masked_frame)

  52.     cv2.imshow('Face Detector', frame) 

  53.     c = cv2.waitKey(1
  54.     if c == 27
  55.         break 

  56. cap.release() 
  57. cv2.destroyAllWindows() 
結果:

三倍槓桿和一倍槓桿的長期定期定額報酬率分析

  以下是中國,美國股票債卷的三倍槓桿和一倍槓桿ETF分析.可以發現,三倍槓桿在下跌時期的跌幅遠比一倍槓桿的多 .且從時間軸來看,三倍槓桿由於下跌力道較強,因此會把之前的漲幅都吃掉,所以對於長期上身的市場,例如美國科技股,由於上升時間遠比下跌時間長,所以持有TQQQ的長期回報率會...