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

More Related Content

What's hot

Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법진상 문
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
Hirotaka Kawata
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
KwangSeob Jeong
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치Seungjae Lee
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
Jongwon Kim
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
Youngtaek Oh
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 Amazon Web Services Korea
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
NAVER D2
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
영준 박
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
Juhong Park
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법MinGeun Park
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
Ho Gyu Lee
 
NFDC 2015 내러티브 중심의 디자인
NFDC 2015 내러티브 중심의 디자인NFDC 2015 내러티브 중심의 디자인
NFDC 2015 내러티브 중심의 디자인
DongKyun Kim
 
Accelerating Innovation from Edge to Cloud
Accelerating Innovation from Edge to CloudAccelerating Innovation from Edge to Cloud
Accelerating Innovation from Edge to Cloud
Rebekah Rodriguez
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
Jiho Choi
 
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
Amazon Web Services Korea
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
스타트업을 위한 Confluent 세미나
스타트업을 위한 Confluent 세미나스타트업을 위한 Confluent 세미나
스타트업을 위한 Confluent 세미나
confluent
 

What's hot (20)

Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
 
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
NFDC 2015 내러티브 중심의 디자인
NFDC 2015 내러티브 중심의 디자인NFDC 2015 내러티브 중심의 디자인
NFDC 2015 내러티브 중심의 디자인
 
Accelerating Innovation from Edge to Cloud
Accelerating Innovation from Edge to CloudAccelerating Innovation from Edge to Cloud
Accelerating Innovation from Edge to Cloud
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
스타트업을 위한 Confluent 세미나
스타트업을 위한 Confluent 세미나스타트업을 위한 Confluent 세미나
스타트업을 위한 Confluent 세미나
 

Similar to 동물 홍채인식부터 서버까지

Animal iris recognition
Animal iris recognitionAnimal iris recognition
Animal iris recognition
진성 정
 
9강 camera advanced light2
9강 camera advanced light29강 camera advanced light2
9강 camera advanced light2JP Jung
 
Lighteye 222
Lighteye 222Lighteye 222
Lighteye 222
Yeonmoon Jeong
 
Hics ir 11.1.0_slideshare_150920
Hics ir 11.1.0_slideshare_150920Hics ir 11.1.0_slideshare_150920
Hics ir 11.1.0_slideshare_150920
SeonOh Lee
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
SangYun Yi
 
June report in korean
June report in koreanJune report in korean
June report in koreannao takatoshi
 
Start io t_with_raspberrypi
Start io t_with_raspberrypiStart io t_with_raspberrypi
Start io t_with_raspberrypi
Yeonah Ki
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
안전한세상만들기[무단횡단사고방지시스템]제안서최종본
안전한세상만들기[무단횡단사고방지시스템]제안서최종본안전한세상만들기[무단횡단사고방지시스템]제안서최종본
안전한세상만들기[무단횡단사고방지시스템]제안서최종본
재성 장
 
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
Chm솔루션 소개자료 모듈별소개
Chm솔루션 소개자료 모듈별소개Chm솔루션 소개자료 모듈별소개
Chm솔루션 소개자료 모듈별소개
시온시큐리티
 
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
Tae wook kang
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기
Circulus
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
BOAZ Bigdata
 
IoT CCTV - 한화테크윈 -피플앤드테크놀러지 Collaboration
IoT CCTV -  한화테크윈 -피플앤드테크놀러지 CollaborationIoT CCTV -  한화테크윈 -피플앤드테크놀러지 Collaboration
IoT CCTV - 한화테크윈 -피플앤드테크놀러지 Collaboration
PEOPLE AND TECHNOLOGY (Antonio Hong)
 
Convolutional neural network
Convolutional neural networkConvolutional neural network
Convolutional neural network
rlawjdgns
 
202109 머신비전협회보.pdf
202109 머신비전협회보.pdf202109 머신비전협회보.pdf
202109 머신비전협회보.pdf
ssuser54247f1
 
Complete HiRes Video Solutions
Complete HiRes Video SolutionsComplete HiRes Video Solutions
Complete HiRes Video Solutions
lunchNtouch
 
라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드
Circulus
 

Similar to 동물 홍채인식부터 서버까지 (20)

Animal iris recognition
Animal iris recognitionAnimal iris recognition
Animal iris recognition
 
9강 camera advanced light2
9강 camera advanced light29강 camera advanced light2
9강 camera advanced light2
 
Lighteye 222
Lighteye 222Lighteye 222
Lighteye 222
 
Hics ir 11.1.0_slideshare_150920
Hics ir 11.1.0_slideshare_150920Hics ir 11.1.0_slideshare_150920
Hics ir 11.1.0_slideshare_150920
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
 
June report in korean
June report in koreanJune report in korean
June report in korean
 
Start io t_with_raspberrypi
Start io t_with_raspberrypiStart io t_with_raspberrypi
Start io t_with_raspberrypi
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
안전한세상만들기[무단횡단사고방지시스템]제안서최종본
안전한세상만들기[무단횡단사고방지시스템]제안서최종본안전한세상만들기[무단횡단사고방지시스템]제안서최종본
안전한세상만들기[무단횡단사고방지시스템]제안서최종본
 
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
[온라인 교육시리즈] Pinpoint Cloud로 시작하는 어플리케이션 성능 모니터링 - 김민형 클라우드 솔루션 아키텍트
 
