Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Animal iris recognition

794 views

Published on

Python으로 동물 홍채인식부터 서버까지 구현한 내용에 대한 파이콘 발표자료입니다.
- Iris Recognition Algorithm
- Agent & Server
- Animal Iris Recognition

Published in: Software

Animal iris recognition

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

×