6. 02 Feature of Iris
pupil
iris
sclera
Ciliary body
lens
Blind spot
retina
Optical nerve
사람과 동물
모두 홍채가
존재한다.
흰자(sclera)가
보이는 동물은
사람이 유일하
다.
홍채는
동공의 크기를
조절하는
근육의 무늬다.
동공 주위의
근육이 수축과
이완을 통해
동공의 크기를
조절한다.
빛의 세기에 따
라 동공의 크기
가 변하고, 이에
따라 홍채의 면
적도 변한다.
일란성 쌍둥이
의 홍채가 다르
고 좌우의 홍채
또한 다르다.
7. 03 Feature of Iris Recognition
홍채가 같을 확률은 수학적으로 1/(10^52)
홍채
0.0000083~0.0001%(한쪽 눈)
지문
0.001~0.01%
목소리
0.1%
얼굴
1~1.3%
생체 인식 기술별 오류 확률
홍채의 패턴을
인식하는 기술 *실제 기술에서는 10억 분의 1
오인식률이
가장 낮음
8. 04 Iris Recognition Algorithm
홍채 인식 알고리즘
Localization
Image
Capture
Normalization
Feature
Extraction
Binary
Pattern
Store
Pattern
Comparsion
Threshold
Decision
Dr. John Daugman
1991년 원천 특허로 세계 최초 출원
10. 06 Introduce Opencv & Numpy
그러나 우리를 도와줄 Opencv와 Numpy가 있다!!
Python library Casias DataBase
홍채인식용 이미지 DataBase
http://www.cbsr.ia.ac.cn/china/Iris%20Databases%20CH.asp
※
동물 홍채 이미지 DataBase는
존재하지 않기 때문에
사람의 DB를 갖고 진행
Python 3.5.2
Opencv-python 3.4
Numpy 1.14
11. 07 Introduce Opencv & Numpy
Gary Bradsky에 의해 1996년 인텔에서 시작된 프로젝트며,
컴퓨터 비전, 머신러닝 등 다양한 알고리즘 지원과 C++, java 등의 다양한 언어로도 지원되고
있다.
Opencv-Python은 C++ API를 Python으로 랩핑함(Opencv C++과 성능이 비슷)
Open Computer Vision
12. 08 Introduce Opencv & Numpy
수학 연산을 위해 최적화된 라이브러리이며 행렬연산을 쉽게 할 수 있도록 도와준다.
[[18 20 22 ... 59 51 45]
[18 20 22 ... 61 53 47]
[18 20 22 ... 64 56 49]
...
[29 34 37 ... 90 92 93]
[29 34 37 ... 89 91 93]
[28 34 36 ... 88 90 92]]
13. 09 Noise Filtering
이미지에는 다양한 노이즈들이 존재합니다.
Noise Filtering을 통해 성능을 향상시킬 수 있습니다.
Opencv에서 다수의 Filter를 제공하므로
Salt & Pepper Noise 제거에 효과적인 Median Filter를 적용합니다.
Original K=21
K size = 3
16. 12 Localization
동공을 잘 찾기 위해서는 적절한 Parameter Value를 주는 것이 중요합니다.
적절한 Parameter Value를 찾기 위해서는 이미지를 분석하고 특징을 찾아야 합니다.
17. 13 Localization
홍채는 동공처럼 경계가 뚜렷하지 않기 때문에 정확하게 찾기가 힘들지만
HoughCircle을 이용해서 찾을 수 있습니다.
이 알고리즘은 99% 이상의 검출률을 갖고 있습니다. (Casias Image 2500장 기준)
즉, Opencv-python HoughCircle이 효과적이었습니다.
18. 14 Normalization
HoughCircle을 통해 찾은 홍채영역의 중심 좌
표와 반지름을 갖고 홍채영역의 값들을 추출
하여 2D Array 하는 것이 Normalization
입니다.(원 -> 직사각형)
Opencv에 있는 LinearPolar라는 함수를 이용
할 겁니다.
cv2.linearPolar(src, (center_x, center_y),
radius, cv2.WARP_FILL_OUTLIERS)
※원본 이미지가 330과 300이 바뀌어 있습니다.
19. 15 Normalization
원을 완벽하게 직사각형화할 수가 없기 때문
에 linearPolar를 이용하더라도
약간의 왜곡은 발생합니다.
Source linearPolar
custom
Opencv의 linearPolar 함수의 결과는 원본 이미지와 동일한 사이즈로 반환
되기 때문에 왜곡이 크게 발생하여 linearPolar 함수를 재설계하였습니다.
20. 16 Normalization
linearPolar된 이미지에서 동공 영역을 제거하면 완벽한 홍채영역
이미지를 얻을 수 있습니다.
홍채영역에 있는 눈썹, 눈꺼풀은 노이즈이기 때문에 필터를 통해 제거해야
정확한 홍채 패턴을 얻을 수 있습니다.
Detection Image linearPolar
21. 17 Feature Extraction
Normalization된 이미지에서 홍채무늬의 특징을 추출해야 합니다.
특징은 pixel의 크기값(Magnitude)이 아닌 무늬의 방향(Phase)를 추출하는 것입니다.
추출 방법에는 2D Gabor filter, wavelet 등이 있습니다.
두 방법 모두 Opencv에서 제공하는 함수가 없기 때문에 직접 구현해야 합니다.
FeaturelinearPolar
22. 18 Quantization & Binary
추출한 홍채 패턴을 저장 및 비교를 위해 Binary로 변환해야 합니다.
Quantization(양자화)를 위해 적절한 Level을 설정하셔야 합니다.(4 level로 설정)
보통은 Phase는 복소수로 이뤄졌기 때문에 360도를 4분면으로 나누면 한 분면 당 Phase의 범위는
90도가 될 것입니다. 4분면을 binary로 표현하기 위해서 2개의 bit가 필요합니다.
23. 19 HDistance
H(Hamming) Distance : 같은 비트 수를 갖는 2진 코드 사이에 대응되는 비트 값이
일치하지 않는 것의 개수
각 Bit끼리 XOR연산으로 구할 수 있다.
A:101011, B:110010, A와 B의 Hdistance는 3이다.
25. 01 카메라 선정
일반 카메라는
빛 반사로 인해
홍채 촬영이 어렵기 때문에
적외선 카메라가 필요합니다
카메라 화소,
센서 크기,
S/N 등 조건에 따라
6대의 적외선 카메라,
20개의 렌즈,
4개의 적외선 LED를 조합하여
테스트하였습니다
5 ~ 35cm 내에서
거리별로 홍채인식 구현
및 테스트하여
최적의 거리와
최적의 카메라를 찾았습니다
5 3510 15 20 25 30
Infrared Camera
26. 02 Image Capture; 홍채인식 알고리즘의 핵심
Good Image을 얻는 것은 오인식률과 자원낭비를 낮추고 정확도를 올릴 수 있습니다.
Good Image Bad Image
Blur가 없을 것 초점이 맞을 것 이미지 안에 동공(Pupil)과 홍채(Iris)가 찍혀 있을 것
27. 03 Blur Detection
이미지 흐림(Blur)이 있는지를 판별
Laplacian 함수는 이미지의 가로와 세로에 대한 Gradient(기울기)를 2차 미분한 값이며,
Edge를 검출 하는데 사용됩니다.
Laplacian Value가 클수록 선의 경계가 뚜렷하며, Blur가 적은 이미지라고 판단할 수 있습니다.
28. 04 Blur Detection
예제에서는 Threshold의 값을
200으로 하였지만
찍으려는 물체의 이미지에 얼마만큼의
강한 경계를 포함하고 있느냐에 따라 다르
고, Blurry한 이미지이나 강한 선 하나 때
문에
Threshold를 넘기도 합니다.
그래서 Blur를 판단할 수 있는
여러 개의 알고리즘을 사용해야 합니다.
! 주의할 점
31. 02 Architecture
결국 MSA(Micro Service Architecture)로 가기 위한 구성
App, Web, Agent는 Client이며, 역할이 다르고 접근하는 정보도 다르기 때문에
각각의 서버로 직접 접근하기보다는 하나의 API Gateway로 연결.
Recognition에서는 홍채인식 알고리즘이 돌아가기 때문에 CPU 작업이 많아 서버를 따로 분리
Write/Read 성능이 좋은 NoSQL DB에서 생체 정보를 저장
User Server에서는 User관리, 홍채 정보 검색 등의 역할을 함
33. 04 Agent
Beta Version
Agent : USB 적외선 카메라로 이미지를 얻기 위한 Windows용 프로그램
Command 실행이 아닌 직관적인 Gui가 필요 -> PyQt
대부분의 사용자 PC는 윈도우 -> Pyinstaller로 해결
34. 05 Agent
로그인(Agent를 사용할 User의 정보)과 MainView로 구성
MainView : 정보 입력 및 출력 창, 메뉴, 카메라 화면 등으로 구성
Pyinstaller extractor를 방지하기 위해 SecretKey를 이용하여 encryption화
Main View
Login View
37. 08 DB Schema(MongoDB)
MongoDB
- Write/Read가 SQL보다 빠릅니다.
- 홍채 정보는 indexing을 할 수 없기 때문에 매번 1:N 비교를 해야하기 때문에 Read의 성능이 좋아야 함
- Schema가 자유롭기 때문에 동물 정보에 대한 Schema가 명확하지 않은 현 상황에 적합
38. 09 Log System
Python logging처럼 쓰면서 File이 아닌 MongoDB에 저장할 수 있습니다.
Log4mongo(1.6.2)라는 Package가 필요합니다.
39. 10 Log System
MongoHandler를 상속받아서 emit 부분을 다음과 같이 overriding
DB와 Connection fail일 때 파일에 에러를 쓸 수 있도록 Custom하였습니다.
42. 02 Animal Iris Recognition
동물은 사람과 좀 다른 홍채와 동공을 갖고 있어
기존 알고리즘 적용이 어렵다는 사실
…
43. 03 Animal Iris Recognition
그러나 새로운 알고리즘을 다시 구현
새로운 알고리즘은 정확하게 동공과 홍채를 찾아냈습니다.
그 중에서도 제일 선명한 이미지만 찾아냄!
저희 개님은 맹견이라… 테스트 하는데 힘
들었습니다.
그 동안 상납한 간식 값만 해도…ㅎㄷㄷ
44. 04 Performance
반려견님이 움직이지만 않으면
5~10초 이내에 인식되었습니다
아직은 많은 반려견을 테스트 해보지는 못 했습니다
단지 몇 마리의 반려견만 했습니다
DB는 지속적으로
구축될 예정입니다
45. 05 Conclusion
동물 홍채 인식에 관심 있으신 분은
이메일로 연락 주십시오.
감사합니다.
niceutra2@naver.com
반려견의 홍채 인식이 가능하다
Python으로 홍채 인식도 할 수 있다
그래서 결론은, 더욱 열심히 Python합시다