양쪽 이전 판이전 판다음 판 | 이전 판 |
project:detectsponsor [2013/07/08 10:05] – [결과 분석] ::1 | project:detectsponsor [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 |
---|
| |
$ convert -threshold 50% input.png | $ convert -threshold 50% input.png |
| |
'threshold가 뭐야?' 라고 궁금해 하실 분들이 있을 지 모르겠습니다. Threshold란 사전적 의미 그대로는 '한계점, 기준치, 문턱'입니다. "어떤 값이 기준치를 넘겼다, 넘기지 못했다"라고 말할 때의 그 '기준치'를 말합니다. (이미지 출처: http://www.svi.nl/SeedAndThreshold) | 'threshold가 뭐야?' 라고 궁금해 하실 분들이 있을 지 모르겠습니다. Threshold란 사전적 의미 그대로는 '한계점, 기준치, 문턱'입니다. "어떤 값이 기준치를 넘겼다, 넘기지 못했다"라고 말할 때의 그 '기준치'를 말합니다. (이미지 출처: http://www.svi.nl/SeedAndThreshold) |
{{ http://www.svi.nl/wikiimg/SeedAndThreshold_02.png?nolink | threshold }} | {{ http://www.svi.nl/wikiimg/SeedAndThreshold_02.png?nolink | threshold }} |
| |
convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다. | convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다. |
60, 30, 48, 40, 90 | 160, 120, 48, 140, 230 |
다섯 픽셀 중 가장 높은 값은 90입니다. 90의 50%는 45이므로 위 명령을 이 다섯 픽셀에 대해 수행해 봅니다. | 가장 높은 값인 255의 50%는 127.5입니다. |
* 60 > 45 --> 90 | * 160 > 127.5 --> 255 |
* 30 < 45 --> 0 | * 120 < 127.5 --> 0 |
* 48 > 45 --> 90 | * 48 < 127.5 --> 0 |
* 40 < 45 --> 0 | * 140 > 127.5 --> 255 |
* 90 > 45 --> 90 | * 230 > 127.5 --> 255 |
그러므로 결과는 | 그러므로 결과는 |
90, 0, 90, 0, 90 | 255, 0, 0, 255, 255 |
모든 픽셀 값이 90, 아니면 0으로 현격하게 갈립니다. 그러면 직접 convert를 그림 파일에 대해 직접 실행한 결과를 보도록 하지요. 대략 97% 정도를 threshold 값으로 주었을 때의 결과입니다. | 모든 픽셀 값이 255, 아니면 0으로 현격하게 갈립니다. 그러면 직접 convert를 그림 파일에 대해 직접 실행한 결과를 보도록 하지요. 대략 97% 정도를 threshold 값으로 주었을 때의 결과입니다. |
| |
{{ :project:detectsponsor:test01_mono.png?640 |}} | {{ :project:detectsponsor:test01_mono.png?640 |}} |
=== 첫번째 시도 방법 === | === 첫번째 시도 방법 === |
=== 구현 과정 === | === 구현 과정 === |
위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) | 위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) 대신 파이썬이라 할지라도 마치 쉘 스크립트와 유사하게 커맨드 라인을 실행하는 방식으로 1차 구현을 할 생각입니다. 라이브러리를 사용하는 게 아니라요. |
딱히 파이썬에서 라이브러리 정도를 만드는 것이 아닌, 명령어를 파이썬이 호출해서 쓰는 매우 심플한 형태로 만들어보았습니다. | |
| |
파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요. | 파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요. |
{{ :project:detectsponsor:shot0002_mono.png?nolink&640 |}} | {{ :project:detectsponsor:shot0002_mono.png?nolink&640 |}} |
| |
반면 다음과 스폰서 영상은 인식에 실패합니다. 마찬가지로 95%로 threshold한 결과를 덧붙였습니다. | 반면 아래와 같은 스폰서 영상은 인식에 실패합니다. 마찬가지로 95%로 threshold한 결과를 덧붙였습니다. |
{{ :project:detectsponsor:image_022.png?nolink&640 |}} | {{ :project:detectsponsor:image_022.png?nolink&640 |}} |
{{ :project:detectsponsor:image_022_mono.png?nolink&640 |}} | {{ :project:detectsponsor:image_022_mono.png?nolink&640 |}} |