미디엄에서 북마크 해놨던 얼굴인식 샘플코드 입니다
Detecting Face Features with Python
https://towardsdatascience.com/detecting-face-features-with-python-30385aee4a8e
미디엄이 유료모델을 도입하면서
어떤 글들은 처음엔 전체 내용을 볼 수 있는데, 일정 횟수 이상 열게 되면 그 뒤로는 일부만 보이도록 바뀌었나 봅니다
오늘 다시 열었더니 글 전체 내용이 다 보이질 않네요 ㅠㅠ
미디엄도 돈 벌어야 유지가 되니 이해는 하지만 구독료 내야 하는게 한두개가 아니다 보니 슬슬 부담이
소스코드 보일 때 얼른 옮겨놨습니다.
최종 얼굴인식 파이썬 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import cv2
import dlib
# Load the detector
detector = dlib.get_frontal_face_detector()
# Load the predictor
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# read the image
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
# Convert image into grayscale
gray = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2GRAY)
# Use detector to find landmarks
faces = detector(gray)
for face in faces:
x1 = face.left() # left point
y1 = face.top() # top point
x2 = face.right() # right point
y2 = face.bottom() # bottom point
# Create landmark object
landmarks = predictor(image=gray, box=face)
# Loop through all the points
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
# Draw a circle
cv2.circle(img=frame, center=(x, y), radius=3, color=(0, 255, 0), thickness=-1)
# show the image
cv2.imshow(winname="Face", mat=frame)
# Exit when escape is pressed
if cv2.waitKey(delay=1) == 27:
break
# When everything done, release the video capture and video write objects
cap.release()
# Close all windows
cv2.destroyAllWindows()
|
cs |
맥북에서 소스코드 돌려보기
opencv, dlib 이렇게 두개 라이브러리만 설치하면 얼굴인식 코드를 쉽게 작성할 수 있습니다
아, 맥북을 사용한다면 cmake도 추가로 더 설치를 해야 합니다
맥북에서는 맨 마지막 샘플코드를 돌려보기 위해서는 하나를 더 해야 하는데
맥북 카메라 접근을 위해 권한 설정을 해줘야 합니다
vscode의 터미널에 권한을 설정하는 방법은 찾지 못해서
iTerm2에만 권한을 추가했습니다
macOS에서는 특정 프로그램을 지정하여 카메라 접근권한을 추가할 수가 없고,
앱에서 접근을 시도를 하게 되면 그 기록이 남아, 그 앱에 권한을 주는 방식인데
이상하게도 vscode의 터미널은 카메라에 접근기록이 남질 않아 권한을 추가할 방법이 없습니다 ㅠㅠ
vscode의 터미널에 카메라 권한 추가 성공하신 분 계시면 댓글로 공유 부탁드립니다
얼굴인식 핵심원리
누가 찾아낸 것인지 모르지만, 이정도 점만 연결해 보면 얼굴인지 알아낼 수 있다는 겁니다.
요즘엔 이런 최적화를 인공지능이 찾아내고 있지요.
암튼, 이 정도만으로 사람 얼굴인지를 알아낼 수 있으니 실시간 트랙킹이 가능하고
얼굴을 영역을 알아 냈으니, 같은 사람인지를 판별하는 알고리즘까지 적용하면
실시간 얼굴인식이 가능하죠
거기에 한 화면에서 여러 사람의 얼굴을 동시에 인식해서
누구인지 찾아내는 것을 실시간으로 할 수 있으면
따단~ 빅 브라더 탄생 - 이미 중국에서는 하고 있지요
사생활 침해 따윈 신경 안쓰는 나라라
원문의 설명에도 나와 있지만
좌표들의 순서가 영역을 의미하므로 마스크를 쓰고 있는 경우를 위해서 얼굴 윗 부분만 체크하도록 코드를 바꿔봤습니다
턱선 = 0–16
오른쪽 눈썹 = 17–21
왼쪽 눈썹 = 22–26
코 라인 = 27–35
오른쪽 눈 = 36–41
왼쪽 눈 = 42–47
입술 바깥쪽 = 48–60
입술 안쪽 = 61–67
이 코드를 응용하면 사람 얼굴인지 아닌지, 마스크를 썼는지 안 썼는지 체크해볼 수 있을 것 같습니다
뭐 요즘 100메가 정도는 인터넷으로 내려 보내는게 큰 부담은 아닐 수도 있지만
데이터 사이즈가 100메가면 좀 크긴 합니다
요즘엔 opencv도 자바스크립트로 동작이 가능해서 웹페이지에서도 사용 가능한데
https://madchick.tistory.com/235
웹페이지에 이 모듈 응용하기엔 100메가 내려 보내는 것 때문에 약간 부담스러울 수도 있을 것 같습니다
얼굴인식과 얼굴인증은 다른 이야기
캠으로 얼굴 인식 한다는 것은 결국엔 2D 사진으로 인식하는 것이니
사진으로 해봤는데, 역시 얼굴인식이 됩니다
아이폰에서 Face ID가 가능한 이유는 애플은 비싼 라이다 센서를 아이폰에 넣었고
삼성은 넣지 않아서 갤럭시는 얼굴인식이지 얼굴인증은 안됩니다.
아이폰은 실물 내 얼굴 아니면 Face ID가 안 풀리지만
갤럭시는 내 사진 보여줘도 풀립니다
애플은 지문인증 대신 얼굴인증을 하고 싶었던 것이고
삼성은 지문인증을 유지하는 결정이었기 때문에
LiDAR 센서 들어갔다고 아이폰이 더 좋거나, 우월하거나 그런건 없습니다.
아이폰에 LiDAR 센서 있다고 해서 3D 스캐닝이 될 정도는 아니니까요.
아이폰의 LiDAR 센서가 아무리 좋아도 3D 스캐닝은 무리
결과물이 영, 좀 그렇습니다.
https://m.blog.naver.com/bonamy/222134176142
꽤 괜찮은 3D 스캐닝이 될 지 알았는데, 아직은 시기상조인가 봅니다. 유튜브 동영상이나 이런 저런 검색을 아무리 해봐도 제대로 스캔하지는 못하는 것 같습니다.
https://www.3dscannerapp.com/ - 이 앱은 광고만 보면 꽤 쓸만 할 것 같습니다.
하지만, 정말로 결과물이 이렇게 나올지는 별로 신뢰가 가지 않습니다. 센서가 별로인데 앱이 커버해주는데 한계가 많을 겁니다.
아이폰 LiDAR 센서를 이용한 앱이 아래와 같은 정도의 특수효과 내는 것이 가능하다고 해서 기대를 해봤지만, 공간인지를 하는 것과 3D 스캐닝을 정밀하게 하는 것은 차원이 다른 이야기인가 봅니다.
실시간 화면에 3D 합성을 해서 공간을 인식하고, 실시간 영상 공간에서 흩날리다, 물체 표면에 닿으면 착륙
우아~~ 놀라운 세상 이에요
https://mobile.twitter.com/bugbear5/status/1388050058700935172