안녕하세요.
오랜만에 뵙습니다.
일단 포스팅을 하지않은 기간동안 정말 많은것들이 진행 되었습니다.
1. haar cascade 정면 + 옆면 동시에 인식되게 코드 수정
2. 서보모터 및 팬틸트 더 큰걸로 바꾸기
3. 3D 모델링 커버 완성
4. 얼굴이 인식되면 소리가 재생되게 만듬. (pygame 사용 www.pygame.org/docs/)
5. 사람이 인식되지않으면 천천히 제자리로 돌아오고, 소리가 재생중이면 중지됨.
등이 있습니다.
일단 1번부터 보겠습니다.
1번 정면 + 옆면 동시 검출시도
먼저 정면 하르 캐스케이드가 인식되지 않으면,
옆면이 인식되게 xml파일을 사용했습니다. 예시 코드로 보면
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.2,minNeighbors=5,minSize=(40, 40),maxSize=(400,400)) |
if not len(faces) : |
faces = profaceCascade.detectMultiScale(gray, scaleFactor=1.2,minNeighbors=5,minSize=(40, 40),maxSize=(400,400)) |
#if there is no frontalface |
먼저 페이스 캐스케이드로 정면을 검출하고, 만약 정면 검출이 한개도 없으면, 다시 proface (옆면)으로 검출을 시도 하는거죠.
그러면, 정면일때 얼굴이 있으면 그대로 진행 , 정면이 없고 옆면얼굴이있으면 옆면 얼굴로 진행. 이런 순번입니다.
2. 더큰 서보모터 사용.
이부분은 MG996R 을 사용하엿고 팬틸트도 이에 맞춰 사용하엿습니다.
장점은 힘이 좋기에 (원래 자동차 바퀴용) 무거운 물체를 달수 있고, 팬틸트도 이에 맞춰 더욱 단단한 형태입니다.
둘다 국내 부품 판매 사이트에서 구매하실 수 있으십니다.
참고로 추가로 더 구매해아하는 서보혼이 있는데
www.devicemart.co.kr/goods/view?no=1357607
이 서보혼 2개가 있어야 팬틸트와 MG996R 이 체결 가능해집니다. 잘 참고하시길!
3. 3D모델링 커버
이부분은 같이 협업하는 회사분이 도와주셨습니다.
기존에 사용하고있는 sg-90 서보모터용 팬틸트가 아니라 더큰 서보모터를 사용했기에 그거에 맞춰 더욱 디자인이 커졌습니다.
전체적인 디자인은 아직 보여드릴수 없지만 대충 위로 20cm되는 큰 타워형이라고 보시면 됩니다.
4. 얼굴이 인식되면 소리가 재생되게 - pygame 사용 .
이부분은 pygame 라이브러리를 사용하시면 좋습니다.
간혹 코덱설정이 어려우신분들이나 소리를 재생했는데 이상하게 들리는 경우가있는데
그경우는 오디오 음원과 pygame의 코덱설정이 안맞아서 소리가 늘어지는 경우입니다.
pygame.mixer.init(48000,-16,1,1024) #init mixer (samplerate,bit,channel,buffersize) |
pygame.mixer.music.load(music_file) # load music file |
위와같이 48kHz, 16bit , 1채널(모노) , 1024(버퍼사이즈) 로 설정한후 ,
music_file 은 파일경로가 오고 그 파일 역시 위와같은 오디오 코덱이여야 문제없이 재생됩니다.
아 경로 설정 어케해요 ㅠㅠ 하시면
music_file = "sound/inform_voice_.mp3"
이렇게 선언해주시면 됩니다. sound 는 폴더이름입니다.
pygame.mixer.music.play()
는 지정된 음악파일을 재생해주는 코드,
pygame.mixer.music.stop()
스탑은 음악파일을 멈춰주는 코드입니다.
또한
if not pygame.mixer.music.get_busy() and music_count > MUSIC_START : |
pygame.mixer.music.play() |
위와같이 get_busy 라는 함수는 노래가 재생중일때 , 그리고 어느정도 얼굴이 인식된후 소리를 재생하고 싶기때문에
music_count 변수를 넣엇습니다.
이를 사용하면 얼굴이 인식되지않을때 소리를 멈추고, 인식되고 한 3프레임이상 캡처되면 소리를 재생 할 수 있습니다.
5. 사람이 인식되지않으면 제자리로, 소리 중지.
간단하게 소리중지는 위에 pygame을 이용하면 되고, 인식되지 않으면 제자리는 살짝의 기믹이 필요합니다.
바로 제자리로 돌아오게 만들면, 무거운 물체를 잡고있는 서보모터나, 그외 다른 체결들이 불안정 해질 수 있기 때문이죠.
그래서 이런식으로 처리를 했습니다.
if noface_count > NOFACE_MAX : |
print('no face during 3s. stop music') |
dg_y -= ((dg_y-90)/16) |
dg_x -= ((dg_x-90)/16) |
위와같은 구문을 넣어주면,
dg_y = dg_y - ((dg_y-90)/16) 가 되는 뜻이지요.
즉, 서서히 감소한다는 말입니다. 얼굴이 어느정도 감지되지않는 조건변수인 noface_count를 설정해두면 됩니다.
전체적인 코드 구문은 마지막으로 완성이 되면 정리해서 올리겠습니다.
제 게시글이 조금더 도움이 되셨으면좋겟습니다.
감사합니다.
'IT관련 정보' 카테고리의 다른 글
[S/W 문제해결 기본] 1일차 - View 파이썬 코드 (0) | 2021.04.02 |
---|---|
라즈베리파이 sudo 스크립트 + python 스크립트 부팅 후 안전 자동 실행 (0) | 2020.12.05 |
초보자용 )python 윈도우 conda기본 셋팅하기 (0) | 2020.09.12 |
vnc viewer 에러 the connection was refused by the computer 뜰때 (1) | 2020.06.23 |
[1장]라즈베리파이 얼굴추적 카메라 만들기 총정리 (0) | 2020.05.12 |
댓글