본문 바로가기

영상 화자 분리/개발

[데이터생성] 입 데이터 생성과 전처리(1)

(1)1. 1단계 : crop

(1) 전체 이미지로부터 "입 CROP"

연속적으로 만들어지고 있는 터라, 이미지가 제대로 준비되지 않게 보여지고 있음.

 

bmp로 해야하나 싶었는데 png도 무손실 압축이라니 그냥 저대로 하기로 함. 그러나, 근본적으로,

"CROP 되는 입은 정말 입인가?"

입을 인식하는 부분에서 잘못된 데이터는 분명 나왔다. 이 글을 쓰는 동시에 프로그램을 돌려놨지만 중간 중간 보면 눈과 입, 눈썹과 입을 잘못되게 인식했다. 즉슨, 눈과 눈썹이 CROP되게 나왔다.

입을 인식해서 저장하고 했는데, 코가 보인다.

 

"이런 상황에서, 입을 인식하는 확률이 얼마인지 궁금했다."

총 데이터가 4,000여개라서 통계적으로 구해보았다. 한 폴더에서 미리보기로 최대 120개가 보일 때 몇 개의 오인식이 나타나느냐. 순차적 무작위(겹치는 부분 없도록, 120개 단위를 넘도록 화면을 내려서)로 내려가 10번에 대하여 통계적으로 구해봄

=>  {38개, 18개, 32개, 35개, 50개, 39개, 19개, 28개, 60개, 76개}/10 set = 평균 40개의 오류

 

"대략 66% 로 입술임..

 저 데이터는 쓸모가 없다."

 

(2) 해결안

위에서 오인식이 난 set 중에 60개, 76개, 50개과 같이 눈에 띄게 오인식된 경우는 특징이 있었음.

"사진 배경에서 입술을 찾고 있었다"

나머지 오인식 나는 사례는 눈, 코를 입으로 오인하는 경우였다. 따라서, 이번의 과제는 다음과 같았음.

  • 장치 1 : 배경에서 입을 찾는 경우를 없애고
  • 장치 2 : 눈, 코, 눈썹 등 얼굴 내에서 입을 오인하는 경우를 업애함.
  • 장치 2 : 추가로, 정상인식된 경우라도 조금 더 넉넉하게 출력해야함.

 

장치1 + 3 적용) 일단 먼저 12개 얼굴만 출력해서 입이 어떻게 출력되는 지 확인

 

장치 2번의 구현내용이 될 것임
장치3 에 의해 개선되어 나온 이미지

 

추가로 발견된 잘못 나오는 데이터는

  • (1)아랫입술만을 인지하는 경우,
  • (2) 인식된 단 하나의 입 데이터가 실제로는 눈인 경우

(2)의 경우는, 위의 스마일 그림에서 나타나는 필터링 알고리즘은 입이라고 인식한 2개이상의 데이터 중에서 제일 하위를 고름. 따라서, 1개인데 실제로는 눈인 경우는 필터링 못함. 그래서 이것을 필터링 해주기 위하여, 얼굴높이/2 이상에 위치한 데이터를 입이라고 판별할 것임.

걸러낸 (2) 케이스, 얼굴 자체가 잘못 인식된 경우도 보인다.

(1)의 경우는, 아랫 입술만 인식하는 경우를 걸러내기 위해서는 비정상적으로 작은 입술 영역을 걸러내는 것이 필요하다고 생각함. 그래서, 이 과정에서 아무래도 분포도가 어떻게 나오는지 확인할 필요가 있었음.

  • 장치 4 : 평균 입술 넓이를 하회하면 버림 추가.
> 총데이터 수 : 4120
> 인식된 데이터 수 :2767
> mean :5317.75
> deviation :1.18969e+06
> standard deviation :1090.73
> diff :20.5111

현재 데이터에 대한 확률질량함수

 

3000 미만을 자르기로 한다. = "약 5%로 발생하는 작은 크기의 영역들"은 잘못된 입술 값이라 생각하고 걸러낸다. 데이터를 다룰 때, 분포표를 이용해서 일정 기준으로 자르는 게 아직까지는 최선으로 보인다.

 

걸러낸 (1)번 케이스

걸러지고 있다. 중간 중간 '우' 발음들이 걸러지는데 정상을 비정상으로 판별하는 것은 무시하기로 한다.

 

(3) 최종 확인 체크

- eye : 31개 (실제로 눈 이미지이면서 입인척 하는 데이터)

- err : 58개 (입은 맞는데 비정상적으로 인식된 경우)

- 정상 : 2678개,

- eye : 31개 (실제로 눈 이미지이면서 입인척 하는 데이터)
- err : 58개 (입은 맞는데 비정상적으로 인식된 경우)
- 정상 : 2678개,

* 총 데이터 대랴 4000개 중 이미지가 '반전(inverse)'된 경우는 인식이 아예되지 않았다.
* 그래서 총 데이터가 많이 줄었다.

 

"일단 100% 입술...이제 준비가 되었다."

 

2. 2단계 : canny-edge

(1) 1차 시도

영 형편이 없다.

명암비(contrast)를 높혀서 라인이 잘 잡히도록 해보겠다.

(2) 2차 시도 : 명암비 조정

뭔가 자질구레해졌다.

이 방법이 아닌 듯 하다.

(3) 3차 시도 : 구상중,,,

 

3. 3단계 : 이어붙이기

(1) Stitcher::stitch()

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.0.0) /home/uki408/opencv/opencv-4.0.0/modules/flann/src/miniflann.cpp:487: error: (-215:Assertion failed) (size_t)knn <= index_->size() in function 'runKnnSearch_'

I guess this because of "images size". I don't know exactly but something doesn't match from their parameters. So, I will processing them by fill "things".

2020/04/26 - [영상 화자 분리/개발] - [Opencv4] Stitch error