SlideShare uma empresa Scribd logo
1 de 45
동물 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합시다

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

【CVPR 2020 メタサーベイ】Computational Photography
【CVPR 2020 メタサーベイ】Computational Photography【CVPR 2020 メタサーベイ】Computational Photography
【CVPR 2020 メタサーベイ】Computational Photography
 
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hareDAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
DAシンポジウム2019招待講演「深層学習モデルの高速なTraining/InferenceのためのHW/SW技術」 金子紘也hare
 
Demystifying Identities for Azure Kubernetes Service
Demystifying Identities for Azure Kubernetes ServiceDemystifying Identities for Azure Kubernetes Service
Demystifying Identities for Azure Kubernetes Service
 
Gunosyにおけるパーソナライズシステム
GunosyにおけるパーソナライズシステムGunosyにおけるパーソナライズシステム
Gunosyにおけるパーソナライズシステム
 
Unicode文字プロパティ
Unicode文字プロパティUnicode文字プロパティ
Unicode文字プロパティ
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
テスト自動化入門@Graat勉強会
テスト自動化入門@Graat勉強会テスト自動化入門@Graat勉強会
テスト自動化入門@Graat勉強会
 
FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理
 
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
 
【Unity道場 4月 ~アーティストの為のPBR再入門~】アーティストの為のPBR再入門
【Unity道場 4月 ~アーティストの為のPBR再入門~】アーティストの為のPBR再入門【Unity道場 4月 ~アーティストの為のPBR再入門~】アーティストの為のPBR再入門
【Unity道場 4月 ~アーティストの為のPBR再入門~】アーティストの為のPBR再入門
 
RETEアルゴリズムを使いこなせ
RETEアルゴリズムを使いこなせRETEアルゴリズムを使いこなせ
RETEアルゴリズムを使いこなせ
 
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
 
RAPIDS 概要
RAPIDS 概要RAPIDS 概要
RAPIDS 概要
 
Activity-Net Challenge 2021の紹介
Activity-Net Challenge 2021の紹介Activity-Net Challenge 2021の紹介
Activity-Net Challenge 2021の紹介
 
協調フィルタリング入門
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
採用スライド2022.pdf
採用スライド2022.pdf採用スライド2022.pdf
採用スライド2022.pdf
 
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
 

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

9강 camera advanced light2
9강 camera advanced light29강 camera advanced light2
9강 camera advanced light2
JP Jung
 
June report in korean
June report in koreanJune report in korean
June report in korean
nao takatoshi
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
devCAT Studio, NEXON
 
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
Tae wook kang
 

Semelhante a 동물 홍채인식부터 서버까지 (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합시다