728x90

ycbcr(EmguCV에서는 YCC)형태의 이미지를 이용하여 피부색 영역을 추출하였다. 이미지 자체에 작업하기보다는 이미지와 같은 size의 int형 2차배열을 생성하여 배열에 label을 붙였다.

피부색을 추출하기 위해 사용하는 알고리즘으로 Peer와 Kismet을 많이 사용하는데 막상 적용해보니 결과가 그리 좋진 않았다. HSV로 이미지를 변환한 다음 Hue 분포를 이용하여 피부영역을 추출하는 것도 꽤 결과가 좋았다. 다만 많은 논문에서 주장하는 것처럼 채도값을 같이 사용하기에는 무리가 있었다.





허락없이 불펌당한 아기님 사진 죄송;;
hsv가 꽤 괜찮았고.. peer와 YCbCr중 어떤 것을 선택할 지 고민중

728x90
728x90

카메라를 사용했는데 회사에 전화를 해봤더니 WindowXP, OpenCV 0.9, MFC 환경에서만 돌아간다고 한다. dll화 시켜서 우리가 편집을 할 수 없고 소스도 공개할 수 없다고 한다.
결국 C#으로 돌리진 못한다는 말이다.
소프트웨어 지원은 제대로 안 해주지만 노트북에 달려있는 webcam보다 형태인식이 명확해서 꼭 사용해보고 싶다. 그래서 MFC로 영상을 받아와 저장하는 것만 프로그램을 만들고 C#과 연동하여 사용할까 생각중이다.
특징점 추출은 AAM방식을 이용하고 알고리즘을 조금 추가해서 사용할 예정이다.
AAM은 API도 있다고는 하는데 역시 C#용으로 나온 것은 없어보인다. 찾아보고 API용 소스가 있으면 변환해서 사용해봐야 겠다.
728x90
728x90
제안서입니다.;;


기본적으로 opencv를 이용해서 C#으로 만들 예정입니다.
OpenCV는 C언어를 이용하여 MFC로 만들거나 리눅스용 프로그램으로 만드는 것을 유도하는데 C#용 라이브러리로 EmguCV가 있어 그것을 사용하기로 했다.
opencv 1.1을 사용하며 그것을 C#에서 사용하기 편리하도록 도와준다.
하지만 제대로 돌아가도록 보장하진 못한다.
728x90
728x90
제목은 길지만 결국 얼굴영상을 가지고 개인을 식별하는 프로그램을 만들 생각이다. 개인의 사진을 database에 여러장 넣어두고 노화인식 기법을 이용해 특정인을 인증하는 방법은 현재 실용화되어 사용하는 만큼 자료도 많고 성공한다는 보장이 있다. 처음 등장하는 인물으 가지고 기존의 사진들로 유사도를 비교하는 것은 단순 이미지 비교외에는 아직 없는 듯 보인다.

쉽게 갈 수 있는 것들은 openCV 같은 라이브러리에 있는 것들을 쓰겠지만 특징점을 개인을 구별 할 수 있도록 만든다거나 눈코입의 위치를 정확히 잡는 것은 알고리즘을 많이 생각해봐야 한다. 금,토 이틀간 간단히 공부해서 프로그래밍 해보니 emguCV라는 C#용 openCV 라이브러리가 배포되어 있었다. 예제들을 이용해 간단한 얼굴인식 프로그램을 만들었는데 생각보다 지원되는 함수가 많다.(하지만 강력하진 않다.)

어느정도 얼굴인식은 된다. 그건 일단 라이브러리에 있는 것을 이용했다. XML을 동양인을 기준으로 만든 것으로 바꾼다거나 case가 다양한 것으로 바꾸지 않는 이상 개선될 방도가 없다. 눈을 인식하는 함수는 눈만을 잡아야 하는데 코랑 입까지 다 잡아버려서 사용하지 않기로 했다.

일단 얼굴을 대강 나눠서(가로 5등분, 세로 3등분) 눈코입이 있을만한 곳을 강제로 설정해뒀다. 물론 나중에 영상에서 찾는 것으로 바꿔야 한다.
(이유 : 고개를 상하좌우 어느쪽이든 살짝만 틀어도 눈코입의 위치가 달라지기 때문, 그나마 눈이 영향을 덜 받는다.)

특징점을 구하는 함수도 사용해봤다. gray영상에서 추출하는 것이 기본인데 밝은 부위를 집중적으로 잡아서 일단 영상을 2진화 시켜 외각선만 따온 상태에서 잡았다. 일단 특징점은 잡히는데 역시 이것을 그대로 사용하진 못한다. 같은 사람은 같은 자리에 특징점을 잡아야 하는데 이건 같은 사람이 같은 모습으로 있어도 특징점이 달라지니 큰일이다. 기존의 함수를 이용해서 특징점을 정규화 시킬 것인지 아니면 특징점을 직접 잡아낼 것인지 고민해봐야 겠다.
728x90

+ Recent posts