Chm솔루션 소개자료 모듈별소개
Chm솔루션 소개자료 모듈별소개Chm솔루션 소개자료 모듈별소개
Chm솔루션 소개자료 모듈별소개
 
Vision sensors brochure 2012
Vision sensors brochure 2012Vision sensors brochure 2012
Vision sensors brochure 2012
 
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
 
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베리파이와 자바스크립트로 IoT 시작하기
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
 
IoT CCTV - 한화테크윈 -피플앤드테크놀러지 Collaboration
IoT CCTV -  한화테크윈 -피플앤드테크놀러지 CollaborationIoT CCTV -  한화테크윈 -피플앤드테크놀러지 Collaboration
IoT CCTV - 한화테크윈 -피플앤드테크놀러지 Collaboration
 
Convolutional neural network
Convolutional neural networkConvolutional neural network
Convolutional neural network
 
202109 머신비전협회보.pdf
202109 머신비전협회보.pdf202109 머신비전협회보.pdf
202109 머신비전협회보.pdf
 
Complete HiRes Video Solutions
Complete HiRes Video SolutionsComplete HiRes Video Solutions
Complete HiRes Video Solutions
 
라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드라즈베리파이 Circulus API 가이드
라즈베리파이 Circulus API 가이드
 

동물 홍채인식부터 서버까지

  • 1. 동물 ID 구축 홍채인식부터 서버까지 정 진 성
  • 2. S회사 S/W 개발자 Python은 2년째 배우는 중 (S/W개발 경력도 2년) 우리 개님을 사랑하는 동물애호가 예비 딸바보 성장하는 개발자 발표자 소개 정 진 성
  • 3. 발표 순서 홍채 인식 Agent & Server Prologue Feature of Iris Feature of Iris Recognition Iris Recognition Algorithm Introduce Opencv & Numpy Noise Filtering 01 02 03 04 05 06 Localization Normalization Feature Extraction Quantization & Binary Hdistance Appendix 07 08 09 10 11 12 Architecture Agent 01 02 Animal Iris Recognition DB Schema Log System 03 04 Animal Iris Recognition & Conclusion01
  • 4. 발표 목적 Python으로 동물 홍채 인식을 만든 경험을 공유합니다
  • 5. 반려동물 홍채 H/W 반려동물 신분증 01 Prologue ㅣ 홍채인식을 통한 반려동물 신분증
  • 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년 원천 특허로 세계 최초 출원
  • 9. 05 Introduce Opencv & Numpy 홍채인식 알고리즘을 설계하기 위해서는 수학이 필수지만, 공식만 봐도 너무 어렵다.
  • 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
  • 14. 10 Localization Localization : 이미지에서 홍채 영역을 추출하는 것을 의미 홍채 영역에서 동공의 영역을 뺀 부분이 순수한 홍채의 영역입니다.
  • 15. 11 Localization 동공은 경계가 분명하기 때문에 찾기가 쉬운 편입니다. Hough circle을 이용하여 홍채와 동공을 찾을 겁니다.
  • 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관리, 홍채 정보 검색 등의 역할을 함
  • 32. 03 Library For Agent & Server - Python 3.5.2 - DjangoRestFramework 3.8.2 - Django 2.0.7 - Postgres 9.3 - MongoDB 3.6 - Pyscopg2 2.7.4 - Pymongo 3.6.1 - Log4mongo 1.6.2 - Phonenumberslite 8.9.5 - Python 3.5.2 - Pyinstaller 3.1.1(PyQt 5.11.2 버전 미지원) - PyQt 5.10.1 Server Agent
  • 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
  • 36. 07 DB Schema(PostgreSQL) PostgresSQL - ForeignKey로 User와 연결 - biometricsID는 홍채정보가 MongoDB에 저장된 후에 반환되는 unique ID (=OneToOne field)
  • 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하였습니다.
  • 41. 01 Animal Iris Recognition 수천 장의 사진을 찍고 깨달은 것은!
  • 42. 02 Animal Iris Recognition 동물은 사람과 좀 다른 홍채와 동공을 갖고 있어 기존 알고리즘 적용이 어렵다는 사실 …
  • 43. 03 Animal Iris Recognition 그러나 새로운 알고리즘을 다시 구현 새로운 알고리즘은 정확하게 동공과 홍채를 찾아냈습니다. 그 중에서도 제일 선명한 이미지만 찾아냄! 저희 개님은 맹견이라… 테스트 하는데 힘 들었습니다. 그 동안 상납한 간식 값만 해도…ㅎㄷㄷ
  • 44. 04 Performance 반려견님이 움직이지만 않으면 5~10초 이내에 인식되었습니다 아직은 많은 반려견을 테스트 해보지는 못 했습니다 단지 몇 마리의 반려견만 했습니다 DB는 지속적으로 구축될 예정입니다
  • 45. 05 Conclusion 동물 홍채 인식에 관심 있으신 분은 이메일로 연락 주십시오. 감사합니다. niceutra2@naver.com 반려견의 홍채 인식이 가능하다 Python으로 홍채 인식도 할 수 있다 그래서 결론은, 더욱 열심히 Python합시다