Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho o seguinte problema
Uma aplicacao web, que acessa a camera do celular do usuario, e coloca uma mascara no rosto, tipo um óculos, chapeu, bigode etc
Dei uma pesquisa e encontrei a biblioteca opencv, mas nao sei se ela funciona em aplicacao web, e se ela acessa a webcam do usuario.
Se alguem puder me dar um norte eu agradeço
Ola Samuel,
OpenCV é oque você precisa.
https://opencv.org
https://github.com/opencv/opencv/tree/master/data/haarcascades
Tempo atras eu encontrei um artigo bem interessante espero que te ajude.
eu o traduzi com google translate mas acho que da para entender bem:
A detecção de rosto é coisa que você pode fazer com o OpenCV. Mas, usando essa funcionalidade básica, você pode sobrepor uma máscara sob o rosto dectado. Você deve colocar a máscara transparente após detectar o rosto no local em que ele se encaixa bem. Nesse caso, coloquei um óculos de sol sobre os olhos. Depois disso, localizo a posição da boca e coloco um charuto na boca. Então parece muito bom. Você pode fazer o mesmo facilmente seguindo o código python fornecido abaixo. Também funciona para vídeos.
Python
OpenCV
Haar Cascade XML file
Oculos de Sol, Transparent overlay
Charutao,Transparent overlay
import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('frontalface_default.xml')
specs_ori = cv2.imread('glass/glass.png', -1)
cigar_ori = cv2.imread('mouth/cigar.png',-1)
cap = cv2.VideoCapture(0) #webcame video
cap = cv2.VideoCapture('jj.mp4') #any Video file also
cap.set(cv2.CAP_PROP_FPS, 30)
def transparentOverlay(src, overlay, pos=(0, 0), scale=1):
overlay = cv2.resize(overlay, (0, 0), fx=scale, fy=scale)
h, w, _ = overlay.shape # Size of foreground
rows, cols, _ = src.shape # Size of background Image
y, x = pos[0], pos[1] # Position of foreground/overlay image
# loop over all pixels and apply the blending equation
for i in range(h):
for j in range(w):
if x + i >= rows or y + j >= cols:
continue
alpha = float(overlay[i][j][3] / 255.0) # read the alpha channel
src[x + i][y + j] = alpha overlay[i][j][:3] + (1 - alpha) src[x + i][y + j]
return src
while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces=face_cascade.detectMultiScale(img, 1.2, 5, 0, (120, 120), (350, 350))
for (x, y, w, h) in faces:
if h > 0 and w > 0:
glass_symin = int(y + 1.5 * h / 5)
glass_symax = int(y + 2.5 * h / 5)
sh_glass = glass_symax - glass_symin
cigar_symin = int(y + 4 * h / 6)
cigar_symax = int(y + 5.5 * h / 6)
sh_cigar = cigar_symax - cigar_symin
face_glass_roi_color = img[glass_symin:glass_symax, x:x+w]
face_cigar_roi_color = img[cigar_symin:cigar_symax, x:x+w]
specs = cv2.resize(specs_ori, (w, sh_glass),interpolation=cv2.INTER_CUBIC)
cigar= cv2.resize(cigar_ori, (w, sh_cigar),interpolation=cv2.INTER_CUBIC)
transparentOverlay(face_glass_roi_color,specs)
transparentOverlay(face_cigar_roi_color,cigar,(int(w/2),int(sh_cigar/2)))
cv2.imshow('Thugs Life', img)
k = cv2.waitKey(30) & 0xff
if k == 27:
cv2.imwrite('img.jpg', img)
break
cap.release()
cv2.destroyAllWindows()