사용자 도구

사이트 도구


project:detectsponsor

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:detectsponsor [2013/07/08 09:52] – [결과 분석] ::1project:detectsponsor [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 74: 줄 74:
  
   $ 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  }}
줄 84: 줄 84:
  
 convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다. convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다.
-  6030, 48, 4090 +  160120, 48, 140230 
-다섯  픽셀 중 가장 높은 값은 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 |}}
줄 113: 줄 113:
 === 첫번째 시도 방법 === === 첫번째 시도 방법 ===
 === 구현 과정 === === 구현 과정 ===
-위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) +위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) 대신 파이썬이라 할지라도 마치 쉘 스크립트와 유사하게 커맨드 라인을 실행하는 방식으로 1차 구현을 할 생각입니다. 라이브러리를 사용하는 게 아니라요.
-딱히 파이썬에서 라이브러리 정도를 만드는 것이 닌, 명령어를 파이썬이 호출해서 쓰는 매우 심플한 형태로 만들어보았습.+
  
 파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요. 파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요.
줄 273: 줄 272:
  
 === 결과 분석 === === 결과 분석 ===
-tesseract라는 '문자 인식' 과정에 전적으로 의존합니다. threshold의 결과가 그다지 좋지 않았다면 tesseract의 인식률은 많이 떨어져버립니다. +tesseract라는 '문자 인식' 과정에 전적으로 의존합니다. convert -threshold의 결과가 그다지 좋지 않았다면 tesseract의 인식률은 많이 떨어져버립니다. 
-일례로 아래와 같은 그림은 인식이 잘 됩니다. 95%로 threshold한 결과를 덧붙였습니다.+일례로 아래와 같은 스폰서 영상은 비교적 인식이 잘 됩니다. 95%로 threshold한 결과를 덧붙였습니다.
 {{ :project:detectsponsor:shot0002.png?nolink&640 |}} {{ :project:detectsponsor:shot0002.png?nolink&640 |}}
 {{ :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 |}}
  
-혹시 아래처럼 '제공' 부분만 잘라내서 인식하면 인식이 될까요?+왜 이럴까요? 혹시 아래처럼 '제공' 부분만 잘라내서 인식하면 될까요?
 {{ :project:detectsponsor:image_022_crop_mono.png?nolink |}} {{ :project:detectsponsor:image_022_crop_mono.png?nolink |}}
-아닙니다. 인식이 잘 되지 않요. 이것이 인식되게 하려면 threshold를 92%까지 낮춘 후 crop을 해야 인식 되더군요+의외로 잘 되지 않는군요. Threshold를 92%까지 낮춘 후 비슷하게 crop을 해 보았습니다
-아래는 92% threshold와 crop의 결과입니다.+아래는 그림은 92% threshold와 crop한 결과입니다.
 {{ :project:detectsponsor:image_022_92_mono.png?nolink&640 |}} {{ :project:detectsponsor:image_022_92_mono.png?nolink&640 |}}
 {{ :project:detectsponsor:image_022_92_crop_mono.png?nolink |}} {{ :project:detectsponsor:image_022_92_crop_mono.png?nolink |}}
  
-저는 이렇게 결과를 분석했습니다. 인식이 잘 되는 이미지는 배경 이미지가 대부분 threshold를 넘지 않습니다. 이렇게 되면 배경 이미지는 모두 검게 나오고 자막에 쓰인 흰색만 이미지로 나옵니다. tesseract는 이러한 이미지를 잘 인식해 글자로 만듭니다.+이렇게 결과를 분석했습니다. 인식이 잘 되는 이미지는 배경 이미지가 대부분 threshold를 넘지 않습니다. 이렇게 되면 배경 이미지는 모두 검게 나오고 자막에 쓰인 흰색만 이미지로 나옵니다. tesseract는 이러한 이미지를 잘 인식해 글자로 만듭니다.
 그러나 배경 이미지가 비교적 밝은 이미지라면 threshold값을 넘는 픽셀이 많이 발생합니다. 이렇게 threshold가 넘는 값이 많아지면 tesseract의 문자 인식에 상당한 영향을 끼칩니다. 그러나 배경 이미지가 비교적 밝은 이미지라면 threshold값을 넘는 픽셀이 많이 발생합니다. 이렇게 threshold가 넘는 값이 많아지면 tesseract의 문자 인식에 상당한 영향을 끼칩니다.
 {{ :project:detectsponsor:compare.png?nolink |}}  {{ :project:detectsponsor:compare.png?nolink |}} 
project/detectsponsor.1373277155.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki